@aiworker/web 1.22.0 → 1.23.0

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 (415) hide show
  1. package/README.md +4 -4
  2. package/bin/cli.js +14 -4
  3. package/bin/cli.test.js +165 -73
  4. package/bin/lib/cli-api-target.js +2 -2
  5. package/bin/lib/cli-args.js +119 -119
  6. package/bin/lib/cli-lifecycle.js +9 -9
  7. package/bin/lib/cli-network.js +3 -3
  8. package/bin/lib/cli-paths.js +3 -3
  9. package/bin/lib/cli-ports.js +2 -2
  10. package/bin/lib/cli-process.js +4 -4
  11. package/bin/lib/cli-startup.js +64 -15
  12. package/bin/lib/cli-tunnel-profiles.js +1 -1
  13. package/bin/lib/cli-tunnel-utils.js +2 -2
  14. package/bin/lib/commands-connect-url.js +19 -19
  15. package/bin/lib/commands-lifecycle.js +27 -27
  16. package/bin/lib/commands-logs.js +5 -5
  17. package/bin/lib/commands-models.js +1 -1
  18. package/bin/lib/commands-projects.js +1 -1
  19. package/bin/lib/commands-schedule.js +1 -1
  20. package/bin/lib/commands-serve.js +29 -29
  21. package/bin/lib/commands-session.js +1 -1
  22. package/bin/lib/commands-startup.js +45 -10
  23. package/bin/lib/commands-status.js +1 -1
  24. package/bin/lib/commands-tunnel.js +40 -40
  25. package/bin/lib/commands-update.js +1 -1
  26. package/bin/lib/commands-update.test.js +6 -6
  27. package/dist/assets/{CodeMirrorCommentWidgets-B3u7UIcE.js → CodeMirrorCommentWidgets-B1Gizi3a.js} +1 -1
  28. package/dist/assets/DiffView-DXjVsEOw.js +4 -0
  29. package/dist/assets/DirtyBranchSwitchDialog-aig6zJjg.js +1 -0
  30. package/dist/assets/FilesView-CJdG0-wk.js +17 -0
  31. package/dist/assets/GitView-BXsS3jG6.js +6 -0
  32. package/dist/assets/{JsonTreeView-B0BdZEHG.js → JsonTreeView-D_hpXBnF.js} +1 -1
  33. package/dist/assets/LinearIssuesView-BoUiLQG1.js +1 -0
  34. package/dist/assets/MarkdownImageGallery-B_B_a9KS.js +1 -0
  35. package/dist/assets/MarkdownRendererImpl-xgyyLiBM.js +12 -0
  36. package/dist/assets/OnboardingScreen-DIp84OWt.js +1 -0
  37. package/dist/assets/{PatchDiff-DvfqDql7.js → PatchDiff-8p6nLJaU.js} +1 -1
  38. package/dist/assets/PierreDiffViewer-DjC8nTk9.js +161 -0
  39. package/dist/assets/PlanView-CJTmOF6I.js +5 -0
  40. package/dist/assets/SettingsView-DD-JqIJx.js +28 -0
  41. package/dist/assets/{SettingsWindow-i45U1Cy1.js → SettingsWindow-Cpb4hM6q.js} +1 -1
  42. package/dist/assets/SymbolsNerdFontMono-Regular-aK5vsLov.woff2 +0 -0
  43. package/dist/assets/{ToolOutputDialog-BTwyh5OF.js → ToolOutputDialog-DfaKZXNU.js} +6 -6
  44. package/dist/assets/ToolPartDiffPreview-DtZLzrSK.js +8 -0
  45. package/dist/assets/{VirtualizedFileDiff-DD8lDVej.js → VirtualizedFileDiff-C8i9HpTB.js} +1 -1
  46. package/dist/assets/WalkthroughView-DeKMvZlL.js +4 -0
  47. package/dist/assets/{computeVirtualFileMetrics-BMIRgMHv.js → computeVirtualFileMetrics-BBI7ZwrC.js} +2 -2
  48. package/dist/assets/contextPanelEmbeddedChat-BdA6bdky.js +1 -0
  49. package/dist/assets/de-DCrsQ5zS.js +10 -0
  50. package/dist/assets/es-Dwv4YfH6.js +16 -0
  51. package/dist/assets/fr-BCWg4Cnx.js +14 -0
  52. package/dist/assets/ghostty-vt-DdA0Zryv.wasm +0 -0
  53. package/dist/assets/index-B68h5S5B.css +1 -0
  54. package/dist/assets/index-DVwMarHI.js +39 -0
  55. package/dist/assets/{index-CODwDsU_.js → index-jXSK5RrB.js} +1 -1
  56. package/dist/assets/{isDiffPlainText-BqayB8d3.js → isDiffPlainText-B_x_rVon.js} +1 -1
  57. package/dist/assets/{isFilePlainText-QfoiKJNY.js → isFilePlainText-DW_xMer1.js} +1 -1
  58. package/dist/assets/ja-Bruw3RYC.js +16 -0
  59. package/dist/assets/ko-idhXGF8j.js +16 -0
  60. package/dist/assets/main-BkyaQhJX.js +930 -0
  61. package/dist/assets/{main-C5DVOxc6.js → main-CzdPuL0s.js} +2 -2
  62. package/dist/assets/markdownCore-Cn4Tyejo.js +5 -0
  63. package/dist/assets/{miniChat-DUJ4irZc.js → miniChat-CCkqKOLp.js} +2 -2
  64. package/dist/assets/{mobile-CcaxB0n4.js → mobile-mvxTo055.js} +2 -2
  65. package/dist/assets/patchFileDiff-Csk4iNUi.js +13 -0
  66. package/dist/assets/pl-CGZWUqZJ.js +16 -0
  67. package/dist/assets/pt-BR-B8V7u7tA.js +16 -0
  68. package/dist/assets/renderElectronMiniChatApp-BxoyujA5.js +2 -0
  69. package/dist/assets/renderMobileApp-B48CsP4r.js +25 -0
  70. package/dist/assets/runtimeEndpointReset-Bg5gx18H.js +17 -0
  71. package/dist/assets/scheduledTasksApi-BW0Etzwz.js +1 -0
  72. package/dist/assets/{shikiHighlight-DYOWuY65.js → shikiHighlight-CRl0SUC9.js} +1 -1
  73. package/dist/assets/surface-oMvhsog3.js +1 -0
  74. package/dist/assets/tr-BK_KiO2V.js +7 -0
  75. package/dist/assets/uk-CG74xV8N.js +16 -0
  76. package/dist/assets/useAppFontEffects-CPKeOpUo.js +7284 -0
  77. package/dist/assets/useGitComparison-DH220WmO.js +1 -0
  78. package/dist/assets/useInlineCommentController-BiWz4AVb.js +2 -0
  79. package/dist/assets/useRootScrollLock-BS4-kr7P.js +1 -0
  80. package/dist/assets/{vendor-base-ui-BeMD8X_w.js → vendor-base-ui-DdV8vhHn.js} +1 -1
  81. package/dist/assets/{vendor-codemirror-language-data-DFZik9R2.js → vendor-codemirror-language-data-Bg4AEeCr.js} +2 -2
  82. package/dist/assets/vendor-zod-BPAANqvH.js +39 -0
  83. package/dist/assets/{web-components-Bhg83tjf.js → web-components-z7hfnS8n.js} +1 -1
  84. package/dist/assets/zh-CN-T4AXofZI.js +16 -0
  85. package/dist/assets/zh-TW-Dte40sxp.js +16 -0
  86. package/dist/index.html +21 -59
  87. package/dist/mini-chat.html +7 -7
  88. package/dist/mobile.html +5 -5
  89. package/package.json +3 -4
  90. package/server/index.d.ts +15 -0
  91. package/server/index.js +158 -89
  92. package/server/lib/agent-memory/actions.js +2 -2
  93. package/server/lib/agent-memory/feature-flag.js +1 -1
  94. package/server/lib/agent-memory/feature-flag.test.js +8 -8
  95. package/server/lib/agent-memory/routes.js +2 -2
  96. package/server/lib/agent-tool/runtime.js +37 -54
  97. package/server/lib/agent-tool/runtime.test.js +59 -59
  98. package/server/lib/browser-control/broker.js +3 -3
  99. package/server/lib/browser-control/broker.test.js +1 -1
  100. package/server/lib/changelog/update-notes.js +82 -0
  101. package/server/lib/changelog/update-notes.test.js +59 -0
  102. package/server/lib/client-auth/remote-clients.test.js +5 -5
  103. package/server/lib/context-obligatory/runtime.js +7 -7
  104. package/server/lib/context-obligatory/runtime.test.js +5 -5
  105. package/server/lib/data-dir-migration.js +40 -0
  106. package/server/lib/data-dir-migration.test.js +59 -0
  107. package/server/lib/dev-servers/parse.js +2 -2
  108. package/server/lib/dev-servers/parse.test.js +2 -2
  109. package/server/lib/dev-servers/routes.js +1 -1
  110. package/server/lib/dev-tunnel/DOCUMENTATION.md +13 -4
  111. package/server/lib/dev-tunnel/client.js +1 -1
  112. package/server/lib/dev-tunnel/runtime.js +5 -5
  113. package/server/lib/dev-tunnel/tunnel.test.js +21 -1
  114. package/server/lib/dictation/local/model-catalog.js +1 -1
  115. package/server/lib/dictation/local/worker-process.js +2 -2
  116. package/server/lib/event-stream/directory-ws-bridge.js +1 -1
  117. package/server/lib/event-stream/global-ws-bridge.js +1 -1
  118. package/server/lib/event-stream/protocol.test.js +4 -4
  119. package/server/lib/event-stream/runtime.test.js +18 -18
  120. package/server/lib/fs/DOCUMENTATION.md +5 -0
  121. package/server/lib/fs/routes.js +68 -26
  122. package/server/lib/fs/routes.test.js +208 -22
  123. package/server/lib/git/DOCUMENTATION.md +32 -6
  124. package/server/lib/git/identity-storage.js +1 -1
  125. package/server/lib/git/issue-2746-longpaths.test.js +4 -4
  126. package/server/lib/git/routes.js +41 -5
  127. package/server/lib/git/service.js +300 -224
  128. package/server/lib/git/service.test.js +596 -28
  129. package/server/lib/github/auth.js +8 -8
  130. package/server/lib/github/pr-status.js +1 -1
  131. package/server/lib/github/routes.js +2 -2
  132. package/server/lib/inherited-env.js +17 -10
  133. package/server/lib/inherited-env.test.js +10 -11
  134. package/server/lib/linear/auth.js +8 -8
  135. package/server/lib/linear/auth.test.js +24 -24
  136. package/server/lib/linear/issues.test.js +6 -6
  137. package/server/lib/linear/mapping.test.js +4 -4
  138. package/server/lib/linear/oauth.js +2 -2
  139. package/server/lib/linear/oauth.test.js +14 -14
  140. package/server/lib/linear/routes.js +5 -5
  141. package/server/lib/linear/routes.test.js +16 -16
  142. package/server/lib/linear/status-runtime.test.js +9 -9
  143. package/server/lib/linear/status.js +1 -1
  144. package/server/lib/linear/status.test.js +15 -15
  145. package/server/lib/linear/teams.test.js +4 -4
  146. package/server/lib/magic-prompts/routes.js +2 -2
  147. package/server/lib/mcp-reconnect/DOCUMENTATION.md +55 -0
  148. package/server/lib/mcp-reconnect/runtime.js +122 -0
  149. package/server/lib/mcp-reconnect/runtime.test.js +140 -0
  150. package/server/lib/message-queue/DOCUMENTATION.md +161 -0
  151. package/server/lib/message-queue/runtime.js +870 -0
  152. package/server/lib/message-queue/runtime.test.js +482 -0
  153. package/server/lib/network-defaults.js +23 -0
  154. package/server/lib/network-defaults.test.js +52 -0
  155. package/server/lib/notifications/apns-runtime.js +17 -17
  156. package/server/lib/notifications/apns-runtime.test.js +11 -11
  157. package/server/lib/notifications/emitter-runtime.js +1 -1
  158. package/server/lib/notifications/emitter-runtime.test.js +1 -1
  159. package/server/lib/notifications/push-runtime.js +7 -7
  160. package/server/lib/notifications/routes.js +1 -1
  161. package/server/lib/notifications/runtime.js +1 -1
  162. package/server/lib/openchamber-control/action-resolution.test.js +10 -10
  163. package/server/lib/openchamber-control/actions.js +24 -24
  164. package/server/lib/openchamber-control/error.js +4 -4
  165. package/server/lib/openchamber-control/routes.js +2 -2
  166. package/server/lib/openchamber-control/routes.test.js +5 -5
  167. package/server/lib/openchamber-control/screenshots.js +1 -1
  168. package/server/lib/openchamber-control/screenshots.test.js +1 -1
  169. package/server/lib/openchamber-control/service.js +50 -50
  170. package/server/lib/openchamber-control/service.test.js +5 -5
  171. package/server/lib/openchamber-sessions/routes.js +124 -22
  172. package/server/lib/openchamber-sessions/routes.test.js +99 -11
  173. package/server/lib/opencode/DOCUMENTATION.md +30 -6
  174. package/server/lib/opencode/auth.js +1 -1
  175. package/server/lib/opencode/bootstrap-runtime.js +8 -6
  176. package/server/lib/opencode/cli-options.js +8 -8
  177. package/server/lib/opencode/config-paths.test.js +116 -0
  178. package/server/lib/opencode/core-routes.js +8 -7
  179. package/server/lib/opencode/core-routes.test.js +11 -11
  180. package/server/lib/opencode/env-config.js +5 -5
  181. package/server/lib/opencode/env-config.test.js +7 -7
  182. package/server/lib/opencode/env-runtime.js +10 -10
  183. package/server/lib/opencode/env-runtime.test.js +18 -18
  184. package/server/lib/opencode/feature-routes-runtime.js +19 -12
  185. package/server/lib/opencode/hmr-state-runtime.js +2 -2
  186. package/server/lib/opencode/hmr-state-runtime.test.js +1 -1
  187. package/server/lib/opencode/input-history-scope.js +14 -0
  188. package/server/lib/opencode/lifecycle.js +8 -8
  189. package/server/lib/opencode/lifecycle.test.js +4 -4
  190. package/server/lib/opencode/managed-plugin-config.js +35 -0
  191. package/server/lib/opencode/managed-process-registry.js +3 -3
  192. package/server/lib/opencode/mcp-oauth-callback.test.js +2 -2
  193. package/server/lib/opencode/openchamber-routes.js +79 -19
  194. package/server/lib/opencode/openchamber-routes.test.js +139 -12
  195. package/server/lib/opencode/plugins.js +2 -2
  196. package/server/lib/opencode/plugins.test.js +1 -1
  197. package/server/lib/opencode/project-icon-routes.js +2 -2
  198. package/server/lib/opencode/project-icon-routes.test.js +1 -1
  199. package/server/lib/opencode/providers.js +44 -2
  200. package/server/lib/opencode/providers.test.js +131 -4
  201. package/server/lib/opencode/proxy.js +2 -2
  202. package/server/lib/opencode/pwa-manifest-routes.js +1 -1
  203. package/server/lib/opencode/restart-session-recovery.test.js +1 -1
  204. package/server/lib/opencode/routes-upgrade.test.js +4 -4
  205. package/server/lib/opencode/routes.js +19 -17
  206. package/server/lib/opencode/server-startup-runtime.js +6 -6
  207. package/server/lib/opencode/session-runtime.js +3 -3
  208. package/server/lib/opencode/session-runtime.test.js +6 -6
  209. package/server/lib/opencode/settings-files.js +214 -0
  210. package/server/lib/opencode/settings-helpers.js +116 -44
  211. package/server/lib/opencode/settings-helpers.test.js +354 -12
  212. package/server/lib/opencode/settings-registry.json +747 -0
  213. package/server/lib/opencode/settings-runtime.js +141 -20
  214. package/server/lib/opencode/settings-runtime.test.js +191 -4
  215. package/server/lib/opencode/shared.js +5 -2
  216. package/server/lib/opencode/shared.test.js +7 -7
  217. package/server/lib/opencode/shutdown-runtime.js +2 -0
  218. package/server/lib/opencode/skill-routes.js +2 -1
  219. package/server/lib/opencode/snippets.js +1 -2
  220. package/server/lib/opencode/startup-performance.js +1 -1
  221. package/server/lib/opencode/startup-performance.test.js +6 -6
  222. package/server/lib/opencode/static-routes-runtime.js +8 -8
  223. package/server/lib/opencode/static-routes-runtime.test.js +7 -7
  224. package/server/lib/opencode/upgrade-capability.js +2 -2
  225. package/server/lib/opencode/upgrade-capability.test.js +3 -3
  226. package/server/lib/package-manager.js +17 -42
  227. package/server/lib/package-manager.test.js +19 -19
  228. package/server/lib/permission-auto-accept/runtime.js +1 -1
  229. package/server/lib/project-context/DOCUMENTATION.md +25 -1
  230. package/server/lib/project-context/routes.http.test.js +18 -0
  231. package/server/lib/project-context/routes.js +16 -1
  232. package/server/lib/project-context/runtime.js +248 -23
  233. package/server/lib/project-context/runtime.test.js +106 -3
  234. package/server/lib/projects/DOCUMENTATION.md +76 -0
  235. package/server/lib/projects/project-config.js +144 -11
  236. package/server/lib/projects/project-id.js +17 -0
  237. package/server/lib/projects/project-setup.js +409 -0
  238. package/server/lib/projects/project-setup.test.js +557 -0
  239. package/server/lib/projects/routes.js +59 -0
  240. package/server/lib/quota/DOCUMENTATION.md +40 -2
  241. package/server/lib/quota/credentials/providers.js +4 -0
  242. package/server/lib/quota/credentials/store.js +4 -4
  243. package/server/lib/quota/credentials/store.test.js +8 -8
  244. package/server/lib/quota/index.js +1 -0
  245. package/server/lib/quota/providers/cline-pass.js +125 -0
  246. package/server/lib/quota/providers/cline-pass.test.js +103 -0
  247. package/server/lib/quota/providers/exe-dev.js +75 -0
  248. package/server/lib/quota/providers/exe-dev.test.js +47 -0
  249. package/server/lib/quota/providers/hyper.js +118 -0
  250. package/server/lib/quota/providers/hyper.test.js +126 -0
  251. package/server/lib/quota/providers/index.js +22 -0
  252. package/server/lib/quota/providers/neuralwatt.js +3 -6
  253. package/server/lib/quota/providers/neuralwatt.test.js +7 -7
  254. package/server/lib/quota/providers/ollama-cloud.js +32 -1
  255. package/server/lib/quota/providers/ollama-cloud.test.js +33 -1
  256. package/server/lib/quota/providers/opencode-go.js +3 -2
  257. package/server/lib/quota/providers/opencode-go.test.js +35 -6
  258. package/server/lib/quota/providers/openrouter.js +119 -24
  259. package/server/lib/quota/providers/openrouter.test.js +330 -0
  260. package/server/lib/quota/providers/xai.js +1 -1
  261. package/server/lib/quota/routes.js +2 -0
  262. package/server/lib/quota/utils/auth.js +1 -1
  263. package/server/lib/relay/DOCUMENTATION.md +56 -1
  264. package/server/lib/relay/cross-compat.test.js +26 -0
  265. package/server/lib/relay/downstream-scheduler.js +154 -0
  266. package/server/lib/relay/downstream-scheduler.test.js +162 -0
  267. package/server/lib/relay/e2ee.js +10 -8
  268. package/server/lib/relay/flow-control.test.js +177 -0
  269. package/server/lib/relay/host-client.js +38 -9
  270. package/server/lib/relay/host-client.test.js +9 -1
  271. package/server/lib/relay/host-lock.js +1 -1
  272. package/server/lib/relay/service.js +5 -5
  273. package/server/lib/relay/tunnel-codec.js +9 -0
  274. package/server/lib/relay/tunnel-host.js +69 -18
  275. package/server/lib/relay/tunnel-host.test.js +9 -1
  276. package/server/lib/scheduled-tasks/issue-2710-double-execution.test.js +2 -2
  277. package/server/lib/scheduled-tasks/routes.js +5 -5
  278. package/server/lib/scheduled-tasks/service.js +25 -25
  279. package/server/lib/scheduled-tasks/service.test.js +1 -1
  280. package/server/lib/security/bind-host.js +4 -4
  281. package/server/lib/security/bind-host.test.js +1 -1
  282. package/server/lib/security/request-security.js +11 -5
  283. package/server/lib/security/request-security.test.js +14 -14
  284. package/server/lib/session-assist/runtime.js +15 -18
  285. package/server/lib/session-folders/routes.js +2 -2
  286. package/server/lib/session-folders/routes.test.js +8 -8
  287. package/server/lib/session-goal/DOCUMENTATION.md +20 -7
  288. package/server/lib/session-goal/create.js +4 -2
  289. package/server/lib/session-goal/create.test.js +1 -1
  290. package/server/lib/session-goal/objectives.js +4 -4
  291. package/server/lib/session-goal/routes.js +1 -1
  292. package/server/lib/session-goal/runtime.js +91 -30
  293. package/server/lib/session-goal/runtime.test.js +428 -2
  294. package/server/lib/session-knowledge/runtime.js +11 -11
  295. package/server/lib/session-knowledge/runtime.test.js +5 -5
  296. package/server/lib/skills-catalog/DOCUMENTATION.md +1 -1
  297. package/server/lib/skills-catalog/cache.test.js +2 -2
  298. package/server/lib/skills-catalog/disk-cache.js +5 -5
  299. package/server/lib/skills-catalog/github-meta.test.js +2 -2
  300. package/server/lib/skills-catalog/install.js +3 -2
  301. package/server/lib/small-model/DOCUMENTATION.md +7 -2
  302. package/server/lib/small-model/call.js +18 -7
  303. package/server/lib/small-model/call.test.js +58 -6
  304. package/server/lib/small-model/index.js +12 -16
  305. package/server/lib/small-model/index.test.js +1 -1
  306. package/server/lib/small-model/resolve.js +1 -1
  307. package/server/lib/small-model/resolve.test.js +1 -1
  308. package/server/lib/small-model/routes.js +2 -1
  309. package/server/lib/small-model/runtime-providers.js +15 -7
  310. package/server/lib/small-model/runtime-providers.test.js +7 -1
  311. package/server/lib/system-prompt/runtime.js +3 -22
  312. package/server/lib/system-prompt/runtime.test.js +3 -3
  313. package/server/lib/terminal/DOCUMENTATION.md +14 -10
  314. package/server/lib/terminal/runtime.js +190 -31
  315. package/server/lib/terminal/runtime.test.js +572 -38
  316. package/server/lib/terminal/shells.js +20 -3
  317. package/server/lib/terminal/shells.test.js +33 -2
  318. package/server/lib/tts/base-url.js +3 -3
  319. package/server/lib/tts/routes.test.js +20 -20
  320. package/server/lib/ui-auth/ui-auth.js +12 -9
  321. package/server/lib/ui-auth/ui-auth.test.js +19 -3
  322. package/server/lib/ui-auth/ui-passkeys.js +7 -7
  323. package/server/lib/walkthrough/DOCUMENTATION.md +33 -14
  324. package/server/lib/walkthrough/index.js +1 -0
  325. package/server/lib/walkthrough/jobs.test.js +1 -1
  326. package/server/lib/walkthrough/language.test.js +1 -1
  327. package/server/lib/walkthrough/model-settings.js +11 -15
  328. package/server/lib/walkthrough/model-settings.test.js +1 -1
  329. package/server/lib/walkthrough/prompt.js +3 -1
  330. package/server/lib/walkthrough/pull-request.test.js +5 -5
  331. package/server/lib/walkthrough/reproduce-2607.test.js +2 -2
  332. package/server/lib/walkthrough/routes.test.js +26 -5
  333. package/server/lib/walkthrough/sources.js +23 -2
  334. package/server/lib/walkthrough/store.js +3 -3
  335. package/server/lib/walkthrough/store.test.js +1 -1
  336. package/server/opencode-proxy.test.js +2 -2
  337. package/server/proxy-headers.js +1 -1
  338. package/server/sse-routes.test.js +4 -4
  339. package/README.md.bak +0 -250
  340. package/bin/lib/DOCUMENTATION.md.bak +0 -163
  341. package/dist/assets/CommitSection-SGBCAW0w.js +0 -1
  342. package/dist/assets/DiffView-DluiRSla.js +0 -4
  343. package/dist/assets/FilesView-Bdq8ppva.js +0 -17
  344. package/dist/assets/GitView-Znn7VJcP.js +0 -6
  345. package/dist/assets/LinearIssuesView-jP-hXyac.js +0 -1
  346. package/dist/assets/MarkdownImageGallery-ClOvuZxC.js +0 -1
  347. package/dist/assets/MarkdownRendererImpl-Dt9mjTRN.js +0 -12
  348. package/dist/assets/OnboardingScreen-D2DG7K6b.js +0 -1
  349. package/dist/assets/PierreDiffViewer-B7m3f0d7.js +0 -157
  350. package/dist/assets/PlanView-B0F3BtPZ.js +0 -5
  351. package/dist/assets/SettingsView-BBW-S-gh.js +0 -28
  352. package/dist/assets/ToolPartDiffPreview-CUNe28U1.js +0 -8
  353. package/dist/assets/WalkthroughView-egQgxel3.js +0 -4
  354. package/dist/assets/contextPanelEmbeddedChat-C3fjDbdg.js +0 -1
  355. package/dist/assets/de-C1P6X5Rs.js +0 -9
  356. package/dist/assets/es-CDgaF1_t.js +0 -15
  357. package/dist/assets/fr-Bgxqvvz_.js +0 -13
  358. package/dist/assets/index-C57jT0Sa.css +0 -1
  359. package/dist/assets/index-DW_E3rnL.js +0 -7
  360. package/dist/assets/ja-BDRrEcNP.js +0 -15
  361. package/dist/assets/ko-Ba8sQV79.js +0 -15
  362. package/dist/assets/main-Bv5Pkngh.js +0 -928
  363. package/dist/assets/markdownCore-CZwzz5gw.js +0 -3
  364. package/dist/assets/patchFileDiff-yNfWXN4E.js +0 -10
  365. package/dist/assets/pl-Dioz29BI.js +0 -15
  366. package/dist/assets/pt-BR-DIs6ElwV.js +0 -15
  367. package/dist/assets/renderElectronMiniChatApp-BcKLHXKe.js +0 -2
  368. package/dist/assets/renderMobileApp-D9yQJy0L.js +0 -25
  369. package/dist/assets/runtimeEndpointReset-CjhvxLH0.js +0 -16
  370. package/dist/assets/scheduledTasksApi-DLW0mkQK.js +0 -1
  371. package/dist/assets/tr-DFnMlPxY.js +0 -6
  372. package/dist/assets/uk-ZrCNjM7Y.js +0 -15
  373. package/dist/assets/useAppFontEffects-CjrntdL0.js +0 -7310
  374. package/dist/assets/useInlineCommentController-CDEuSlPH.js +0 -2
  375. package/dist/assets/useRootScrollLock-BHYPkrLv.js +0 -1
  376. package/dist/assets/vendor-ghostty-web-CrxinGGH.js +0 -13
  377. package/dist/assets/vendor-zod-BLfBSgBh.js +0 -39
  378. package/dist/assets/zh-CN-iv_AV4EC.js +0 -15
  379. package/dist/assets/zh-TW-CzEUk38j.js +0 -15
  380. package/server/index.d.ts.bak +0 -39
  381. package/server/lib/agent-tool/DOCUMENTATION.md.bak +0 -119
  382. package/server/lib/browser-control/DOCUMENTATION.md.bak +0 -50
  383. package/server/lib/context-obligatory/DOCUMENTATION.md.bak +0 -19
  384. package/server/lib/dev-tunnel/DOCUMENTATION.md.bak +0 -57
  385. package/server/lib/dictation/DOCUMENTATION.md.bak +0 -100
  386. package/server/lib/event-stream/DOCUMENTATION.md.bak +0 -62
  387. package/server/lib/fs/DOCUMENTATION.md.bak +0 -47
  388. package/server/lib/git/DOCUMENTATION.md.bak +0 -193
  389. package/server/lib/github/DOCUMENTATION.md.bak +0 -183
  390. package/server/lib/linear/DOCUMENTATION.md.bak +0 -97
  391. package/server/lib/linear/OAUTH-BROKER-HANDOFF.md.bak +0 -91
  392. package/server/lib/markdown-image-grants/DOCUMENTATION.md.bak +0 -40
  393. package/server/lib/notifications/APNS.md.bak +0 -135
  394. package/server/lib/notifications/DOCUMENTATION.md.bak +0 -138
  395. package/server/lib/openchamber-control/DOCUMENTATION.md.bak +0 -64
  396. package/server/lib/opencode/DOCUMENTATION.md.bak +0 -431
  397. package/server/lib/opencode/managed-process-registry.d.ts.bak +0 -13
  398. package/server/lib/opencode/provider-env-aliases.d.ts.bak +0 -3
  399. package/server/lib/permission-auto-accept/DOCUMENTATION.md.bak +0 -34
  400. package/server/lib/project-context/DOCUMENTATION.md.bak +0 -160
  401. package/server/lib/quota/DOCUMENTATION.md.bak +0 -123
  402. package/server/lib/relay/DOCUMENTATION.md.bak +0 -100
  403. package/server/lib/scheduled-tasks/DOCUMENTATION.md.bak +0 -182
  404. package/server/lib/session-assist/DOCUMENTATION.md.bak +0 -66
  405. package/server/lib/session-goal/DOCUMENTATION.md.bak +0 -213
  406. package/server/lib/session-knowledge/DOCUMENTATION.md.bak +0 -89
  407. package/server/lib/skills-catalog/DOCUMENTATION.md.bak +0 -151
  408. package/server/lib/small-model/DOCUMENTATION.md.bak +0 -212
  409. package/server/lib/system-prompt/DOCUMENTATION.md.bak +0 -36
  410. package/server/lib/terminal/DOCUMENTATION.md.bak +0 -50
  411. package/server/lib/text/DOCUMENTATION.md.bak +0 -35
  412. package/server/lib/tts/DOCUMENTATION.md.bak +0 -147
  413. package/server/lib/tunnels/DOCUMENTATION.md.bak +0 -21
  414. package/server/lib/ui-auth/DOCUMENTATION.md.bak +0 -44
  415. package/server/lib/walkthrough/DOCUMENTATION.md.bak +0 -411
