create-walle 0.9.21 → 0.9.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. package/README.md +27 -5
  2. package/package.json +2 -2
  3. package/template/CLAUDE.md +2 -2
  4. package/template/LICENSE +1 -1
  5. package/template/bin/ctm-dev-cleanup.js +24 -3
  6. package/template/bin/ctm-launch.sh +13 -0
  7. package/template/bin/dev.sh +156 -18
  8. package/template/bin/node-bin.sh +84 -0
  9. package/template/bin/pin-node.sh +51 -0
  10. package/template/claude-task-manager/api-prompts.js +1203 -182
  11. package/template/claude-task-manager/api-reviews.js +109 -15
  12. package/template/claude-task-manager/approval-agent.js +1360 -280
  13. package/template/claude-task-manager/bin/restart-ctm.sh +64 -23
  14. package/template/claude-task-manager/bin/storage-migration-supervisor.js +338 -0
  15. package/template/claude-task-manager/db.js +4417 -295
  16. package/template/claude-task-manager/docs/app-update-refresh-protocol.md +69 -0
  17. package/template/claude-task-manager/docs/approval-ai-refinement.md +138 -0
  18. package/template/claude-task-manager/docs/approval-rescue-loop.md +74 -0
  19. package/template/claude-task-manager/docs/codex-operational-warning-health.md +107 -0
  20. package/template/claude-task-manager/docs/codex-resume-state-guard-design.md +17 -12
  21. package/template/claude-task-manager/docs/codex-terminal-render-controller-handoff.md +311 -0
  22. package/template/claude-task-manager/docs/coding-agent-hooks-architecture.md +418 -0
  23. package/template/claude-task-manager/docs/conversation-import-freshness.md +20 -0
  24. package/template/claude-task-manager/docs/google-workspace-auth-health.md +77 -0
  25. package/template/claude-task-manager/docs/image-paste-ux.md +13 -0
  26. package/template/claude-task-manager/docs/ipad-web-preview.md +88 -0
  27. package/template/claude-task-manager/docs/main-loop-offload-architecture.md +66 -0
  28. package/template/claude-task-manager/docs/microsoft-dev-tunnel-phone-access-design.md +274 -519
  29. package/template/claude-task-manager/docs/mobile-live-streaming.md +27 -5
  30. package/template/claude-task-manager/docs/mobile-remote-submission-lifecycle.md +69 -0
  31. package/template/claude-task-manager/docs/phone-access-design.md +53 -15
  32. package/template/claude-task-manager/docs/phone-passkey-identity.md +122 -0
  33. package/template/claude-task-manager/docs/phone-setup.md +3 -0
  34. package/template/claude-task-manager/docs/prompt-editing-tree-design.md +25 -1
  35. package/template/claude-task-manager/docs/remote-desktop-access-design.md +268 -0
  36. package/template/claude-task-manager/docs/restart-lifecycle-architecture.md +95 -0
  37. package/template/claude-task-manager/docs/runtime-work-control-plane.md +53 -0
  38. package/template/claude-task-manager/docs/session-interactive-wait-surfaces.md +38 -0
  39. package/template/claude-task-manager/docs/session-needs-you-dismissal.md +84 -0
  40. package/template/claude-task-manager/docs/session-render-state-management-design.md +91 -3
  41. package/template/claude-task-manager/docs/session-standup-command-center-design.md +25 -1
  42. package/template/claude-task-manager/docs/session-title-authority.md +32 -0
  43. package/template/claude-task-manager/docs/session-workspace-binding.md +33 -0
  44. package/template/claude-task-manager/docs/skill-intent-resolution-design.md +72 -0
  45. package/template/claude-task-manager/docs/walle-mcp-supervisor-health.md +86 -0
  46. package/template/claude-task-manager/docs/walle-relay-phone-access-design.md +24 -15
  47. package/template/claude-task-manager/docs/walle-session-history-hydration.md +114 -0
  48. package/template/claude-task-manager/docs/walle-session-input-queue.md +104 -0
  49. package/template/claude-task-manager/docs/walle-session-model-catalog.md +90 -0
  50. package/template/claude-task-manager/docs/walle-session-model-preferences.md +15 -6
  51. package/template/claude-task-manager/git-utils.js +897 -27
  52. package/template/claude-task-manager/lib/agent-capabilities.js +33 -0
  53. package/template/claude-task-manager/lib/agent-cli-cache.js +37 -7
  54. package/template/claude-task-manager/lib/agent-hooks-installer.js +26 -2
  55. package/template/claude-task-manager/lib/agent-presets.js +17 -1
  56. package/template/claude-task-manager/lib/all-sessions-query.js +108 -0
  57. package/template/claude-task-manager/lib/approval-ai-refinement.js +488 -0
  58. package/template/claude-task-manager/lib/approval-self-adapt.js +168 -0
  59. package/template/claude-task-manager/lib/async-semaphore.js +44 -0
  60. package/template/claude-task-manager/lib/auth-context.js +5 -0
  61. package/template/claude-task-manager/lib/auth-rate-limit.js +47 -4
  62. package/template/claude-task-manager/lib/auth-rules.js +29 -2
  63. package/template/claude-task-manager/lib/auto-approval-verifier.js +129 -16
  64. package/template/claude-task-manager/lib/background-llm.js +144 -17
  65. package/template/claude-task-manager/lib/branch-inventory.js +212 -0
  66. package/template/claude-task-manager/lib/claude-desktop-sessions.js +15 -3
  67. package/template/claude-task-manager/lib/coalesce-sync-frames.js +151 -0
  68. package/template/claude-task-manager/lib/codex-launch-health.js +762 -0
  69. package/template/claude-task-manager/lib/codex-transcript-pager.js +51 -0
  70. package/template/claude-task-manager/lib/codex-zst.js +124 -0
  71. package/template/claude-task-manager/lib/coding-agent-models.js +233 -30
  72. package/template/claude-task-manager/lib/connection-health.js +232 -0
  73. package/template/claude-task-manager/lib/conversation-blob-parser.js +42 -0
  74. package/template/claude-task-manager/lib/conversation-tail-merge.js +89 -26
  75. package/template/claude-task-manager/lib/ctm-session-context-api.js +39 -10
  76. package/template/claude-task-manager/lib/cursor-conversation-store.js +354 -0
  77. package/template/claude-task-manager/lib/db-owner-worker-client.js +315 -0
  78. package/template/claude-task-manager/lib/document-review.js +141 -6
  79. package/template/claude-task-manager/lib/escalation-review.js +152 -0
  80. package/template/claude-task-manager/lib/graceful-shutdown.js +159 -0
  81. package/template/claude-task-manager/lib/headless-term-service.js +678 -0
  82. package/template/claude-task-manager/lib/heavy-worker-fallback.js +38 -0
  83. package/template/claude-task-manager/lib/jsonl-conversation-parser.js +542 -0
  84. package/template/claude-task-manager/lib/jsonl-range-reader.js +112 -0
  85. package/template/claude-task-manager/lib/main-db-census.js +216 -0
  86. package/template/claude-task-manager/lib/message-pagination.js +106 -4
  87. package/template/claude-task-manager/lib/microsoft-dev-tunnel-setup.js +750 -26
  88. package/template/claude-task-manager/lib/mobile-auth-api.js +274 -7
  89. package/template/claude-task-manager/lib/mobile-auth-store.js +592 -10
  90. package/template/claude-task-manager/lib/mobile-notification-dispatcher.js +15 -0
  91. package/template/claude-task-manager/lib/model-overview-brain-fallback.js +311 -0
  92. package/template/claude-task-manager/lib/model-overview-cache.js +141 -0
  93. package/template/claude-task-manager/lib/models-health-routing-notice.js +126 -0
  94. package/template/claude-task-manager/lib/node-pin-guard.js +93 -0
  95. package/template/claude-task-manager/lib/perf-tracker.js +242 -6
  96. package/template/claude-task-manager/lib/permission-match.js +76 -0
  97. package/template/claude-task-manager/lib/permission-sync.js +133 -20
  98. package/template/claude-task-manager/lib/process-title.js +35 -0
  99. package/template/claude-task-manager/lib/prompt-executions-query.js +25 -0
  100. package/template/claude-task-manager/lib/prompt-index-disk-cache.js +44 -0
  101. package/template/claude-task-manager/lib/prompt-intent.js +132 -0
  102. package/template/claude-task-manager/lib/provider-user-context.js +34 -0
  103. package/template/claude-task-manager/lib/read-pool-client.js +313 -0
  104. package/template/claude-task-manager/lib/readpool-breaker.js +31 -0
  105. package/template/claude-task-manager/lib/recent-sessions-breaker.js +12 -0
  106. package/template/claude-task-manager/lib/remote-feedback-client.js +72 -0
  107. package/template/claude-task-manager/lib/remote-relay-protocol.js +37 -4
  108. package/template/claude-task-manager/lib/remote-relay-store.js +159 -0
  109. package/template/claude-task-manager/lib/remote-submission-observer.js +278 -0
  110. package/template/claude-task-manager/lib/restart-guard.js +109 -0
  111. package/template/claude-task-manager/lib/restore-interruption-detector.js +439 -0
  112. package/template/claude-task-manager/lib/restore-policy.js +13 -0
  113. package/template/claude-task-manager/lib/restore-resume-batch.js +74 -0
  114. package/template/claude-task-manager/lib/restore-runtime.js +68 -0
  115. package/template/claude-task-manager/lib/restore-storm.js +34 -0
  116. package/template/claude-task-manager/lib/resume-cwd.js +36 -0
  117. package/template/claude-task-manager/lib/resume-preflight.js +313 -0
  118. package/template/claude-task-manager/lib/runtime-work-registry.js +444 -0
  119. package/template/claude-task-manager/lib/sanitize-openai-auth.js +31 -0
  120. package/template/claude-task-manager/lib/scheduler.js +21 -1
  121. package/template/claude-task-manager/lib/scrollback-snapshot-store.js +159 -0
  122. package/template/claude-task-manager/lib/serial-task-queue.js +64 -0
  123. package/template/claude-task-manager/lib/server-listeners.js +239 -0
  124. package/template/claude-task-manager/lib/session-capture.js +42 -7
  125. package/template/claude-task-manager/lib/session-content-backfill.js +131 -0
  126. package/template/claude-task-manager/lib/session-history.js +388 -43
  127. package/template/claude-task-manager/lib/session-host-manager.js +287 -0
  128. package/template/claude-task-manager/lib/session-image-refs.js +209 -0
  129. package/template/claude-task-manager/lib/session-jobs.js +399 -59
  130. package/template/claude-task-manager/lib/session-prompt-index.js +137 -0
  131. package/template/claude-task-manager/lib/session-restore.js +53 -0
  132. package/template/claude-task-manager/lib/session-standup.js +123 -23
  133. package/template/claude-task-manager/lib/session-state-bus.js +14 -0
  134. package/template/claude-task-manager/lib/session-stream.js +64 -16
  135. package/template/claude-task-manager/lib/session-timeline-summary.js +260 -0
  136. package/template/claude-task-manager/lib/session-token-usage.js +494 -0
  137. package/template/claude-task-manager/lib/session-workspace-binding.js +356 -0
  138. package/template/claude-task-manager/lib/setup-network-config.js +9 -0
  139. package/template/claude-task-manager/lib/size-cap.js +45 -0
  140. package/template/claude-task-manager/lib/size-cap.test.js +62 -0
  141. package/template/claude-task-manager/lib/skill-autocomplete.js +180 -1
  142. package/template/claude-task-manager/lib/skill-intent-resolver.js +304 -0
  143. package/template/claude-task-manager/lib/sqlite-driver.js +19 -3
  144. package/template/claude-task-manager/lib/standup-attention.js +7 -3
  145. package/template/claude-task-manager/lib/status-authority.js +39 -0
  146. package/template/claude-task-manager/lib/status-hooks.js +4 -0
  147. package/template/claude-task-manager/lib/storage-migration.js +235 -0
  148. package/template/claude-task-manager/lib/structured-capture.js +298 -0
  149. package/template/claude-task-manager/lib/sync-io-census.js +163 -0
  150. package/template/claude-task-manager/lib/tailscale-setup.js +6 -0
  151. package/template/claude-task-manager/lib/terminal-activity-evidence.js +33 -0
  152. package/template/claude-task-manager/lib/terminal-choice.js +364 -0
  153. package/template/claude-task-manager/lib/terminal-control-sanitize.js +17 -0
  154. package/template/claude-task-manager/lib/terminal-fingerprint.js +48 -0
  155. package/template/claude-task-manager/lib/terminal-output-flush.js +84 -0
  156. package/template/claude-task-manager/lib/timeline-order.js +122 -0
  157. package/template/claude-task-manager/lib/transcript-store.js +348 -43
  158. package/template/claude-task-manager/lib/transport-security.js +84 -1
  159. package/template/claude-task-manager/lib/wait-state.js +184 -0
  160. package/template/claude-task-manager/lib/walle-client.js +47 -5
  161. package/template/claude-task-manager/lib/walle-ctm-history.js +564 -4
  162. package/template/claude-task-manager/lib/walle-external-actions.js +135 -16
  163. package/template/claude-task-manager/lib/walle-history-hydration.js +46 -0
  164. package/template/claude-task-manager/lib/walle-native-health.js +403 -0
  165. package/template/claude-task-manager/lib/walle-repair.js +701 -0
  166. package/template/claude-task-manager/lib/walle-session-cache.js +109 -0
  167. package/template/claude-task-manager/lib/walle-session-context.js +57 -21
  168. package/template/claude-task-manager/lib/walle-session-model-catalog.js +34 -0
  169. package/template/claude-task-manager/lib/walle-supervisor.js +539 -63
  170. package/template/claude-task-manager/lib/walle-transcript.js +52 -0
  171. package/template/claude-task-manager/lib/worktree-active-sync.js +11 -7
  172. package/template/claude-task-manager/lib/worktree-cwd.js +32 -1
  173. package/template/claude-task-manager/package.json +1 -1
  174. package/template/claude-task-manager/prompt-harvest.js +89 -66
  175. package/template/claude-task-manager/providers/claude-code.js +51 -3
  176. package/template/claude-task-manager/providers/cursor.js +140 -45
  177. package/template/claude-task-manager/public/css/reviews.css +551 -61
  178. package/template/claude-task-manager/public/css/setup.css +191 -0
  179. package/template/claude-task-manager/public/css/walle-session.css +865 -10
  180. package/template/claude-task-manager/public/css/walle.css +154 -0
  181. package/template/claude-task-manager/public/designs/ai-providers-consolidation-v2.html +830 -0
  182. package/template/claude-task-manager/public/index.html +18516 -2058
  183. package/template/claude-task-manager/public/ipad.html +363 -0
  184. package/template/claude-task-manager/public/js/document-review-links.js +301 -0
  185. package/template/claude-task-manager/public/js/image-normalize.js +69 -36
  186. package/template/claude-task-manager/public/js/message-renderer.js +1265 -77
  187. package/template/claude-task-manager/public/js/prompts.js +66 -29
  188. package/template/claude-task-manager/public/js/reviews.js +901 -133
  189. package/template/claude-task-manager/public/js/session-activity-utils.js +11 -1
  190. package/template/claude-task-manager/public/js/session-search-utils.js +94 -10
  191. package/template/claude-task-manager/public/js/session-status-precedence.js +23 -5
  192. package/template/claude-task-manager/public/js/setup.js +1273 -176
  193. package/template/claude-task-manager/public/js/stream-view.js +691 -73
  194. package/template/claude-task-manager/public/js/terminal-reconciler.js +210 -0
  195. package/template/claude-task-manager/public/js/walle-session.js +2455 -158
  196. package/template/claude-task-manager/public/js/walle.js +455 -28
  197. package/template/claude-task-manager/public/m/app.css +2909 -262
  198. package/template/claude-task-manager/public/m/app.js +6601 -398
  199. package/template/claude-task-manager/public/m/claim.html +224 -17
  200. package/template/claude-task-manager/public/m/index.html +117 -21
  201. package/template/claude-task-manager/public/m/sw.js +3 -1
  202. package/template/claude-task-manager/public/manifest.json +2 -2
  203. package/template/claude-task-manager/public/prompts.html +30 -14
  204. package/template/claude-task-manager/queue-engine.js +507 -28
  205. package/template/claude-task-manager/scripts/repair-claude-session-images.js +27 -8
  206. package/template/claude-task-manager/server.js +14341 -2197
  207. package/template/claude-task-manager/session-integrity.js +160 -18
  208. package/template/claude-task-manager/session-search-ranking.js +1 -0
  209. package/template/claude-task-manager/session-utils.js +25 -5
  210. package/template/claude-task-manager/workers/approval-blocklist.js +96 -6
  211. package/template/claude-task-manager/workers/approval-widget-validator.js +14 -8
  212. package/template/claude-task-manager/workers/conversation-import-worker.js +11 -50
  213. package/template/claude-task-manager/workers/db-owner-worker.js +386 -0
  214. package/template/claude-task-manager/workers/harvest-worker.js +9 -55
  215. package/template/claude-task-manager/workers/headless-term-worker.js +9 -530
  216. package/template/claude-task-manager/workers/read-pool-worker.js +387 -0
  217. package/template/claude-task-manager/workers/scrollback-worker.js +11 -72
  218. package/template/claude-task-manager/workers/session-host-process.js +146 -0
  219. package/template/claude-task-manager/workers/session-integrity-worker.js +10 -54
  220. package/template/claude-task-manager/workers/state-detectors/base.js +18 -1
  221. package/template/claude-task-manager/workers/state-detectors/claude-code.js +182 -9
  222. package/template/claude-task-manager/workers/state-detectors/codex.js +150 -2
  223. package/template/claude-task-manager/workers/state-detectors/cursor.js +127 -0
  224. package/template/claude-task-manager/workers/state-detectors/gemini.js +21 -0
  225. package/template/claude-task-manager/workers/state-detectors/index.js +29 -0
  226. package/template/claude-task-manager/workers/state-detectors/opencode.js +103 -0
  227. package/template/docs/design/markdown-review-pane.md +206 -0
  228. package/template/docs/designs/2026-05-17-portkey-gateway-provider-ux.md +129 -38
  229. package/template/docs/designs/2026-05-20-mobile-worktree-finish-command.md +27 -0
  230. package/template/docs/designs/2026-05-22-ai-configuration-consolidation.md +248 -0
  231. package/template/docs/designs/ai-configuration-consolidation-mock.html +812 -0
  232. package/template/docs/private-memory-and-pii-policy.md +69 -0
  233. package/template/package.json +2 -1
  234. package/template/scripts/check-private-data.js +201 -0
  235. package/template/shared/sqlite-owner-guard.js +30 -0
  236. package/template/shared/sqlite-owner-write-queue.js +225 -0
  237. package/template/shared/sqlite-storage-policy.js +111 -0
  238. package/template/shared/sqlite-write-lock.js +428 -0
  239. package/template/wall-e/agent-runners/claude-code.js +5 -0
  240. package/template/wall-e/agent.js +166 -22
  241. package/template/wall-e/api-walle.js +524 -70
  242. package/template/wall-e/auth/provider-flows.js +11 -1
  243. package/template/wall-e/bin/walle-mcp-stdio.js +341 -17
  244. package/template/wall-e/brain.js +1614 -141
  245. package/template/wall-e/chat/attachment-blocks.js +96 -0
  246. package/template/wall-e/chat/attachments.js +2 -1
  247. package/template/wall-e/chat/capability-resolver.js +7 -7
  248. package/template/wall-e/chat/context-messages.js +28 -0
  249. package/template/wall-e/chat/conversation-frame.js +630 -0
  250. package/template/wall-e/chat/provider-messages.js +125 -0
  251. package/template/wall-e/chat.js +1002 -233
  252. package/template/wall-e/coding/acceptance-contract.js +170 -0
  253. package/template/wall-e/coding/acp-adapter.js +1 -1
  254. package/template/wall-e/coding/agent-catalog.js +3 -0
  255. package/template/wall-e/coding/artifact-store.js +93 -0
  256. package/template/wall-e/coding/capability-router.js +120 -0
  257. package/template/wall-e/coding/coding-run-controller.js +423 -0
  258. package/template/wall-e/coding/compaction-service.js +157 -12
  259. package/template/wall-e/coding/frontend-verification.js +258 -0
  260. package/template/wall-e/coding/lifecycle-hooks.js +75 -0
  261. package/template/wall-e/coding/local-preview-contract.js +157 -0
  262. package/template/wall-e/coding/permission-service.js +57 -13
  263. package/template/wall-e/coding/prompt-bundle.js +19 -1
  264. package/template/wall-e/coding/prompt-section-registry.js +227 -0
  265. package/template/wall-e/coding/provider-compat.js +15 -0
  266. package/template/wall-e/coding/runtime-events.js +224 -0
  267. package/template/wall-e/coding/runtime-mode.js +3 -0
  268. package/template/wall-e/coding/side-git-snapshot.js +160 -4
  269. package/template/wall-e/coding/snapshot-service.js +143 -1
  270. package/template/wall-e/coding/stream-processor.js +388 -34
  271. package/template/wall-e/coding/task-tool.js +141 -4
  272. package/template/wall-e/coding/tool-execution-controller.js +365 -0
  273. package/template/wall-e/coding/tool-registry.js +43 -5
  274. package/template/wall-e/coding/user-hooks.js +217 -0
  275. package/template/wall-e/coding-orchestrator.js +1330 -221
  276. package/template/wall-e/coding-prompts.js +20 -4
  277. package/template/wall-e/context/context-builder.js +15 -2
  278. package/template/wall-e/decision/confidence.js +1 -1
  279. package/template/wall-e/docs/coding-acceptance-contract.md +41 -0
  280. package/template/wall-e/docs/external-action-controller.md +26 -6
  281. package/template/wall-e/docs/telemetry-lifecycle.md +8 -2
  282. package/template/wall-e/embeddings.js +591 -53
  283. package/template/wall-e/external-action-controller.js +12 -0
  284. package/template/wall-e/http/auth.js +1 -0
  285. package/template/wall-e/http/chat-api.js +46 -11
  286. package/template/wall-e/http/model-admin.js +836 -34
  287. package/template/wall-e/lib/boot-profile.js +88 -0
  288. package/template/wall-e/lib/event-loop-monitor.js +93 -0
  289. package/template/wall-e/lib/service-health.js +194 -0
  290. package/template/wall-e/llm/anthropic.js +130 -5
  291. package/template/wall-e/llm/client.js +266 -63
  292. package/template/wall-e/llm/default-fallback.js +382 -0
  293. package/template/wall-e/llm/health.js +19 -0
  294. package/template/wall-e/llm/message-guard.js +78 -0
  295. package/template/wall-e/llm/model-catalog.js +252 -1
  296. package/template/wall-e/llm/openai.js +26 -4
  297. package/template/wall-e/llm/portkey-sync.js +654 -0
  298. package/template/wall-e/llm/provider-error.js +30 -2
  299. package/template/wall-e/llm/registry.js +5 -1
  300. package/template/wall-e/llm/request-compat.js +67 -0
  301. package/template/wall-e/loops/backfill.js +79 -23
  302. package/template/wall-e/loops/brain-optimize.js +67 -0
  303. package/template/wall-e/loops/ingest.js +25 -10
  304. package/template/wall-e/loops/question-digest.js +160 -0
  305. package/template/wall-e/loops/reflect.js +6 -4
  306. package/template/wall-e/loops/think.js +39 -12
  307. package/template/wall-e/mcp-server.js +318 -36
  308. package/template/wall-e/memory/ctm-context-client.js +52 -14
  309. package/template/wall-e/memory/ctm-operational-context.js +237 -0
  310. package/template/wall-e/memory/ctm-prompt-executions-client.js +128 -0
  311. package/template/wall-e/memory/ctm-session-context.js +111 -63
  312. package/template/wall-e/prompts/coding/deepseek.txt +3 -0
  313. package/template/wall-e/prompts/coding/gemini.txt +6 -0
  314. package/template/wall-e/prompts/coding/gpt.txt +6 -0
  315. package/template/wall-e/prompts/coding/local.txt +7 -0
  316. package/template/wall-e/runtime/decision-hooks.js +115 -0
  317. package/template/wall-e/runtime/devbox-gateway.js +82 -8
  318. package/template/wall-e/runtime/prompt-manifest.js +86 -0
  319. package/template/wall-e/runtime/tool-executor.js +269 -0
  320. package/template/wall-e/runtime/tool-result-envelope.js +138 -0
  321. package/template/wall-e/runtime/transcript-projection.js +60 -0
  322. package/template/wall-e/runtime/walle-runtime.js +224 -0
  323. package/template/wall-e/scripts/db-optimize/migrate.js +162 -0
  324. package/template/wall-e/scripts/db-optimize/recall-eval.js +117 -0
  325. package/template/wall-e/server.js +15 -0
  326. package/template/wall-e/session-files.js +9 -0
  327. package/template/wall-e/skills/_bundled/google-calendar/run.js +1 -1
  328. package/template/wall-e/skills/_bundled/gws-workspace/run.js +1 -1
  329. package/template/wall-e/skills/_bundled/slack-mentions/run.js +76 -6
  330. package/template/wall-e/skills/claude-code-reader.js +7 -3
  331. package/template/wall-e/skills/script-skill-runner.js +10 -0
  332. package/template/wall-e/skills/skill-planner.js +38 -0
  333. package/template/wall-e/tools/builtin-middleware.js +19 -9
  334. package/template/wall-e/tools/local-tools.js +1428 -16
  335. package/template/wall-e/tools/permission-checker.js +73 -5
  336. package/template/wall-e/tools/question-manager.js +117 -7
  337. package/template/wall-e/training/harvester.js +12 -28
  338. package/template/wall-e/training/replay.js +25 -80
  339. package/template/website/index.html +10 -10
  340. package/template/wall-e/eval/ab-test.js +0 -203
  341. package/template/wall-e/eval/agent-runner.js +0 -772
  342. package/template/wall-e/eval/agent-scorer.js +0 -461
  343. package/template/wall-e/eval/aggregator.js +0 -414
  344. package/template/wall-e/eval/allowed-test-commands.js +0 -34
  345. package/template/wall-e/eval/benchmark-generator.js +0 -113
  346. package/template/wall-e/eval/benchmarks/chat-eval.json +0 -1662
  347. package/template/wall-e/eval/benchmarks/chat.json +0 -82
  348. package/template/wall-e/eval/benchmarks/coding-agent-real.json +0 -1
  349. package/template/wall-e/eval/benchmarks/coding-agent.json +0 -1581
  350. package/template/wall-e/eval/benchmarks/coding.json +0 -122
  351. package/template/wall-e/eval/benchmarks/memory-retrieval.json +0 -234
  352. package/template/wall-e/eval/benchmarks/reasoning.json +0 -82
  353. package/template/wall-e/eval/benchmarks/swebench-lite-30.json +0 -212
  354. package/template/wall-e/eval/benchmarks.js +0 -669
  355. package/template/wall-e/eval/cc-replay.js +0 -719
  356. package/template/wall-e/eval/chat-eval.js +0 -525
  357. package/template/wall-e/eval/check-keys.js +0 -15
  358. package/template/wall-e/eval/check-providers.js +0 -42
  359. package/template/wall-e/eval/codex-cli-baseline.js +0 -669
  360. package/template/wall-e/eval/coding-agent-real.js +0 -570
  361. package/template/wall-e/eval/context-compactor.js +0 -251
  362. package/template/wall-e/eval/debug-agent003.js +0 -68
  363. package/template/wall-e/eval/diagnostics.js +0 -216
  364. package/template/wall-e/eval/eval-orchestrator.js +0 -642
  365. package/template/wall-e/eval/evaluate.js +0 -202
  366. package/template/wall-e/eval/evaluator.js +0 -373
  367. package/template/wall-e/eval/exporter.js +0 -212
  368. package/template/wall-e/eval/fixtures/express-basic/package.json +0 -9
  369. package/template/wall-e/eval/fixtures/express-basic/server.js +0 -115
  370. package/template/wall-e/eval/fixtures/express-basic/test.js +0 -83
  371. package/template/wall-e/eval/fixtures/express-buggy/package.json +0 -9
  372. package/template/wall-e/eval/fixtures/express-buggy/server.js +0 -113
  373. package/template/wall-e/eval/fixtures/express-buggy/test.js +0 -83
  374. package/template/wall-e/eval/fixtures/express-buggy-items/package.json +0 -9
  375. package/template/wall-e/eval/fixtures/express-buggy-items/server.js +0 -112
  376. package/template/wall-e/eval/fixtures/express-buggy-items/test.js +0 -83
  377. package/template/wall-e/eval/fixtures/express-buggy-search/package.json +0 -9
  378. package/template/wall-e/eval/fixtures/express-buggy-search/server.js +0 -121
  379. package/template/wall-e/eval/fixtures/express-buggy-search/test.js +0 -83
  380. package/template/wall-e/eval/fixtures/express-rename-data/data.js +0 -34
  381. package/template/wall-e/eval/fixtures/express-rename-data/package.json +0 -9
  382. package/template/wall-e/eval/fixtures/express-rename-data/server.js +0 -97
  383. package/template/wall-e/eval/fixtures/express-rename-data/test.js +0 -88
  384. package/template/wall-e/eval/fixtures/express-xss/package.json +0 -12
  385. package/template/wall-e/eval/fixtures/express-xss/server.js +0 -90
  386. package/template/wall-e/eval/fixtures/express-xss/test.js +0 -67
  387. package/template/wall-e/eval/fixtures/express-xss/views/profile.ejs +0 -9
  388. package/template/wall-e/eval/fixtures/fullstack-app/config/default.js +0 -9
  389. package/template/wall-e/eval/fixtures/fullstack-app/config/test.js +0 -13
  390. package/template/wall-e/eval/fixtures/fullstack-app/package.json +0 -11
  391. package/template/wall-e/eval/fixtures/fullstack-app/public/css/style.css +0 -137
  392. package/template/wall-e/eval/fixtures/fullstack-app/public/index.html +0 -46
  393. package/template/wall-e/eval/fixtures/fullstack-app/public/js/app.js +0 -121
  394. package/template/wall-e/eval/fixtures/fullstack-app/public/js/auth.js +0 -71
  395. package/template/wall-e/eval/fixtures/fullstack-app/public/js/items.js +0 -80
  396. package/template/wall-e/eval/fixtures/fullstack-app/public/js/users.js +0 -46
  397. package/template/wall-e/eval/fixtures/fullstack-app/public/login.html +0 -45
  398. package/template/wall-e/eval/fixtures/fullstack-app/public/register.html +0 -38
  399. package/template/wall-e/eval/fixtures/fullstack-app/scripts/migrate.js +0 -23
  400. package/template/wall-e/eval/fixtures/fullstack-app/scripts/seed.js +0 -46
  401. package/template/wall-e/eval/fixtures/fullstack-app/server/db.js +0 -99
  402. package/template/wall-e/eval/fixtures/fullstack-app/server/index.js +0 -94
  403. package/template/wall-e/eval/fixtures/fullstack-app/server/middleware/auth.js +0 -19
  404. package/template/wall-e/eval/fixtures/fullstack-app/server/middleware/logger.js +0 -19
  405. package/template/wall-e/eval/fixtures/fullstack-app/server/router.js +0 -50
  406. package/template/wall-e/eval/fixtures/fullstack-app/server/routes/auth.js +0 -69
  407. package/template/wall-e/eval/fixtures/fullstack-app/server/routes/health.js +0 -23
  408. package/template/wall-e/eval/fixtures/fullstack-app/server/routes/items.js +0 -88
  409. package/template/wall-e/eval/fixtures/fullstack-app/server/routes/users.js +0 -75
  410. package/template/wall-e/eval/fixtures/fullstack-app/server/test.js +0 -198
  411. package/template/wall-e/eval/fixtures/fullstack-app/server/utils/response.js +0 -34
  412. package/template/wall-e/eval/fixtures/fullstack-app/server/utils/validate.js +0 -26
  413. package/template/wall-e/eval/fixtures/fullstack-app/server.js +0 -8
  414. package/template/wall-e/eval/fixtures/fullstack-app/test.js +0 -12
  415. package/template/wall-e/eval/fixtures/monorepo-basic/package.json +0 -8
  416. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/data.js +0 -58
  417. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/middleware.js +0 -46
  418. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/package.json +0 -8
  419. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/routes.js +0 -64
  420. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/server.js +0 -56
  421. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/test.js +0 -116
  422. package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/commands.js +0 -61
  423. package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/index.js +0 -62
  424. package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/output.js +0 -43
  425. package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/package.json +0 -11
  426. package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/test.js +0 -44
  427. package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/formatters.js +0 -43
  428. package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/index.js +0 -12
  429. package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/package.json +0 -5
  430. package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/test.js +0 -55
  431. package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/validators.js +0 -29
  432. package/template/wall-e/eval/fixtures/monorepo-basic/test.js +0 -46
  433. package/template/wall-e/eval/fixtures/node-cli/index.js +0 -78
  434. package/template/wall-e/eval/fixtures/node-cli/package.json +0 -10
  435. package/template/wall-e/eval/fixtures/node-cli/test.js +0 -57
  436. package/template/wall-e/eval/fixtures/node-typed/package.json +0 -8
  437. package/template/wall-e/eval/fixtures/node-typed/src/handlers.js +0 -31
  438. package/template/wall-e/eval/fixtures/node-typed/src/utils.js +0 -33
  439. package/template/wall-e/eval/fixtures/node-typed/test.js +0 -36
  440. package/template/wall-e/eval/fixtures/python-flask/app.py +0 -14
  441. package/template/wall-e/eval/fixtures/python-flask/requirements.txt +0 -2
  442. package/template/wall-e/eval/fixtures/python-flask/test_app.py +0 -25
  443. package/template/wall-e/eval/fixtures/wall-e-subset/brain.js +0 -105
  444. package/template/wall-e/eval/fixtures/wall-e-subset/eval/aggregator.js +0 -101
  445. package/template/wall-e/eval/fixtures/wall-e-subset/eval/benchmarks/chat.json +0 -20
  446. package/template/wall-e/eval/fixtures/wall-e-subset/eval/benchmarks/coding.json +0 -32
  447. package/template/wall-e/eval/fixtures/wall-e-subset/eval/benchmarks.js +0 -64
  448. package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/package.json +0 -6
  449. package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/server.js +0 -31
  450. package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/test.js +0 -18
  451. package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/utils.js +0 -34
  452. package/template/wall-e/eval/fixtures/wall-e-subset/eval/runner.js +0 -104
  453. package/template/wall-e/eval/fixtures/wall-e-subset/eval/scorer.js +0 -73
  454. package/template/wall-e/eval/fixtures/wall-e-subset/eval/test.js +0 -134
  455. package/template/wall-e/eval/fixtures/wall-e-subset/llm/client.js +0 -99
  456. package/template/wall-e/eval/fixtures/wall-e-subset/llm/providers.js +0 -63
  457. package/template/wall-e/eval/fixtures/wall-e-subset/llm/test.js +0 -70
  458. package/template/wall-e/eval/fixtures/wall-e-subset/package.json +0 -10
  459. package/template/wall-e/eval/fixtures/wall-e-subset/test.js +0 -86
  460. package/template/wall-e/eval/harvester.js +0 -685
  461. package/template/wall-e/eval/head-to-head.js +0 -388
  462. package/template/wall-e/eval/humaneval-adapter.js +0 -321
  463. package/template/wall-e/eval/list-models.js +0 -31
  464. package/template/wall-e/eval/livecodebench-adapter.js +0 -291
  465. package/template/wall-e/eval/mail-integration.js +0 -443
  466. package/template/wall-e/eval/manifest.js +0 -186
  467. package/template/wall-e/eval/meta-harness/adapters/coding-agent.js +0 -57
  468. package/template/wall-e/eval/meta-harness/bootstrap-snapshot.js +0 -149
  469. package/template/wall-e/eval/meta-harness/candidate-store.js +0 -117
  470. package/template/wall-e/eval/meta-harness/cli.js +0 -86
  471. package/template/wall-e/eval/meta-harness/domain-spec.js +0 -154
  472. package/template/wall-e/eval/meta-harness/domains/coding-agent.domain.json +0 -84
  473. package/template/wall-e/eval/meta-harness/examples/env-bootstrap-candidate.js +0 -29
  474. package/template/wall-e/eval/meta-harness/experience-store.js +0 -174
  475. package/template/wall-e/eval/meta-harness/frontier.js +0 -96
  476. package/template/wall-e/eval/meta-harness/harness-interface.js +0 -90
  477. package/template/wall-e/eval/meta-harness/leakage-guard.js +0 -80
  478. package/template/wall-e/eval/meta-harness/optimizer.js +0 -207
  479. package/template/wall-e/eval/meta-harness/proposer-runner.js +0 -110
  480. package/template/wall-e/eval/meta-harness/reporting.js +0 -58
  481. package/template/wall-e/eval/meta-harness/telemetry.js +0 -27
  482. package/template/wall-e/eval/meta-harness/validation.js +0 -81
  483. package/template/wall-e/eval/promoter.js +0 -228
  484. package/template/wall-e/eval/provider-normalizer.js +0 -33
  485. package/template/wall-e/eval/replay.js +0 -395
  486. package/template/wall-e/eval/run-agent-benchmarks.js +0 -386
  487. package/template/wall-e/eval/run-codex-cli-baseline.js +0 -177
  488. package/template/wall-e/eval/run-coding-agent-real.js +0 -187
  489. package/template/wall-e/eval/run-eval.js +0 -435
  490. package/template/wall-e/eval/run-model-comparison.js +0 -142
  491. package/template/wall-e/eval/session-evaluator.js +0 -187
  492. package/template/wall-e/eval/session-miner.js +0 -207
  493. package/template/wall-e/eval/session-retrieval-benchmark.js +0 -150
  494. package/template/wall-e/eval/session-transcripts.js +0 -509
  495. package/template/wall-e/eval/shadow.js +0 -161
  496. package/template/wall-e/eval/swebench-adapter.js +0 -345
  497. package/template/wall-e/eval/swebench-docker.js +0 -192
  498. package/template/wall-e/eval/train.py +0 -320
  499. package/template/wall-e/eval/trainer.js +0 -232
  500. package/template/wall-e/eval/weekly-eval-loop.js +0 -241
