feat(M4-009,M4-010,M4-011): routing rules CRUD, per-user overrides, agent capabilities #320

Merged
jason.woltje merged 2 commits from feat/m4-routing-wiring into main 2026-03-23 00:48:43 +00:00
Owner

Summary

  • M4-009: Add CRUD endpoints in . Users can only create/modify/delete their own -scoped rules; system rules are protected with .
  • M4-010: Add that returns the merged priority-ordered rule set where user rules beat system rules at the same priority level.
  • M4-011: Extend with capability shorthand fields (, , , ). These are merged into in the agent configs controller so an agent's preferred model/provider influences routing without overriding explicit rules.

Changes

  • — new: validation DTOs for create, update, reorder
  • — new: full CRUD controller
  • — extended with M4-011 capability fields
  • — wires capability shorthand into
  • — registers

Test plan

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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/mosaic:build: cache hit, replaying logs fa039137292693a0
@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/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/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/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/queue:build: cache hit, replaying logs 4bdad5c047a92101
@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/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/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/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/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: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/gateway:typecheck: cache hit, replaying logs b6f99d7b887d4ac6
@mosaic/gateway:typecheck:
@mosaic/cli:typecheck: cache hit, replaying logs 92ed5995d4af03f3
@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:
@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:

Tasks: 32 successful, 32 total
Cached: 32 cached, 32 total
Time: 112ms >>> FULL TURBO — passes (32/32)

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/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/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/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/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/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/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/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/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/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/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/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/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/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 a452f005137a8941
@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: 78ms >>> FULL TURBO — passes (18/18)

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

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

