@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
@@ -9,6 +9,7 @@ import {
9
9
  getProviderSources,
10
10
  removeProviderConfig,
11
11
  } from './providers.js';
12
+ import { OPENCODE_CONFIG_DIR } from './shared.js';
12
13
 
13
14
  let projectDir;
14
15
 
@@ -162,6 +163,132 @@ describe('custom provider config persistence', () => {
162
163
  expect(written.disabled_providers).toEqual(['other']);
163
164
  });
164
165
 
166
+ test('upsertProviderConfig preserves unmanaged provider and model metadata', () => {
167
+ const configPath = path.join(projectDir, 'opencode.json');
168
+ writeJson(configPath, {
169
+ provider: {
170
+ 'campus-llm': {
171
+ npm: '@ai-sdk/openai-compatible',
172
+ name: 'Old',
173
+ customProviderField: { owner: 'user' },
174
+ env: ['OLD_KEY'],
175
+ options: {
176
+ baseURL: 'https://old.example.edu/v1',
177
+ headers: { 'X-Old': '1' },
178
+ timeout: 45_000,
179
+ },
180
+ models: {
181
+ retained: {
182
+ name: 'Old retained name',
183
+ reasoning: true,
184
+ attachment: true,
185
+ tool_call: true,
186
+ modalities: { input: ['text', 'image', 'pdf'], output: ['text'] },
187
+ limit: { context: 1_050_000, input: 922_000, output: 128_000 },
188
+ options: { instructions: 'Keep this instruction' },
189
+ variants: {
190
+ low: { reasoningEffort: 'low' },
191
+ high: { reasoningEffort: 'high' },
192
+ },
193
+ customModelField: { source: 'manual' },
194
+ },
195
+ removed: {
196
+ name: 'Remove me',
197
+ reasoning: true,
198
+ },
199
+ },
200
+ },
201
+ },
202
+ });
203
+
204
+ upsertProviderConfig('campus-llm', {
205
+ name: 'Campus LLM',
206
+ options: { baseURL: 'https://new.example.edu/v1' },
207
+ models: {
208
+ retained: { name: 'Retained model' },
209
+ added: { name: 'Added model' },
210
+ },
211
+ }, projectDir, 'project', { hasStoredAuth: true });
212
+
213
+ const written = readJson(configPath).provider['campus-llm'];
214
+ expect(written).toEqual({
215
+ npm: '@ai-sdk/openai-compatible',
216
+ name: 'Campus LLM',
217
+ customProviderField: { owner: 'user' },
218
+ options: {
219
+ baseURL: 'https://new.example.edu/v1',
220
+ timeout: 45_000,
221
+ },
222
+ models: {
223
+ retained: {
224
+ name: 'Retained model',
225
+ reasoning: true,
226
+ attachment: true,
227
+ tool_call: true,
228
+ modalities: { input: ['text', 'image', 'pdf'], output: ['text'] },
229
+ limit: { context: 1_050_000, input: 922_000, output: 128_000 },
230
+ options: { instructions: 'Keep this instruction' },
231
+ variants: {
232
+ low: { reasoningEffort: 'low' },
233
+ high: { reasoningEffort: 'high' },
234
+ },
235
+ customModelField: { source: 'manual' },
236
+ },
237
+ added: { name: 'Added model' },
238
+ },
239
+ });
240
+ });
241
+
242
+ test('upsertProviderConfig preserves metadata while migrating the legacy providers alias', () => {
243
+ const configPath = path.join(projectDir, 'opencode.json');
244
+ writeJson(configPath, {
245
+ providers: {
246
+ legacy: {
247
+ name: 'Legacy provider',
248
+ options: { baseURL: 'https://old.example.com/v1', timeout: 30_000 },
249
+ models: { model: { name: 'Old model', reasoning: true } },
250
+ },
251
+ },
252
+ });
253
+
254
+ upsertProviderConfig('legacy', {
255
+ name: 'Updated provider',
256
+ options: { baseURL: 'https://new.example.com/v1' },
257
+ models: { model: { name: 'Updated model' } },
258
+ }, projectDir, 'project', { hasStoredAuth: true });
259
+
260
+ const written = readJson(configPath);
261
+ expect(written.providers).toBeUndefined();
262
+ expect(written.provider.legacy).toEqual({
263
+ npm: '@ai-sdk/openai-compatible',
264
+ name: 'Updated provider',
265
+ options: { baseURL: 'https://new.example.com/v1', timeout: 30_000 },
266
+ models: { model: { name: 'Updated model', reasoning: true } },
267
+ });
268
+ });
269
+
270
+ test('migrating one legacy providers entry keeps the other legacy entries', () => {
271
+ const configPath = path.join(projectDir, 'opencode.json');
272
+ writeJson(configPath, {
273
+ providers: {
274
+ legacy: { name: 'Legacy provider', options: { baseURL: 'https://old.example.com/v1' }, models: { model: { name: 'Old model' } } },
275
+ untouched: { name: 'Untouched', options: { baseURL: 'https://other.example.com/v1' }, models: { model: { name: 'Other model' } } },
276
+ },
277
+ });
278
+
279
+ upsertProviderConfig('legacy', {
280
+ name: 'Updated provider',
281
+ options: { baseURL: 'https://new.example.com/v1' },
282
+ models: { model: { name: 'Updated model' } },
283
+ }, projectDir, 'project', { hasStoredAuth: true });
284
+
285
+ const written = readJson(configPath);
286
+ expect(written.providers).toEqual({
287
+ untouched: { name: 'Untouched', options: { baseURL: 'https://other.example.com/v1' }, models: { model: { name: 'Other model' } } },
288
+ });
289
+ expect(written.provider.legacy.name).toBe('Updated provider');
290
+ });
291
+
165
292
  test('upsert then remove restores absence', () => {
166
293
  upsertProviderConfig('temp-provider', {
167
294
  name: 'Temp',
@@ -230,8 +357,8 @@ describe('custom provider config persistence', () => {
230
357
  expect(sources.sources.custom.exists).toBe(false);
231
358
 
232
359
  for (const userPath of [
233
- path.join(os.homedir(), '.config', 'opencode', 'opencode.json'),
234
- path.join(os.homedir(), '.config', 'opencode', 'config.json'),
360
+ path.join(OPENCODE_CONFIG_DIR, 'opencode.json'),
361
+ path.join(OPENCODE_CONFIG_DIR, 'config.json'),
235
362
  ]) {
236
363
  if (!fs.existsSync(userPath)) continue;
237
364
  const userConfig = readJson(userPath);
@@ -269,8 +396,8 @@ describe('custom provider config persistence', () => {
269
396
  expect(sources.sources.project.exists).toBe(false);
270
397
 
271
398
  for (const userPath of [
272
- path.join(os.homedir(), '.config', 'opencode', 'opencode.json'),
273
- path.join(os.homedir(), '.config', 'opencode', 'config.json'),
399
+ path.join(OPENCODE_CONFIG_DIR, 'opencode.json'),
400
+ path.join(OPENCODE_CONFIG_DIR, 'config.json'),
274
401
  ]) {
275
402
  if (!fs.existsSync(userPath)) continue;
276
403
  const userConfig = readJson(userPath);
@@ -407,7 +407,7 @@ export const registerOpenCodeProxy = (app, deps) => {
407
407
  };
408
408
 
409
409
  const PROXY_REQUEST_TIMEOUT_MS = normalizeProxyTimeout(LONG_REQUEST_TIMEOUT_MS);
410
- const PROXY_TIMEOUT_MARKER = Symbol('openchamberProxyTimedOut');
410
+ const PROXY_TIMEOUT_MARKER = Symbol('aiworkerProxyTimedOut');
411
411
 
412
412
  // A provider OAuth callback blocks upstream for as long as the user takes to
413
413
  // sign in in their browser (device-code polling, or a loopback redirect), so
@@ -793,7 +793,7 @@ export const registerOpenCodeProxy = (app, deps) => {
793
793
  return null;
794
794
  });
795
795
 
796
- const settingsPath = path.join(os.homedir(), '.config', 'openchamber', 'settings.json');
796
+ const settingsPath = path.join(os.homedir(), '.config', 'aiworker', 'settings.json');
797
797
  let projectDirs = [];
798
798
  try {
799
799
  const settingsRaw = fs.readFileSync(settingsPath, 'utf8');
@@ -1,4 +1,4 @@
1
- const DEFAULT_PWA_APP_NAME = 'OpenChamber';
1
+ const DEFAULT_PWA_APP_NAME = 'AiWorker';
2
2
  const mapPwaOrientationToManifest = (value) => {
3
3
  if (value === 'portrait') {
4
4
  return 'portrait-primary';
@@ -45,7 +45,7 @@ describe('managed OpenCode restart session recovery', () => {
45
45
  expect(sessionRuntime.getActiveSessionCount()).toBe(0);
46
46
  expect(Object.values(sessionRuntime.getSessionStateSnapshot()).map((state) => state.status))
47
47
  .toEqual(['idle', 'idle', 'idle']);
48
- expect(events.filter((event) => event.type === 'openchamber:session-status')).toHaveLength(3);
48
+ expect(events.filter((event) => event.type === 'aiworker:session-status')).toHaveLength(3);
49
49
  expect(events.filter((event) => event.type === 'session.error')).toHaveLength(3);
50
50
  expect(broadcastUiNotification).toHaveBeenCalledOnce();
51
51
  expect(broadcastUiNotification).toHaveBeenCalledWith(expect.objectContaining({
@@ -22,7 +22,7 @@ const createApp = (overrides = {}) => {
22
22
  const dependencies = {
23
23
  getOpenCodeUpgradeCapability: () => ({
24
24
  supported: false,
25
- manager: 'openchamber',
25
+ manager: 'aiworker',
26
26
  reason: 'bundled',
27
27
  }),
28
28
  buildOpenCodeUrl: (pathname) => `http://127.0.0.1:4096${pathname}`,
@@ -44,8 +44,8 @@ describe('OpenCode upgrade routes', () => {
44
44
  .send({})
45
45
  .expect(409, {
46
46
  success: false,
47
- code: 'OPENCODE_UPGRADE_MANAGED_BY_OPENCHAMBER',
48
- error: 'OpenCode is bundled with OpenChamber Desktop and updates with the app.',
47
+ code: 'OPENCODE_UPGRADE_MANAGED_BY_AIWORKER',
48
+ error: 'OpenCode is bundled with AiWorker Desktop and updates with the app.',
49
49
  });
50
50
 
51
51
  expect(globalThis.fetch).not.toHaveBeenCalled();
@@ -68,7 +68,7 @@ describe('OpenCode upgrade routes', () => {
68
68
  latestVersion: null,
69
69
  upgrade: {
70
70
  supported: false,
71
- manager: 'openchamber',
71
+ manager: 'aiworker',
72
72
  reason: 'bundled',
73
73
  },
74
74
  });
@@ -1,12 +1,13 @@
1
1
  import express from 'express';
2
2
  import { createProjectIdFromPath } from '../projects/project-id.js';
3
3
  import fs from 'fs';
4
- import os from 'os';
5
4
  import path from 'path';
6
5
  import {
7
6
  buildDeferredRestartResponse,
8
7
  } from './config-mutation-response.js';
9
8
  import { getClaudeCliAuthStatus } from './claude-cli-auth.js';
9
+ import { OPENCODE_CONFIG_DIR } from './shared.js';
10
+ import { settingsSurfaceOf } from './settings-files.js';
10
11
 
11
12
  export const registerOpenCodeRoutes = (app, dependencies) => {
12
13
  const {
@@ -57,7 +58,7 @@ export const registerOpenCodeRoutes = (app, dependencies) => {
57
58
 
58
59
  // Self-contained page for the OAuth return leg: the system browser has no UI
59
60
  // session, so it cannot load the SPA behind the auth gate — everything it
60
- // needs ships inline. `openchamber://focus/mcp-auth` raises the desktop app;
61
+ // needs ships inline. `aiworker://focus/mcp-auth` raises the desktop app;
61
62
  // the link stays visible because some browsers only follow custom-protocol
62
63
  // URLs from a user gesture.
63
64
  const renderMcpOAuthCallbackPage = ({ title, message, desktopReturn }) => `<!doctype html>
@@ -65,7 +66,7 @@ export const registerOpenCodeRoutes = (app, dependencies) => {
65
66
  <head>
66
67
  <meta charset="utf-8">
67
68
  <meta name="viewport" content="width=device-width, initial-scale=1">
68
- <title>${escapeHtml(title)} — OpenChamber</title>
69
+ <title>${escapeHtml(title)} — AiWorker</title>
69
70
  <style>
70
71
  :root { color-scheme: light dark; }
71
72
  body { margin: 0; min-height: 100vh; display: flex; align-items: center; justify-content: center;
@@ -82,8 +83,8 @@ export const registerOpenCodeRoutes = (app, dependencies) => {
82
83
  <main>
83
84
  <h1>${escapeHtml(title)}</h1>
84
85
  <p>${escapeHtml(message)}</p>
85
- ${desktopReturn ? `<a class="return" href="openchamber://focus/mcp-auth">Return to OpenChamber</a>
86
- <script>window.location.href = 'openchamber://focus/mcp-auth';</script>` : ''}
86
+ ${desktopReturn ? `<a class="return" href="aiworker://focus/mcp-auth">Return to AiWorker</a>
87
+ <script>window.location.href = 'aiworker://focus/mcp-auth';</script>` : ''}
87
88
  </main>
88
89
  </body>
89
90
  </html>`;
@@ -208,9 +209,10 @@ ${desktopReturn ? `<a class="return" href="openchamber://focus/mcp-auth">Return
208
209
  }
209
210
  };
210
211
 
211
- app.get('/api/config/settings', async (_req, res) => {
212
+ app.get('/api/config/settings', async (req, res) => {
212
213
  try {
213
- const settings = await readSettingsFromDiskMigrated();
214
+ // The surface kind resolves the per-surface profile keys; absent means base.
215
+ const settings = await readSettingsFromDiskMigrated({ surface: settingsSurfaceOf(req) });
214
216
  res.json(formatSettingsResponse(settings));
215
217
  } catch (error) {
216
218
  console.error('Failed to read settings:', error);
@@ -238,11 +240,11 @@ ${desktopReturn ? `<a class="return" href="openchamber://focus/mcp-auth">Return
238
240
  return res.status(409).json({
239
241
  success: false,
240
242
  code: capability.reason === 'bundled'
241
- ? 'OPENCODE_UPGRADE_MANAGED_BY_OPENCHAMBER'
243
+ ? 'OPENCODE_UPGRADE_MANAGED_BY_AIWORKER'
242
244
  : 'OPENCODE_UPGRADE_UNSUPPORTED',
243
245
  error: capability.reason === 'bundled'
244
- ? 'OpenCode is bundled with OpenChamber Desktop and updates with the app.'
245
- : 'This OpenCode runtime cannot be upgraded by OpenChamber.',
246
+ ? 'OpenCode is bundled with AiWorker Desktop and updates with the app.'
247
+ : 'This OpenCode runtime cannot be upgraded by AiWorker.',
246
248
  });
247
249
  }
248
250
  if (openCodeUpgradePromise) {
@@ -422,7 +424,7 @@ ${desktopReturn ? `<a class="return" href="openchamber://focus/mcp-auth">Return
422
424
 
423
425
  app.put('/api/config/settings', async (req, res) => {
424
426
  try {
425
- const updated = await persistSettings(req.body ?? {});
427
+ const updated = await persistSettings(req.body ?? {}, { surface: settingsSurfaceOf(req) });
426
428
  res.json(updated);
427
429
  } catch (error) {
428
430
  console.error('[API:PUT /api/config/settings] Failed to save settings:', error);
@@ -513,7 +515,7 @@ ${desktopReturn ? `<a class="return" href="openchamber://focus/mcp-auth">Return
513
515
  // Browser return leg of the MCP OAuth flow, completed entirely server-side.
514
516
  //
515
517
  // The provider redirects the SYSTEM browser here, and that browser has no
516
- // OpenChamber UI session — the SPA route this path used to land on sits
518
+ // AiWorker UI session — the SPA route this path used to land on sits
517
519
  // behind the client-side auth gate, so the user saw a login page instead of
518
520
  // a finished authorization. No session can be required on this path.
519
521
  //
@@ -562,7 +564,7 @@ ${desktopReturn ? `<a class="return" href="openchamber://focus/mcp-auth">Return
562
564
  if (!context?.name) {
563
565
  return finish(400, {
564
566
  title: 'Authorization Failed',
565
- message: 'This authorization session has expired or is unknown to the running app. Return to OpenChamber and click Authorize again.',
567
+ message: 'This authorization session has expired or is unknown to the running app. Return to AiWorker and click Authorize again.',
566
568
  });
567
569
  }
568
570
 
@@ -583,7 +585,7 @@ ${desktopReturn ? `<a class="return" href="openchamber://focus/mcp-auth">Return
583
585
  }
584
586
  return finish(200, {
585
587
  title: 'Authorization Complete',
586
- message: 'You can close this tab and return to OpenChamber.',
588
+ message: 'You can close this tab and return to AiWorker.',
587
589
  });
588
590
  } catch (error) {
589
591
  return finish(502, {
@@ -807,7 +809,7 @@ ${desktopReturn ? `<a class="return" href="openchamber://focus/mcp-auth">Return
807
809
  });
808
810
 
809
811
  // Behavior / Global AGENTS.md endpoints
810
- const AGENTS_MD_PATH = path.join(os.homedir(), '.config', 'opencode', 'AGENTS.md');
812
+ const AGENTS_MD_PATH = path.join(OPENCODE_CONFIG_DIR, 'AGENTS.md');
811
813
  const MAX_BEHAVIOR_PROMPT_SIZE = 1024 * 1024; // 1 MB
812
814
 
813
815
  app.get('/api/behavior/agents-md', async (_req, res) => {
@@ -815,10 +817,10 @@ ${desktopReturn ? `<a class="return" href="openchamber://focus/mcp-auth">Return
815
817
  try {
816
818
  await fs.promises.access(AGENTS_MD_PATH);
817
819
  } catch {
818
- return res.json({ content: '', exists: false });
820
+ return res.json({ content: '', exists: false, path: AGENTS_MD_PATH });
819
821
  }
820
822
  const content = await fs.promises.readFile(AGENTS_MD_PATH, 'utf8');
821
- return res.json({ content, exists: true });
823
+ return res.json({ content, exists: true, path: AGENTS_MD_PATH });
822
824
  } catch (error) {
823
825
  console.error('Failed to read AGENTS.md:', error);
824
826
  return res.status(500).json({ error: 'Failed to read AGENTS.md' });
@@ -22,8 +22,8 @@ export const createServerStartupRuntime = (dependencies) => {
22
22
 
23
23
  const resolveBindHost = (host) =>
24
24
  host
25
- || (typeof process.env.OPENCHAMBER_HOST === 'string' && process.env.OPENCHAMBER_HOST.trim().length > 0
26
- ? process.env.OPENCHAMBER_HOST.trim()
25
+ || (typeof process.env.AIWORKER_HOST === 'string' && process.env.AIWORKER_HOST.trim().length > 0
26
+ ? process.env.AIWORKER_HOST.trim()
27
27
  : '127.0.0.1');
28
28
 
29
29
  const startListeningAndMaybeTunnel = async ({
@@ -48,12 +48,12 @@ export const createServerStartupRuntime = (dependencies) => {
48
48
 
49
49
  if (typeof process.send === 'function') {
50
50
  if (!process.connected) {
51
- throw new Error('OpenChamber startup IPC channel disconnected before ready notification');
51
+ throw new Error('AiWorker startup IPC channel disconnected before ready notification');
52
52
  }
53
53
 
54
54
  await new Promise((resolveReadyNotification, rejectReadyNotification) => {
55
55
  try {
56
- process.send({ type: 'openchamber:ready', port: activePort }, (error) => {
56
+ process.send({ type: 'aiworker:ready', port: activePort }, (error) => {
57
57
  if (error) {
58
58
  rejectReadyNotification(error);
59
59
  return;
@@ -69,7 +69,7 @@ export const createServerStartupRuntime = (dependencies) => {
69
69
  const displayHost = (bindHost === '0.0.0.0' || bindHost === '::' || bindHost === '[::]')
70
70
  ? 'localhost'
71
71
  : (bindHost.includes(':') ? `[${bindHost}]` : bindHost);
72
- console.log(`OpenChamber server listening on ${bindHost}:${activePort}`);
72
+ console.log(`AiWorker server listening on ${bindHost}:${activePort}`);
73
73
  console.log(`Health check: http://${displayHost}:${activePort}/health`);
74
74
  console.log(`Web interface: http://${displayHost}:${activePort}`);
75
75
 
@@ -138,7 +138,7 @@ export const createServerStartupRuntime = (dependencies) => {
138
138
  // Cover every signal a shell or dev harness may use to stop/restart us, so
139
139
  // the managed OpenCode child is always torn down gracefully instead of
140
140
  // orphaned: SIGINT/SIGQUIT (Ctrl+C/Ctrl+\), SIGTERM (kill/default), SIGHUP
141
- // (terminal close), SIGUSR2 (nodemon restart for `dev:server:watch`).
141
+ // (terminal close), SIGUSR2 (nodemon restart outside Windows).
142
142
  process.on('SIGTERM', handleSignal);
143
143
  process.on('SIGINT', handleSignal);
144
144
  process.on('SIGQUIT', handleSignal);
@@ -98,7 +98,7 @@ export const createSessionRuntime = ({ writeSseEvent, getNotificationClients, br
98
98
 
99
99
  if (typeof broadcastEvent === 'function') {
100
100
  broadcastEvent({
101
- type: 'openchamber:session-activity',
101
+ type: 'aiworker:session-activity',
102
102
  properties: {
103
103
  sessionId,
104
104
  phase,
@@ -149,7 +149,7 @@ export const createSessionRuntime = ({ writeSseEvent, getNotificationClients, br
149
149
  if (!existing || existing.status !== status || attentionChanged || isRestartInterruption) {
150
150
  const state = sessionStates.get(sessionId);
151
151
  const syntheticPayload = {
152
- type: 'openchamber:session-status',
152
+ type: 'aiworker:session-status',
153
153
  properties: {
154
154
  sessionID: sessionId,
155
155
  status: state.status,
@@ -207,7 +207,7 @@ export const createSessionRuntime = ({ writeSseEvent, getNotificationClients, br
207
207
  state.needsAttention = false;
208
208
 
209
209
  const syntheticPayload = {
210
- type: 'openchamber:session-status',
210
+ type: 'aiworker:session-status',
211
211
  properties: {
212
212
  sessionID: sessionId,
213
213
  status: state.status,
@@ -47,7 +47,7 @@ describe('session runtime', () => {
47
47
  runtime.markSessionViewed('session-1', 'client-1');
48
48
 
49
49
  expect(events).toContainEqual({
50
- type: 'openchamber:session-status',
50
+ type: 'aiworker:session-status',
51
51
  properties: expect.objectContaining({
52
52
  sessionID: 'session-1',
53
53
  status: 'idle',
@@ -55,7 +55,7 @@ describe('session runtime', () => {
55
55
  }),
56
56
  });
57
57
  expect(events.at(-1)).toEqual({
58
- type: 'openchamber:session-status',
58
+ type: 'aiworker:session-status',
59
59
  properties: {
60
60
  sessionID: 'session-1',
61
61
  status: 'idle',
@@ -90,7 +90,7 @@ describe('session runtime', () => {
90
90
  });
91
91
 
92
92
  expect(events).toContainEqual({
93
- type: 'openchamber:session-status',
93
+ type: 'aiworker:session-status',
94
94
  properties: expect.objectContaining({
95
95
  sessionID: 'legacy-session-1',
96
96
  status: 'busy',
@@ -132,7 +132,7 @@ describe('session runtime', () => {
132
132
  });
133
133
 
134
134
  const activityPhases = () => events
135
- .filter((event) => event.type === 'openchamber:session-activity')
135
+ .filter((event) => event.type === 'aiworker:session-activity')
136
136
  .map((event) => event.properties.phase);
137
137
 
138
138
  expect(activityPhases()).toEqual(['busy', 'cooldown']);
@@ -224,12 +224,12 @@ describe('session runtime', () => {
224
224
  });
225
225
 
226
226
  const terminalEvents = events.filter((event) => (
227
- event.type === 'openchamber:session-status' || event.type === 'session.error'
227
+ event.type === 'aiworker:session-status' || event.type === 'session.error'
228
228
  ));
229
229
  expect(terminalEvents).toHaveLength(6);
230
230
  for (const sessionId of ['session-busy-1', 'session-busy-2', 'session-busy-3']) {
231
231
  expect(terminalEvents).toContainEqual({
232
- type: 'openchamber:session-status',
232
+ type: 'aiworker:session-status',
233
233
  properties: expect.objectContaining({
234
234
  sessionID: sessionId,
235
235
  status: 'idle',