@@ -0,0 +1,830 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>CTM AI Providers Consolidation Mock v2</title>
7
+ <style>
8
+ :root {
9
+ color-scheme: dark;
10
+ --bg: #171927;
11
+ --surface: #202438;
12
+ --panel: #24283b;
13
+ --panel-deep: #151724;
14
+ --line: #414868;
15
+ --text: #c0caf5;
16
+ --muted: #7b84b4;
17
+ --accent: #7aa2f7;
18
+ --cyan: #7dcfff;
19
+ --green: #9ece6a;
20
+ --yellow: #e0af68;
21
+ --red: #f7768e;
22
+ --purple: #bb9af7;
23
+ }
24
+
25
+ * { box-sizing: border-box; }
26
+
27
+ body {
28
+ margin: 0;
29
+ background: var(--bg);
30
+ color: var(--text);
31
+ font: 14px/1.45 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
32
+ }
33
+
34
+ button,
35
+ input,
36
+ select {
37
+ font: inherit;
38
+ }
39
+
40
+ .topbar {
41
+ height: 58px;
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+ border-bottom: 1px solid var(--line);
46
+ background: #1f2335;
47
+ position: sticky;
48
+ top: 0;
49
+ z-index: 20;
50
+ }
51
+
52
+ .nav-shell {
53
+ display: flex;
54
+ align-items: center;
55
+ gap: 10px;
56
+ }
57
+
58
+ .nav {
59
+ display: flex;
60
+ gap: 4px;
61
+ border: 1px solid var(--line);
62
+ border-radius: 9px;
63
+ padding: 4px;
64
+ background: #11131f;
65
+ }
66
+
67
+ .nav button {
68
+ border: 0;
69
+ border-radius: 6px;
70
+ padding: 7px 16px;
71
+ background: transparent;
72
+ color: var(--muted);
73
+ min-width: 88px;
74
+ cursor: default;
75
+ }
76
+
77
+ .nav .active {
78
+ background: var(--accent);
79
+ color: #10121c;
80
+ font-weight: 700;
81
+ }
82
+
83
+ .gear {
84
+ width: 34px;
85
+ height: 34px;
86
+ border: 1px solid var(--line);
87
+ border-radius: 8px;
88
+ display: grid;
89
+ place-items: center;
90
+ color: var(--muted);
91
+ background: #11131f;
92
+ font-size: 18px;
93
+ }
94
+
95
+ .mock-menu {
96
+ position: absolute;
97
+ top: 50px;
98
+ right: calc(50% - 440px);
99
+ width: 220px;
100
+ border: 1px solid var(--line);
101
+ border-radius: 10px;
102
+ padding: 10px;
103
+ background: var(--panel);
104
+ box-shadow: 0 20px 45px rgba(0, 0, 0, 0.28);
105
+ }
106
+
107
+ .mock-menu div {
108
+ padding: 8px 10px;
109
+ border-radius: 6px;
110
+ color: var(--muted);
111
+ font-weight: 700;
112
+ }
113
+
114
+ .mock-menu .selected {
115
+ background: rgba(122, 162, 247, 0.14);
116
+ color: var(--text);
117
+ }
118
+
119
+ main {
120
+ max-width: 1380px;
121
+ margin: 0 auto;
122
+ padding: 28px 28px 60px;
123
+ }
124
+
125
+ h1,
126
+ h2,
127
+ h3,
128
+ p {
129
+ margin: 0;
130
+ }
131
+
132
+ h1 {
133
+ font-size: 28px;
134
+ letter-spacing: 0;
135
+ }
136
+
137
+ h2 {
138
+ font-size: 20px;
139
+ letter-spacing: 0;
140
+ }
141
+
142
+ h3 {
143
+ font-size: 16px;
144
+ letter-spacing: 0;
145
+ }
146
+
147
+ .subtitle {
148
+ color: var(--muted);
149
+ margin-top: 5px;
150
+ }
151
+
152
+ .page-head,
153
+ .section-head,
154
+ .row {
155
+ display: flex;
156
+ align-items: center;
157
+ justify-content: space-between;
158
+ gap: 16px;
159
+ }
160
+
161
+ .page-head {
162
+ align-items: flex-end;
163
+ margin-bottom: 18px;
164
+ }
165
+
166
+ .actions {
167
+ display: flex;
168
+ align-items: center;
169
+ justify-content: flex-end;
170
+ gap: 8px;
171
+ flex-wrap: wrap;
172
+ }
173
+
174
+ .btn {
175
+ min-height: 34px;
176
+ border: 1px solid var(--line);
177
+ border-radius: 6px;
178
+ background: transparent;
179
+ color: var(--text);
180
+ padding: 7px 12px;
181
+ font-weight: 700;
182
+ }
183
+
184
+ .btn.primary {
185
+ background: var(--accent);
186
+ border-color: var(--accent);
187
+ color: #10121c;
188
+ }
189
+
190
+ .btn.danger {
191
+ border-color: transparent;
192
+ color: var(--red);
193
+ }
194
+
195
+ .search {
196
+ width: 250px;
197
+ min-height: 34px;
198
+ border: 1px solid var(--line);
199
+ border-radius: 6px;
200
+ background: var(--panel);
201
+ color: var(--text);
202
+ padding: 7px 10px;
203
+ }
204
+
205
+ .section {
206
+ margin-top: 24px;
207
+ }
208
+
209
+ .section-head {
210
+ margin-bottom: 10px;
211
+ align-items: flex-end;
212
+ }
213
+
214
+ .card {
215
+ border: 1px solid var(--line);
216
+ border-radius: 8px;
217
+ background: var(--panel);
218
+ padding: 14px;
219
+ }
220
+
221
+ .notice {
222
+ border: 1px solid rgba(125, 207, 255, 0.36);
223
+ border-radius: 8px;
224
+ background: rgba(125, 207, 255, 0.08);
225
+ color: var(--cyan);
226
+ padding: 11px 13px;
227
+ margin-bottom: 18px;
228
+ }
229
+
230
+ .grid-3 {
231
+ display: grid;
232
+ grid-template-columns: repeat(3, minmax(0, 1fr));
233
+ gap: 12px;
234
+ }
235
+
236
+ .grid-2 {
237
+ display: grid;
238
+ grid-template-columns: repeat(2, minmax(0, 1fr));
239
+ gap: 12px;
240
+ }
241
+
242
+ .providers {
243
+ display: grid;
244
+ grid-template-columns: repeat(3, minmax(0, 1fr));
245
+ gap: 12px;
246
+ }
247
+
248
+ .eyebrow {
249
+ color: var(--muted);
250
+ font-size: 11px;
251
+ font-weight: 800;
252
+ letter-spacing: 0.08em;
253
+ text-transform: uppercase;
254
+ }
255
+
256
+ .metric {
257
+ margin-top: 4px;
258
+ font-size: 18px;
259
+ font-weight: 800;
260
+ }
261
+
262
+ .muted {
263
+ color: var(--muted);
264
+ }
265
+
266
+ .status {
267
+ display: inline-flex;
268
+ align-items: center;
269
+ gap: 6px;
270
+ border-radius: 999px;
271
+ padding: 3px 8px;
272
+ font-size: 12px;
273
+ font-weight: 800;
274
+ white-space: nowrap;
275
+ }
276
+
277
+ .status.ok {
278
+ background: rgba(158, 206, 106, 0.13);
279
+ color: var(--green);
280
+ }
281
+
282
+ .status.warn {
283
+ background: rgba(224, 175, 104, 0.13);
284
+ color: var(--yellow);
285
+ }
286
+
287
+ .status.bad {
288
+ background: rgba(247, 118, 142, 0.13);
289
+ color: var(--red);
290
+ }
291
+
292
+ .dot {
293
+ width: 8px;
294
+ height: 8px;
295
+ border-radius: 50%;
296
+ background: var(--green);
297
+ display: inline-block;
298
+ }
299
+
300
+ .dot.yellow { background: var(--yellow); }
301
+ .dot.blue { background: var(--accent); }
302
+ .dot.red { background: var(--red); }
303
+
304
+ .defaults-grid {
305
+ display: grid;
306
+ grid-template-columns: 1fr 1fr 1fr;
307
+ gap: 10px;
308
+ margin-top: 12px;
309
+ }
310
+
311
+ .default-tile {
312
+ background: var(--panel-deep);
313
+ border: 1px solid rgba(65, 72, 104, 0.72);
314
+ border-radius: 7px;
315
+ padding: 11px;
316
+ }
317
+
318
+ .select-line {
319
+ display: grid;
320
+ grid-template-columns: 88px 1fr;
321
+ gap: 8px;
322
+ margin-top: 8px;
323
+ font-size: 12px;
324
+ }
325
+
326
+ .select-line span:nth-child(odd) {
327
+ color: var(--muted);
328
+ }
329
+
330
+ .chips {
331
+ display: flex;
332
+ flex-wrap: wrap;
333
+ gap: 6px;
334
+ margin-top: 9px;
335
+ }
336
+
337
+ .chip {
338
+ border: 1px solid var(--line);
339
+ border-radius: 5px;
340
+ background: var(--panel-deep);
341
+ color: var(--text);
342
+ padding: 3px 7px;
343
+ font-size: 12px;
344
+ white-space: nowrap;
345
+ }
346
+
347
+ .gateway {
348
+ display: grid;
349
+ grid-template-columns: 1fr 1fr;
350
+ gap: 18px;
351
+ align-items: start;
352
+ }
353
+
354
+ .provider-card {
355
+ position: relative;
356
+ overflow: hidden;
357
+ }
358
+
359
+ .provider-card::before {
360
+ content: "";
361
+ position: absolute;
362
+ inset: 0 0 auto;
363
+ height: 3px;
364
+ background: var(--accent);
365
+ }
366
+
367
+ .provider-card.anthropic::before { background: #ff9e64; }
368
+ .provider-card.openai::before { background: var(--green); }
369
+ .provider-card.fireworks::before { background: var(--cyan); }
370
+
371
+ .provider-title {
372
+ display: flex;
373
+ align-items: center;
374
+ gap: 8px;
375
+ font-weight: 800;
376
+ font-size: 16px;
377
+ }
378
+
379
+ .mini-grid {
380
+ display: grid;
381
+ grid-template-columns: 1fr 1fr;
382
+ gap: 8px;
383
+ margin-top: 12px;
384
+ }
385
+
386
+ .mini {
387
+ min-height: 58px;
388
+ background: var(--panel-deep);
389
+ border-radius: 6px;
390
+ padding: 8px;
391
+ }
392
+
393
+ .route {
394
+ margin-top: 10px;
395
+ padding: 10px;
396
+ border-radius: 7px;
397
+ background: var(--panel-deep);
398
+ }
399
+
400
+ .connection {
401
+ margin-top: 10px;
402
+ border-top: 1px solid var(--line);
403
+ padding-top: 10px;
404
+ }
405
+
406
+ .connection-row {
407
+ margin-top: 7px;
408
+ padding: 9px;
409
+ border-radius: 6px;
410
+ background: var(--panel-deep);
411
+ }
412
+
413
+ .ops {
414
+ display: grid;
415
+ grid-template-columns: 1fr 1fr 1fr;
416
+ gap: 12px;
417
+ }
418
+
419
+ .ops-card {
420
+ min-height: 168px;
421
+ }
422
+
423
+ .table {
424
+ display: grid;
425
+ grid-template-columns: 2fr 1fr 1fr 1fr;
426
+ border: 1px solid var(--line);
427
+ border-radius: 8px;
428
+ overflow: hidden;
429
+ background: var(--panel);
430
+ }
431
+
432
+ .table div {
433
+ padding: 10px 12px;
434
+ border-bottom: 1px solid var(--line);
435
+ }
436
+
437
+ .table div:nth-child(-n+4) {
438
+ background: var(--panel-deep);
439
+ color: var(--muted);
440
+ font-size: 11px;
441
+ font-weight: 800;
442
+ letter-spacing: 0.08em;
443
+ text-transform: uppercase;
444
+ }
445
+
446
+ .table div:nth-last-child(-n+4) {
447
+ border-bottom: 0;
448
+ }
449
+
450
+ .settings-mock {
451
+ display: grid;
452
+ grid-template-columns: 300px 1fr;
453
+ gap: 14px;
454
+ margin-top: 12px;
455
+ }
456
+
457
+ .settings-nav {
458
+ border: 1px solid var(--line);
459
+ border-radius: 8px;
460
+ background: var(--panel);
461
+ padding: 10px;
462
+ }
463
+
464
+ .settings-nav div {
465
+ padding: 9px 10px;
466
+ border-radius: 6px;
467
+ color: var(--muted);
468
+ font-weight: 800;
469
+ }
470
+
471
+ .settings-nav .active {
472
+ background: var(--accent);
473
+ color: #10121c;
474
+ }
475
+
476
+ @media (max-width: 1100px) {
477
+ .grid-3,
478
+ .providers,
479
+ .ops,
480
+ .defaults-grid {
481
+ grid-template-columns: 1fr 1fr;
482
+ }
483
+
484
+ .gateway,
485
+ .settings-mock {
486
+ grid-template-columns: 1fr;
487
+ }
488
+ }
489
+
490
+ @media (max-width: 720px) {
491
+ .topbar {
492
+ justify-content: flex-start;
493
+ padding-left: 10px;
494
+ overflow-x: auto;
495
+ }
496
+
497
+ .mock-menu {
498
+ display: none;
499
+ }
500
+
501
+ main {
502
+ padding: 22px 16px 48px;
503
+ }
504
+
505
+ .page-head,
506
+ .section-head,
507
+ .row {
508
+ align-items: flex-start;
509
+ flex-direction: column;
510
+ }
511
+
512
+ .grid-3,
513
+ .grid-2,
514
+ .providers,
515
+ .ops,
516
+ .defaults-grid,
517
+ .mini-grid {
518
+ grid-template-columns: 1fr;
519
+ }
520
+
521
+ .table {
522
+ grid-template-columns: 1fr;
523
+ }
524
+
525
+ .table div:nth-child(-n+4) {
526
+ display: none;
527
+ }
528
+
529
+ .table div {
530
+ border-bottom: 0;
531
+ padding: 8px 10px;
532
+ }
533
+ }
534
+ </style>
535
+ </head>
536
+ <body>
537
+ <header class="topbar">
538
+ <div class="nav-shell">
539
+ <nav class="nav" aria-label="Current CTM navigation mock">
540
+ <button>Sessions</button>
541
+ <button>Prompts</button>
542
+ <button>Wall-E</button>
543
+ <button class="active">More</button>
544
+ </nav>
545
+ <div class="gear" aria-label="Settings">&#9881;</div>
546
+ </div>
547
+ <div class="mock-menu" aria-label="More menu mock">
548
+ <div>Insights</div>
549
+ <div>Permissions</div>
550
+ <div>Review</div>
551
+ <div>Rules</div>
552
+ <div class="selected">AI Providers</div>
553
+ <div>Backups</div>
554
+ <div>Worktrees</div>
555
+ </div>
556
+ </header>
557
+
558
+ <main>
559
+ <div class="page-head">
560
+ <div>
561
+ <h1>AI Providers</h1>
562
+ <p class="subtitle">Configure CTM, Wall-E, gateways, provider access, model operations, and model catalog details.</p>
563
+ </div>
564
+ <div class="actions">
565
+ <input class="search" type="search" placeholder="Search providers or models..." aria-label="Search providers or models">
566
+ <button class="btn">Test all</button>
567
+ <button class="btn primary">+ Add Provider</button>
568
+ </div>
569
+ </div>
570
+
571
+ <div class="notice">
572
+ Keep the current navigation: AI Providers stays under More, Settings stays as the gear. This page becomes the single editor; Settings only summarizes and links here.
573
+ </div>
574
+
575
+ <section class="section">
576
+ <div class="section-head">
577
+ <div>
578
+ <h2>Usage Defaults</h2>
579
+ <p class="subtitle">This answers where CTM and Wall-E provider routes are configured.</p>
580
+ </div>
581
+ <button class="btn">Save Defaults</button>
582
+ </div>
583
+ <article class="card">
584
+ <div class="row">
585
+ <div>
586
+ <h3>Default model routes</h3>
587
+ <p class="subtitle">Provider credentials live in cards below. These controls decide which route CTM and Wall-E use by default.</p>
588
+ </div>
589
+ <span class="status ok"><span class="dot"></span>2 healthy defaults</span>
590
+ </div>
591
+ <div class="defaults-grid">
592
+ <div class="default-tile">
593
+ <div class="eyebrow">CTM jobs</div>
594
+ <div class="metric">OpenAI &middot; Prefer Direct</div>
595
+ <div class="select-line"><span>Provider</span><span>OpenAI</span><span>Model</span><span>gpt-5.5</span><span>Fallback</span><span>Portkey when direct fails</span></div>
596
+ </div>
597
+ <div class="default-tile">
598
+ <div class="eyebrow">Wall-E jobs</div>
599
+ <div class="metric">Anthropic &middot; Auto</div>
600
+ <div class="select-line"><span>Provider</span><span>Anthropic</span><span>Model</span><span>claude-sonnet-4.5</span><span>Fallback</span><span>Portkey when available</span></div>
601
+ </div>
602
+ <div class="default-tile">
603
+ <div class="eyebrow">Wall-E Coding Agent</div>
604
+ <div class="metric">Anthropic &middot; Direct</div>
605
+ <div class="select-line"><span>Provider</span><span>Anthropic</span><span>Model</span><span>claude-sonnet-4.5</span><span>Runner</span><span>Wall-E coding agent</span></div>
606
+ </div>
607
+ </div>
608
+ </article>
609
+ </section>
610
+
611
+ <section class="section">
612
+ <div class="section-head">
613
+ <div>
614
+ <h2>Coding Agent Routes</h2>
615
+ <p class="subtitle">Coding agents are session runners. They can reference provider/model routes, but they are not provider cards.</p>
616
+ </div>
617
+ </div>
618
+ <div class="grid-3">
619
+ <article class="card">
620
+ <div class="row"><h3>Claude Code</h3><span class="status ok">Ready</span></div>
621
+ <div class="select-line"><span>Auth</span><span>Claude CLI</span><span>Default</span><span>Anthropic &middot; Sonnet</span><span>Config</span><span>Agent runtime</span></div>
622
+ </article>
623
+ <article class="card">
624
+ <div class="row"><h3>Codex / OpenAI</h3><span class="status ok">Ready</span></div>
625
+ <div class="select-line"><span>Auth</span><span>Codex CLI</span><span>Default</span><span>OpenAI &middot; GPT-5.5</span><span>Config</span><span>Agent runtime</span></div>
626
+ </article>
627
+ <article class="card">
628
+ <div class="row"><h3>Gemini</h3><span class="status warn">Needs test</span></div>
629
+ <div class="select-line"><span>Auth</span><span>Gemini CLI</span><span>Default</span><span>Google &middot; Pro</span><span>Config</span><span>Agent runtime</span></div>
630
+ </article>
631
+ </div>
632
+ </section>
633
+
634
+ <section class="section">
635
+ <div class="section-head">
636
+ <div>
637
+ <h2>Gateways</h2>
638
+ <p class="subtitle">Shared routing and discovery layers. Portkey connects once, then provider cards decide usage.</p>
639
+ </div>
640
+ </div>
641
+ <article class="card gateway">
642
+ <div>
643
+ <div class="row">
644
+ <div>
645
+ <h3>Portkey Gateway</h3>
646
+ <p class="subtitle">Connected &middot; 33 Portkey providers &middot; 2,483 imported models</p>
647
+ </div>
648
+ <span class="status ok">Synced 12m ago</span>
649
+ </div>
650
+ <div class="actions" style="justify-content:flex-start;margin-top:12px">
651
+ <button class="btn">Edit Gateway</button>
652
+ <button class="btn">Sync now</button>
653
+ <button class="btn">Apply to Portkey providers</button>
654
+ <button class="btn">Disable as default</button>
655
+ <button class="btn danger">Remove</button>
656
+ </div>
657
+ </div>
658
+ <div>
659
+ <div class="eyebrow">Portkey catalog providers</div>
660
+ <div class="chips">
661
+ <span class="chip">Anthropic &middot; 38 models</span>
662
+ <span class="chip">OpenAI &middot; 175 models</span>
663
+ <span class="chip">Google Gemini &middot; 124 models</span>
664
+ <span class="chip">Fireworks AI &middot; 27 models</span>
665
+ <span class="chip">Mistral AI &middot; 53 models</span>
666
+ <span class="chip">Together AI &middot; 170 models</span>
667
+ </div>
668
+ </div>
669
+ </article>
670
+ </section>
671
+
672
+ <section class="section">
673
+ <div class="section-head">
674
+ <div>
675
+ <h2>Provider Access</h2>
676
+ <p class="subtitle">Manual provider add, credentials, route policy, tests, rescans, remove actions, and model counts stay here.</p>
677
+ </div>
678
+ </div>
679
+ <div class="providers">
680
+ <article class="card provider-card anthropic">
681
+ <div class="row">
682
+ <div>
683
+ <div class="provider-title"><span class="dot yellow"></span>Anthropic</div>
684
+ <p class="subtitle">42 models &middot; 2 routes &middot; Wall-E default</p>
685
+ </div>
686
+ <span class="status ok">Active</span>
687
+ </div>
688
+ <div class="mini-grid">
689
+ <div class="mini"><div class="eyebrow">Cost range</div><strong>$0.25 - $15.00</strong></div>
690
+ <div class="mini"><div class="eyebrow">Capabilities</div><div class="chips"><span class="chip">chat</span><span class="chip">tools</span><span class="chip">vision</span></div></div>
691
+ </div>
692
+ <div class="route">
693
+ <div class="row">
694
+ <div><div class="eyebrow">Access route</div><strong>Auto</strong><p class="muted">1 direct &middot; 1 Portkey</p></div>
695
+ <div class="actions"><button class="btn">Use Portkey</button><button class="btn">Prefer Direct</button><button class="btn">Auto</button></div>
696
+ </div>
697
+ </div>
698
+ <div class="connection">
699
+ <div class="eyebrow">Connections</div>
700
+ <div class="connection-row"><strong>Anthropic direct</strong> <span class="chip">Direct</span><p class="muted">Credential set &middot; provider API &middot; 42 models</p><div class="actions" style="justify-content:flex-start"><button class="btn">Test</button><button class="btn">Re-scan</button></div></div>
701
+ <div class="connection-row"><strong>Anthropic via Portkey</strong> <span class="chip">Portkey</span><p class="muted">Gateway route &middot; 38 models</p><div class="actions" style="justify-content:flex-start"><button class="btn">Test</button><button class="btn">Re-scan</button><button class="btn danger">Remove</button></div></div>
702
+ </div>
703
+ </article>
704
+
705
+ <article class="card provider-card openai">
706
+ <div class="row">
707
+ <div>
708
+ <div class="provider-title"><span class="dot"></span>OpenAI</div>
709
+ <p class="subtitle">175 models &middot; 3 routes &middot; CTM default</p>
710
+ </div>
711
+ <span class="status ok">Active</span>
712
+ </div>
713
+ <div class="mini-grid">
714
+ <div class="mini"><div class="eyebrow">Cost range</div><strong>$0.05 - $150.00</strong></div>
715
+ <div class="mini"><div class="eyebrow">Capabilities</div><div class="chips"><span class="chip">chat</span><span class="chip">code</span><span class="chip">tools</span></div></div>
716
+ </div>
717
+ <div class="route">
718
+ <div class="row">
719
+ <div><div class="eyebrow">Access route</div><strong>Prefer Direct</strong><p class="muted">2 direct &middot; 1 Portkey</p></div>
720
+ <div class="actions"><button class="btn">Use Portkey</button><button class="btn">Prefer Direct</button><button class="btn">Auto</button></div>
721
+ </div>
722
+ </div>
723
+ <div class="connection">
724
+ <div class="eyebrow">Connections</div>
725
+ <div class="connection-row"><strong>OpenAI direct</strong> <span class="chip">Direct</span><p class="muted">Credential set &middot; provider API &middot; 108 models</p><div class="actions" style="justify-content:flex-start"><button class="btn">Test</button><button class="btn">Re-scan</button><button class="btn danger">Remove</button></div></div>
726
+ </div>
727
+ </article>
728
+
729
+ <article class="card provider-card fireworks">
730
+ <div class="row">
731
+ <div>
732
+ <div class="provider-title"><span class="dot blue"></span>Fireworks AI</div>
733
+ <p class="subtitle">27 models &middot; Portkey-only</p>
734
+ </div>
735
+ <span class="status ok">Active</span>
736
+ </div>
737
+ <div class="mini-grid">
738
+ <div class="mini"><div class="eyebrow">Cost range</div><strong>Catalog pricing</strong></div>
739
+ <div class="mini"><div class="eyebrow">Capabilities</div><div class="chips"><span class="chip">chat</span><span class="chip">code</span></div></div>
740
+ </div>
741
+ <div class="route">
742
+ <div><div class="eyebrow">Access route</div><strong>Portkey only</strong><p class="muted">No direct CTM provider configured.</p></div>
743
+ </div>
744
+ <div class="connection">
745
+ <div class="eyebrow">Connections</div>
746
+ <div class="connection-row"><strong>Fireworks via Portkey catalog</strong> <span class="chip">Portkey</span><p class="muted">Gateway route &middot; 27 models</p><div class="actions" style="justify-content:flex-start"><button class="btn">Test</button><button class="btn">Re-scan</button></div></div>
747
+ </div>
748
+ </article>
749
+ </div>
750
+ </section>
751
+
752
+ <section class="section">
753
+ <div class="section-head">
754
+ <div>
755
+ <h2>Model Operations</h2>
756
+ <p class="subtitle">Shadow Training, Tier Assignments, and Scorecard remain on AI Providers as model operations.</p>
757
+ </div>
758
+ </div>
759
+ <div class="ops">
760
+ <article class="card ops-card">
761
+ <div class="row"><h3>Shadow Training</h3><span class="status ok">Enabled</span></div>
762
+ <p class="subtitle">Collects comparison/evaluation data from eligible routes.</p>
763
+ <div class="chips"><span class="chip">1,248 results</span><span class="chip">82% evaluated</span><span class="chip">avg 0.74</span></div>
764
+ <div class="actions" style="justify-content:flex-start;margin-top:14px"><button class="btn">Configure</button><button class="btn">Review samples</button></div>
765
+ </article>
766
+ <article class="card ops-card">
767
+ <div class="row"><h3>Tier Assignments</h3><span class="status warn">2 unset</span></div>
768
+ <p class="subtitle">Maps fast/default/premium tasks to provider routes.</p>
769
+ <div class="chips"><span class="chip">Fast: OpenAI mini</span><span class="chip">Default: Sonnet</span><span class="chip">Premium: GPT-5.5</span></div>
770
+ <div class="actions" style="justify-content:flex-start;margin-top:14px"><button class="btn">Edit tiers</button></div>
771
+ </article>
772
+ <article class="card ops-card">
773
+ <div class="row"><h3>Scorecard</h3><span class="status ok">7d</span></div>
774
+ <p class="subtitle">Quality, latency, cost, evals, and benchmark coverage.</p>
775
+ <div class="chips"><span class="chip">OpenAI 91</span><span class="chip">Anthropic 89</span><span class="chip">Gemini 83</span></div>
776
+ <div class="actions" style="justify-content:flex-start;margin-top:14px"><button class="btn">7d</button><button class="btn">30d</button><button class="btn">All</button></div>
777
+ </article>
778
+ </div>
779
+ </section>
780
+
781
+ <section class="section">
782
+ <div class="section-head">
783
+ <div>
784
+ <h2>Model Catalog</h2>
785
+ <p class="subtitle">Collapsed/searchable inventory for pricing, capabilities, source, verification, and duplicate routes.</p>
786
+ </div>
787
+ <button class="btn">Expand catalog</button>
788
+ </div>
789
+ <div class="table" aria-label="Model catalog mock">
790
+ <div>Model</div><div>Provider</div><div>Route</div><div>Status</div>
791
+ <div>claude-sonnet-4.5</div><div>Anthropic</div><div>Direct</div><div>Verified</div>
792
+ <div>@anthropic/claude-sonnet-4.5</div><div>Anthropic</div><div>Portkey</div><div>Gateway</div>
793
+ <div>@fireworks-ai/qwen3-coder</div><div>Fireworks AI</div><div>Portkey</div><div>Catalog</div>
794
+ </div>
795
+ </section>
796
+
797
+ <section class="section">
798
+ <div class="section-head">
799
+ <div>
800
+ <h2>Settings Summary Mock</h2>
801
+ <p class="subtitle">The gear keeps a consistent Settings UI: summary card, no duplicate provider editor.</p>
802
+ </div>
803
+ </div>
804
+ <div class="settings-mock">
805
+ <aside class="settings-nav" aria-label="Settings tabs mock">
806
+ <div>General</div>
807
+ <div class="active">AI</div>
808
+ <div>Integrations</div>
809
+ <div>Access</div>
810
+ <div>Advanced</div>
811
+ </aside>
812
+ <article class="card">
813
+ <div class="row">
814
+ <div>
815
+ <h3>AI summary</h3>
816
+ <p class="subtitle">Read-only overview of the same AI Providers state.</p>
817
+ </div>
818
+ <button class="btn primary">Open AI Providers</button>
819
+ </div>
820
+ <div class="defaults-grid">
821
+ <div class="default-tile"><div class="eyebrow">CTM jobs</div><strong>OpenAI &middot; Direct</strong></div>
822
+ <div class="default-tile"><div class="eyebrow">Wall-E jobs</div><strong>Anthropic &middot; Auto</strong></div>
823
+ <div class="default-tile"><div class="eyebrow">Health</div><strong>5 ok &middot; 1 warning</strong></div>
824
+ </div>
825
+ </article>
826
+ </div>
827
+ </section>
828
+ </main>
829
+ </body>
830
+ </html>