@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
@@ -28,8 +28,8 @@ export const resolveOpenCodeEnvConfig = (options = {}) => {
28
28
  const configuredOpenCodePort = (() => {
29
29
  const raw =
30
30
  env.OPENCODE_PORT ||
31
- env.OPENCHAMBER_OPENCODE_PORT ||
32
- env.OPENCHAMBER_INTERNAL_PORT;
31
+ env.AIWORKER_OPENCODE_PORT ||
32
+ env.AIWORKER_INTERNAL_PORT;
33
33
  if (!raw) {
34
34
  return null;
35
35
  }
@@ -72,20 +72,20 @@ export const resolveOpenCodeEnvConfig = (options = {}) => {
72
72
  const effectivePort = configuredOpenCodeHost?.port ?? configuredOpenCodePort;
73
73
 
74
74
  const configuredOpenCodeHostname = (() => {
75
- const raw = env.OPENCHAMBER_OPENCODE_HOSTNAME;
75
+ const raw = env.AIWORKER_OPENCODE_HOSTNAME;
76
76
  if (typeof raw !== 'string') {
77
77
  return '127.0.0.1';
78
78
  }
79
79
  const trimmed = raw.trim();
80
80
  if (!trimmed) {
81
81
  logger.warn(
82
- `[config] Ignoring OPENCHAMBER_OPENCODE_HOSTNAME=${JSON.stringify(raw)}: empty after trimming`,
82
+ `[config] Ignoring AIWORKER_OPENCODE_HOSTNAME=${JSON.stringify(raw)}: empty after trimming`,
83
83
  );
84
84
  return '127.0.0.1';
85
85
  }
86
86
  if (!isValidOpenCodeHostname(trimmed)) {
87
87
  logger.error(
88
- `[config] Rejecting OPENCHAMBER_OPENCODE_HOSTNAME=${JSON.stringify(raw)}: `
88
+ `[config] Rejecting AIWORKER_OPENCODE_HOSTNAME=${JSON.stringify(raw)}: `
89
89
  + 'must be a valid hostname or IP address (for example 127.0.0.1, 0.0.0.0, localhost, [::1]); '
90
90
  + 'falling back to 127.0.0.1 (loopback only)',
91
91
  );
@@ -55,19 +55,19 @@ describe('resolveOpenCodeEnvConfig hostname', () => {
55
55
  expect(resolveOpenCodeEnvConfig({ env: {} }).configuredOpenCodeHostname).toBe('127.0.0.1');
56
56
  });
57
57
 
58
- it('reads OPENCHAMBER_OPENCODE_HOSTNAME', () => {
59
- const result = resolveOpenCodeEnvConfig({ env: { OPENCHAMBER_OPENCODE_HOSTNAME: '0.0.0.0' } });
58
+ it('reads AIWORKER_OPENCODE_HOSTNAME', () => {
59
+ const result = resolveOpenCodeEnvConfig({ env: { AIWORKER_OPENCODE_HOSTNAME: '0.0.0.0' } });
60
60
  expect(result.configuredOpenCodeHostname).toBe('0.0.0.0');
61
61
  });
62
62
 
63
63
  it('trims surrounding whitespace', () => {
64
- const result = resolveOpenCodeEnvConfig({ env: { OPENCHAMBER_OPENCODE_HOSTNAME: ' tailscale-host ' } });
64
+ const result = resolveOpenCodeEnvConfig({ env: { AIWORKER_OPENCODE_HOSTNAME: ' tailscale-host ' } });
65
65
  expect(result.configuredOpenCodeHostname).toBe('tailscale-host');
66
66
  });
67
67
 
68
68
  it('warns and falls back for an empty value', () => {
69
69
  const logger = { warn: vi.fn(), error: vi.fn() };
70
- const result = resolveOpenCodeEnvConfig({ env: { OPENCHAMBER_OPENCODE_HOSTNAME: ' ' }, logger });
70
+ const result = resolveOpenCodeEnvConfig({ env: { AIWORKER_OPENCODE_HOSTNAME: ' ' }, logger });
71
71
  expect(result.configuredOpenCodeHostname).toBe('127.0.0.1');
72
72
  expect(logger.warn).toHaveBeenCalledWith(expect.stringContaining('empty after trimming'));
73
73
  expect(logger.error).not.toHaveBeenCalled();
@@ -76,19 +76,19 @@ describe('resolveOpenCodeEnvConfig hostname', () => {
76
76
  it('rejects invalid values with a clear error and falls back to loopback', () => {
77
77
  const logger = { warn: vi.fn(), error: vi.fn() };
78
78
  const result = resolveOpenCodeEnvConfig({
79
- env: { OPENCHAMBER_OPENCODE_HOSTNAME: 'http://nope:4096' },
79
+ env: { AIWORKER_OPENCODE_HOSTNAME: 'http://nope:4096' },
80
80
  logger,
81
81
  });
82
82
  expect(result.configuredOpenCodeHostname).toBe('127.0.0.1');
83
83
  expect(logger.error).toHaveBeenCalledWith(
84
- expect.stringContaining('Rejecting OPENCHAMBER_OPENCODE_HOSTNAME'),
84
+ expect.stringContaining('Rejecting AIWORKER_OPENCODE_HOSTNAME'),
85
85
  );
86
86
  expect(logger.error).toHaveBeenCalledWith(expect.stringContaining('127.0.0.1'));
87
87
  });
88
88
 
89
89
  it('keeps other env config intact when the hostname is validated', () => {
90
90
  const result = resolveOpenCodeEnvConfig({
91
- env: { OPENCHAMBER_OPENCODE_HOSTNAME: '0.0.0.0', OPENCODE_PORT: '4096' },
91
+ env: { AIWORKER_OPENCODE_HOSTNAME: '0.0.0.0', OPENCODE_PORT: '4096' },
92
92
  });
93
93
  expect(result.configuredOpenCodeHostname).toBe('0.0.0.0');
94
94
  expect(result.configuredOpenCodePort).toBe(4096);
@@ -289,7 +289,7 @@ export const createOpenCodeEnvRuntime = (deps) => {
289
289
  const bundledOpenCodeCliCandidates = () => {
290
290
  const names = process.platform === 'win32' ? ['opencode.exe'] : ['opencode'];
291
291
  const roots = [
292
- process.env.OPENCHAMBER_BUNDLED_OPENCODE_CLI_DIR,
292
+ process.env.AIWORKER_BUNDLED_OPENCODE_CLI_DIR,
293
293
  typeof process.resourcesPath === 'string' ? path.join(process.resourcesPath, 'opencode-cli') : null,
294
294
  ]
295
295
  .map((value) => (typeof value === 'string' ? value.trim() : ''))
@@ -362,8 +362,8 @@ export const createOpenCodeEnvRuntime = (deps) => {
362
362
  const explicit = [
363
363
  process.env.OPENCODE_BINARY,
364
364
  process.env.OPENCODE_PATH,
365
- process.env.OPENCHAMBER_OPENCODE_PATH,
366
- process.env.OPENCHAMBER_OPENCODE_BIN,
365
+ process.env.AIWORKER_OPENCODE_PATH,
366
+ process.env.AIWORKER_OPENCODE_BIN,
367
367
  ]
368
368
  .map(stripWrappingQuotes)
369
369
  .filter(Boolean);
@@ -485,7 +485,7 @@ export const createOpenCodeEnvRuntime = (deps) => {
485
485
  };
486
486
 
487
487
  const resolveNodeCliPath = () => {
488
- const explicit = [process.env.NODE_BINARY, process.env.OPENCHAMBER_NODE_BINARY]
488
+ const explicit = [process.env.NODE_BINARY, process.env.AIWORKER_NODE_BINARY]
489
489
  .map((v) => (typeof v === 'string' ? v.trim() : ''))
490
490
  .filter(Boolean);
491
491
 
@@ -551,7 +551,7 @@ export const createOpenCodeEnvRuntime = (deps) => {
551
551
  };
552
552
 
553
553
  const resolveBunCliPath = () => {
554
- const explicit = [process.env.BUN_BINARY, process.env.OPENCHAMBER_BUN_BINARY]
554
+ const explicit = [process.env.BUN_BINARY, process.env.AIWORKER_BUN_BINARY]
555
555
  .map((v) => (typeof v === 'string' ? v.trim() : ''))
556
556
  .filter(Boolean);
557
557
 
@@ -950,7 +950,7 @@ export const createOpenCodeEnvRuntime = (deps) => {
950
950
  const createConfiguredOpencodeBinaryError = (raw, normalized) => {
951
951
  const configured = typeof raw === 'string' ? raw.trim() : '';
952
952
  const candidate = typeof normalized === 'string' && normalized.trim().length > 0 ? normalized.trim() : configured;
953
- const messageSuffix = 'OpenChamber needs the standalone opencode CLI. Install it and set settings.opencodeBinary to the CLI path, for example ~/.opencode/bin/opencode, or leave the setting empty to use PATH lookup.';
953
+ const messageSuffix = 'AiWorker needs the standalone opencode CLI. Install it and set settings.opencodeBinary to the CLI path, for example ~/.opencode/bin/opencode, or leave the setting empty to use PATH lookup.';
954
954
  const error = (() => {
955
955
  if (isKnownOpenCodeDesktopAppPath(candidate) || isKnownOpenCodeDesktopAppPath(configured)) {
956
956
  const platformName = process.platform === 'win32' ? 'Windows desktop app install' : 'macOS desktop app bundle';
@@ -983,7 +983,7 @@ export const createOpenCodeEnvRuntime = (deps) => {
983
983
  };
984
984
 
985
985
  const createConfiguredWslOpencodeError = (raw) => new Error(
986
- `Configured settings.opencodeBinary uses WSL but OpenChamber could not resolve a WSL OpenCode command: ${raw}. Ensure WSL is available and opencode is installed in the configured distro.`
986
+ `Configured settings.opencodeBinary uses WSL but AiWorker could not resolve a WSL OpenCode command: ${raw}. Ensure WSL is available and opencode is installed in the configured distro.`
987
987
  );
988
988
 
989
989
  const normalizeOpencodeBinarySetting = (raw) => {
@@ -1044,7 +1044,7 @@ export const createOpenCodeEnvRuntime = (deps) => {
1044
1044
  if (strict) {
1045
1045
  throw createConfiguredWslOpencodeError(raw);
1046
1046
  }
1047
- console.warn(`Configured settings.opencodeBinary uses WSL, which is no longer supported by OpenChamber desktop: ${raw}`);
1047
+ console.warn(`Configured settings.opencodeBinary uses WSL, which is no longer supported by AiWorker desktop: ${raw}`);
1048
1048
  return null;
1049
1049
  }
1050
1050
 
@@ -1053,7 +1053,7 @@ export const createOpenCodeEnvRuntime = (deps) => {
1053
1053
  if (strict) {
1054
1054
  throw createConfiguredWslOpencodeError(raw);
1055
1055
  }
1056
- console.warn(`Configured settings.opencodeBinary points to WSL, which is no longer supported by OpenChamber desktop: ${raw}`);
1056
+ console.warn(`Configured settings.opencodeBinary points to WSL, which is no longer supported by AiWorker desktop: ${raw}`);
1057
1057
  return null;
1058
1058
  }
1059
1059
 
@@ -1132,7 +1132,7 @@ export const createOpenCodeEnvRuntime = (deps) => {
1132
1132
  return state.resolvedGitBinary;
1133
1133
  }
1134
1134
 
1135
- const explicit = [process.env.GIT_BINARY, process.env.OPENCHAMBER_GIT_BINARY]
1135
+ const explicit = [process.env.GIT_BINARY, process.env.AIWORKER_GIT_BINARY]
1136
1136
  .map((value) => (typeof value === 'string' ? value.trim() : ''))
1137
1137
  .filter(Boolean);
1138
1138
  for (const candidate of explicit) {
@@ -9,10 +9,10 @@ const originalComSpec = process.env.ComSpec;
9
9
  const originalPath = process.env.PATH;
10
10
  const originalLocalAppData = process.env.LOCALAPPDATA;
11
11
  const originalSystemRoot = process.env.SystemRoot;
12
- const originalBundledOpencodeCliDir = process.env.OPENCHAMBER_BUNDLED_OPENCODE_CLI_DIR;
12
+ const originalBundledOpencodeCliDir = process.env.AIWORKER_BUNDLED_OPENCODE_CLI_DIR;
13
13
  const originalResourcesPath = process.resourcesPath;
14
14
  const originalWslBinary = process.env.WSL_BINARY;
15
- const originalOpenChamberWslBinary = process.env.OPENCHAMBER_WSL_BINARY;
15
+ const originalAiWorkerWslBinary = process.env.AIWORKER_WSL_BINARY;
16
16
  const originalPlatform = process.platform;
17
17
  const tempDirs = [];
18
18
  const itIf = (condition) => condition ? it : it.skip;
@@ -69,9 +69,9 @@ afterEach(() => {
69
69
  }
70
70
 
71
71
  if (typeof originalBundledOpencodeCliDir === 'string') {
72
- process.env.OPENCHAMBER_BUNDLED_OPENCODE_CLI_DIR = originalBundledOpencodeCliDir;
72
+ process.env.AIWORKER_BUNDLED_OPENCODE_CLI_DIR = originalBundledOpencodeCliDir;
73
73
  } else {
74
- delete process.env.OPENCHAMBER_BUNDLED_OPENCODE_CLI_DIR;
74
+ delete process.env.AIWORKER_BUNDLED_OPENCODE_CLI_DIR;
75
75
  }
76
76
 
77
77
  Object.defineProperty(process, 'resourcesPath', {
@@ -85,10 +85,10 @@ afterEach(() => {
85
85
  delete process.env.WSL_BINARY;
86
86
  }
87
87
 
88
- if (typeof originalOpenChamberWslBinary === 'string') {
89
- process.env.OPENCHAMBER_WSL_BINARY = originalOpenChamberWslBinary;
88
+ if (typeof originalAiWorkerWslBinary === 'string') {
89
+ process.env.AIWORKER_WSL_BINARY = originalAiWorkerWslBinary;
90
90
  } else {
91
- delete process.env.OPENCHAMBER_WSL_BINARY;
91
+ delete process.env.AIWORKER_WSL_BINARY;
92
92
  }
93
93
  });
94
94
 
@@ -133,21 +133,21 @@ describe('OpenCode env runtime', () => {
133
133
 
134
134
  it('clears AppImage ARGV0 when applying a login-shell env snapshot', () => {
135
135
  const previousArgv0 = process.env.ARGV0;
136
- process.env.ARGV0 = '/path/to/OpenChamber.AppImage';
137
- delete process.env.OPENCHAMBER_ARGV0_TEST_MARKER;
136
+ process.env.ARGV0 = '/path/to/AiWorker.AppImage';
137
+ delete process.env.AIWORKER_ARGV0_TEST_MARKER;
138
138
  const { runtime, state } = createRuntime({});
139
139
  state.cachedLoginShellEnvSnapshot = {
140
140
  PATH: '/usr/bin',
141
141
  ARGV0: '/leaked/from/shell.AppImage',
142
- OPENCHAMBER_ARGV0_TEST_MARKER: '1',
142
+ AIWORKER_ARGV0_TEST_MARKER: '1',
143
143
  };
144
144
 
145
145
  try {
146
146
  runtime.applyLoginShellEnvSnapshot();
147
147
  expect(process.env.ARGV0).toBeUndefined();
148
- expect(process.env.OPENCHAMBER_ARGV0_TEST_MARKER).toBe('1');
148
+ expect(process.env.AIWORKER_ARGV0_TEST_MARKER).toBe('1');
149
149
  } finally {
150
- delete process.env.OPENCHAMBER_ARGV0_TEST_MARKER;
150
+ delete process.env.AIWORKER_ARGV0_TEST_MARKER;
151
151
  if (previousArgv0 === undefined) delete process.env.ARGV0;
152
152
  else process.env.ARGV0 = previousArgv0;
153
153
  }
@@ -155,7 +155,7 @@ describe('OpenCode env runtime', () => {
155
155
 
156
156
  it('clears AppImage ARGV0 even when no login-shell snapshot is available', () => {
157
157
  const previousArgv0 = process.env.ARGV0;
158
- process.env.ARGV0 = '/path/to/OpenChamber.AppImage';
158
+ process.env.ARGV0 = '/path/to/AiWorker.AppImage';
159
159
  const { runtime, state } = createRuntime({});
160
160
  state.cachedLoginShellEnvSnapshot = null;
161
161
 
@@ -244,7 +244,7 @@ describe('OpenCode env runtime', () => {
244
244
  fs.chmodSync(bundledBinary, 0o755);
245
245
  fs.chmodSync(pathBinary, 0o755);
246
246
  }
247
- process.env.OPENCHAMBER_BUNDLED_OPENCODE_CLI_DIR = bundledDir;
247
+ process.env.AIWORKER_BUNDLED_OPENCODE_CLI_DIR = bundledDir;
248
248
  process.env.PATH = pathDir;
249
249
  delete process.env.OPENCODE_BINARY;
250
250
  const { runtime, state } = createRuntime({});
@@ -258,7 +258,7 @@ describe('OpenCode env runtime', () => {
258
258
  const bundledBinary = path.join(bundledDir, process.platform === 'win32' ? 'opencode.exe' : 'opencode');
259
259
  fs.writeFileSync(bundledBinary, '#!/bin/sh\nexit 0\n');
260
260
  if (process.platform !== 'win32') fs.chmodSync(bundledBinary, 0o755);
261
- process.env.OPENCHAMBER_BUNDLED_OPENCODE_CLI_DIR = bundledDir;
261
+ process.env.AIWORKER_BUNDLED_OPENCODE_CLI_DIR = bundledDir;
262
262
  const { runtime } = createRuntime({});
263
263
 
264
264
  expect(runtime.isBundledOpenCodeCliPath(bundledBinary)).toBe(true);
@@ -276,7 +276,7 @@ describe('OpenCode env runtime', () => {
276
276
  fs.chmodSync(bundledBinary, 0o755);
277
277
  fs.chmodSync(explicitBinary, 0o755);
278
278
  }
279
- process.env.OPENCHAMBER_BUNDLED_OPENCODE_CLI_DIR = bundledDir;
279
+ process.env.AIWORKER_BUNDLED_OPENCODE_CLI_DIR = bundledDir;
280
280
  process.env.OPENCODE_BINARY = explicitBinary;
281
281
  const { runtime, state } = createRuntime({});
282
282
 
@@ -298,7 +298,7 @@ describe('OpenCode env runtime', () => {
298
298
  value: resourcesPath,
299
299
  });
300
300
  process.env.PATH = createTempDir('openchamber-empty-path-');
301
- delete process.env.OPENCHAMBER_BUNDLED_OPENCODE_CLI_DIR;
301
+ delete process.env.AIWORKER_BUNDLED_OPENCODE_CLI_DIR;
302
302
  delete process.env.OPENCODE_BINARY;
303
303
  const emptyHome = createTempDir('openchamber-empty-home-');
304
304
  const { runtime, state } = createRuntime({}, {
@@ -400,7 +400,7 @@ describe('OpenCode env runtime', () => {
400
400
  process.env.PATH = dir;
401
401
  process.env.SystemRoot = dir;
402
402
  process.env.WSL_BINARY = path.join(dir, 'missing-wsl.exe');
403
- process.env.OPENCHAMBER_WSL_BINARY = path.join(dir, 'missing-openchamber-wsl.exe');
403
+ process.env.AIWORKER_WSL_BINARY = path.join(dir, 'missing-openchamber-wsl.exe');
404
404
  const { runtime } = createRuntime({ opencodeBinary: 'wsl:/usr/local/bin/opencode' });
405
405
 
406
406
  await expect(runtime.applyOpencodeBinaryFromSettings({ strict: true })).rejects.toMatchObject({
@@ -10,15 +10,17 @@ import { registerDevServerRoutes } from '../dev-servers/routes.js';
10
10
  import { registerMagicPromptRoutes } from '../magic-prompts/routes.js';
11
11
  import { registerSessionFoldersRoutes } from '../session-folders/routes.js';
12
12
  import { registerProjectContextRoutes } from '../project-context/routes.js';
13
+ import { registerProjectSetupRoutes } from '../projects/routes.js';
13
14
  import { registerAgentMemoryRoutes } from '../agent-memory/routes.js';
14
15
  import { registerSessionKnowledgeRoutes } from '../session-knowledge/routes.js';
15
16
  import { registerPermissionAutoAcceptRoutes } from '../permission-auto-accept/runtime.js';
17
+ import { registerMessageQueueRoutes } from '../message-queue/runtime.js';
16
18
  import { registerConfigEntityRoutes } from './config-entity-routes.js';
17
19
  import { registerSettingsUtilityRoutes } from './core-routes.js';
18
20
  import { registerProjectIconRoutes } from './project-icon-routes.js';
19
21
  import { registerScheduledTaskRoutes } from '../scheduled-tasks/routes.js';
20
- import { registerOpenChamberSessionRoutes } from '../openchamber-sessions/routes.js';
21
- import { registerOpenChamberControlRoutes } from '../openchamber-control/routes.js';
22
+ import { registerAiWorkerSessionRoutes } from '../openchamber-sessions/routes.js';
23
+ import { registerAiWorkerControlRoutes } from '../openchamber-control/routes.js';
22
24
  import { registerMarkdownImageGrantRoutes } from '../markdown-image-grants/routes.js';
23
25
  import { registerSkillRoutes } from './skill-routes.js';
24
26
  import { registerPluginRoutes } from './plugin-routes.js';
@@ -95,8 +97,9 @@ export const createFeatureRoutesRuntime = (dependencies) => {
95
97
  spawn,
96
98
  resolveGitBinaryForSpawn,
97
99
  createFsSearchRuntime,
98
- openchamberDataDir,
99
- openchamberUserConfigRoot,
100
+ aiworkerDataDir,
101
+ aiworkerUserConfigRoot,
102
+ managedChatsRoot,
100
103
  normalizeDirectoryPath,
101
104
  resolveProjectDirectory,
102
105
  resolveOptionalProjectDirectory,
@@ -128,10 +131,11 @@ export const createFeatureRoutesRuntime = (dependencies) => {
128
131
  openChamberSessionService,
129
132
  openChamberControlService,
130
133
  waitForOpenCodeReady,
131
- getOpenChamberEventClients,
134
+ getAiWorkerEventClients,
132
135
  writeSseEvent,
133
136
  emitSessionCreatedEvent,
134
137
  permissionAutoAcceptRuntime,
138
+ messageQueueRuntime,
135
139
  } = routeDependencies;
136
140
 
137
141
  registerSettingsUtilityRoutes(app, {
@@ -141,6 +145,7 @@ export const createFeatureRoutesRuntime = (dependencies) => {
141
145
  });
142
146
 
143
147
  registerPermissionAutoAcceptRoutes(app, permissionAutoAcceptRuntime);
148
+ registerMessageQueueRoutes(app, messageQueueRuntime);
144
149
 
145
150
  registerOpenCodeRoutes(app, {
146
151
  crypto,
@@ -166,7 +171,7 @@ export const createFeatureRoutesRuntime = (dependencies) => {
166
171
  fsPromises,
167
172
  path,
168
173
  crypto,
169
- openchamberDataDir,
174
+ aiworkerDataDir,
170
175
  sanitizeProjects,
171
176
  readSettingsFromDiskMigrated,
172
177
  persistSettings,
@@ -181,11 +186,11 @@ export const createFeatureRoutesRuntime = (dependencies) => {
181
186
  projectConfigRuntime,
182
187
  scheduledTasksRuntime,
183
188
  scheduledTaskService,
184
- getOpenChamberEventClients,
189
+ getAiWorkerEventClients,
185
190
  writeSseEvent,
186
191
  });
187
192
 
188
- registerOpenChamberSessionRoutes(app, {
193
+ registerAiWorkerSessionRoutes(app, {
189
194
  readSettingsFromDiskMigrated,
190
195
  sanitizeProjects,
191
196
  validateDirectoryPath,
@@ -196,7 +201,7 @@ export const createFeatureRoutesRuntime = (dependencies) => {
196
201
  sessionService: openChamberSessionService,
197
202
  });
198
203
 
199
- registerOpenChamberControlRoutes(app, { controlService: openChamberControlService });
204
+ registerAiWorkerControlRoutes(app, { controlService: openChamberControlService });
200
205
 
201
206
  registerMarkdownImageGrantRoutes(app, {
202
207
  fsPromises,
@@ -307,16 +312,17 @@ export const createFeatureRoutesRuntime = (dependencies) => {
307
312
  registerMagicPromptRoutes(app, {
308
313
  fsPromises,
309
314
  path,
310
- openchamberDataDir,
315
+ aiworkerDataDir,
311
316
  });
312
317
  registerProjectContextRoutes(app, { projectContextRuntime });
318
+ registerProjectSetupRoutes(app, { projectConfigRuntime });
313
319
  registerAgentMemoryRoutes(app, { agentMemoryRuntime, isAgentMemoryEnabled });
314
320
  registerSessionKnowledgeRoutes(app, { sessionKnowledgeRuntime });
315
321
 
316
322
  registerSessionFoldersRoutes(app, {
317
323
  fsPromises,
318
324
  path,
319
- openchamberDataDir,
325
+ aiworkerDataDir,
320
326
  });
321
327
  registerFsRoutes(app, {
322
328
  os,
@@ -328,7 +334,8 @@ export const createFeatureRoutesRuntime = (dependencies) => {
328
334
  resolveProjectDirectory,
329
335
  buildAugmentedPath,
330
336
  resolveGitBinaryForSpawn,
331
- openchamberUserConfigRoot,
337
+ aiworkerUserConfigRoot,
338
+ managedChatsRoot,
332
339
  });
333
340
  };
334
341
 
@@ -7,8 +7,8 @@ export const createHmrStateRuntime = (dependencies) => {
7
7
  } = dependencies;
8
8
 
9
9
  const getInitialOpenCodeWorkingDirectory = () => {
10
- const configured = typeof processLike.env.OPENCHAMBER_OPENCODE_CWD === 'string'
11
- ? processLike.env.OPENCHAMBER_OPENCODE_CWD.trim()
10
+ const configured = typeof processLike.env.AIWORKER_OPENCODE_CWD === 'string'
11
+ ? processLike.env.AIWORKER_OPENCODE_CWD.trim()
12
12
  : '';
13
13
  return configured || os.homedir();
14
14
  };
@@ -11,7 +11,7 @@ const createRuntime = (env = {}) => createHmrStateRuntime({
11
11
 
12
12
  describe('hmr state runtime', () => {
13
13
  it('uses configured OpenCode cwd when provided', () => {
14
- const runtime = createRuntime({ OPENCHAMBER_OPENCODE_CWD: '/tmp/openchamber-data' });
14
+ const runtime = createRuntime({ AIWORKER_OPENCODE_CWD: '/tmp/openchamber-data' });
15
15
 
16
16
  expect(runtime.getOrCreateHmrState().openCodeWorkingDirectory).toBe('/tmp/openchamber-data');
17
17
  });
@@ -0,0 +1,14 @@
1
+ export const DEFAULT_INPUT_HISTORY_SCOPE = 'session';
2
+ export const DEFAULT_INPUT_HISTORY_LIMIT = 40;
3
+ const MIN_INPUT_HISTORY_LIMIT = 1;
4
+ const MAX_INPUT_HISTORY_LIMIT = 100;
5
+
6
+ export const isInputHistoryScope = (value) => (
7
+ value === 'global' || value === 'session'
8
+ );
9
+
10
+ export const isInputHistoryLimit = (value) => (
11
+ Number.isInteger(value)
12
+ && value >= MIN_INPUT_HISTORY_LIMIT
13
+ && value <= MAX_INPUT_HISTORY_LIMIT
14
+ );
@@ -10,13 +10,13 @@ const parsePositiveInt = (value, fallback) => {
10
10
  return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
11
11
  };
12
12
 
13
- const HEALTH_CHECK_TIMEOUT_MS = parsePositiveInt(process.env.OPENCHAMBER_OPENCODE_HEALTH_TIMEOUT_MS, 5000);
13
+ const HEALTH_CHECK_TIMEOUT_MS = parsePositiveInt(process.env.AIWORKER_OPENCODE_HEALTH_TIMEOUT_MS, 5000);
14
14
  const HEALTH_CHECK_MAX_CONSECUTIVE_FAILURES = parsePositiveInt(
15
- process.env.OPENCHAMBER_OPENCODE_HEALTH_CONSECUTIVE_FAILURES,
15
+ process.env.AIWORKER_OPENCODE_HEALTH_CONSECUTIVE_FAILURES,
16
16
  20
17
17
  );
18
- const HEALTH_CHECK_INTERVAL_OVERRIDE_MS = parsePositiveInt(process.env.OPENCHAMBER_OPENCODE_HEALTH_INTERVAL_MS, 0);
19
- const HEALTH_CHECK_RESULT_CACHE_MS = parsePositiveInt(process.env.OPENCHAMBER_OPENCODE_HEALTH_CACHE_MS, 750);
18
+ const HEALTH_CHECK_INTERVAL_OVERRIDE_MS = parsePositiveInt(process.env.AIWORKER_OPENCODE_HEALTH_INTERVAL_MS, 0);
19
+ const HEALTH_CHECK_RESULT_CACHE_MS = parsePositiveInt(process.env.AIWORKER_OPENCODE_HEALTH_CACHE_MS, 750);
20
20
  const OPENCODE_HEALTH_PATH = '/global/health';
21
21
  // Last-used directory plus the three most recently opened projects — deeper
22
22
  // tails are unlikely to be the user's first click and just add background work.
@@ -490,7 +490,7 @@ export const createOpenCodeLifecycleRuntime = (deps) => {
490
490
  const onExit = (code, signal) => {
491
491
  const reason = signal ? `signal ${signal}` : `code ${code}`;
492
492
  const appBundleHint = process.platform === 'darwin' && /\/OpenCode\.app\/Contents\/MacOS\/(?:OpenCode|opencode-cli)$/i.test(binary)
493
- ? ' The configured binary appears to point at the macOS desktop app bundle; OpenChamber needs the standalone opencode CLI.'
493
+ ? ' The configured binary appears to point at the macOS desktop app bundle; AiWorker needs the standalone opencode CLI.'
494
494
  : '';
495
495
  finish(reject, new Error(`OpenCode process exited before serving with ${reason}. Binary used: ${binary}.${appBundleHint} ${formatCapturedOutput({ stdout, stderr })}`));
496
496
  };
@@ -511,7 +511,7 @@ export const createOpenCodeLifecycleRuntime = (deps) => {
511
511
 
512
512
  // Record this child so a future run can reap it if we crash before teardown.
513
513
  // The web-server lifecycle runs in-process inside multiple hosts, so tag the
514
- // actual host (Electron sets OPENCHAMBER_RUNTIME='desktop'; the standalone
514
+ // actual host (Electron sets AIWORKER_RUNTIME='desktop'; the standalone
515
515
  // web CLI leaves it unset → 'web'; SSH remote → 'ssh-remote') rather than a
516
516
  // hardcoded label, matching the server's existing runtimeName convention.
517
517
  await registerManagedProcess({
@@ -519,7 +519,7 @@ export const createOpenCodeLifecycleRuntime = (deps) => {
519
519
  ownerPid: process.pid,
520
520
  port,
521
521
  binary,
522
- runtime: process.env.OPENCHAMBER_RUNTIME || 'web',
522
+ runtime: process.env.AIWORKER_RUNTIME || 'web',
523
523
  });
524
524
 
525
525
  return {
@@ -1024,7 +1024,7 @@ export const createOpenCodeLifecycleRuntime = (deps) => {
1024
1024
 
1025
1025
  // A managed OpenCode process is restarted (and thus re-reads config from
1026
1026
  // disk) by restartOpenCode(). An external OpenCode server is NOT owned by
1027
- // OpenChamber: restartOpenCode() only re-probes its health, so the freshly
1027
+ // AiWorker: restartOpenCode() only re-probes its health, so the freshly
1028
1028
  // written config is on disk but the running server keeps serving its old,
1029
1029
  // startup-cached config until the user restarts it themselves. Report this
1030
1030
  // honestly so callers don't claim the change is live.
@@ -636,7 +636,7 @@ describe('OpenCode lifecycle', () => {
636
636
  it('strips AppImage ARGV0 from managed OpenCode launch env', async () => {
637
637
  delete process.env.OPENCODE_BINARY;
638
638
  const previousArgv0 = process.env.ARGV0;
639
- process.env.ARGV0 = '/path/to/OpenChamber/OpenChamber-1.17.2-linux-x86_64.AppImage';
639
+ process.env.ARGV0 = '/path/to/AiWorker/AiWorker-1.17.2-linux-x86_64.AppImage';
640
640
  const child = createMockChild();
641
641
  spawnMock.mockImplementationOnce(() => {
642
642
  queueMicrotask(() => {
@@ -667,7 +667,7 @@ describe('OpenCode lifecycle', () => {
667
667
  }
668
668
  });
669
669
 
670
- it('adds managed OpenChamber tool environment without allowing it to replace launch invariants', async () => {
670
+ it('adds managed AiWorker tool environment without allowing it to replace launch invariants', async () => {
671
671
  const child = createMockChild();
672
672
  spawnMock.mockImplementationOnce(() => {
673
673
  queueMicrotask(() => {
@@ -677,7 +677,7 @@ describe('OpenCode lifecycle', () => {
677
677
  });
678
678
  const getManagedOpenCodeEnv = vi.fn(async () => ({
679
679
  OPENCODE_CONFIG_CONTENT: '{"plugin":["file:///tool.js"]}',
680
- OPENCHAMBER_AGENT_TOOL_TOKEN: 'ephemeral',
680
+ AIWORKER_AGENT_TOOL_TOKEN: 'ephemeral',
681
681
  PATH: '/untrusted/path',
682
682
  OPENCODE_SERVER_PASSWORD: 'untrusted-password',
683
683
  }));
@@ -688,7 +688,7 @@ describe('OpenCode lifecycle', () => {
688
688
 
689
689
  expect(getManagedOpenCodeEnv).toHaveBeenCalledOnce();
690
690
  expect(options.env.OPENCODE_CONFIG_CONTENT).toBe('{"plugin":["file:///tool.js"]}');
691
- expect(options.env.OPENCHAMBER_AGENT_TOOL_TOKEN).toBe('ephemeral');
691
+ expect(options.env.AIWORKER_AGENT_TOOL_TOKEN).toBe('ephemeral');
692
692
  expect(options.env.PATH).toBe('/home/user/.bun/bin:/usr/local/bin:/usr/bin');
693
693
  expect(options.env.OPENCODE_SERVER_PASSWORD).toBe('password');
694
694
 
@@ -0,0 +1,35 @@
1
+ import { parse as parseJsonc } from 'jsonc-parser';
2
+
3
+ const isJsonObject = (value) => value !== null && value !== undefined && Object.getPrototypeOf(value) === Object.prototype;
4
+
5
+ /**
6
+ * Append a managed AiWorker plugin to the `plugin` list of an
7
+ * `OPENCODE_CONFIG_CONTENT` value.
8
+ *
9
+ * Existing entries are preserved; an earlier entry for the same URL is dropped
10
+ * so a restart never registers the same plugin twice. Every managed plugin
11
+ * (agent tools, system prompt optimizer, MCP reconnect) goes through this one
12
+ * merge so they compose in any order.
13
+ *
14
+ * @param {string | undefined} rawConfig the current `OPENCODE_CONFIG_CONTENT`, JSONC or unset
15
+ * @param {string} pluginUrl `file://` URL of the materialized plugin
16
+ * @param {string} purpose short noun phrase for the error message, e.g. "managed tool"
17
+ * @returns {string} the merged config as JSON
18
+ */
19
+ export const appendManagedPlugin = (rawConfig, pluginUrl, purpose) => {
20
+ const errors = [];
21
+ const text = (rawConfig ?? '').trim();
22
+ const parsed = text ? parseJsonc(text, errors, { allowTrailingComma: true }) : {};
23
+ if (errors.length > 0 || !isJsonObject(parsed)) {
24
+ throw new Error(`OPENCODE_CONFIG_CONTENT must contain a valid JSON object before AiWorker can inject its ${purpose}`);
25
+ }
26
+ if (parsed.plugin !== undefined && !Array.isArray(parsed.plugin)) {
27
+ throw new Error(`OPENCODE_CONFIG_CONTENT plugin must be an array before AiWorker can inject its ${purpose}`);
28
+ }
29
+ const configured = Array.isArray(parsed.plugin) ? parsed.plugin : [];
30
+ parsed.plugin = [
31
+ ...configured.filter((value) => value !== pluginUrl && (!Array.isArray(value) || value[0] !== pluginUrl)),
32
+ pluginUrl,
33
+ ];
34
+ return JSON.stringify(parsed);
35
+ };
@@ -1,6 +1,6 @@
1
1
  // Managed OpenCode process registry + orphan reaper.
2
2
  //
3
- // OpenChamber spawns the OpenCode server as an EXTERNAL child binary (on Unix
3
+ // AiWorker spawns the OpenCode server as an EXTERNAL child binary (on Unix
4
4
  // with `detached: true`, so it leads its own process group). That binary can
5
5
  // therefore outlive its parent if the parent is hard-killed/crashes/`Ctrl+C`ed
6
6
  // before graceful teardown runs — leaving an orphaned `opencode serve` that
@@ -54,9 +54,9 @@ import { promisify } from 'node:util';
54
54
  const defaultExecFileAsync = promisify(execFile);
55
55
 
56
56
  const resolveRegistryDir = () => {
57
- const override = process.env.OPENCHAMBER_MANAGED_PROCESS_REGISTRY;
57
+ const override = process.env.AIWORKER_MANAGED_PROCESS_REGISTRY;
58
58
  if (override && override.trim()) return override.trim();
59
- return path.join(os.homedir(), '.config', 'openchamber', 'managed-opencode');
59
+ return path.join(os.homedir(), '.config', 'aiworker', 'managed-opencode');
60
60
  };
61
61
 
62
62
  const entryFilePath = (pid) => path.join(resolveRegistryDir(), `${pid}.json`);
@@ -47,7 +47,7 @@ describe('MCP OAuth browser callback route', () => {
47
47
 
48
48
  expect(response.text).toContain('Authorization Complete');
49
49
  // Started from the desktop shell: the page hands control back via deep link.
50
- expect(response.text).toContain('openchamber://focus/mcp-auth');
50
+ expect(response.text).toContain('aiworker://focus/mcp-auth');
51
51
 
52
52
  await request(app).get('/api/mcp/auth/pending').query({ state: 'state-1' }).expect(404);
53
53
  });
@@ -76,7 +76,7 @@ describe('MCP OAuth browser callback route', () => {
76
76
  .query({ state: 'state-web', code: 'auth-code' })
77
77
  .expect(200);
78
78
 
79
- expect(response.text).not.toContain('openchamber://');
79
+ expect(response.text).not.toContain('aiworker://');
80
80
  });
81
81
 
82
82
  it('reports a provider error without contacting OpenCode', async () => {