@@ -6,7 +6,7 @@ import { createApnsRuntime } from './apns-runtime.js';
6
6
  // A real P-256 key so the ES256 signing path (direct mode) runs for real.
7
7
  const { privateKey } = crypto.generateKeyPairSync('ec', { namedCurve: 'P-256' });
8
8
  const P8 = privateKey.export({ type: 'pkcs8', format: 'pem' }).toString();
9
- const APNS_CONFIG = { keyId: 'KEY123', teamId: 'TEAM123', p8: P8, bundleId: 'com.openchamber.app', environment: 'sandbox' };
9
+ const APNS_CONFIG = { keyId: 'KEY123', teamId: 'TEAM123', p8: P8, bundleId: 'com.aiworker.app', environment: 'sandbox' };
10
10
 
11
11
  // In-memory fs so add-then-read reflects within a test.
12
12
  const createMemoryFs = () => {
@@ -67,9 +67,9 @@ const isSend = ([url]) => String(url) === 'https://relay.test/v1/push/send';
67
67
 
68
68
  afterEach(() => {
69
69
  vi.unstubAllGlobals();
70
- delete process.env.OPENCHAMBER_PUSH_RELAY_URL;
71
- delete process.env.OPENCHAMBER_PUSH_RELAY_DISABLED;
72
- delete process.env.OPENCHAMBER_APNS_ENVIRONMENT;
70
+ delete process.env.AIWORKER_PUSH_RELAY_URL;
71
+ delete process.env.AIWORKER_PUSH_RELAY_DISABLED;
72
+ delete process.env.AIWORKER_APNS_ENVIRONMENT;
73
73
  });
74
74
 
75
75
  describe('apns runtime relay mode (default)', () => {
@@ -85,7 +85,7 @@ describe('apns runtime relay mode (default)', () => {
85
85
  }),
86
86
  );
87
87
  vi.stubGlobal('fetch', fetchMock);
88
- process.env.OPENCHAMBER_PUSH_RELAY_URL = 'https://relay.test/v1/push/send';
88
+ process.env.AIWORKER_PUSH_RELAY_URL = 'https://relay.test/v1/push/send';
89
89
 
90
90
  const runtime = createApnsRuntime(makeDeps());
91
91
  await runtime.addOrUpdateApnsToken('s1', 'tokenA');
@@ -132,7 +132,7 @@ describe('apns runtime relay mode (default)', () => {
132
132
  it('reuses one persisted keypair (same serverId) across register + send', async () => {
133
133
  const fetchMock = vi.fn(async () => jsonResponse({ ok: true, results: [] }));
134
134
  vi.stubGlobal('fetch', fetchMock);
135
- process.env.OPENCHAMBER_PUSH_RELAY_URL = 'https://relay.test/v1/push/send';
135
+ process.env.AIWORKER_PUSH_RELAY_URL = 'https://relay.test/v1/push/send';
136
136
 
137
137
  const deps = makeDeps();
138
138
  const runtime = createApnsRuntime(deps);
@@ -149,8 +149,8 @@ describe('apns runtime relay mode (default)', () => {
149
149
  it('honors an explicit sandbox environment override for every token', async () => {
150
150
  const fetchMock = vi.fn(async () => jsonResponse({ ok: true, results: [] }));
151
151
  vi.stubGlobal('fetch', fetchMock);
152
- process.env.OPENCHAMBER_PUSH_RELAY_URL = 'https://relay.test/v1/push/send';
153
- process.env.OPENCHAMBER_APNS_ENVIRONMENT = 'sandbox';
152
+ process.env.AIWORKER_PUSH_RELAY_URL = 'https://relay.test/v1/push/send';
153
+ process.env.AIWORKER_APNS_ENVIRONMENT = 'sandbox';
154
154
 
155
155
  const runtime = createApnsRuntime(makeDeps());
156
156
  await runtime.addOrUpdateApnsToken('s1', 'tokenA', undefined, 'ios', 'production');
@@ -163,7 +163,7 @@ describe('apns runtime relay mode (default)', () => {
163
163
  it('routes each token to its registered environment (dev build sandbox, release production)', async () => {
164
164
  const fetchMock = vi.fn(async () => jsonResponse({ ok: true, results: [] }));
165
165
  vi.stubGlobal('fetch', fetchMock);
166
- process.env.OPENCHAMBER_PUSH_RELAY_URL = 'https://relay.test/v1/push/send';
166
+ process.env.AIWORKER_PUSH_RELAY_URL = 'https://relay.test/v1/push/send';
167
167
 
168
168
  const runtime = createApnsRuntime(makeDeps());
169
169
  await runtime.addOrUpdateApnsToken('s1', 'tokenXcode', undefined, 'ios', 'sandbox');
@@ -200,7 +200,7 @@ describe('apns runtime direct fallback (relay disabled)', () => {
200
200
  });
201
201
 
202
202
  it('sends each token to the APNs host of its registered environment', async () => {
203
- process.env.OPENCHAMBER_PUSH_RELAY_DISABLED = 'true';
203
+ process.env.AIWORKER_PUSH_RELAY_DISABLED = 'true';
204
204
  const { environment: _environment, ...configWithoutEnvironment } = APNS_CONFIG;
205
205
  const hosts = [];
206
206
  const http2 = {
@@ -241,7 +241,7 @@ describe('apns runtime direct fallback (relay disabled)', () => {
241
241
  });
242
242
 
243
243
  it('signs an ES256 JWT and sends over http2 when relay is disabled', async () => {
244
- process.env.OPENCHAMBER_PUSH_RELAY_DISABLED = 'true';
244
+ process.env.AIWORKER_PUSH_RELAY_DISABLED = 'true';
245
245
  const targeted = [];
246
246
  const http2 = {
247
247
  connect: () => ({
@@ -66,7 +66,7 @@ export const createNotificationEmitterRuntime = (dependencies) => {
66
66
  const desktopNotificationDelivered = options.desktopNotificationDelivered === true;
67
67
 
68
68
  const syntheticPayload = {
69
- type: 'openchamber:notification',
69
+ type: 'aiworker:notification',
70
70
  properties: {
71
71
  ...payload,
72
72
  // Tell local desktop UI whether a native channel already accepted this
@@ -36,7 +36,7 @@ describe('notification emitter runtime', () => {
36
36
  runtime.broadcastUiNotification({ title: 'Ready' }, { desktopNotificationDelivered: true });
37
37
 
38
38
  expect(broadcastGlobalUiEvent).toHaveBeenCalledWith({
39
- type: 'openchamber:notification',
39
+ type: 'aiworker:notification',
40
40
  properties: {
41
41
  title: 'Ready',
42
42
  desktopNotificationDelivered: true,
@@ -305,16 +305,16 @@ export const createPushRuntime = (deps) => {
305
305
  };
306
306
 
307
307
  const resolveVapidSubject = async () => {
308
- const configured = process.env.OPENCHAMBER_VAPID_SUBJECT;
308
+ const configured = process.env.AIWORKER_VAPID_SUBJECT;
309
309
  if (typeof configured === 'string' && configured.trim().length > 0) {
310
310
  return configured.trim();
311
311
  }
312
312
 
313
- const originEnv = process.env.OPENCHAMBER_PUBLIC_ORIGIN;
313
+ const originEnv = process.env.AIWORKER_PUBLIC_ORIGIN;
314
314
  if (typeof originEnv === 'string' && originEnv.trim().length > 0) {
315
315
  const trimmed = originEnv.trim();
316
316
  if (isLoopbackHttpOrigin(trimmed)) {
317
- return 'mailto:openchamber@localhost';
317
+ return 'mailto:aiworker@localhost';
318
318
  }
319
319
  return trimmed;
320
320
  }
@@ -325,14 +325,14 @@ export const createPushRuntime = (deps) => {
325
325
  if (typeof stored === 'string' && stored.trim().length > 0) {
326
326
  const trimmed = stored.trim();
327
327
  if (isLoopbackHttpOrigin(trimmed)) {
328
- return 'mailto:openchamber@localhost';
328
+ return 'mailto:aiworker@localhost';
329
329
  }
330
330
  return trimmed;
331
331
  }
332
332
  } catch {
333
333
  }
334
334
 
335
- return 'mailto:openchamber@localhost';
335
+ return 'mailto:aiworker@localhost';
336
336
  };
337
337
 
338
338
  const ensurePushInitialized = async () => {
@@ -340,8 +340,8 @@ export const createPushRuntime = (deps) => {
340
340
  const keys = await getOrCreateVapidKeys();
341
341
  const subject = await resolveVapidSubject();
342
342
 
343
- if (subject === 'mailto:openchamber@localhost') {
344
- console.warn('[Push] No public origin configured for VAPID; set OPENCHAMBER_VAPID_SUBJECT or enable push once from a real origin.');
343
+ if (subject === 'mailto:aiworker@localhost') {
344
+ console.warn('[Push] No public origin configured for VAPID; set AIWORKER_VAPID_SUBJECT or enable push once from a real origin.');
345
345
  }
346
346
 
347
347
  webPush.setVapidDetails(subject, keys.publicKey, keys.privateKey);
@@ -272,7 +272,7 @@ export const registerNotificationRoutes = (app, dependencies) => {
272
272
 
273
273
  try {
274
274
  writeSseEvent(res, {
275
- type: 'openchamber:notification-stream-ready',
275
+ type: 'aiworker:notification-stream-ready',
276
276
  properties: { uiToken },
277
277
  });
278
278
  flushSse();
@@ -293,7 +293,7 @@ export const createNotificationTriggerRuntime = (deps) => {
293
293
  });
294
294
  if (!response.ok) return false;
295
295
  const session = await response.json().catch(() => null);
296
- const goal = session?.metadata?.openchamber?.goal;
296
+ const goal = session?.metadata?.aiworker?.goal;
297
297
  return Boolean(goal && typeof goal === 'object' && goal.status === 'active');
298
298
  } catch {
299
299
  return false;
@@ -4,28 +4,28 @@ import { resolveAgentToolAction } from './actions.js';
4
4
 
5
5
  /**
6
6
  * Both cases here are from one real conversation: the model called `read` and
7
- * then `get` on `openchamber_memory`, having dropped the namespace its own tool
7
+ * then `get` on `aiworker_memory`, having dropped the namespace its own tool
8
8
  * name appeared to supply, and gave up after the second bare "unsupported".
9
9
  */
10
10
  describe('a namespace the tool name already implies', () => {
11
11
  test('resolves a bare action inside the calling tool', () => {
12
- expect(resolveAgentToolAction('read', 'openchamber_memory')).toEqual({ action: 'memory.read' });
13
- expect(resolveAgentToolAction('save', 'openchamber_memory')).toEqual({ action: 'memory.save' });
12
+ expect(resolveAgentToolAction('read', 'aiworker_memory')).toEqual({ action: 'memory.read' });
13
+ expect(resolveAgentToolAction('save', 'aiworker_memory')).toEqual({ action: 'memory.save' });
14
14
  });
15
15
 
16
16
  test('resolves a bare name that is ambiguous only across tools', () => {
17
17
  // `delete` belongs to schedule and to memory; inside one tool it is plain.
18
- expect(resolveAgentToolAction('delete', 'openchamber_memory')).toEqual({ action: 'memory.delete' });
19
- expect(resolveAgentToolAction('delete', 'openchamber')).toEqual({ action: 'schedule.delete' });
18
+ expect(resolveAgentToolAction('delete', 'aiworker_memory')).toEqual({ action: 'memory.delete' });
19
+ expect(resolveAgentToolAction('delete', 'aiworker')).toEqual({ action: 'schedule.delete' });
20
20
  });
21
21
 
22
22
  test('keeps a fully qualified action as it is', () => {
23
- expect(resolveAgentToolAction('memory.read', 'openchamber_memory')).toEqual({ action: 'memory.read' });
23
+ expect(resolveAgentToolAction('memory.read', 'aiworker_memory')).toEqual({ action: 'memory.read' });
24
24
  });
25
25
 
26
26
  test('does not reach outside the tool that asked', () => {
27
27
  // The memory tool asking for `open` must fail, not drive the browser.
28
- expect(resolveAgentToolAction('open', 'openchamber_memory').action).toBeUndefined();
28
+ expect(resolveAgentToolAction('open', 'aiworker_memory').action).toBeUndefined();
29
29
  });
30
30
  });
31
31
 
@@ -41,7 +41,7 @@ describe('an unidentified caller', () => {
41
41
 
42
42
  describe('what an unresolvable action reports', () => {
43
43
  test('names the actions the calling tool actually has', () => {
44
- const { error } = resolveAgentToolAction('get', 'openchamber_memory');
44
+ const { error } = resolveAgentToolAction('get', 'aiworker_memory');
45
45
 
46
46
  expect(error).toContain('memory.read');
47
47
  expect(error).toContain('memory.save');
@@ -50,14 +50,14 @@ describe('what an unresolvable action reports', () => {
50
50
  });
51
51
 
52
52
  test('reports a missing action rather than resolving to something', () => {
53
- const { error, action } = resolveAgentToolAction('', 'openchamber_memory');
53
+ const { error, action } = resolveAgentToolAction('', 'aiworker_memory');
54
54
 
55
55
  expect(action).toBeUndefined();
56
56
  expect(error).toContain('missing');
57
57
  });
58
58
 
59
59
  test('an unknown tool falls back to the full action list', () => {
60
- const { error } = resolveAgentToolAction('nonsense', 'openchamber_future');
60
+ const { error } = resolveAgentToolAction('nonsense', 'aiworker_future');
61
61
 
62
62
  expect(error).toContain('memory.read');
63
63
  expect(error).toContain('browser.open');
@@ -7,7 +7,7 @@
7
7
  * removes it entirely, parameters included, rather than leaving its inputs
8
8
  * visible in a shared schema.
9
9
  */
10
- export const OPENCHAMBER_CONTROL_ACTION_DEFINITIONS = Object.freeze([
10
+ export const AIWORKER_CONTROL_ACTION_DEFINITIONS = Object.freeze([
11
11
  { action: 'projects.list', title: 'List configured projects', description: 'List configured projects; no parameters' },
12
12
  { action: 'models.list', title: 'Show model preferences', description: 'Show default, favorite, and recent model preferences; no parameters' },
13
13
  { action: 'session.list', title: 'List sessions', description: 'List sessions; optional directory, limit (default 10), all, or withStatus' },
@@ -24,19 +24,19 @@ export const OPENCHAMBER_CONTROL_ACTION_DEFINITIONS = Object.freeze([
24
24
  { action: 'schedule.toggle', title: 'Enable or disable a scheduled task', description: 'Enable or disable taskId; requires the disabled boolean' },
25
25
  ]);
26
26
 
27
- const OPENCHAMBER_CONTROL_ACTIONS = Object.freeze(
28
- OPENCHAMBER_CONTROL_ACTION_DEFINITIONS.map(({ action }) => action),
27
+ const AIWORKER_CONTROL_ACTIONS = Object.freeze(
28
+ AIWORKER_CONTROL_ACTION_DEFINITIONS.map(({ action }) => action),
29
29
  );
30
30
 
31
- export const OPENCHAMBER_AGENT_TOOL_ACTION_DEFINITIONS = Object.freeze(
32
- OPENCHAMBER_CONTROL_ACTION_DEFINITIONS.filter(({ agentExposed }) => agentExposed !== false),
31
+ export const AIWORKER_AGENT_TOOL_ACTION_DEFINITIONS = Object.freeze(
32
+ AIWORKER_CONTROL_ACTION_DEFINITIONS.filter(({ agentExposed }) => agentExposed !== false),
33
33
  );
34
34
 
35
- export const OPENCHAMBER_AGENT_TOOL_ACTIONS = Object.freeze(
36
- OPENCHAMBER_AGENT_TOOL_ACTION_DEFINITIONS.map(({ action }) => action),
35
+ export const AIWORKER_AGENT_TOOL_ACTIONS = Object.freeze(
36
+ AIWORKER_AGENT_TOOL_ACTION_DEFINITIONS.map(({ action }) => action),
37
37
  );
38
38
 
39
- export const OPENCHAMBER_WEB_ACTION_DEFINITIONS = Object.freeze([
39
+ export const AIWORKER_WEB_ACTION_DEFINITIONS = Object.freeze([
40
40
  { action: 'browser.open', title: 'Open a page in the browser panel', description: 'Open url in the in-app browser panel; use it to look at the running app. Set viewport to mobile, tablet or desktop to lay the page out at that size' },
41
41
  { action: 'browser.snapshot', title: 'Read the open page', description: 'Read the open page: url, title, visible text, and interactive elements with the selectors the other browser actions accept. Pass selector to read only that part of a long page. Reports any errors the page logged' },
42
42
  { action: 'browser.click', title: 'Click on the open page', description: 'Click an element; give selector, or text to match a link or button by its visible label' },
@@ -49,8 +49,8 @@ export const OPENCHAMBER_WEB_ACTION_DEFINITIONS = Object.freeze([
49
49
  { action: 'browser.resize', title: 'Change the page viewport', description: 'Lay the open page out at a different size; viewport is mobile, tablet, desktop, or fill to use the whole panel' },
50
50
  ]);
51
51
 
52
- export const OPENCHAMBER_WEB_ACTIONS = Object.freeze(
53
- OPENCHAMBER_WEB_ACTION_DEFINITIONS.map(({ action }) => action),
52
+ export const AIWORKER_WEB_ACTIONS = Object.freeze(
53
+ AIWORKER_WEB_ACTION_DEFINITIONS.map(({ action }) => action),
54
54
  );
55
55
 
56
56
  /**
@@ -64,31 +64,31 @@ export const OPENCHAMBER_WEB_ACTIONS = Object.freeze(
64
64
  * listing everything again — and toward reading it at all, since a title that
65
65
  * reads as a complete fact is exactly the one whose conditions get lost.
66
66
  */
67
- export const OPENCHAMBER_MEMORY_ACTION_DEFINITIONS = Object.freeze([
67
+ export const AIWORKER_MEMORY_ACTION_DEFINITIONS = Object.freeze([
68
68
  { action: 'memory.read', title: 'Read a stored memory', description: 'Read the full text of one memory listed in the session index. The index shows titles only, and a title omits the conditions that decide how the memory applies, so read before acting rather than working from the title. Requires title (as the index spells it) or memoryId; scope is optional and both stores are searched without it' },
69
69
  { action: 'memory.list', title: 'List stored memories', description: 'List stored memory titles when the session index is missing or stale; scope is global, project, or both (default)' },
70
70
  { action: 'memory.save', title: 'Remember something', description: 'Store a durable fact, preference, or reference; requires title and body, plus scope global (about the user) or project (about this codebase). Restating something already stored updates it. Do not store secrets, one-off task state, or anything the user asked you not to keep' },
71
71
  { action: 'memory.delete', title: 'Forget a memory', description: 'Delete a memory that turned out to be wrong or obsolete; requires memoryId and scope' },
72
72
  ]);
73
73
 
74
- export const OPENCHAMBER_MEMORY_ACTIONS = Object.freeze(
75
- OPENCHAMBER_MEMORY_ACTION_DEFINITIONS.map(({ action }) => action),
74
+ export const AIWORKER_MEMORY_ACTIONS = Object.freeze(
75
+ AIWORKER_MEMORY_ACTION_DEFINITIONS.map(({ action }) => action),
76
76
  );
77
77
 
78
78
  /**
79
79
  * Which actions each managed tool may ask for.
80
80
  *
81
81
  * The callback needs this because models routinely drop the namespace: asked
82
- * for `memory.read` from a tool already called `openchamber_memory`, they send
82
+ * for `memory.read` from a tool already called `aiworker_memory`, they send
83
83
  * `read`, since the tool's own name appears to have said "memory" already. The
84
84
  * name is unambiguous inside one tool's action set even when it is not across
85
85
  * all of them (`delete` belongs to both schedule and memory), so resolution
86
86
  * starts from the tool that asked.
87
87
  */
88
88
  const ACTIONS_BY_TOOL = Object.freeze({
89
- openchamber: OPENCHAMBER_AGENT_TOOL_ACTIONS,
90
- openchamber_web: OPENCHAMBER_WEB_ACTIONS,
91
- openchamber_memory: OPENCHAMBER_MEMORY_ACTIONS,
89
+ aiworker: AIWORKER_AGENT_TOOL_ACTIONS,
90
+ aiworker_web: AIWORKER_WEB_ACTIONS,
91
+ aiworker_memory: AIWORKER_MEMORY_ACTIONS,
92
92
  });
93
93
 
94
94
  const bareName = (action) => {
@@ -110,7 +110,7 @@ const uniqueMatch = (candidates, requested) => {
110
110
  export const resolveAgentToolAction = (requested, toolName) => {
111
111
  const value = typeof requested === 'string' ? requested.trim() : '';
112
112
  const scoped = ACTIONS_BY_TOOL[toolName] ?? null;
113
- const known = scoped ?? OPENCHAMBER_ALL_ACTIONS;
113
+ const known = scoped ?? AIWORKER_ALL_ACTIONS;
114
114
 
115
115
  if (value && known.includes(value)) {
116
116
  return { action: value };
@@ -119,20 +119,20 @@ export const resolveAgentToolAction = (requested, toolName) => {
119
119
  const resolved = uniqueMatch(known, value)
120
120
  // A tool that did not identify itself still gets the benefit when the
121
121
  // bare name means only one thing across every action.
122
- ?? (scoped ? null : uniqueMatch(OPENCHAMBER_ALL_ACTIONS, value));
122
+ ?? (scoped ? null : uniqueMatch(AIWORKER_ALL_ACTIONS, value));
123
123
  if (resolved) {
124
124
  return { action: resolved };
125
125
  }
126
126
  }
127
127
 
128
128
  return {
129
- error: `Unsupported OpenChamber action: ${value || 'missing'}. Use one of: ${known.join(', ')}`,
129
+ error: `Unsupported AiWorker action: ${value || 'missing'}. Use one of: ${known.join(', ')}`,
130
130
  };
131
131
  };
132
132
 
133
133
  /** Everything the callback route will dispatch, whichever tool asked. */
134
- export const OPENCHAMBER_ALL_ACTIONS = Object.freeze([
135
- ...OPENCHAMBER_CONTROL_ACTIONS,
136
- ...OPENCHAMBER_WEB_ACTIONS,
137
- ...OPENCHAMBER_MEMORY_ACTIONS,
134
+ export const AIWORKER_ALL_ACTIONS = Object.freeze([
135
+ ...AIWORKER_CONTROL_ACTIONS,
136
+ ...AIWORKER_WEB_ACTIONS,
137
+ ...AIWORKER_MEMORY_ACTIONS,
138
138
  ]);
@@ -1,16 +1,16 @@
1
- export class OpenChamberControlError extends Error {
1
+ export class AiWorkerControlError extends Error {
2
2
  constructor(message, statusCode = 500, details = {}) {
3
3
  super(message);
4
- this.name = 'OpenChamberControlError';
4
+ this.name = 'AiWorkerControlError';
5
5
  this.statusCode = statusCode;
6
6
  Object.assign(this, details);
7
7
  }
8
8
  }
9
9
 
10
10
  export const asControlError = (error, fallbackMessage, fallbackStatus = 500) => {
11
- if (error instanceof OpenChamberControlError) return error;
11
+ if (error instanceof AiWorkerControlError) return error;
12
12
  const message = error instanceof Error ? error.message : fallbackMessage;
13
- return new OpenChamberControlError(message || fallbackMessage, Number(error?.statusCode) || fallbackStatus, {
13
+ return new AiWorkerControlError(message || fallbackMessage, Number(error?.statusCode) || fallbackStatus, {
14
14
  ...(error?.goalConfigured === true ? { goalConfigured: true } : {}),
15
15
  });
16
16
  };
@@ -1,7 +1,7 @@
1
1
  import express from 'express';
2
2
  import { asControlError } from './error.js';
3
3
 
4
- export const registerOpenChamberControlRoutes = (app, { controlService }) => {
4
+ export const registerAiWorkerControlRoutes = (app, { controlService }) => {
5
5
  app.post('/api/openchamber/control', express.json({ limit: '1mb' }), async (req, res) => {
6
6
  const controller = new AbortController();
7
7
  const abortOnDisconnect = () => {
@@ -18,7 +18,7 @@ export const registerOpenChamberControlRoutes = (app, { controlService }) => {
18
18
  const data = await controlService.execute(action, input, req.body?.contextDirectory, { signal: controller.signal });
19
19
  return res.json(data);
20
20
  } catch (error) {
21
- const controlError = asControlError(error, 'OpenChamber control action failed');
21
+ const controlError = asControlError(error, 'AiWorker control action failed');
22
22
  return res.status(controlError.statusCode).json({
23
23
  error: controlError.message,
24
24
  ...(controlError.partial === true ? {
@@ -2,16 +2,16 @@ import express from 'express';
2
2
  import request from 'supertest';
3
3
  import { describe, expect, it, vi } from 'vitest';
4
4
 
5
- import { OpenChamberControlError } from './error.js';
6
- import { registerOpenChamberControlRoutes } from './routes.js';
5
+ import { AiWorkerControlError } from './error.js';
6
+ import { registerAiWorkerControlRoutes } from './routes.js';
7
7
 
8
8
  const createApp = (execute) => {
9
9
  const app = express();
10
- registerOpenChamberControlRoutes(app, { controlService: { execute } });
10
+ registerAiWorkerControlRoutes(app, { controlService: { execute } });
11
11
  return app;
12
12
  };
13
13
 
14
- describe('OpenChamber control route', () => {
14
+ describe('AiWorker control route', () => {
15
15
  it('is a thin adapter over the control service', async () => {
16
16
  const execute = vi.fn(async () => ({ projects: [] }));
17
17
  const response = await request(createApp(execute))
@@ -24,7 +24,7 @@ describe('OpenChamber control route', () => {
24
24
 
25
25
  it('preserves service status and partial-result details', async () => {
26
26
  const execute = vi.fn(async () => {
27
- throw new OpenChamberControlError('dispatch failed', 500, {
27
+ throw new AiWorkerControlError('dispatch failed', 500, {
28
28
  partial: true,
29
29
  partialAction: 'fork-created',
30
30
  sessionId: 'ses_fork',
@@ -15,7 +15,7 @@ import path from 'node:path';
15
15
  import fsPromises from 'node:fs/promises';
16
16
 
17
17
  /** Project-relative home for agent screenshots. */
18
- export const SCREENSHOT_DIRECTORY = path.join('.openchamber', 'screenshots');
18
+ export const SCREENSHOT_DIRECTORY = path.join('.aiworker', 'screenshots');
19
19
 
20
20
  const MAX_LABEL_LENGTH = 48;
21
21
 
@@ -47,7 +47,7 @@ describe('writing a screenshot', () => {
47
47
  fs,
48
48
  });
49
49
 
50
- expect(result.path).toBe('.openchamber/screenshots/after-fix-2026-08-13T09-37-00-000.jpg');
50
+ expect(result.path).toBe('.aiworker/screenshots/after-fix-2026-08-13T09-37-00-000.jpg');
51
51
  expect(result.path.includes('\\')).toBe(false);
52
52
  expect(result.absolutePath).toBe(path.join('/work/project', SCREENSHOT_DIRECTORY, 'after-fix-2026-08-13T09-37-00-000.jpg'));
53
53
  expect(fs.written.get(result.absolutePath).toString()).toBe('image-bytes');