• 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 test in 18 packages
• Remote caching disabled
@mosaic/discord-plugin:test: cache hit, replaying logs 570a9815f57a2582
@mosaic/discord-plugin:test:
@mosaic/discord-plugin:test: > @mosaic/discord-plugin@0.0.0 test /home/jwoltje/src/mosaic-mono-v1-worktrees/p8-003-performance/plugins/discord
@mosaic/discord-plugin:test: > vitest run --passWithNoTests
@mosaic/discord-plugin:test:
@mosaic/discord-plugin:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
@mosaic/discord-plugin:test:
@mosaic/discord-plugin:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1-worktrees/p8-003-performance/plugins/discord
@mosaic/discord-plugin:test:
@mosaic/discord-plugin:test: No test files found, exiting with code 0
@mosaic/prdy:build: cache hit, replaying logs cb5403384336205f
@mosaic/discord-plugin:test:
@mosaic/discord-plugin:test: include: **/.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/discord-plugin:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@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/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/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/types:test: cache hit, replaying logs d9f2893f47812536
@mosaic/types:test:
@mosaic/types:test: > @mosaic/types@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/types
@mosaic/types:test: > vitest run --passWithNoTests
@mosaic/types:test:
@mosaic/types:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
@mosaic/types:test:
@mosaic/types:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/types
@mosaic/types:test:
@mosaic/types:test: include: **/
.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/types:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@mosaic/types:test: No test files found, exiting with code 0
@mosaic/types:test:
@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/design-tokens:test: cache hit, replaying logs 346bbca7abcb93ff
@mosaic/design-tokens:test:
@mosaic/design-tokens:test: > @mosaic/design-tokens@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens
@mosaic/design-tokens:test: > vitest run --passWithNoTests
@mosaic/design-tokens:test:
@mosaic/design-tokens:test:
@mosaic/design-tokens:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens
@mosaic/design-tokens:test:
@mosaic/design-tokens:test: include: **/.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/design-tokens:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@mosaic/design-tokens:test: No test files found, exiting with code 0
@mosaic/design-tokens:test:
@mosaic/mosaic:test: cache hit, replaying logs b1cdee45760979fb
@mosaic/mosaic:test:
@mosaic/mosaic:test: > @mosaic/mosaic@0.1.0 test /home/jwoltje/src/mosaic-mono-v1/packages/mosaic
@mosaic/mosaic:test: > vitest run --passWithNoTests
@mosaic/mosaic:test:
@mosaic/mosaic:test:
@mosaic/mosaic:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/mosaic
@mosaic/mosaic:test:
@mosaic/mosaic:test: include: **/
.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/mosaic:test: No test files found, exiting with code 0
@mosaic/mosaic:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@mosaic/mosaic:test:
@mosaic/mosaic:build: cache hit, replaying logs fa039137292693a0
@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/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/prdy:test: cache hit, replaying logs 0265b117e5461377
@mosaic/prdy:test:
@mosaic/prdy:test: > @mosaic/prdy@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/prdy
@mosaic/prdy:test: > vitest run --passWithNoTests
@mosaic/prdy:test:
@mosaic/prdy:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
@mosaic/prdy:test:
@mosaic/prdy:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/prdy
@mosaic/prdy:test:
@mosaic/prdy:test: include: **/.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/prdy:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@mosaic/prdy:test: No test files found, exiting with code 0
@mosaic/prdy:test:
@mosaic/db:test: cache hit, replaying logs 135985b58394c002
@mosaic/db:test:
@mosaic/db:test: > @mosaic/db@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/db
@mosaic/db:test: > vitest run --passWithNoTests
@mosaic/db:test:
@mosaic/db:test:
@mosaic/db:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/db
@mosaic/db:test:
@mosaic/db:test: include: **/
.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/db:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@mosaic/db:test: No test files found, exiting with code 0
@mosaic/db:test:
@mosaic/telegram-plugin:test: cache hit, replaying logs 3de57e81ef11c53e
@mosaic/telegram-plugin:test:
@mosaic/telegram-plugin:test: > @mosaic/telegram-plugin@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/plugins/telegram
@mosaic/telegram-plugin:test: > vitest run --passWithNoTests
@mosaic/telegram-plugin:test:
@mosaic/telegram-plugin:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
@mosaic/telegram-plugin:test:
@mosaic/telegram-plugin:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/plugins/telegram
@mosaic/telegram-plugin:test:
@mosaic/telegram-plugin:test: include: **/.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/telegram-plugin:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@mosaic/telegram-plugin:test: No test files found, exiting with code 0
@mosaic/telegram-plugin:test:
@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/quality-rails:test: cache hit, replaying logs b3e69f99f2371dcd
@mosaic/quality-rails:test:
@mosaic/quality-rails:test: > @mosaic/quality-rails@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails
@mosaic/quality-rails:test: > vitest run --passWithNoTests
@mosaic/quality-rails:test:
@mosaic/quality-rails:test:
@mosaic/quality-rails:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails
@mosaic/quality-rails:test:
@mosaic/quality-rails:test: No test files found, exiting with code 0
@mosaic/quality-rails:test:
@mosaic/quality-rails:test: include: **/
.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/quality-rails:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@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/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/auth:test: cache hit, replaying logs 83459e42c234db96
@mosaic/auth:test:
@mosaic/auth:test: > @mosaic/auth@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/auth
@mosaic/auth:test: > vitest run --passWithNoTests
@mosaic/auth:test:
@mosaic/auth:test:
@mosaic/auth:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/auth
@mosaic/auth:test:
@mosaic/auth:test: ✓ src/sso.spec.ts (3 tests) 18ms
@mosaic/auth:test: ✓ src/auth.test.ts (12 tests) 11ms
@mosaic/auth:test:
@mosaic/auth:test: Test Files 2 passed (2)
@mosaic/auth:test: Tests 15 passed (15)
@mosaic/auth:test: Start at 19:30:10
@mosaic/auth:test: Duration 2.75s (transform 197ms, setup 0ms, collect 2.07s, tests 30ms, environment 0ms, prepare 364ms)
@mosaic/auth:test:
@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:test: cache hit, replaying logs 59ed571c1441fed6
@mosaic/log:test:
@mosaic/log:test: > @mosaic/log@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/log
@mosaic/log:test: > vitest run --passWithNoTests
@mosaic/log:test:
@mosaic/log:test:
@mosaic/log:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/log
@mosaic/log:test:
@mosaic/log:test: include: **/.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/log:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@mosaic/log:test: No test files found, exiting with code 0
@mosaic/log:test:
@mosaic/web:test: cache hit, replaying logs 581f823ecd5884c7
@mosaic/web:test:
@mosaic/web:test: > @mosaic/web@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/apps/web
@mosaic/web:test: > vitest run --passWithNoTests
@mosaic/web:test:
@mosaic/web:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
@mosaic/web:test:
@mosaic/web:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/apps/web
@mosaic/web:test:
@mosaic/web:test: ✓ src/lib/sso-providers.test.ts (3 tests) 5ms
@mosaic/web:test: ✓ src/components/settings/sso-provider-section.spec.tsx (1 test) 13ms
@mosaic/web:test: ✓ src/components/auth/sso-provider-buttons.spec.tsx (1 test) 15ms
@mosaic/web:test:
@mosaic/web:test: Test Files 3 passed (3)
@mosaic/web:test: Tests 5 passed (5)
@mosaic/web:test: Start at 19:30:10
@mosaic/web:test: Duration 2.97s (transform 179ms, setup 0ms, collect 290ms, tests 33ms, environment 5.08s, prepare 292ms)
@mosaic/web:test:
@mosaic/brain:test: cache hit, replaying logs 63fb205d03b2e35f
@mosaic/brain:test:
@mosaic/brain:test: > @mosaic/brain@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/brain
@mosaic/brain:test: > vitest run --passWithNoTests
@mosaic/brain:test:
@mosaic/brain:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
@mosaic/brain:test:
@mosaic/brain:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/brain
@mosaic/brain:test:
@mosaic/brain:test: ✓ src/projects.spec.ts (4 tests) 16ms
@mosaic/brain:test:
@mosaic/brain:test: Test Files 1 passed (1)
@mosaic/brain:test: Tests 4 passed (4)
@mosaic/brain:test: Start at 19:46:30
@mosaic/brain:test: Duration 3.78s (transform 283ms, setup 0ms, collect 1.84s, tests 16ms, environment 0ms, prepare 433ms)
@mosaic/brain:test:
@mosaic/coord:test: cache hit, replaying logs d07414183e31022a
@mosaic/coord:test:
@mosaic/coord:test: > @mosaic/coord@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/coord
@mosaic/coord:test: > vitest run --passWithNoTests
@mosaic/coord:test:
@mosaic/coord:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
@mosaic/coord:test:
@mosaic/coord:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/coord
@mosaic/coord:test:
@mosaic/coord:test: ✓ src/tests/tasks-file.test.ts (9 tests) 23ms
@mosaic/coord:test:
@mosaic/coord:test: Test Files 1 passed (1)
@mosaic/coord:test: Tests 9 passed (9)
@mosaic/coord:test: Start at 19:46:30
@mosaic/coord:test: Duration 2.03s (transform 330ms, setup 0ms, collect 336ms, tests 23ms, environment 4ms, prepare 742ms)
@mosaic/coord:test:
@mosaic/cli:test: cache hit, replaying logs 29b54c09c836713b
@mosaic/brain:build: cache hit, replaying logs 5413f2463b0af97b
@mosaic/cli:test:
@mosaic/cli:test: > @mosaic/cli@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/cli
@mosaic/cli:test: > vitest run --passWithNoTests
@mosaic/brain:build:
@mosaic/cli:test:
@mosaic/cli:test:
@mosaic/brain:build: > @mosaic/brain@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/brain
@mosaic/cli:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/cli
@mosaic/brain:build: > tsc
@mosaic/cli:test:
@mosaic/brain:build:
@mosaic/cli:test: ✓ src/tui/hooks/use-input-history.test.ts (8 tests) 4ms
@mosaic/cli:test: ✓ src/tui/commands/commands.integration.spec.ts (26 tests) 7ms
@mosaic/cli:test:
@mosaic/cli:test: Test Files 2 passed (2)
@mosaic/cli:test: Tests 34 passed (34)
@mosaic/cli:test: Start at 19:47:13
@mosaic/cli:test: Duration 364ms (transform 59ms, setup 0ms, collect 73ms, tests 11ms, environment 0ms, prepare 167ms)
@mosaic/cli:test:
@mosaic/queue:test: cache hit, replaying logs 1b9a44bc3c3789cc
@mosaic/queue:test:
@mosaic/queue:test: > @mosaic/queue@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/queue
@mosaic/queue:test: > vitest run --passWithNoTests
@mosaic/queue:test:
@mosaic/queue:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
@mosaic/coord:build: cache hit, replaying logs 6449125c13082caa
@mosaic/queue:test:
@mosaic/queue:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/queue
@mosaic/queue:test:
@mosaic/queue:test: include: **/
.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/coord:build:
@mosaic/queue:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@mosaic/coord:build: > @mosaic/coord@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/coord
@mosaic/queue:test: No test files found, exiting with code 0
@mosaic/coord:build: > tsc
@mosaic/queue:test:
@mosaic/coord:build:
@mosaic/queue:build: cache hit, replaying logs 4bdad5c047a92101
@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/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/agent:test: cache hit, replaying logs a611824b7b34ee32
@mosaic/agent:test:
@mosaic/agent:test: > @mosaic/agent@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/agent
@mosaic/agent:test: > vitest run --passWithNoTests
@mosaic/agent:test:
@mosaic/agent:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
@mosaic/agent:test:
@mosaic/agent:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/agent
@mosaic/agent:test:
@mosaic/agent:test: No test files found, exiting with code 0
@mosaic/agent:test: include: **/.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/agent:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@mosaic/agent:test:
@mosaic/memory:test: cache hit, replaying logs 3feee4fbf0132f97
@mosaic/memory:test:
@mosaic/memory:test: > @mosaic/memory@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/memory
@mosaic/memory:test: > vitest run --passWithNoTests
@mosaic/memory:test:
@mosaic/memory:test:
@mosaic/memory:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/memory
@mosaic/memory:test:
@mosaic/memory:test: include: **/
.{test,spec}.?(c|m)[jt]s?(x)
@mosaic/memory:test: exclude: /node_modules/, /dist/, /cypress/, /.{idea,git,cache,output,temp}/, */{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.
@mosaic/memory:test: No test files found, exiting with code 0
@mosaic/memory:test:
@mosaic/gateway:test: cache hit, replaying logs 41967ed689494eb5
@mosaic/gateway:test:
@mosaic/gateway:test: > @mosaic/gateway@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/apps/gateway
@mosaic/gateway:test: > vitest run --passWithNoTests
@mosaic/gateway:test:
@mosaic/gateway:test:
@mosaic/gateway:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/apps/gateway
@mosaic/gateway:test:
@mosaic/gateway:test: ✓ src/agent/tools/path-guard.test.ts (12 tests) 16ms
@mosaic/gateway:test: ✓ src/agent/routing/task-classifier.test.ts (79 tests) 97ms
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Plugin registered: test-plugin
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Soft reload triggered by: command
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Reload complete. Reloaded: [test-plugin]. Errors: 0
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Plugin registered: bad-plugin
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Soft reload triggered by: command
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Reload complete. Reloaded: []. Errors: 1
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Plugin registered: not-a-plugin
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Soft reload triggered by: command
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Reload complete. Reloaded: []. Errors: 0
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Soft reload triggered by: rest
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Reload complete. Reloaded: []. Errors: 0
@mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Plugin registered: my-plugin
@mosaic/gateway:test: ✓ src/reload/reload.service.spec.ts (5 tests) 35ms
@mosaic/gateway:test: ✓ src/workspace/workspace.service.spec.ts (5 tests) 7ms
@mosaic/gateway:test: ✓ src/gc/session-gc.service.spec.ts (8 tests) 20ms
@mosaic/gateway:test: ✓ src/tests/conversation-persistence.test.ts (20 tests) 79ms
@mosaic/gateway:test: ✓ src/tests/resource-ownership.test.ts (7 tests) 49ms
@mosaic/gateway:test: ✓ src/commands/command-registry.service.spec.ts (6 tests) 26ms
@mosaic/gateway:test: ✓ src/chat/tests/chat-security.test.ts (6 tests) 22ms
@mosaic/gateway:test: [Nest] 3899884 - 03/22/2026, 7:46:34 PM  DEBUG [PreferencesService] Upserted preference "agent.thinkingLevel" for user user-1
@mosaic/gateway:test: [Nest] 3899884 - 03/22/2026, 7:46:34 PM  DEBUG [PreferencesService] Deleted preference "agent.thinkingLevel" for user user-1
@mosaic/gateway:test: ✓ src/preferences/preferences.service.spec.ts (10 tests) 22ms
@mosaic/gateway:test: ✓ src/tests/cross-user-isolation.test.ts (28 tests) 326ms
@mosaic/gateway:test: ✓ src/auth/sso.controller.spec.ts (2 tests) 5ms
@mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingService] Routed to anthropic/claude-3-haiku (score=60): base score
@mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  WARN [RoutingService] No available models for routing
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set
@mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingService] Routed to anthropic/claude-3-sonnet (score=55): base score
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingService] Routed to anthropic/claude-3-haiku (score=60): base score
@mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingService] Routed to anthropic/claude-3-haiku (score=60): base score
@mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingService] Routed to anthropic/claude-3-haiku (score=70): cost tier match (cheap)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: ✓ src/agent/tests/routing.service.test.ts (10 tests) 16ms
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [AnthropicAdapter] Anthropic provider registered with models: claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 3 models available
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [AnthropicAdapter] Anthropic provider registered with models: claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [OpenAIAdapter] OpenAI provider registered with model: codex-gpt-5-4
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [OpenRouterAdapter] OpenRouter provider registered with 1 models
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [OpenAIAdapter] OpenAI provider registered with model: codex-gpt-5-4
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 1 models available
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [OpenRouterAdapter] OpenRouter model discovery failed: OpenRouter models endpoint returned HTTP 500. Registering with empty model list.
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ZaiAdapter] Z.ai provider registered with 1 model(s)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [OllamaAdapter] Ollama provider registered at http://localhost:11434 with models: llama3.2, codellama, mistral and embedding models: nomic-embed-text, mxbai-embed-large
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [OllamaAdapter] Ollama provider registered at http://localhost:11434 with models: llama3.2, codellama, mistral and embedding models: nomic-embed-text, mxbai-embed-large
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [OllamaAdapter] Ollama provider registered at http://localhost:11434 with models: phi3, gemma2 and embedding models: nomic-embed-text, mxbai-embed-large
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ZaiAdapter] Z.ai provider registered with 1 model(s)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 9 models available
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [AnthropicAdapter] Anthropic provider registered with models: claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [OpenAIAdapter] OpenAI provider registered with model: codex-gpt-5-4
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ZaiAdapter] Z.ai provider registered with 1 model(s)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 13 models available
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [AnthropicAdapter] Anthropic provider registered with models: claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 3 models available
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "high priority" → anthropic/claude-opus-4-6
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "coding rule" → anthropic/claude-sonnet-4-6
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule "primary rule" matched but provider "anthropic" is unhealthy (status: down)
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "secondary rule" → openai/gpt-4o
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule "only rule" matched but provider "openai" is unhealthy (status: down)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ZaiAdapter] Z.ai provider registered with 1 model(s)
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] No rule matched; applying fallback chain
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Fallback resolved: anthropic/claude-sonnet-4-6
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 9 models available
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams)
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=conversation complexity=simple domain=general
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] No rule matched; applying fallback chain
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Fallback resolved: ollama/llama3.2
@mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderCredentialsService] Credential stored for user=user1 provider=anthropic
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=conversation complexity=simple domain=general
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] No rule matched; applying fallback chain
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  WARN [RoutingEngineService] All fallback providers unhealthy; using last resort: anthropic/claude-sonnet-4-6
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=conversation complexity=simple domain=general
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "catch-all" → anthropic/claude-sonnet-4-6
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general
@mosaic/gateway:test: ✓ src/agent/tests/provider.service.test.ts (7 tests) 70ms
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "specific coding rule" → anthropic/claude-opus-4-6
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=conversation complexity=simple domain=general
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "catch-all" → anthropic/claude-haiku-4-5
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "enabled fallback" → anthropic/claude-sonnet-4-6
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general
@mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "coding rule" → anthropic/claude-opus-4-6
@mosaic/gateway:test: ✓ src/agent/tests/provider-adapters.test.ts (40 tests) 46ms
@mosaic/gateway:test: ✓ src/agent/routing/routing-engine.test.ts (17 tests) 16ms
@mosaic/gateway:test: ✓ src/commands/command-executor-p8012.spec.ts (14 tests) 7ms
@mosaic/gateway:test: ✓ src/commands/commands.integration.spec.ts (42 tests) 15ms
@mosaic/gateway:test:
@mosaic/gateway:test: Test Files 18 passed (18)
@mosaic/gateway:test: Tests 318 passed (318)
@mosaic/gateway:test: Start at 19:46:30
@mosaic/gateway:test: Duration 5.74s (transform 3.80s, setup 0ms, collect 32.28s, tests 874ms, environment 23ms, prepare 5.55s)
@mosaic/gateway:test:

Tasks: 32 successful, 32 total
Cached: 32 cached, 32 total
Time: 118ms >>> FULL TURBO — 318/318 tests pass

🤖 Generated with Claude Code

## Summary - **M4-009**: Add CRUD endpoints in . Users can only create/modify/delete their own -scoped rules; system rules are protected with . - **M4-010**: Add that returns the merged priority-ordered rule set where user rules beat system rules at the same priority level. - **M4-011**: Extend with capability shorthand fields (, , , ). These are merged into in the agent configs controller so an agent's preferred model/provider influences routing without overriding explicit rules. ## Changes - — new: validation DTOs for create, update, reorder - — new: full CRUD controller - — extended with M4-011 capability fields - — wires capability shorthand into - — registers ## Test plan - [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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/mosaic:build: cache hit, replaying logs fa039137292693a0 @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/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/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/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/queue:build: cache hit, replaying logs 4bdad5c047a92101 @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/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/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/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/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: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/gateway:typecheck: cache hit, replaying logs b6f99d7b887d4ac6 @mosaic/gateway:typecheck: @mosaic/cli:typecheck: cache hit, replaying logs 92ed5995d4af03f3 @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: @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: Tasks: 32 successful, 32 total Cached: 32 cached, 32 total Time: 112ms >>> FULL TURBO — passes (32/32) - [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/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/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/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/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/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/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/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/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/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/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/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/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/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 a452f005137a8941 @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: 78ms >>> FULL TURBO — passes (18/18) - [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] > mosaic-stack@ test /home/jwoltje/src/mosaic-mono-v1 > turbo run test • 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 test in 18 packages • Remote caching disabled @mosaic/discord-plugin:test: cache hit, replaying logs 570a9815f57a2582 @mosaic/discord-plugin:test: @mosaic/discord-plugin:test: > @mosaic/discord-plugin@0.0.0 test /home/jwoltje/src/mosaic-mono-v1-worktrees/p8-003-performance/plugins/discord @mosaic/discord-plugin:test: > vitest run --passWithNoTests @mosaic/discord-plugin:test: @mosaic/discord-plugin:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. @mosaic/discord-plugin:test: @mosaic/discord-plugin:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1-worktrees/p8-003-performance/plugins/discord @mosaic/discord-plugin:test: @mosaic/discord-plugin:test: No test files found, exiting with code 0 @mosaic/prdy:build: cache hit, replaying logs cb5403384336205f @mosaic/discord-plugin:test: @mosaic/discord-plugin:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/discord-plugin:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @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/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/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/types:test: cache hit, replaying logs d9f2893f47812536 @mosaic/types:test: @mosaic/types:test: > @mosaic/types@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/types @mosaic/types:test: > vitest run --passWithNoTests @mosaic/types:test: @mosaic/types:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. @mosaic/types:test: @mosaic/types:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/types @mosaic/types:test: @mosaic/types:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/types:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @mosaic/types:test: No test files found, exiting with code 0 @mosaic/types:test: @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/design-tokens:test: cache hit, replaying logs 346bbca7abcb93ff @mosaic/design-tokens:test: @mosaic/design-tokens:test: > @mosaic/design-tokens@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens @mosaic/design-tokens:test: > vitest run --passWithNoTests @mosaic/design-tokens:test: @mosaic/design-tokens:test: @mosaic/design-tokens:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens @mosaic/design-tokens:test: @mosaic/design-tokens:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/design-tokens:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @mosaic/design-tokens:test: No test files found, exiting with code 0 @mosaic/design-tokens:test: @mosaic/mosaic:test: cache hit, replaying logs b1cdee45760979fb @mosaic/mosaic:test: @mosaic/mosaic:test: > @mosaic/mosaic@0.1.0 test /home/jwoltje/src/mosaic-mono-v1/packages/mosaic @mosaic/mosaic:test: > vitest run --passWithNoTests @mosaic/mosaic:test: @mosaic/mosaic:test: @mosaic/mosaic:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/mosaic @mosaic/mosaic:test: @mosaic/mosaic:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/mosaic:test: No test files found, exiting with code 0 @mosaic/mosaic:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @mosaic/mosaic:test: @mosaic/mosaic:build: cache hit, replaying logs fa039137292693a0 @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/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/prdy:test: cache hit, replaying logs 0265b117e5461377 @mosaic/prdy:test: @mosaic/prdy:test: > @mosaic/prdy@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/prdy @mosaic/prdy:test: > vitest run --passWithNoTests @mosaic/prdy:test: @mosaic/prdy:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. @mosaic/prdy:test: @mosaic/prdy:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/prdy @mosaic/prdy:test: @mosaic/prdy:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/prdy:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @mosaic/prdy:test: No test files found, exiting with code 0 @mosaic/prdy:test: @mosaic/db:test: cache hit, replaying logs 135985b58394c002 @mosaic/db:test: @mosaic/db:test: > @mosaic/db@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/db @mosaic/db:test: > vitest run --passWithNoTests @mosaic/db:test: @mosaic/db:test: @mosaic/db:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/db @mosaic/db:test: @mosaic/db:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/db:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @mosaic/db:test: No test files found, exiting with code 0 @mosaic/db:test: @mosaic/telegram-plugin:test: cache hit, replaying logs 3de57e81ef11c53e @mosaic/telegram-plugin:test: @mosaic/telegram-plugin:test: > @mosaic/telegram-plugin@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/plugins/telegram @mosaic/telegram-plugin:test: > vitest run --passWithNoTests @mosaic/telegram-plugin:test: @mosaic/telegram-plugin:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. @mosaic/telegram-plugin:test: @mosaic/telegram-plugin:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/plugins/telegram @mosaic/telegram-plugin:test: @mosaic/telegram-plugin:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/telegram-plugin:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @mosaic/telegram-plugin:test: No test files found, exiting with code 0 @mosaic/telegram-plugin:test: @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/quality-rails:test: cache hit, replaying logs b3e69f99f2371dcd @mosaic/quality-rails:test: @mosaic/quality-rails:test: > @mosaic/quality-rails@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails @mosaic/quality-rails:test: > vitest run --passWithNoTests @mosaic/quality-rails:test: @mosaic/quality-rails:test: @mosaic/quality-rails:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails @mosaic/quality-rails:test: @mosaic/quality-rails:test: No test files found, exiting with code 0 @mosaic/quality-rails:test: @mosaic/quality-rails:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/quality-rails:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @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/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/auth:test: cache hit, replaying logs 83459e42c234db96 @mosaic/auth:test: @mosaic/auth:test: > @mosaic/auth@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/auth @mosaic/auth:test: > vitest run --passWithNoTests @mosaic/auth:test: @mosaic/auth:test: @mosaic/auth:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/auth @mosaic/auth:test: @mosaic/auth:test: ✓ src/sso.spec.ts (3 tests) 18ms @mosaic/auth:test: ✓ src/auth.test.ts (12 tests) 11ms @mosaic/auth:test: @mosaic/auth:test: Test Files 2 passed (2) @mosaic/auth:test: Tests 15 passed (15) @mosaic/auth:test: Start at 19:30:10 @mosaic/auth:test: Duration 2.75s (transform 197ms, setup 0ms, collect 2.07s, tests 30ms, environment 0ms, prepare 364ms) @mosaic/auth:test: @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:test: cache hit, replaying logs 59ed571c1441fed6 @mosaic/log:test: @mosaic/log:test: > @mosaic/log@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/log @mosaic/log:test: > vitest run --passWithNoTests @mosaic/log:test: @mosaic/log:test: @mosaic/log:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/log @mosaic/log:test: @mosaic/log:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/log:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @mosaic/log:test: No test files found, exiting with code 0 @mosaic/log:test: @mosaic/web:test: cache hit, replaying logs 581f823ecd5884c7 @mosaic/web:test: @mosaic/web:test: > @mosaic/web@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/apps/web @mosaic/web:test: > vitest run --passWithNoTests @mosaic/web:test: @mosaic/web:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. @mosaic/web:test: @mosaic/web:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/apps/web @mosaic/web:test: @mosaic/web:test: ✓ src/lib/sso-providers.test.ts (3 tests) 5ms @mosaic/web:test: ✓ src/components/settings/sso-provider-section.spec.tsx (1 test) 13ms @mosaic/web:test: ✓ src/components/auth/sso-provider-buttons.spec.tsx (1 test) 15ms @mosaic/web:test: @mosaic/web:test: Test Files 3 passed (3) @mosaic/web:test: Tests 5 passed (5) @mosaic/web:test: Start at 19:30:10 @mosaic/web:test: Duration 2.97s (transform 179ms, setup 0ms, collect 290ms, tests 33ms, environment 5.08s, prepare 292ms) @mosaic/web:test: @mosaic/brain:test: cache hit, replaying logs 63fb205d03b2e35f @mosaic/brain:test: @mosaic/brain:test: > @mosaic/brain@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/brain @mosaic/brain:test: > vitest run --passWithNoTests @mosaic/brain:test: @mosaic/brain:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. @mosaic/brain:test: @mosaic/brain:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/brain @mosaic/brain:test: @mosaic/brain:test: ✓ src/projects.spec.ts (4 tests) 16ms @mosaic/brain:test: @mosaic/brain:test: Test Files 1 passed (1) @mosaic/brain:test: Tests 4 passed (4) @mosaic/brain:test: Start at 19:46:30 @mosaic/brain:test: Duration 3.78s (transform 283ms, setup 0ms, collect 1.84s, tests 16ms, environment 0ms, prepare 433ms) @mosaic/brain:test: @mosaic/coord:test: cache hit, replaying logs d07414183e31022a @mosaic/coord:test: @mosaic/coord:test: > @mosaic/coord@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/coord @mosaic/coord:test: > vitest run --passWithNoTests @mosaic/coord:test: @mosaic/coord:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. @mosaic/coord:test: @mosaic/coord:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/coord @mosaic/coord:test: @mosaic/coord:test: ✓ src/__tests__/tasks-file.test.ts (9 tests) 23ms @mosaic/coord:test: @mosaic/coord:test: Test Files 1 passed (1) @mosaic/coord:test: Tests 9 passed (9) @mosaic/coord:test: Start at 19:46:30 @mosaic/coord:test: Duration 2.03s (transform 330ms, setup 0ms, collect 336ms, tests 23ms, environment 4ms, prepare 742ms) @mosaic/coord:test: @mosaic/cli:test: cache hit, replaying logs 29b54c09c836713b @mosaic/brain:build: cache hit, replaying logs 5413f2463b0af97b @mosaic/cli:test: @mosaic/cli:test: > @mosaic/cli@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/cli @mosaic/cli:test: > vitest run --passWithNoTests @mosaic/brain:build: @mosaic/cli:test: @mosaic/cli:test: @mosaic/brain:build: > @mosaic/brain@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/brain @mosaic/cli:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/cli @mosaic/brain:build: > tsc @mosaic/cli:test: @mosaic/brain:build: @mosaic/cli:test: ✓ src/tui/hooks/use-input-history.test.ts (8 tests) 4ms @mosaic/cli:test: ✓ src/tui/commands/commands.integration.spec.ts (26 tests) 7ms @mosaic/cli:test: @mosaic/cli:test: Test Files 2 passed (2) @mosaic/cli:test: Tests 34 passed (34) @mosaic/cli:test: Start at 19:47:13 @mosaic/cli:test: Duration 364ms (transform 59ms, setup 0ms, collect 73ms, tests 11ms, environment 0ms, prepare 167ms) @mosaic/cli:test: @mosaic/queue:test: cache hit, replaying logs 1b9a44bc3c3789cc @mosaic/queue:test: @mosaic/queue:test: > @mosaic/queue@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/queue @mosaic/queue:test: > vitest run --passWithNoTests @mosaic/queue:test: @mosaic/queue:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. @mosaic/coord:build: cache hit, replaying logs 6449125c13082caa @mosaic/queue:test: @mosaic/queue:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/queue @mosaic/queue:test: @mosaic/queue:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/coord:build: @mosaic/queue:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @mosaic/coord:build: > @mosaic/coord@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/coord @mosaic/queue:test: No test files found, exiting with code 0 @mosaic/coord:build: > tsc @mosaic/queue:test: @mosaic/coord:build: @mosaic/queue:build: cache hit, replaying logs 4bdad5c047a92101 @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/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/agent:test: cache hit, replaying logs a611824b7b34ee32 @mosaic/agent:test: @mosaic/agent:test: > @mosaic/agent@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/agent @mosaic/agent:test: > vitest run --passWithNoTests @mosaic/agent:test: @mosaic/agent:test: The CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. @mosaic/agent:test: @mosaic/agent:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/agent @mosaic/agent:test: @mosaic/agent:test: No test files found, exiting with code 0 @mosaic/agent:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/agent:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @mosaic/agent:test: @mosaic/memory:test: cache hit, replaying logs 3feee4fbf0132f97 @mosaic/memory:test: @mosaic/memory:test: > @mosaic/memory@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/packages/memory @mosaic/memory:test: > vitest run --passWithNoTests @mosaic/memory:test: @mosaic/memory:test: @mosaic/memory:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/packages/memory @mosaic/memory:test: @mosaic/memory:test: include: **/*.{test,spec}.?(c|m)[jt]s?(x) @mosaic/memory:test: exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.* @mosaic/memory:test: No test files found, exiting with code 0 @mosaic/memory:test: @mosaic/gateway:test: cache hit, replaying logs 41967ed689494eb5 @mosaic/gateway:test: @mosaic/gateway:test: > @mosaic/gateway@0.0.0 test /home/jwoltje/src/mosaic-mono-v1/apps/gateway @mosaic/gateway:test: > vitest run --passWithNoTests @mosaic/gateway:test: @mosaic/gateway:test: @mosaic/gateway:test: RUN v2.1.9 /home/jwoltje/src/mosaic-mono-v1/apps/gateway @mosaic/gateway:test: @mosaic/gateway:test: ✓ src/agent/tools/path-guard.test.ts (12 tests) 16ms @mosaic/gateway:test: ✓ src/agent/routing/task-classifier.test.ts (79 tests) 97ms @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Plugin registered: test-plugin @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Soft reload triggered by: command @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Reload complete. Reloaded: [test-plugin]. Errors: 0 @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Plugin registered: bad-plugin @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Soft reload triggered by: command @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Reload complete. Reloaded: []. Errors: 1 @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Plugin registered: not-a-plugin @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Soft reload triggered by: command @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Reload complete. Reloaded: []. Errors: 0 @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Soft reload triggered by: rest @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Reload complete. Reloaded: []. Errors: 0 @mosaic/gateway:test: [Nest] 3900080 - 03/22/2026, 7:46:32 PM  LOG [ReloadService] Plugin registered: my-plugin @mosaic/gateway:test: ✓ src/reload/reload.service.spec.ts (5 tests) 35ms @mosaic/gateway:test: ✓ src/workspace/workspace.service.spec.ts (5 tests) 7ms @mosaic/gateway:test: ✓ src/gc/session-gc.service.spec.ts (8 tests) 20ms @mosaic/gateway:test: ✓ src/__tests__/conversation-persistence.test.ts (20 tests) 79ms @mosaic/gateway:test: ✓ src/__tests__/resource-ownership.test.ts (7 tests) 49ms @mosaic/gateway:test: ✓ src/commands/command-registry.service.spec.ts (6 tests) 26ms @mosaic/gateway:test: ✓ src/chat/__tests__/chat-security.test.ts (6 tests) 22ms @mosaic/gateway:test: [Nest] 3899884 - 03/22/2026, 7:46:34 PM  DEBUG [PreferencesService] Upserted preference "agent.thinkingLevel" for user user-1 @mosaic/gateway:test: [Nest] 3899884 - 03/22/2026, 7:46:34 PM  DEBUG [PreferencesService] Deleted preference "agent.thinkingLevel" for user user-1 @mosaic/gateway:test: ✓ src/preferences/preferences.service.spec.ts (10 tests) 22ms @mosaic/gateway:test: ✓ src/__tests__/cross-user-isolation.test.ts (28 tests) 326ms @mosaic/gateway:test: ✓ src/auth/sso.controller.spec.ts (2 tests) 5ms @mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingService] Routed to anthropic/claude-3-haiku (score=60): base score @mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  WARN [RoutingService] No available models for routing @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set @mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingService] Routed to anthropic/claude-3-sonnet (score=55): base score @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingService] Routed to anthropic/claude-3-haiku (score=60): base score @mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingService] Routed to anthropic/claude-3-haiku (score=60): base score @mosaic/gateway:test: [Nest] 3899973 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingService] Routed to anthropic/claude-3-haiku (score=70): cost tier match (cheap) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: ✓ src/agent/__tests__/routing.service.test.ts (10 tests) 16ms @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [AnthropicAdapter] Anthropic provider registered with models: claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5 @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 3 models available @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [AnthropicAdapter] Anthropic provider registered with models: claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5 @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [OpenAIAdapter] OpenAI provider registered with model: codex-gpt-5-4 @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [OpenRouterAdapter] OpenRouter provider registered with 1 models @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [OpenAIAdapter] OpenAI provider registered with model: codex-gpt-5-4 @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 1 models available @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [OpenRouterAdapter] OpenRouter model discovery failed: OpenRouter models endpoint returned HTTP 500. Registering with empty model list. @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ZaiAdapter] Z.ai provider registered with 1 model(s) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [OllamaAdapter] Ollama provider registered at http://localhost:11434 with models: llama3.2, codellama, mistral and embedding models: nomic-embed-text, mxbai-embed-large @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [OllamaAdapter] Ollama provider registered at http://localhost:11434 with models: llama3.2, codellama, mistral and embedding models: nomic-embed-text, mxbai-embed-large @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [OllamaAdapter] Ollama provider registered at http://localhost:11434 with models: phi3, gemma2 and embedding models: nomic-embed-text, mxbai-embed-large @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ZaiAdapter] Z.ai provider registered with 1 model(s) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 9 models available @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [AnthropicAdapter] Anthropic provider registered with models: claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5 @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [OpenAIAdapter] OpenAI provider registered with model: codex-gpt-5-4 @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ZaiAdapter] Z.ai provider registered with 1 model(s) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 13 models available @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 0 models available @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams) @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [zai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [AnthropicAdapter] Anthropic provider registered with models: claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5 @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ZaiAdapter] Skipping Z.ai provider registration: ZAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 3 models available @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "high priority" → anthropic/claude-opus-4-6 @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "coding rule" → anthropic/claude-sonnet-4-6 @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule "primary rule" matched but provider "anthropic" is unhealthy (status: down) @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "secondary rule" → openai/gpt-4o @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OllamaAdapter] Skipping Ollama provider registration: OLLAMA_BASE_URL not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  WARN [AnthropicAdapter] Skipping Anthropic provider registration: ANTHROPIC_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenAIAdapter] Skipping OpenAI provider registration: OPENAI_API_KEY not set @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [OpenRouterAdapter] Skipping OpenRouter provider registration: OPENROUTER_API_KEY not set @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule "only rule" matched but provider "openai" is unhealthy (status: down) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ZaiAdapter] Z.ai provider registered with 1 model(s) @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] No rule matched; applying fallback chain @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Fallback resolved: anthropic/claude-sonnet-4-6 @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Providers initialized: 9 models available @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  LOG [ProviderService] Provider health check scheduler started (interval: 60s) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [ollama]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [anthropic]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openai]: down (n/ams) @mosaic/gateway:test: [Nest] 3899945 - 03/22/2026, 7:46:35 PM  DEBUG [ProviderService] Health check [openrouter]: down (n/ams) @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=conversation complexity=simple domain=general @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] No rule matched; applying fallback chain @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Fallback resolved: ollama/llama3.2 @mosaic/gateway:test: [Nest] 3899713 - 03/22/2026, 7:46:35 PM  LOG [ProviderCredentialsService] Credential stored for user=user1 provider=anthropic @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=conversation complexity=simple domain=general @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] No rule matched; applying fallback chain @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  WARN [RoutingEngineService] All fallback providers unhealthy; using last resort: anthropic/claude-sonnet-4-6 @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=conversation complexity=simple domain=general @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "catch-all" → anthropic/claude-sonnet-4-6 @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general @mosaic/gateway:test: ✓ src/agent/__tests__/provider.service.test.ts (7 tests) 70ms @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "specific coding rule" → anthropic/claude-opus-4-6 @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=conversation complexity=simple domain=general @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "catch-all" → anthropic/claude-haiku-4-5 @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "enabled fallback" → anthropic/claude-sonnet-4-6 @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Classification: taskType=coding complexity=simple domain=general @mosaic/gateway:test: [Nest] 3899794 - 03/22/2026, 7:46:35 PM  DEBUG [RoutingEngineService] Rule matched: "coding rule" → anthropic/claude-opus-4-6 @mosaic/gateway:test: ✓ src/agent/__tests__/provider-adapters.test.ts (40 tests) 46ms @mosaic/gateway:test: ✓ src/agent/routing/routing-engine.test.ts (17 tests) 16ms @mosaic/gateway:test: ✓ src/commands/command-executor-p8012.spec.ts (14 tests) 7ms @mosaic/gateway:test: ✓ src/commands/commands.integration.spec.ts (42 tests) 15ms @mosaic/gateway:test: @mosaic/gateway:test: Test Files 18 passed (18) @mosaic/gateway:test: Tests 318 passed (318) @mosaic/gateway:test: Start at 19:46:30 @mosaic/gateway:test: Duration 5.74s (transform 3.80s, setup 0ms, collect 32.28s, tests 874ms, environment 23ms, prepare 5.55s) @mosaic/gateway:test: Tasks: 32 successful, 32 total Cached: 32 cached, 32 total Time: 118ms >>> FULL TURBO — 318/318 tests pass 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jason.woltje added 1 commit 2026-03-23 00:47:59 +00:00
feat(M4-009,M4-010,M4-011): routing rules CRUD API, per-user overrides, agent capabilities
Some checks failed
ci/woodpecker/pr/ci Pipeline failed
ci/woodpecker/push/ci Pipeline failed
f22ce0096b
- Add routing.dto.ts with validation DTOs for create, update, and reorder operations
- Add routing.controller.ts with full CRUD: GET list, POST create, PATCH update,
  DELETE remove, PATCH reorder, GET effective (merged priority view)
