feat(M4-013,M5-001,M5-002,M5-003): routing e2e tests, agent config loading, model+agent switching #323

Merged
jason.woltje merged 2 commits from feat/m4-m5-verify-sessions into main 2026-03-23 01:09:10 +00:00
Owner

Summary

  • M4-013: Add with 9 E2E integration tests covering the full classify → match rules → routing decision pipeline (coding→Opus, summarization→GLM-5, conversation→Sonnet, cheap-tier→Haiku, /model bypass, unhealthy-provider fallback, research→Codex)
  • M5-001: Store on when is provided; emit in from ChatGateway; fix merged options to preserve and
  • M5-002: Add to update live session ; wire into so command immediately reflects in ; add to push updated info to all subscribed clients
  • M5-003: Complete command — inject into ; look up agent by name via + fallback ; call to update live session; emit via

Test plan

  • 327 tests pass (all 19 test files)

mosaic-stack@ typecheck /home/jwoltje/src/mosaic-mono-v1
turbo run typecheck

• Packages in scope: @mosaic/agent, @mosaic/auth, @mosaic/brain, @mosaic/cli, @mosaic/coord, @mosaic/db, @mosaic/design-tokens, @mosaic/discord-plugin, @mosaic/gateway, @mosaic/log, @mosaic/memory, @mosaic/mosaic, @mosaic/prdy, @mosaic/quality-rails, @mosaic/queue, @mosaic/telegram-plugin, @mosaic/types, @mosaic/web
• Running typecheck in 18 packages
• Remote caching disabled
@mosaic/quality-rails:typecheck: cache hit, replaying logs 773b5ce675827462
@mosaic/quality-rails:typecheck:
@mosaic/quality-rails:typecheck: > @mosaic/quality-rails@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails
@mosaic/quality-rails:typecheck: > tsc --noEmit
@mosaic/quality-rails:typecheck:
@mosaic/prdy:typecheck: cache hit, replaying logs a6a0c18bda2a2b63
@mosaic/prdy:typecheck:
@mosaic/prdy:typecheck: > @mosaic/prdy@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/prdy
@mosaic/prdy:typecheck: > tsc --noEmit
@mosaic/prdy:typecheck:
@mosaic/telegram-plugin:typecheck: cache hit, replaying logs 4150887d09a1a2f3
@mosaic/telegram-plugin:typecheck:
@mosaic/telegram-plugin:typecheck: > @mosaic/telegram-plugin@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/plugins/telegram
@mosaic/telegram-plugin:typecheck: > tsc --noEmit
@mosaic/telegram-plugin:typecheck:
@mosaic/types:build: cache hit, replaying logs 2da2d800072dca0b
@mosaic/types:build:
@mosaic/types:build: > @mosaic/types@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/types
@mosaic/types:build: > tsc
@mosaic/types:build:
@mosaic/db:typecheck: cache hit, replaying logs bf29c9bdcfe60256
@mosaic/db:typecheck:
@mosaic/db:typecheck: > @mosaic/db@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/db
@mosaic/db:typecheck: > tsc --noEmit
@mosaic/db:typecheck:
@mosaic/telegram-plugin:build: cache hit, replaying logs 3d58ea44fccd3caf
@mosaic/telegram-plugin:build:
@mosaic/telegram-plugin:build: > @mosaic/telegram-plugin@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a392798c/plugins/telegram
@mosaic/telegram-plugin:build: > tsc
@mosaic/telegram-plugin:build:
@mosaic/types:typecheck: cache hit, replaying logs c9862659304761f9
@mosaic/types:typecheck:
@mosaic/types:typecheck: > @mosaic/types@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/types
@mosaic/types:typecheck: > tsc --noEmit
@mosaic/types:typecheck:
@mosaic/mosaic:typecheck: cache hit, replaying logs b1577ea913610cd9
@mosaic/mosaic:typecheck:
@mosaic/mosaic:typecheck: > @mosaic/mosaic@0.1.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/mosaic
@mosaic/mosaic:typecheck: > tsc --noEmit
@mosaic/mosaic:typecheck:
@mosaic/discord-plugin:typecheck: cache hit, replaying logs 1dc83965a4303b3a
@mosaic/discord-plugin:typecheck:
@mosaic/discord-plugin:typecheck: > @mosaic/discord-plugin@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-ae5cf107/plugins/discord
@mosaic/discord-plugin:typecheck: > tsc --noEmit
@mosaic/discord-plugin:typecheck:
@mosaic/prdy:build: cache hit, replaying logs cb5403384336205f
@mosaic/prdy:build:
@mosaic/prdy:build: > @mosaic/prdy@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/prdy
@mosaic/prdy:build: > tsc
@mosaic/prdy:build:
@mosaic/discord-plugin:build: cache hit, replaying logs edafb0f07cc19b08
@mosaic/discord-plugin:build:
@mosaic/discord-plugin:build: > @mosaic/discord-plugin@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a392798c/plugins/discord
@mosaic/discord-plugin:build: > tsc
@mosaic/discord-plugin:build:
@mosaic/design-tokens:typecheck: cache hit, replaying logs 107e1e40ecb9b42c
@mosaic/design-tokens:typecheck:
@mosaic/design-tokens:typecheck: > @mosaic/design-tokens@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens
@mosaic/design-tokens:typecheck: > tsc --noEmit
@mosaic/design-tokens:typecheck:
@mosaic/design-tokens:build: cache hit, replaying logs 270358c643266429
@mosaic/design-tokens:build:
@mosaic/design-tokens:build: > @mosaic/design-tokens@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens
@mosaic/design-tokens:build: > tsc
@mosaic/design-tokens:build:
@mosaic/db:build: cache hit, replaying logs 11df87bbd7e0c770
@mosaic/db:build:
@mosaic/db:build: > @mosaic/db@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/db
@mosaic/db:build: > tsc
@mosaic/db:build:
@mosaic/quality-rails:build: cache hit, replaying logs b7f6d1a1f03144a8
@mosaic/quality-rails:build:
@mosaic/quality-rails:build: > @mosaic/quality-rails@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails
@mosaic/quality-rails:build: > tsc
@mosaic/quality-rails:build:
@mosaic/agent:typecheck: cache hit, replaying logs af448100bdbb240a
@mosaic/agent:typecheck:
@mosaic/agent:typecheck: > @mosaic/agent@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/agent
@mosaic/agent:typecheck: > tsc --noEmit
@mosaic/agent:typecheck:
@mosaic/coord:build: cache hit, replaying logs 6449125c13082caa
@mosaic/coord:build:
@mosaic/coord:build: > @mosaic/coord@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/coord
@mosaic/coord:build: > tsc
@mosaic/coord:build:
@mosaic/queue:build: cache hit, replaying logs 4bdad5c047a92101
@mosaic/mosaic:build: cache hit, replaying logs fa039137292693a0
@mosaic/queue:build:
@mosaic/queue:build: > @mosaic/queue@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/queue
@mosaic/queue:build: > tsc
@mosaic/queue:build:
@mosaic/mosaic:build:
@mosaic/mosaic:build: > @mosaic/mosaic@0.1.0 build /home/jwoltje/src/mosaic-mono-v1/packages/mosaic
@mosaic/mosaic:build: > tsc
@mosaic/mosaic:build:
@mosaic/queue:typecheck: cache hit, replaying logs f7311db13818c096
@mosaic/queue:typecheck:
@mosaic/queue:typecheck: > @mosaic/queue@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/queue
@mosaic/queue:typecheck: > tsc --noEmit
@mosaic/queue:typecheck:
@mosaic/coord:typecheck: cache hit, replaying logs 39493cb763e90bd9
@mosaic/coord:typecheck:
@mosaic/coord:typecheck: > @mosaic/coord@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/coord
@mosaic/coord:typecheck: > tsc --noEmit
@mosaic/coord:typecheck:
@mosaic/web:typecheck: cache hit, replaying logs 45062e53d01358fd
@mosaic/web:typecheck:
@mosaic/web:typecheck: > @mosaic/web@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/tasks-fmt/apps/web
@mosaic/web:typecheck: > tsc --noEmit
@mosaic/web:typecheck:
@mosaic/auth:typecheck: cache hit, replaying logs 822dabe17674a161
@mosaic/auth:typecheck:
@mosaic/auth:typecheck: > @mosaic/auth@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/auth
@mosaic/auth:typecheck: > tsc --noEmit
@mosaic/auth:typecheck:
@mosaic/memory:typecheck: cache hit, replaying logs 4a77fd269e24bb5f
@mosaic/memory:typecheck:
@mosaic/memory:typecheck: > @mosaic/memory@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/memory
@mosaic/memory:typecheck: > tsc --noEmit
@mosaic/memory:typecheck:
@mosaic/memory:build: cache hit, replaying logs adb867adf8c47c25
@mosaic/memory:build:
@mosaic/memory:build: > @mosaic/memory@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/memory
@mosaic/memory:build: > tsc
@mosaic/memory:build:
@mosaic/auth:build: cache hit, replaying logs 55d87ea9e5a57d8e
@mosaic/auth:build:
@mosaic/auth:build: > @mosaic/auth@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/auth
@mosaic/auth:build: > tsc
@mosaic/auth:build:
@mosaic/log:typecheck: cache hit, replaying logs 8609bb952e111206
@mosaic/log:typecheck:
@mosaic/log:typecheck: > @mosaic/log@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/log
@mosaic/log:typecheck: > tsc --noEmit
@mosaic/log:typecheck:
@mosaic/brain:typecheck: cache hit, replaying logs 0594f3733ad8a7d8
@mosaic/brain:typecheck:
@mosaic/brain:typecheck: > @mosaic/brain@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/brain
@mosaic/brain:typecheck: > tsc --noEmit
@mosaic/brain:typecheck:
@mosaic/log:build: cache hit, replaying logs e84b991004f0c1fb
@mosaic/log:build:
@mosaic/log:build: > @mosaic/log@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/log
@mosaic/log:build: > tsc
@mosaic/log:build:
@mosaic/cli:typecheck: cache hit, replaying logs 92ed5995d4af03f3
@mosaic/cli:typecheck:
@mosaic/cli:typecheck: > @mosaic/cli@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/cli
@mosaic/cli:typecheck: > tsc --noEmit
@mosaic/cli:typecheck:
@mosaic/brain:build: cache hit, replaying logs 5413f2463b0af97b
@mosaic/brain:build:
@mosaic/brain:build: > @mosaic/brain@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/brain
@mosaic/brain:build: > tsc
@mosaic/brain:build:
@mosaic/gateway:typecheck: cache hit, replaying logs 471a7b39110a0af3
@mosaic/gateway:typecheck:
@mosaic/gateway:typecheck: > @mosaic/gateway@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/apps/gateway
@mosaic/gateway:typecheck: > tsc --noEmit -p tsconfig.typecheck.json
@mosaic/gateway:typecheck:

Tasks: 32 successful, 32 total
Cached: 32 cached, 32 total
Time: 116ms >>> FULL TURBO — 32 tasks successful

mosaic-stack@ lint /home/jwoltje/src/mosaic-mono-v1
turbo run lint

• Packages in scope: @mosaic/agent, @mosaic/auth, @mosaic/brain, @mosaic/cli, @mosaic/coord, @mosaic/db, @mosaic/design-tokens, @mosaic/discord-plugin, @mosaic/gateway, @mosaic/log, @mosaic/memory, @mosaic/mosaic, @mosaic/prdy, @mosaic/quality-rails, @mosaic/queue, @mosaic/telegram-plugin, @mosaic/types, @mosaic/web
• Running lint in 18 packages
• Remote caching disabled
@mosaic/telegram-plugin:lint: cache hit, replaying logs 541b9739fc80302e
@mosaic/telegram-plugin:lint:
@mosaic/telegram-plugin:lint: > @mosaic/telegram-plugin@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/plugins/telegram
@mosaic/telegram-plugin:lint: > eslint src
@mosaic/telegram-plugin:lint:
@mosaic/design-tokens:lint: cache hit, replaying logs 8fe85fe02729fa77
@mosaic/design-tokens:lint:
@mosaic/design-tokens:lint: > @mosaic/design-tokens@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens
@mosaic/design-tokens:lint: > eslint src
@mosaic/design-tokens:lint:
@mosaic/types:lint: cache hit, replaying logs 0fbf797affa4a004
@mosaic/types:lint:
@mosaic/types:lint: > @mosaic/types@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/types
@mosaic/types:lint: > eslint src
@mosaic/types:lint:
@mosaic/quality-rails:lint: cache hit, replaying logs 9cfa5a7ef8975eec
@mosaic/quality-rails:lint:
@mosaic/quality-rails:lint: > @mosaic/quality-rails@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails
@mosaic/quality-rails:lint: > eslint src
@mosaic/quality-rails:lint:
@mosaic/prdy:lint: cache hit, replaying logs 48d86f65ce99eae1
@mosaic/prdy:lint:
@mosaic/prdy:lint: > @mosaic/prdy@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/prdy
@mosaic/prdy:lint: > eslint src
@mosaic/prdy:lint:
@mosaic/discord-plugin:lint: cache hit, replaying logs a80aad880eb21794
@mosaic/discord-plugin:lint:
@mosaic/discord-plugin:lint: > @mosaic/discord-plugin@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-ae5cf107/plugins/discord
@mosaic/discord-plugin:lint: > eslint src
@mosaic/discord-plugin:lint:
@mosaic/db:lint: cache hit, replaying logs 309e3d142c968d8f
@mosaic/db:lint:
@mosaic/db:lint: > @mosaic/db@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/db
@mosaic/db:lint: > eslint src
@mosaic/db:lint:
@mosaic/mosaic:lint: cache hit, replaying logs 2f98b3cdcece7721
@mosaic/mosaic:lint:
@mosaic/mosaic:lint: > @mosaic/mosaic@0.1.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/mosaic
@mosaic/mosaic:lint: > eslint src
@mosaic/mosaic:lint:
@mosaic/web:lint: cache hit, replaying logs 9d0caf7175f06c1a
@mosaic/web:lint:
@mosaic/web:lint: > @mosaic/web@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1-worktrees/tasks-fmt/apps/web
@mosaic/web:lint: > eslint src
@mosaic/web:lint:
@mosaic/coord:lint: cache hit, replaying logs 4ed09e3e27b96c0a
@mosaic/coord:lint:
@mosaic/coord:lint: > @mosaic/coord@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/coord
@mosaic/coord:lint: > eslint src
@mosaic/coord:lint:
@mosaic/agent:lint: cache hit, replaying logs 845de767f58ec36b
@mosaic/agent:lint:
@mosaic/agent:lint: > @mosaic/agent@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/agent
@mosaic/agent:lint: > eslint src
@mosaic/agent:lint:
@mosaic/queue:lint: cache hit, replaying logs dd0707efae28b418
@mosaic/queue:lint:
@mosaic/queue:lint: > @mosaic/queue@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/queue
@mosaic/queue:lint: > eslint src
@mosaic/queue:lint:
@mosaic/memory:lint: cache hit, replaying logs c9f61f187bc1fecf
@mosaic/memory:lint:
@mosaic/memory:lint: > @mosaic/memory@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/memory
@mosaic/memory:lint: > eslint src
@mosaic/memory:lint:
@mosaic/brain:lint: cache hit, replaying logs 11e681c249f0bbc4
@mosaic/brain:lint:
@mosaic/brain:lint: > @mosaic/brain@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/brain
@mosaic/brain:lint: > eslint src
@mosaic/brain:lint:
@mosaic/auth:lint: cache hit, replaying logs 626fd506690d1809
@mosaic/auth:lint:
@mosaic/auth:lint: > @mosaic/auth@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/auth
@mosaic/auth:lint: > eslint src
@mosaic/auth:lint:
@mosaic/log:lint: cache hit, replaying logs a9a26487adf074e3
@mosaic/log:lint:
@mosaic/log:lint: > @mosaic/log@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/log
@mosaic/log:lint: > eslint src
@mosaic/log:lint:
@mosaic/cli:lint: cache hit, replaying logs a6bac9ccad865e1b
@mosaic/cli:lint:
@mosaic/cli:lint: > @mosaic/cli@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/cli
@mosaic/cli:lint: > eslint src
@mosaic/cli:lint:
@mosaic/gateway:lint: cache hit, replaying logs 6b2c5991ee55b3ad
@mosaic/gateway:lint:
@mosaic/gateway:lint: > @mosaic/gateway@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/apps/gateway
@mosaic/gateway:lint: > eslint src
@mosaic/gateway:lint:

Tasks: 18 successful, 18 total
Cached: 18 cached, 18 total
Time: 72ms >>> FULL TURBO — 18 tasks successful

mosaic-stack@ format:check /home/jwoltje/src/mosaic-mono-v1
prettier --check "**/*.{ts,tsx,js,jsx,json,md}"

Checking formatting...
All matched files use Prettier code style! — all files pass Prettier

  • routing-e2e.test.ts: 9 new routing pipeline tests
  • command-executor-p8012.spec.ts: updated to mock brain, applyAgentConfig; agent switch succeeds
  • commands.integration.spec.ts: updated constructor to include brain mock

Closes #322

🤖 Generated with Claude Code

## Summary - **M4-013**: Add with 9 E2E integration tests covering the full classify → match rules → routing decision pipeline (coding→Opus, summarization→GLM-5, conversation→Sonnet, cheap-tier→Haiku, /model bypass, unhealthy-provider fallback, research→Codex) - **M5-001**: Store on when is provided; emit in from ChatGateway; fix merged options to preserve and - **M5-002**: Add to update live session ; wire into so command immediately reflects in ; add to push updated info to all subscribed clients - **M5-003**: Complete command — inject into ; look up agent by name via + fallback ; call to update live session; emit via ## Test plan - [x] 327 tests pass (all 19 test files) - [x] > mosaic-stack@ typecheck /home/jwoltje/src/mosaic-mono-v1 > turbo run typecheck • Packages in scope: @mosaic/agent, @mosaic/auth, @mosaic/brain, @mosaic/cli, @mosaic/coord, @mosaic/db, @mosaic/design-tokens, @mosaic/discord-plugin, @mosaic/gateway, @mosaic/log, @mosaic/memory, @mosaic/mosaic, @mosaic/prdy, @mosaic/quality-rails, @mosaic/queue, @mosaic/telegram-plugin, @mosaic/types, @mosaic/web • Running typecheck in 18 packages • Remote caching disabled @mosaic/quality-rails:typecheck: cache hit, replaying logs 773b5ce675827462 @mosaic/quality-rails:typecheck: @mosaic/quality-rails:typecheck: > @mosaic/quality-rails@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails @mosaic/quality-rails:typecheck: > tsc --noEmit @mosaic/quality-rails:typecheck: @mosaic/prdy:typecheck: cache hit, replaying logs a6a0c18bda2a2b63 @mosaic/prdy:typecheck: @mosaic/prdy:typecheck: > @mosaic/prdy@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/prdy @mosaic/prdy:typecheck: > tsc --noEmit @mosaic/prdy:typecheck: @mosaic/telegram-plugin:typecheck: cache hit, replaying logs 4150887d09a1a2f3 @mosaic/telegram-plugin:typecheck: @mosaic/telegram-plugin:typecheck: > @mosaic/telegram-plugin@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/plugins/telegram @mosaic/telegram-plugin:typecheck: > tsc --noEmit @mosaic/telegram-plugin:typecheck: @mosaic/types:build: cache hit, replaying logs 2da2d800072dca0b @mosaic/types:build: @mosaic/types:build: > @mosaic/types@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/types @mosaic/types:build: > tsc @mosaic/types:build: @mosaic/db:typecheck: cache hit, replaying logs bf29c9bdcfe60256 @mosaic/db:typecheck: @mosaic/db:typecheck: > @mosaic/db@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/db @mosaic/db:typecheck: > tsc --noEmit @mosaic/db:typecheck: @mosaic/telegram-plugin:build: cache hit, replaying logs 3d58ea44fccd3caf @mosaic/telegram-plugin:build: @mosaic/telegram-plugin:build: > @mosaic/telegram-plugin@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a392798c/plugins/telegram @mosaic/telegram-plugin:build: > tsc @mosaic/telegram-plugin:build: @mosaic/types:typecheck: cache hit, replaying logs c9862659304761f9 @mosaic/types:typecheck: @mosaic/types:typecheck: > @mosaic/types@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/types @mosaic/types:typecheck: > tsc --noEmit @mosaic/types:typecheck: @mosaic/mosaic:typecheck: cache hit, replaying logs b1577ea913610cd9 @mosaic/mosaic:typecheck: @mosaic/mosaic:typecheck: > @mosaic/mosaic@0.1.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/mosaic @mosaic/mosaic:typecheck: > tsc --noEmit @mosaic/mosaic:typecheck: @mosaic/discord-plugin:typecheck: cache hit, replaying logs 1dc83965a4303b3a @mosaic/discord-plugin:typecheck: @mosaic/discord-plugin:typecheck: > @mosaic/discord-plugin@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-ae5cf107/plugins/discord @mosaic/discord-plugin:typecheck: > tsc --noEmit @mosaic/discord-plugin:typecheck: @mosaic/prdy:build: cache hit, replaying logs cb5403384336205f @mosaic/prdy:build: @mosaic/prdy:build: > @mosaic/prdy@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/prdy @mosaic/prdy:build: > tsc @mosaic/prdy:build: @mosaic/discord-plugin:build: cache hit, replaying logs edafb0f07cc19b08 @mosaic/discord-plugin:build: @mosaic/discord-plugin:build: > @mosaic/discord-plugin@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a392798c/plugins/discord @mosaic/discord-plugin:build: > tsc @mosaic/discord-plugin:build: @mosaic/design-tokens:typecheck: cache hit, replaying logs 107e1e40ecb9b42c @mosaic/design-tokens:typecheck: @mosaic/design-tokens:typecheck: > @mosaic/design-tokens@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens @mosaic/design-tokens:typecheck: > tsc --noEmit @mosaic/design-tokens:typecheck: @mosaic/design-tokens:build: cache hit, replaying logs 270358c643266429 @mosaic/design-tokens:build: @mosaic/design-tokens:build: > @mosaic/design-tokens@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens @mosaic/design-tokens:build: > tsc @mosaic/design-tokens:build: @mosaic/db:build: cache hit, replaying logs 11df87bbd7e0c770 @mosaic/db:build: @mosaic/db:build: > @mosaic/db@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/db @mosaic/db:build: > tsc @mosaic/db:build: @mosaic/quality-rails:build: cache hit, replaying logs b7f6d1a1f03144a8 @mosaic/quality-rails:build: @mosaic/quality-rails:build: > @mosaic/quality-rails@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails @mosaic/quality-rails:build: > tsc @mosaic/quality-rails:build: @mosaic/agent:typecheck: cache hit, replaying logs af448100bdbb240a @mosaic/agent:typecheck: @mosaic/agent:typecheck: > @mosaic/agent@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/agent @mosaic/agent:typecheck: > tsc --noEmit @mosaic/agent:typecheck: @mosaic/coord:build: cache hit, replaying logs 6449125c13082caa @mosaic/coord:build: @mosaic/coord:build: > @mosaic/coord@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/coord @mosaic/coord:build: > tsc @mosaic/coord:build: @mosaic/queue:build: cache hit, replaying logs 4bdad5c047a92101 @mosaic/mosaic:build: cache hit, replaying logs fa039137292693a0 @mosaic/queue:build: @mosaic/queue:build: > @mosaic/queue@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/queue @mosaic/queue:build: > tsc @mosaic/queue:build: @mosaic/mosaic:build: @mosaic/mosaic:build: > @mosaic/mosaic@0.1.0 build /home/jwoltje/src/mosaic-mono-v1/packages/mosaic @mosaic/mosaic:build: > tsc @mosaic/mosaic:build: @mosaic/queue:typecheck: cache hit, replaying logs f7311db13818c096 @mosaic/queue:typecheck: @mosaic/queue:typecheck: > @mosaic/queue@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/queue @mosaic/queue:typecheck: > tsc --noEmit @mosaic/queue:typecheck: @mosaic/coord:typecheck: cache hit, replaying logs 39493cb763e90bd9 @mosaic/coord:typecheck: @mosaic/coord:typecheck: > @mosaic/coord@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/coord @mosaic/coord:typecheck: > tsc --noEmit @mosaic/coord:typecheck: @mosaic/web:typecheck: cache hit, replaying logs 45062e53d01358fd @mosaic/web:typecheck: @mosaic/web:typecheck: > @mosaic/web@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/tasks-fmt/apps/web @mosaic/web:typecheck: > tsc --noEmit @mosaic/web:typecheck: @mosaic/auth:typecheck: cache hit, replaying logs 822dabe17674a161 @mosaic/auth:typecheck: @mosaic/auth:typecheck: > @mosaic/auth@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/auth @mosaic/auth:typecheck: > tsc --noEmit @mosaic/auth:typecheck: @mosaic/memory:typecheck: cache hit, replaying logs 4a77fd269e24bb5f @mosaic/memory:typecheck: @mosaic/memory:typecheck: > @mosaic/memory@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/memory @mosaic/memory:typecheck: > tsc --noEmit @mosaic/memory:typecheck: @mosaic/memory:build: cache hit, replaying logs adb867adf8c47c25 @mosaic/memory:build: @mosaic/memory:build: > @mosaic/memory@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/memory @mosaic/memory:build: > tsc @mosaic/memory:build: @mosaic/auth:build: cache hit, replaying logs 55d87ea9e5a57d8e @mosaic/auth:build: @mosaic/auth:build: > @mosaic/auth@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/auth @mosaic/auth:build: > tsc @mosaic/auth:build: @mosaic/log:typecheck: cache hit, replaying logs 8609bb952e111206 @mosaic/log:typecheck: @mosaic/log:typecheck: > @mosaic/log@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/log @mosaic/log:typecheck: > tsc --noEmit @mosaic/log:typecheck: @mosaic/brain:typecheck: cache hit, replaying logs 0594f3733ad8a7d8 @mosaic/brain:typecheck: @mosaic/brain:typecheck: > @mosaic/brain@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/brain @mosaic/brain:typecheck: > tsc --noEmit @mosaic/brain:typecheck: @mosaic/log:build: cache hit, replaying logs e84b991004f0c1fb @mosaic/log:build: @mosaic/log:build: > @mosaic/log@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/log @mosaic/log:build: > tsc @mosaic/log:build: @mosaic/cli:typecheck: cache hit, replaying logs 92ed5995d4af03f3 @mosaic/cli:typecheck: @mosaic/cli:typecheck: > @mosaic/cli@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/cli @mosaic/cli:typecheck: > tsc --noEmit @mosaic/cli:typecheck: @mosaic/brain:build: cache hit, replaying logs 5413f2463b0af97b @mosaic/brain:build: @mosaic/brain:build: > @mosaic/brain@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/brain @mosaic/brain:build: > tsc @mosaic/brain:build: @mosaic/gateway:typecheck: cache hit, replaying logs 471a7b39110a0af3 @mosaic/gateway:typecheck: @mosaic/gateway:typecheck: > @mosaic/gateway@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/apps/gateway @mosaic/gateway:typecheck: > tsc --noEmit -p tsconfig.typecheck.json @mosaic/gateway:typecheck: Tasks: 32 successful, 32 total Cached: 32 cached, 32 total Time: 116ms >>> FULL TURBO — 32 tasks successful - [x] > mosaic-stack@ lint /home/jwoltje/src/mosaic-mono-v1 > turbo run lint • Packages in scope: @mosaic/agent, @mosaic/auth, @mosaic/brain, @mosaic/cli, @mosaic/coord, @mosaic/db, @mosaic/design-tokens, @mosaic/discord-plugin, @mosaic/gateway, @mosaic/log, @mosaic/memory, @mosaic/mosaic, @mosaic/prdy, @mosaic/quality-rails, @mosaic/queue, @mosaic/telegram-plugin, @mosaic/types, @mosaic/web • Running lint in 18 packages • Remote caching disabled @mosaic/telegram-plugin:lint: cache hit, replaying logs 541b9739fc80302e @mosaic/telegram-plugin:lint: @mosaic/telegram-plugin:lint: > @mosaic/telegram-plugin@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/plugins/telegram @mosaic/telegram-plugin:lint: > eslint src @mosaic/telegram-plugin:lint: @mosaic/design-tokens:lint: cache hit, replaying logs 8fe85fe02729fa77 @mosaic/design-tokens:lint: @mosaic/design-tokens:lint: > @mosaic/design-tokens@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens @mosaic/design-tokens:lint: > eslint src @mosaic/design-tokens:lint: @mosaic/types:lint: cache hit, replaying logs 0fbf797affa4a004 @mosaic/types:lint: @mosaic/types:lint: > @mosaic/types@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/types @mosaic/types:lint: > eslint src @mosaic/types:lint: @mosaic/quality-rails:lint: cache hit, replaying logs 9cfa5a7ef8975eec @mosaic/quality-rails:lint: @mosaic/quality-rails:lint: > @mosaic/quality-rails@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails @mosaic/quality-rails:lint: > eslint src @mosaic/quality-rails:lint: @mosaic/prdy:lint: cache hit, replaying logs 48d86f65ce99eae1 @mosaic/prdy:lint: @mosaic/prdy:lint: > @mosaic/prdy@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/prdy @mosaic/prdy:lint: > eslint src @mosaic/prdy:lint: @mosaic/discord-plugin:lint: cache hit, replaying logs a80aad880eb21794 @mosaic/discord-plugin:lint: @mosaic/discord-plugin:lint: > @mosaic/discord-plugin@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-ae5cf107/plugins/discord @mosaic/discord-plugin:lint: > eslint src @mosaic/discord-plugin:lint: @mosaic/db:lint: cache hit, replaying logs 309e3d142c968d8f @mosaic/db:lint: @mosaic/db:lint: > @mosaic/db@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/db @mosaic/db:lint: > eslint src @mosaic/db:lint: @mosaic/mosaic:lint: cache hit, replaying logs 2f98b3cdcece7721 @mosaic/mosaic:lint: @mosaic/mosaic:lint: > @mosaic/mosaic@0.1.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/mosaic @mosaic/mosaic:lint: > eslint src @mosaic/mosaic:lint: @mosaic/web:lint: cache hit, replaying logs 9d0caf7175f06c1a @mosaic/web:lint: @mosaic/web:lint: > @mosaic/web@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1-worktrees/tasks-fmt/apps/web @mosaic/web:lint: > eslint src @mosaic/web:lint: @mosaic/coord:lint: cache hit, replaying logs 4ed09e3e27b96c0a @mosaic/coord:lint: @mosaic/coord:lint: > @mosaic/coord@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/coord @mosaic/coord:lint: > eslint src @mosaic/coord:lint: @mosaic/agent:lint: cache hit, replaying logs 845de767f58ec36b @mosaic/agent:lint: @mosaic/agent:lint: > @mosaic/agent@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/agent @mosaic/agent:lint: > eslint src @mosaic/agent:lint: @mosaic/queue:lint: cache hit, replaying logs dd0707efae28b418 @mosaic/queue:lint: @mosaic/queue:lint: > @mosaic/queue@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/queue @mosaic/queue:lint: > eslint src @mosaic/queue:lint: @mosaic/memory:lint: cache hit, replaying logs c9f61f187bc1fecf @mosaic/memory:lint: @mosaic/memory:lint: > @mosaic/memory@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/memory @mosaic/memory:lint: > eslint src @mosaic/memory:lint: @mosaic/brain:lint: cache hit, replaying logs 11e681c249f0bbc4 @mosaic/brain:lint: @mosaic/brain:lint: > @mosaic/brain@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/brain @mosaic/brain:lint: > eslint src @mosaic/brain:lint: @mosaic/auth:lint: cache hit, replaying logs 626fd506690d1809 @mosaic/auth:lint: @mosaic/auth:lint: > @mosaic/auth@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/auth @mosaic/auth:lint: > eslint src @mosaic/auth:lint: @mosaic/log:lint: cache hit, replaying logs a9a26487adf074e3 @mosaic/log:lint: @mosaic/log:lint: > @mosaic/log@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/log @mosaic/log:lint: > eslint src @mosaic/log:lint: @mosaic/cli:lint: cache hit, replaying logs a6bac9ccad865e1b @mosaic/cli:lint: @mosaic/cli:lint: > @mosaic/cli@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/cli @mosaic/cli:lint: > eslint src @mosaic/cli:lint: @mosaic/gateway:lint: cache hit, replaying logs 6b2c5991ee55b3ad @mosaic/gateway:lint: @mosaic/gateway:lint: > @mosaic/gateway@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/apps/gateway @mosaic/gateway:lint: > eslint src @mosaic/gateway:lint: Tasks: 18 successful, 18 total Cached: 18 cached, 18 total Time: 72ms >>> FULL TURBO — 18 tasks successful - [x] > mosaic-stack@ format:check /home/jwoltje/src/mosaic-mono-v1 > prettier --check "**/*.{ts,tsx,js,jsx,json,md}" Checking formatting... All matched files use Prettier code style! — all files pass Prettier - [x] routing-e2e.test.ts: 9 new routing pipeline tests - [x] command-executor-p8012.spec.ts: updated to mock brain, applyAgentConfig; agent switch succeeds - [x] commands.integration.spec.ts: updated constructor to include brain mock Closes #322 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jason.woltje added 1 commit 2026-03-23 01:02:49 +00:00
feat(M4-013,M5-001,M5-002,M5-003): routing e2e tests, agent config loading, model+agent switching
Some checks failed
ci/woodpecker/push/ci Pipeline failed
ci/woodpecker/pr/ci Pipeline failed
140e457a72
- M4-013: Add routing-e2e.test.ts with 9 integration tests covering the full
  classify → match rules → routing decision pipeline; includes coding→Opus,
  summarization→GLM-5, conversation→Sonnet, cheap-tier→Haiku, /model bypass,
  unhealthy-provider fallback, and research→Codex scenarios

- M5-001: Store resolvedAgentName during session creation when agentConfigId
  is provided; expose agentName on AgentSession and SessionInfoDto; emit
  agentName in session:info from chat.gateway.ts (message handler and
  set:thinking handler); preserve userId and conversationHistory in merged
  options so they are not lost when agent config is applied

- M5-002: Add AgentService.updateSessionModel() to update live session
  modelId metadata; wire it into ChatGateway.setModelOverride() so the
  /model command immediately reflects in session:info; add
  ChatGateway.broadcastSessionInfo() to push updated session:info to all
  clients watching a conversation on model or agent switch

- M5-003: Implement /agent <name> command end-to-end: inject Brain into
  CommandExecutorService; replace stub handleAgent() with real
  brain.agents.findByName() + findById() lookup; call
  agentService.applyAgentConfig() to update live session; emit session:info
  via chatGateway.broadcastSessionInfo(); update tests to mock brain and
  agentService.applyAgentConfig; add AgentService.applyAgentConfig() method

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jason.woltje force-pushed feat/m4-m5-verify-sessions from 140e457a72 to 21c045559d 2026-03-23 01:08:49 +00:00 Compare
jason.woltje merged commit 701bb69e6c into main 2026-03-23 01:09:10 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#323