- Users can only create/modify/delete their own user-scoped rules; system rules are
  protected with ForbiddenException
- GET /api/routing/rules/effective returns merged rule set with user rules taking
  precedence over system rules at the same priority level (M4-010)
- Extend agent-config.dto.ts with capability shorthand fields: domains, preferredModel,
  preferredProvider, toolSets (M4-011)
- Update agent-configs.controller.ts to merge capability fields into config.capabilities
  so agent's preferred model/provider can influence routing decisions
- Register RoutingController in agent.module.ts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jason.woltje added 1 commit 2026-03-23 00:48:26 +00:00
feat(M4-007,M4-008,M4-012): wire routing engine into ChatGateway, add /model override and transparency
Some checks failed
ci/woodpecker/push/ci Pipeline failed
ci/woodpecker/pr/ci Pipeline failed
7bf2ad1f92
M4-012: In ChatGateway.handleMessage(), call routingEngine.resolve() before
creating a new agent session when no explicit provider/model is supplied.
The routing decision's provider/model are passed to AgentService.createSession().

M4-007: Add sticky per-session /model override via ChatGateway.setModelOverride().
When active, the routing engine is bypassed entirely. CommandExecutorService
handleModel() is updated to set/clear the override. /model clear resets to
automatic routing. /model with no args shows the current override or usage hint.

M4-008: Include routingDecision in the session:info socket event.
Add RoutingDecisionInfo to SessionInfoPayload in @mosaic/types.
useSocket() tracks the routing decision in state and the BottomBar TUI component
displays a "Routed: <model> (<reason>)" line when a routing decision is present.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jason.woltje merged commit b18976a7aa into main 2026-03-23 00:48:43 +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#320