cli-jaw 2.2.15 → 2.2.17

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 (425) hide show
  1. package/README.md +23 -2
  2. package/dist/bin/cli-jaw.js +39 -0
  3. package/dist/bin/cli-jaw.js.map +1 -1
  4. package/dist/bin/commands/_shared/dashboard-client.js +42 -0
  5. package/dist/bin/commands/_shared/dashboard-client.js.map +1 -0
  6. package/dist/bin/commands/_shared/search-format.js +40 -0
  7. package/dist/bin/commands/_shared/search-format.js.map +1 -0
  8. package/dist/bin/commands/chat-search.js +5 -3
  9. package/dist/bin/commands/chat-search.js.map +1 -1
  10. package/dist/bin/commands/dashboard-chat.js +14 -31
  11. package/dist/bin/commands/dashboard-chat.js.map +1 -1
  12. package/dist/bin/commands/dashboard-memory.js +12 -49
  13. package/dist/bin/commands/dashboard-memory.js.map +1 -1
  14. package/dist/bin/commands/doctor.js +56 -11
  15. package/dist/bin/commands/doctor.js.map +1 -1
  16. package/dist/bin/commands/init.js +31 -1
  17. package/dist/bin/commands/init.js.map +1 -1
  18. package/dist/bin/commands/memory.js +5 -1
  19. package/dist/bin/commands/memory.js.map +1 -1
  20. package/dist/bin/commands/provider.js +23 -0
  21. package/dist/bin/commands/provider.js.map +1 -1
  22. package/dist/bin/commands/slack.js +57 -3
  23. package/dist/bin/commands/slack.js.map +1 -1
  24. package/dist/bin/commands/tui/input-handler.js +1 -1
  25. package/dist/bin/commands/tui/input-handler.js.map +1 -1
  26. package/dist/bin/commands/tui/slash-command-runner.js +4 -5
  27. package/dist/bin/commands/tui/slash-command-runner.js.map +1 -1
  28. package/dist/bin/postinstall.js +16 -18
  29. package/dist/bin/postinstall.js.map +1 -1
  30. package/dist/lib/media-kind.js +28 -0
  31. package/dist/lib/media-kind.js.map +1 -0
  32. package/dist/lib/upload.js +27 -10
  33. package/dist/lib/upload.js.map +1 -1
  34. package/dist/server.js +35 -51
  35. package/dist/server.js.map +1 -1
  36. package/dist/src/agent/args.js +34 -0
  37. package/dist/src/agent/args.js.map +1 -1
  38. package/dist/src/agent/codex-app-client.js +1016 -135
  39. package/dist/src/agent/codex-app-client.js.map +1 -1
  40. package/dist/src/agent/codex-app-events.js +72 -1
  41. package/dist/src/agent/codex-app-events.js.map +1 -1
  42. package/dist/src/agent/codex-host-pool.js +617 -0
  43. package/dist/src/agent/codex-host-pool.js.map +1 -0
  44. package/dist/src/agent/jwc-runtime.js +12 -4
  45. package/dist/src/agent/jwc-runtime.js.map +1 -1
  46. package/dist/src/agent/kiro-auth.js +10 -4
  47. package/dist/src/agent/kiro-auth.js.map +1 -1
  48. package/dist/src/agent/kiro-runtime.js +45 -8
  49. package/dist/src/agent/kiro-runtime.js.map +1 -1
  50. package/dist/src/agent/lifecycle-handler.js +75 -52
  51. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  52. package/dist/src/agent/memory-flush-controller.js +241 -33
  53. package/dist/src/agent/memory-flush-controller.js.map +1 -1
  54. package/dist/src/agent/prompt-context.js +4 -0
  55. package/dist/src/agent/prompt-context.js.map +1 -1
  56. package/dist/src/agent/runtime-pool.js +64 -34
  57. package/dist/src/agent/runtime-pool.js.map +1 -1
  58. package/dist/src/agent/session-persistence.js +71 -15
  59. package/dist/src/agent/session-persistence.js.map +1 -1
  60. package/dist/src/agent/spawn/queue.js +319 -162
  61. package/dist/src/agent/spawn/queue.js.map +1 -1
  62. package/dist/src/agent/spawn.js +581 -268
  63. package/dist/src/agent/spawn.js.map +1 -1
  64. package/dist/src/bgtask/types.js +1 -1
  65. package/dist/src/bgtask/types.js.map +1 -1
  66. package/dist/src/browser/adaptive-fetch/safety.js +25 -0
  67. package/dist/src/browser/adaptive-fetch/safety.js.map +1 -1
  68. package/dist/src/browser/connection.js +2 -8
  69. package/dist/src/browser/connection.js.map +1 -1
  70. package/dist/src/cli/capability-probe-worker.js +172 -0
  71. package/dist/src/cli/capability-probe-worker.js.map +1 -0
  72. package/dist/src/cli/capability-probe.js +83 -0
  73. package/dist/src/cli/capability-probe.js.map +1 -0
  74. package/dist/src/cli/claude-models.js +2 -2
  75. package/dist/src/cli/claude-models.js.map +1 -1
  76. package/dist/src/cli/cli-status-worker.js +296 -0
  77. package/dist/src/cli/cli-status-worker.js.map +1 -0
  78. package/dist/src/cli/cli-status.js +81 -0
  79. package/dist/src/cli/cli-status.js.map +1 -0
  80. package/dist/src/cli/command-context.js +17 -5
  81. package/dist/src/cli/command-context.js.map +1 -1
  82. package/dist/src/cli/compact.js +56 -19
  83. package/dist/src/cli/compact.js.map +1 -1
  84. package/dist/src/cli/handlers-runtime.js +6 -4
  85. package/dist/src/cli/handlers-runtime.js.map +1 -1
  86. package/dist/src/cli/handlers.js +7 -2
  87. package/dist/src/cli/handlers.js.map +1 -1
  88. package/dist/src/cli/opencodex-models.js +5 -32
  89. package/dist/src/cli/opencodex-models.js.map +1 -1
  90. package/dist/src/cli/opencodex-runtime.js +82 -0
  91. package/dist/src/cli/opencodex-runtime.js.map +1 -0
  92. package/dist/src/cli/readiness.js +35 -18
  93. package/dist/src/cli/readiness.js.map +1 -1
  94. package/dist/src/cli/registry-live.js +8 -2
  95. package/dist/src/cli/registry-live.js.map +1 -1
  96. package/dist/src/cli/registry.js +1 -1
  97. package/dist/src/cli/registry.js.map +1 -1
  98. package/dist/src/core/browser-open-default.js +6 -4
  99. package/dist/src/core/browser-open-default.js.map +1 -1
  100. package/dist/src/core/browser-open.js +11 -15
  101. package/dist/src/core/browser-open.js.map +1 -1
  102. package/dist/src/core/bus.js +7 -1
  103. package/dist/src/core/bus.js.map +1 -1
  104. package/dist/src/core/chat-sessions.js +121 -12
  105. package/dist/src/core/chat-sessions.js.map +1 -1
  106. package/dist/src/core/cli-detect.js +148 -4
  107. package/dist/src/core/cli-detect.js.map +1 -1
  108. package/dist/src/core/codex-config.js +21 -0
  109. package/dist/src/core/codex-config.js.map +1 -1
  110. package/dist/src/core/compact.js +73 -21
  111. package/dist/src/core/compact.js.map +1 -1
  112. package/dist/src/core/config.js +449 -20
  113. package/dist/src/core/config.js.map +1 -1
  114. package/dist/src/core/db.js +225 -0
  115. package/dist/src/core/db.js.map +1 -1
  116. package/dist/src/core/event-bus.js +49 -4
  117. package/dist/src/core/event-bus.js.map +1 -1
  118. package/dist/src/core/event-scope.js +100 -0
  119. package/dist/src/core/event-scope.js.map +1 -0
  120. package/dist/src/core/install-integrity.js +176 -0
  121. package/dist/src/core/install-integrity.js.map +1 -0
  122. package/dist/src/core/main-session.js +64 -21
  123. package/dist/src/core/main-session.js.map +1 -1
  124. package/dist/src/core/message-summary.js +12 -2
  125. package/dist/src/core/message-summary.js.map +1 -1
  126. package/dist/src/core/platform-kind.js +139 -0
  127. package/dist/src/core/platform-kind.js.map +1 -0
  128. package/dist/src/core/rate-limit.js +156 -0
  129. package/dist/src/core/rate-limit.js.map +1 -0
  130. package/dist/src/core/runtime-settings.js +165 -17
  131. package/dist/src/core/runtime-settings.js.map +1 -1
  132. package/dist/src/core/session-context.js +7 -0
  133. package/dist/src/core/session-context.js.map +1 -0
  134. package/dist/src/core/session-ops.js +53 -9
  135. package/dist/src/core/session-ops.js.map +1 -1
  136. package/dist/src/core/settings-merge.js +105 -3
  137. package/dist/src/core/settings-merge.js.map +1 -1
  138. package/dist/src/core/settings-watch.js +29 -5
  139. package/dist/src/core/settings-watch.js.map +1 -1
  140. package/dist/src/core/widget-watcher.js +15 -2
  141. package/dist/src/core/widget-watcher.js.map +1 -1
  142. package/dist/src/discord/bot.js +5 -2
  143. package/dist/src/discord/bot.js.map +1 -1
  144. package/dist/src/discord/commands.js +4 -4
  145. package/dist/src/discord/commands.js.map +1 -1
  146. package/dist/src/goal/heartbeat.js +1 -1
  147. package/dist/src/goal/heartbeat.js.map +1 -1
  148. package/dist/src/goal/runtime.js +1 -1
  149. package/dist/src/goal/runtime.js.map +1 -1
  150. package/dist/src/goal-run/controller.js +2 -2
  151. package/dist/src/goal-run/controller.js.map +1 -1
  152. package/dist/src/manager/internal-fetch.js +15 -0
  153. package/dist/src/manager/internal-fetch.js.map +1 -0
  154. package/dist/src/manager/logs.js +2 -1
  155. package/dist/src/manager/logs.js.map +1 -1
  156. package/dist/src/manager/memory/chat-federation.js +104 -11
  157. package/dist/src/manager/memory/chat-federation.js.map +1 -1
  158. package/dist/src/manager/memory/federation.js +100 -0
  159. package/dist/src/manager/memory/federation.js.map +1 -1
  160. package/dist/src/manager/metadata.js +4 -1
  161. package/dist/src/manager/metadata.js.map +1 -1
  162. package/dist/src/manager/notes/assets.js +1 -1
  163. package/dist/src/manager/notes/assets.js.map +1 -1
  164. package/dist/src/manager/notes/frontmatter.js +5 -49
  165. package/dist/src/manager/notes/frontmatter.js.map +1 -1
  166. package/dist/src/manager/notes/link-resolver.js +2 -2
  167. package/dist/src/manager/notes/link-resolver.js.map +1 -1
  168. package/dist/src/manager/notes/remote-assets.js +1 -1
  169. package/dist/src/manager/notes/remote-assets.js.map +1 -1
  170. package/dist/src/manager/notes/routes.js +2 -2
  171. package/dist/src/manager/notes/routes.js.map +1 -1
  172. package/dist/src/manager/notes/store.js +2 -2
  173. package/dist/src/manager/notes/store.js.map +1 -1
  174. package/dist/src/manager/notes/trash.js +1 -1
  175. package/dist/src/manager/notes/trash.js.map +1 -1
  176. package/dist/src/manager/notes/vault-index.js +2 -2
  177. package/dist/src/manager/notes/vault-index.js.map +1 -1
  178. package/dist/src/manager/notes/wiki-links.js +1 -1
  179. package/dist/src/manager/notes/wiki-links.js.map +1 -1
  180. package/dist/src/manager/notes/wiki-routes.js +84 -0
  181. package/dist/src/manager/notes/wiki-routes.js.map +1 -0
  182. package/dist/src/manager/proxy.js +1 -0
  183. package/dist/src/manager/proxy.js.map +1 -1
  184. package/dist/src/manager/routes/dashboard-memory.js +24 -1
  185. package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
  186. package/dist/src/manager/routes/runtime-monitor.js +1 -1
  187. package/dist/src/manager/routes/runtime-monitor.js.map +1 -1
  188. package/dist/src/manager/scan.js +5 -3
  189. package/dist/src/manager/scan.js.map +1 -1
  190. package/dist/src/manager/server.js +20 -6
  191. package/dist/src/manager/server.js.map +1 -1
  192. package/dist/src/manager/telegram-hub/hub-bot.js +4 -3
  193. package/dist/src/manager/telegram-hub/hub-bot.js.map +1 -1
  194. package/dist/src/manager/worker-events.js +2 -1
  195. package/dist/src/manager/worker-events.js.map +1 -1
  196. package/dist/src/memory/heartbeat.js +6 -5
  197. package/dist/src/memory/heartbeat.js.map +1 -1
  198. package/dist/src/memory/indexing.js +162 -45
  199. package/dist/src/memory/indexing.js.map +1 -1
  200. package/dist/src/messaging/channel-validate.js +14 -1
  201. package/dist/src/messaging/channel-validate.js.map +1 -1
  202. package/dist/src/messaging/redact.js +2 -1
  203. package/dist/src/messaging/redact.js.map +1 -1
  204. package/dist/src/messaging/session-key.js +21 -2
  205. package/dist/src/messaging/session-key.js.map +1 -1
  206. package/dist/src/notes/constants.js.map +1 -0
  207. package/dist/src/notes/frontmatter.js +59 -0
  208. package/dist/src/notes/frontmatter.js.map +1 -0
  209. package/dist/src/notes/path-guards.js.map +1 -0
  210. package/dist/src/notes/search.js.map +1 -0
  211. package/dist/src/orchestrator/attestation.js +1 -1
  212. package/dist/src/orchestrator/attestation.js.map +1 -1
  213. package/dist/src/orchestrator/gateway.js +135 -31
  214. package/dist/src/orchestrator/gateway.js.map +1 -1
  215. package/dist/src/orchestrator/pipeline.js +53 -21
  216. package/dist/src/orchestrator/pipeline.js.map +1 -1
  217. package/dist/src/orchestrator/scope.js +36 -2
  218. package/dist/src/orchestrator/scope.js.map +1 -1
  219. package/dist/src/orchestrator/session-lanes.js +87 -0
  220. package/dist/src/orchestrator/session-lanes.js.map +1 -0
  221. package/dist/src/orchestrator/session-work.js +25 -0
  222. package/dist/src/orchestrator/session-work.js.map +1 -0
  223. package/dist/src/orchestrator/state-machine.js +1 -5
  224. package/dist/src/orchestrator/state-machine.js.map +1 -1
  225. package/dist/src/orchestrator/worker-registry.js +20 -10
  226. package/dist/src/orchestrator/worker-registry.js.map +1 -1
  227. package/dist/src/prompt/builder.js +40 -2
  228. package/dist/src/prompt/builder.js.map +1 -1
  229. package/dist/src/prompt/templates/a1-system.md +8 -1
  230. package/dist/src/routes/agent-control.js +44 -8
  231. package/dist/src/routes/agent-control.js.map +1 -1
  232. package/dist/src/routes/chat-sessions.js +34 -6
  233. package/dist/src/routes/chat-sessions.js.map +1 -1
  234. package/dist/src/routes/command.js +63 -8
  235. package/dist/src/routes/command.js.map +1 -1
  236. package/dist/src/routes/events.js +11 -2
  237. package/dist/src/routes/events.js.map +1 -1
  238. package/dist/src/routes/link-preview.js +1 -27
  239. package/dist/src/routes/link-preview.js.map +1 -1
  240. package/dist/src/routes/messages.js +6 -5
  241. package/dist/src/routes/messages.js.map +1 -1
  242. package/dist/src/routes/messaging.js +45 -1
  243. package/dist/src/routes/messaging.js.map +1 -1
  244. package/dist/src/routes/orchestrate.js +53 -33
  245. package/dist/src/routes/orchestrate.js.map +1 -1
  246. package/dist/src/routes/search.js +84 -0
  247. package/dist/src/routes/search.js.map +1 -0
  248. package/dist/src/routes/session-request.js +29 -0
  249. package/dist/src/routes/session-request.js.map +1 -0
  250. package/dist/src/routes/settings.js +110 -3
  251. package/dist/src/routes/settings.js.map +1 -1
  252. package/dist/src/routes/static.js +30 -8
  253. package/dist/src/routes/static.js.map +1 -1
  254. package/dist/src/routes/system.js +1 -1
  255. package/dist/src/routes/system.js.map +1 -1
  256. package/dist/src/routes/wiki.js +122 -0
  257. package/dist/src/routes/wiki.js.map +1 -0
  258. package/dist/src/search/contract.js +2 -0
  259. package/dist/src/search/contract.js.map +1 -0
  260. package/dist/src/search/coordinator.js +153 -0
  261. package/dist/src/search/coordinator.js.map +1 -0
  262. package/dist/src/search/provider.js +40 -0
  263. package/dist/src/search/provider.js.map +1 -0
  264. package/dist/src/search/providers/chat.js +115 -0
  265. package/dist/src/search/providers/chat.js.map +1 -0
  266. package/dist/src/search/providers/memory.js +53 -0
  267. package/dist/src/search/providers/memory.js.map +1 -0
  268. package/dist/src/search/providers/wiki.js +80 -0
  269. package/dist/src/search/providers/wiki.js.map +1 -0
  270. package/dist/src/slack/api.js +10 -1
  271. package/dist/src/slack/api.js.map +1 -1
  272. package/dist/src/slack/attachment-recovery.js +42 -0
  273. package/dist/src/slack/attachment-recovery.js.map +1 -0
  274. package/dist/src/slack/bot.js +120 -41
  275. package/dist/src/slack/bot.js.map +1 -1
  276. package/dist/src/slack/commands.js +24 -8
  277. package/dist/src/slack/commands.js.map +1 -1
  278. package/dist/src/slack/events.js +12 -1
  279. package/dist/src/slack/events.js.map +1 -1
  280. package/dist/src/slack/history.js +108 -0
  281. package/dist/src/slack/history.js.map +1 -0
  282. package/dist/src/slack/inbound-file.js +242 -0
  283. package/dist/src/slack/inbound-file.js.map +1 -0
  284. package/dist/src/slack/inbound-url.js +39 -0
  285. package/dist/src/slack/inbound-url.js.map +1 -0
  286. package/dist/src/slack/ingress.js +140 -0
  287. package/dist/src/slack/ingress.js.map +1 -0
  288. package/dist/src/slack/manifest.js +3 -0
  289. package/dist/src/slack/manifest.js.map +1 -1
  290. package/dist/src/slack/socket.js +1 -1
  291. package/dist/src/slack/socket.js.map +1 -1
  292. package/dist/src/slack/thread-tracker.js +86 -0
  293. package/dist/src/slack/thread-tracker.js.map +1 -0
  294. package/dist/src/telegram/bot.js +21 -11
  295. package/dist/src/telegram/bot.js.map +1 -1
  296. package/dist/src/wiki/config.js +193 -0
  297. package/dist/src/wiki/config.js.map +1 -0
  298. package/dist/src/wiki/entities.js +61 -0
  299. package/dist/src/wiki/entities.js.map +1 -0
  300. package/dist/src/wiki/ontology.js +72 -0
  301. package/dist/src/wiki/ontology.js.map +1 -0
  302. package/dist/src/wiki/prompt.js +172 -0
  303. package/dist/src/wiki/prompt.js.map +1 -0
  304. package/dist/src/wiki/safe-traversal.js +198 -0
  305. package/dist/src/wiki/safe-traversal.js.map +1 -0
  306. package/dist/src/wiki/scaffold.js +77 -0
  307. package/dist/src/wiki/scaffold.js.map +1 -0
  308. package/package.json +6 -5
  309. package/public/css/session-hub.css +266 -0
  310. package/public/dist/assets/AdvancedExport-DYGcCAUq.js +1 -0
  311. package/public/dist/assets/Agent-CNNQ7KkJ.js +1 -0
  312. package/public/dist/assets/{DesignPanel-BGMPhZSx.js → DesignPanel-DcL369nB.js} +1 -1
  313. package/public/dist/assets/{DocPanel-Dz-J_l5M.js → DocPanel-K8A2pm_1.js} +1 -1
  314. package/public/dist/assets/{FolderPanel-DbPhzzvi.js → FolderPanel-CV52EzwG.js} +1 -1
  315. package/public/dist/assets/{MilkdownWysiwygEditor-Em7iC6y9.js → MilkdownWysiwygEditor-BKOCDI4Z.js} +1 -1
  316. package/public/dist/assets/api-B25zNNFJ.js +1 -0
  317. package/public/dist/assets/{app-DX4e6isX.css → app-DjgGeXhJ.css} +1 -1
  318. package/public/dist/assets/app-Dsgp4xpU.js +55 -0
  319. package/public/dist/assets/bgtask-badge-C6h5C-o4.js +1 -0
  320. package/public/dist/assets/{bgtask-badge-qMkKOZx0.js → bgtask-badge-CpavV0Jc.js} +4 -4
  321. package/public/dist/assets/{employees-BnobWM_2.js → employees-BJyEgim7.js} +4 -4
  322. package/public/dist/assets/idb-cache-B5PX63p7.js +1 -0
  323. package/public/dist/assets/{idb-cache-BzzftUET.js → idb-cache-lOntwU3S.js} +1 -1
  324. package/public/dist/assets/{iframe-renderer-C5vRbbl9.js → iframe-renderer-B8k3AvTv.js} +12 -12
  325. package/public/dist/assets/iframe-renderer-BO_GgCTR.js +1 -0
  326. package/public/dist/assets/manager-LkGs6qEJ.css +1 -0
  327. package/public/dist/assets/manager-kXYQyMhR.js +13 -0
  328. package/public/dist/assets/{memory-DF4kPwwC.js → memory-D2RbBVO-.js} +11 -11
  329. package/public/dist/assets/memory-amsvg4Ey.js +1 -0
  330. package/public/dist/assets/message-history-BGHZxvgV.js +1 -0
  331. package/public/dist/assets/message-history-Bw2E_b8L.js +1 -0
  332. package/public/dist/assets/pi-settings-5HVg1sXJ.js +1 -0
  333. package/public/dist/assets/render-BkGcpH7z.js +157 -0
  334. package/public/dist/assets/settings-B1FPORO2.js +56 -0
  335. package/public/dist/assets/settings-CMN-zN4Q.js +1 -0
  336. package/public/dist/assets/settings-core-B_OjGYVN.js +1 -0
  337. package/public/dist/assets/settings-core-CxRwqx86.js +144 -0
  338. package/public/dist/assets/sidebar-DW78DANx.js +49 -0
  339. package/public/dist/assets/skills-Dz-9Yrxr.js +1 -0
  340. package/public/dist/assets/{skills-IGquen_j.js → skills-lWi0ZFiV.js} +6 -6
  341. package/public/dist/assets/{slash-commands-ZRDOL99E.js → slash-commands-DYOI6nKj.js} +1 -1
  342. package/public/dist/assets/slash-commands-xJFCdTTM.js +1 -0
  343. package/public/dist/assets/{trace-drawer-D8To8fYt.js → trace-drawer-DBX9xzmt.js} +1 -1
  344. package/public/dist/assets/{ui-Hx_mNoDf.js → ui-Bx7eqnXt.js} +1 -1
  345. package/public/dist/assets/ui-JOcrYeG-.js +1 -0
  346. package/public/dist/assets/{wiki-link-suggestions-DZQc78gj.js → wiki-link-suggestions-Dp6kBQVu.js} +1 -1
  347. package/public/dist/index.html +4 -4
  348. package/public/dist/manager/index.html +2 -2
  349. package/public/index.html +3 -2
  350. package/public/js/event-channel.ts +25 -0
  351. package/public/js/features/channel-onboarding-flow.ts +16 -1
  352. package/public/js/features/channel-onboarding.ts +20 -2
  353. package/public/js/features/chat-messages.ts +3 -1
  354. package/public/js/features/chat-search.ts +2 -1
  355. package/public/js/features/chat.ts +56 -18
  356. package/public/js/features/elicitation.ts +15 -0
  357. package/public/js/features/idb-cache.ts +34 -0
  358. package/public/js/features/message-history.ts +2 -1
  359. package/public/js/features/session-hub.ts +334 -0
  360. package/public/js/features/settings-cli-status-render.ts +1 -1
  361. package/public/js/features/settings-cli-status.ts +25 -11
  362. package/public/js/features/settings-core.ts +72 -3
  363. package/public/js/features/settings-types.ts +32 -0
  364. package/public/js/features/ui-status.ts +2 -1
  365. package/public/js/main.ts +20 -0
  366. package/public/js/render/compose-block.ts +7 -0
  367. package/public/js/ws.ts +22 -2
  368. package/public/locales/en.json +46 -4
  369. package/public/locales/ja.json +46 -4
  370. package/public/locales/ko.json +46 -4
  371. package/public/locales/zh.json +46 -4
  372. package/public/manager/src/App.tsx +1 -1
  373. package/public/manager/src/InstancePreview.tsx +5 -1
  374. package/public/manager/src/api.ts +2 -1
  375. package/public/manager/src/components/InstanceGroups.tsx +10 -0
  376. package/public/manager/src/components/InstanceListContent.tsx +24 -1
  377. package/public/manager/src/components/InstanceRow.tsx +33 -3
  378. package/public/manager/src/components/InstanceSessionList.tsx +132 -0
  379. package/public/manager/src/hooks/useActiveSessionDisclosure.ts +45 -0
  380. package/public/manager/src/lib/resilient-fetch.ts +93 -0
  381. package/public/manager/src/lib/session-store.ts +216 -0
  382. package/public/manager/src/manager-components.css +97 -0
  383. package/public/manager/src/settings/pages/AdvancedExport.tsx +12 -2
  384. package/public/manager/src/settings/pages/Agent.tsx +113 -1
  385. package/public/manager/src/settings/pages/components/agent/agent-meta.ts +1 -1
  386. package/scripts/bundle-sidecar.sh +50 -2
  387. package/scripts/burst-scenario.mjs +72 -0
  388. package/scripts/check-redaction-sinks.mjs +1 -0
  389. package/scripts/check-strict-baseline.mjs +1 -1
  390. package/scripts/ensure-native-modules.cjs +50 -3
  391. package/scripts/install-risk-gate.mjs +8 -0
  392. package/scripts/install-wsl.sh +27 -2
  393. package/scripts/install.ps1 +121 -0
  394. package/scripts/install.sh +28 -2
  395. package/scripts/postinstall-guard.cjs +44 -2
  396. package/scripts/release-gates.mjs +12 -0
  397. package/dist/src/manager/notes/constants.js.map +0 -1
  398. package/dist/src/manager/notes/path-guards.js.map +0 -1
  399. package/dist/src/manager/notes/search.js.map +0 -1
  400. package/public/dist/assets/AdvancedExport-DsDpqXoH.js +0 -1
  401. package/public/dist/assets/Agent-BjbZVZ9p.js +0 -1
  402. package/public/dist/assets/api-C9dOxby7.js +0 -1
  403. package/public/dist/assets/app-BzD_ZLvt.js +0 -55
  404. package/public/dist/assets/bgtask-badge-Dqbp-Y4e.js +0 -1
  405. package/public/dist/assets/idb-cache-ZH6lOebk.js +0 -1
  406. package/public/dist/assets/iframe-renderer-Df4KIVyx.js +0 -1
  407. package/public/dist/assets/manager-C4eNDNFt.css +0 -1
  408. package/public/dist/assets/manager-DaN201mN.js +0 -13
  409. package/public/dist/assets/memory-D-bULTHl.js +0 -1
  410. package/public/dist/assets/message-history-C4WOisGx.js +0 -1
  411. package/public/dist/assets/message-history-ZBoza6ew.js +0 -1
  412. package/public/dist/assets/pi-settings-CBUGDAuT.js +0 -1
  413. package/public/dist/assets/render-DYX6GRQ0.js +0 -122
  414. package/public/dist/assets/settings-DbJpGoaX.js +0 -55
  415. package/public/dist/assets/settings-SreihUje.js +0 -1
  416. package/public/dist/assets/settings-core-B1Y5Nb4Z.js +0 -1
  417. package/public/dist/assets/settings-core-DobZWIZ7.js +0 -140
  418. package/public/dist/assets/sidebar-Cp22g0Gv.js +0 -49
  419. package/public/dist/assets/skills-DwPIP08e.js +0 -1
  420. package/public/dist/assets/slash-commands-BBVfwcnW.js +0 -1
  421. package/public/dist/assets/ui-CAicpUZc.js +0 -1
  422. /package/dist/src/{manager/notes → notes}/constants.js +0 -0
  423. /package/dist/src/{manager/notes → notes}/path-guards.js +0 -0
  424. /package/dist/src/{manager/notes → notes}/search.js +0 -0
  425. /package/public/dist/assets/{pi-settings-Dh5lgb87.js → pi-settings-DEuKgvIj.js} +0 -0
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Canonical platform classification for cli-jaw.
3
+ *
4
+ * Single source of truth for "am I on native Windows / in WSL / on plain
5
+ * Linux". Every rule takes its inputs as parameters so the whole matrix is
6
+ * testable on one CI OS.
7
+ *
8
+ * Design rationale and primary sources:
9
+ * devlog/_plan/260805_windows_native_detection/001_platform_signal_research.md
10
+ */
11
+ import fs from 'node:fs';
12
+ import os from 'node:os';
13
+ export const defaultPlatformProbes = {
14
+ readText(path) {
15
+ try {
16
+ return fs.readFileSync(path, 'utf8');
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ },
22
+ exists(path) {
23
+ try {
24
+ return fs.existsSync(path);
25
+ }
26
+ catch {
27
+ return false;
28
+ }
29
+ },
30
+ release() {
31
+ try {
32
+ return os.release();
33
+ }
34
+ catch {
35
+ return '';
36
+ }
37
+ },
38
+ };
39
+ /**
40
+ * WSL markers that only ever exist inside a WSL *Linux* process.
41
+ *
42
+ * WSLENV is deliberately absent: Microsoft documents it as shared with the
43
+ * Windows host (it is what configures env-var translation across the
44
+ * boundary), so testing it misclassifies native Windows as WSL.
45
+ */
46
+ const WSL_ENV_KEYS = ['WSL_DISTRO_NAME', 'WSL_INTEROP'];
47
+ const WSL_PATH_MARKERS = ['/run/WSL', '/proc/sys/fs/binfmt_misc/WSLInterop'];
48
+ function hasWslEnvMarker(env) {
49
+ return WSL_ENV_KEYS.some((key) => !!env[key]);
50
+ }
51
+ function hasWslPathMarker(probes) {
52
+ return WSL_PATH_MARKERS.some((markerPath) => probes.exists(markerPath));
53
+ }
54
+ function hasWslKernelMarker(probes) {
55
+ // `||` not `??`: an unreadable probe returns null, but a mounted-but-empty
56
+ // /proc under a restricted container returns '', and both must fall
57
+ // through to os.release().
58
+ const osrelease = probes.readText('/proc/sys/kernel/osrelease')?.trim() || probes.release();
59
+ if (osrelease.toLowerCase().includes('microsoft'))
60
+ return true;
61
+ const version = probes.readText('/proc/version');
62
+ return !!version && version.toLowerCase().includes('microsoft');
63
+ }
64
+ export function resolvePlatformKind(platform = process.platform, env = process.env, probes = defaultPlatformProbes) {
65
+ // STRICT: a win32 process is a Win32 binary. WSL env vars leaking in from
66
+ // the host (WSLENV, or anything a user exported) can never change this.
67
+ if (platform === 'win32')
68
+ return 'windows-native';
69
+ if (platform === 'darwin')
70
+ return 'darwin';
71
+ if (platform !== 'linux')
72
+ return 'other';
73
+ if (hasWslEnvMarker(env) || hasWslPathMarker(probes) || hasWslKernelMarker(probes)) {
74
+ return 'wsl';
75
+ }
76
+ return 'linux';
77
+ }
78
+ /**
79
+ * Takes only `platform` on purpose: adding env inputs would reintroduce the
80
+ * exact class of bug this module exists to prevent.
81
+ */
82
+ export function isWindowsNative(platform = process.platform) {
83
+ return platform === 'win32';
84
+ }
85
+ export function isWsl(platform = process.platform, env = process.env, probes = defaultPlatformProbes) {
86
+ return resolvePlatformKind(platform, env, probes) === 'wsl';
87
+ }
88
+ /**
89
+ * True when a Win32 process appears to have been launched from a WSL shell,
90
+ * i.e. Windows Node running against a WSL working directory. Global npm
91
+ * installs then land on the Windows side rather than in the distro.
92
+ *
93
+ * Keyed on the working directory, not the environment. A Win32 process started
94
+ * from inside a distro has its cwd on the WSL filesystem, which Windows spells
95
+ * as the UNC prefix `\\wsl$\<distro>` or `\\wsl.localhost\<distro>`. Every
96
+ * environment variable is ambiguous here: native Windows with interop
97
+ * configured and Windows-Node-from-WSL both carry WSLENV.
98
+ *
99
+ * Both parameters are required. There is no useful default: inside an npm
100
+ * lifecycle script `process.cwd()` is the installed package root, not where
101
+ * the user ran npm. Use `resolveInvocationCwd()` to obtain the right value.
102
+ *
103
+ * This is a HEURISTIC, and weaker than resolvePlatformKind's taxonomy. Two
104
+ * known holes, both inherent to a cwd-based signal:
105
+ * - false negative: the user cd's to a Windows path (e.g. /mnt/c/src) inside
106
+ * a WSL shell before invoking npm, so the cwd is an ordinary drive path;
107
+ * - false positive: a native PowerShell session whose cwd is a \\wsl$ share.
108
+ *
109
+ * Do not describe this function as strict. The strictness guarantee belongs to
110
+ * resolvePlatformKind, which can never confuse windows-native with wsl; this
111
+ * only decides whether to print an advisory warning.
112
+ */
113
+ export function isWindowsNodeLaunchedFromWsl(platform, cwd) {
114
+ if (platform !== 'win32')
115
+ return false;
116
+ if (!cwd)
117
+ return false;
118
+ const normalized = cwd.replace(/\//g, '\\').toLowerCase();
119
+ return normalized.startsWith('\\\\wsl$\\') || normalized.startsWith('\\\\wsl.localhost\\');
120
+ }
121
+ /**
122
+ * The directory the user actually invoked the command from.
123
+ *
124
+ * npm sets INIT_CWD to the directory where `npm` was originally run, while the
125
+ * lifecycle script itself executes from the package root. Outside an npm
126
+ * lifecycle INIT_CWD is absent and process.cwd() is already correct.
127
+ */
128
+ export function resolveInvocationCwd(env = process.env) {
129
+ const initCwd = env['INIT_CWD'];
130
+ if (initCwd && initCwd.trim())
131
+ return initCwd;
132
+ try {
133
+ return process.cwd();
134
+ }
135
+ catch {
136
+ return '';
137
+ }
138
+ }
139
+ //# sourceMappingURL=platform-kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-kind.js","sourceRoot":"","sources":["../../../src/core/platform-kind.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ const DEFAULT_CONFIG = {
2
+ windowMs: 60_000,
3
+ budgets: {
4
+ cli: { poll: 600, mutate: 240, general: 600 },
5
+ manager: { poll: 600, mutate: 240, general: 600 },
6
+ browser: { poll: 300, mutate: 120, general: 300 },
7
+ lan: { poll: 120, mutate: 120, general: 120 },
8
+ remote: { poll: 60, mutate: 30, general: 120 },
9
+ },
10
+ nonLoopbackTotalLimit: 120,
11
+ };
12
+ const EXEMPT_PATH_PREFIXES = [
13
+ '/api/orchestrate/worker-runs',
14
+ '/api/orchestrate/worker/',
15
+ '/api/orchestrate/worker-progress',
16
+ ];
17
+ function isLoopback(ip) {
18
+ return ip === '127.0.0.1' || ip === '::1' || ip === '::ffff:127.0.0.1';
19
+ }
20
+ export function classifyClient(opts) {
21
+ // Network position is authoritative: remote headers cannot buy a loopback budget.
22
+ if (!isLoopback(opts.ip)) {
23
+ if (opts.lanAllowed && opts.isPrivateIp(opts.ip))
24
+ return 'lan';
25
+ return 'remote';
26
+ }
27
+ if (opts.authHeader === `Bearer ${opts.authToken}`)
28
+ return 'cli';
29
+ if (opts.internalHeader !== undefined)
30
+ return 'manager';
31
+ return 'browser';
32
+ }
33
+ export function classifyPath(method, path) {
34
+ const normalizedMethod = method.toUpperCase();
35
+ if (normalizedMethod !== 'GET' && normalizedMethod !== 'HEAD')
36
+ return 'mutate';
37
+ if (path === '/api/status'
38
+ || path === '/api/health'
39
+ || path === '/api/messages/latest'
40
+ || path === '/api/goal')
41
+ return 'poll';
42
+ return 'general';
43
+ }
44
+ function viewBucket(bucket, now, windowMs) {
45
+ let { windowStart, count, prevCount } = bucket;
46
+ const age = Math.max(0, now - windowStart);
47
+ if (age >= 2 * windowMs) {
48
+ windowStart += windowMs * Math.floor(age / windowMs);
49
+ count = 0;
50
+ prevCount = 0;
51
+ }
52
+ else if (age >= windowMs) {
53
+ windowStart += windowMs * Math.floor(age / windowMs);
54
+ prevCount = count;
55
+ count = 0;
56
+ }
57
+ const elapsed = Math.max(0, now - windowStart);
58
+ const previousWeight = Math.max(0, Math.min(1, 1 - elapsed / windowMs));
59
+ return { windowStart, count, prevCount, effective: count + prevCount * previousWeight };
60
+ }
61
+ function retryAfterSec(bucket, limit, now, windowMs) {
62
+ const maxSeconds = Math.ceil(2 * windowMs / 1_000) + 1;
63
+ for (let seconds = 1; seconds <= maxSeconds; seconds++) {
64
+ if (viewBucket(bucket, now + seconds * 1_000, windowMs).effective < limit)
65
+ return seconds;
66
+ }
67
+ return maxSeconds;
68
+ }
69
+ export function createRateLimiter(config = {}) {
70
+ const resolved = { ...DEFAULT_CONFIG, ...config };
71
+ const buckets = new Map();
72
+ const loggedWindows = new Map();
73
+ function check(key, cls, pathClass, now = Date.now()) {
74
+ const pathKey = `${cls}:${key}:${pathClass}`;
75
+ const specs = [{ key: pathKey, limit: resolved.budgets[cls][pathClass] }];
76
+ if (cls === 'lan' || cls === 'remote') {
77
+ specs.push({ key: `${cls}:${key}:total`, limit: resolved.nonLoopbackTotalLimit });
78
+ }
79
+ // Peek every participating bucket before committing so a rejection consumes no quota.
80
+ const views = specs.map(spec => {
81
+ const bucket = buckets.get(spec.key) ?? { windowStart: now, count: 0, prevCount: 0 };
82
+ return { ...spec, bucket, view: viewBucket(bucket, now, resolved.windowMs) };
83
+ });
84
+ const violated = views.filter(item => item.view.effective >= item.limit);
85
+ if (violated.length > 0) {
86
+ let retry = 0;
87
+ let limit = violated[0].limit;
88
+ let shouldLog = false;
89
+ for (const item of violated) {
90
+ const needed = retryAfterSec(item.bucket, item.limit, now, resolved.windowMs);
91
+ if (needed > retry) {
92
+ retry = needed;
93
+ limit = item.limit;
94
+ }
95
+ if (loggedWindows.get(item.key) !== item.view.windowStart) {
96
+ shouldLog = true;
97
+ loggedWindows.set(item.key, item.view.windowStart);
98
+ }
99
+ }
100
+ return { allowed: false, retryAfterSec: retry, limit, remaining: 0, shouldLog };
101
+ }
102
+ for (const item of views) {
103
+ buckets.set(item.key, {
104
+ windowStart: item.view.windowStart,
105
+ count: item.view.count + 1,
106
+ prevCount: item.view.prevCount,
107
+ });
108
+ }
109
+ return { allowed: true };
110
+ }
111
+ function sweep(now = Date.now()) {
112
+ for (const [key, bucket] of buckets) {
113
+ if (now - bucket.windowStart >= 2 * resolved.windowMs) {
114
+ buckets.delete(key);
115
+ loggedWindows.delete(key);
116
+ }
117
+ }
118
+ }
119
+ return { check, sweep };
120
+ }
121
+ export function createRateLimitMiddleware(opts) {
122
+ const limiter = opts.limiter ?? createRateLimiter();
123
+ return (req, res, next) => {
124
+ if (!req.path.startsWith('/api/'))
125
+ return next();
126
+ if (req.path === '/api/events')
127
+ return next();
128
+ if (EXEMPT_PATH_PREFIXES.some(prefix => req.path.startsWith(prefix)))
129
+ return next();
130
+ const ip = req.ip || req.socket?.remoteAddress || '';
131
+ const internalHeader = req.headers['x-jaw-internal'];
132
+ const cls = classifyClient({
133
+ ip,
134
+ ...(req.headers.authorization === undefined
135
+ ? {}
136
+ : { authHeader: req.headers.authorization }),
137
+ ...(internalHeader === undefined
138
+ ? {}
139
+ : { internalHeader: Array.isArray(internalHeader) ? internalHeader.join(', ') : internalHeader }),
140
+ authToken: opts.authToken,
141
+ lanAllowed: opts.lanAllowed(),
142
+ isPrivateIp: opts.isPrivateIp,
143
+ });
144
+ const decision = limiter.check(ip, cls, classifyPath(req.method, req.path));
145
+ if (decision.allowed)
146
+ return next();
147
+ res.setHeader('Retry-After', String(decision.retryAfterSec));
148
+ res.setHeader('RateLimit', `limit=${decision.limit}, remaining=${decision.remaining}, reset=${decision.retryAfterSec}`);
149
+ res.setHeader('Cache-Control', 'no-store');
150
+ if (decision.shouldLog) {
151
+ console.warn(`[rate-limit] ${ip} (${cls}) exceeded (first blocked: ${req.method} ${req.path})`);
152
+ }
153
+ return res.status(429).json({ error: 'rate_limit', retryAfterSec: decision.retryAfterSec });
154
+ };
155
+ }
156
+ //# sourceMappingURL=rate-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/core/rate-limit.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { loadUnifiedMcp, syncToAll, ensureWorkingDirSkillsLinks, initMcpConfig, } from '../../lib/mcp-sync.js';
2
2
  import { syncCodexContextWindow } from './codex-config.js';
3
- import { settings, replaceSettings, saveSettings, migrateSettings, normalizeProjectDirs } from './config.js';
3
+ import { settings, persistAndCommit, snapshotSettingsState, migrateSettings, normalizeProjectDirs, RUNTIME_DEFAULT_MIGRATION_ID, MULTI_SESSION_DEFAULT_MIGRATION_ID, } from './config.js';
4
4
  import { broadcast } from './bus.js';
5
5
  import { syncMainSessionToSettings } from './main-session.js';
6
- import { mergeSettingsPatch } from './settings-merge.js';
6
+ import { mergeSettingsPatch, sanitizeSettingsInput } from './settings-merge.js';
7
7
  import { regenerateB } from '../prompt/builder.js';
8
8
  import { restartMessagingRuntime, initActiveMessagingRuntime } from '../messaging/runtime.js';
9
9
  import { beginRuntimeSettingsMutation } from './runtime-settings-gate.js';
@@ -12,6 +12,103 @@ import { writeFileSync, readFileSync, mkdirSync } from 'node:fs';
12
12
  import { join } from 'node:path';
13
13
  import { homedir } from 'node:os';
14
14
  import { log } from './logger.js';
15
+ export class RuntimeDefaultMigrationTerminalError extends Error {
16
+ constructor() {
17
+ super('runtime_default_migration_terminal');
18
+ this.name = 'RuntimeDefaultMigrationTerminalError';
19
+ }
20
+ }
21
+ export function resolveRuntimeDefaultMigration(currentSettings, action) {
22
+ const current = currentSettings["runtimeDefaultMigration"];
23
+ if (!current || typeof current !== 'object' || Array.isArray(current)) {
24
+ throw new RuntimeDefaultMigrationTerminalError();
25
+ }
26
+ const migration = current;
27
+ if (migration.id !== RUNTIME_DEFAULT_MIGRATION_ID || migration.state !== 'pending') {
28
+ throw new RuntimeDefaultMigrationTerminalError();
29
+ }
30
+ const runtimeDefaultMigration = {
31
+ ...migration,
32
+ state: action === 'accept' ? 'accepted' : 'kept',
33
+ };
34
+ return {
35
+ ...(action === 'accept' ? { cli: 'codex-app' } : {}),
36
+ runtimeDefaultMigration,
37
+ };
38
+ }
39
+ let runtimeDefaultMigrationTail = Promise.resolve();
40
+ export async function withRuntimeDefaultMigrationLock(work) {
41
+ let release;
42
+ const turn = new Promise((resolve) => { release = resolve; });
43
+ const previous = runtimeDefaultMigrationTail;
44
+ runtimeDefaultMigrationTail = previous.then(() => turn);
45
+ await previous;
46
+ try {
47
+ return await work();
48
+ }
49
+ finally {
50
+ release();
51
+ }
52
+ }
53
+ export class MultiSessionDefaultMigrationTerminalError extends Error {
54
+ constructor() {
55
+ super('multi_session_default_migration_terminal');
56
+ this.name = 'MultiSessionDefaultMigrationTerminalError';
57
+ }
58
+ }
59
+ /**
60
+ * Accept means both halves of what the prompt offered: sessions on, and a second lane so
61
+ * a second tab does not queue behind the first. Turning it on without the lane would
62
+ * change the UI and change nothing about how it runs.
63
+ *
64
+ * A concurrency the user moved off 1 is left alone. A stored 1 and a chosen 1 are the
65
+ * same byte, so this is stated in terms of the value rather than of intent — the prompt
66
+ * says what it will do and this does exactly that (110 §4d).
67
+ */
68
+ export function resolveMultiSessionDefaultMigration(currentSettings, action) {
69
+ const current = currentSettings["multiSessionDefaultMigration"];
70
+ if (!current || typeof current !== 'object' || Array.isArray(current)) {
71
+ throw new MultiSessionDefaultMigrationTerminalError();
72
+ }
73
+ const migration = current;
74
+ if (migration.id !== MULTI_SESSION_DEFAULT_MIGRATION_ID || migration.state !== 'pending') {
75
+ throw new MultiSessionDefaultMigrationTerminalError();
76
+ }
77
+ const multiSessionDefaultMigration = {
78
+ ...migration,
79
+ state: action === 'accept' ? 'accepted' : 'kept',
80
+ };
81
+ if (action !== 'accept')
82
+ return { multiSessionDefaultMigration };
83
+ const block = currentSettings["multiSession"];
84
+ const currentMax = (block && typeof block === 'object' && !Array.isArray(block))
85
+ ? block["maxConcurrent"]
86
+ : undefined;
87
+ const keepsOwnConcurrency = Number.isInteger(currentMax) && currentMax > 1;
88
+ return {
89
+ // A partial patch here is safe because multiSession is a merge boundary; the
90
+ // policy and the channel gates survive it.
91
+ multiSession: {
92
+ enabled: true,
93
+ ...(keepsOwnConcurrency ? {} : { maxConcurrent: 2 }),
94
+ },
95
+ multiSessionDefaultMigration,
96
+ };
97
+ }
98
+ let multiSessionDefaultMigrationTail = Promise.resolve();
99
+ export async function withMultiSessionDefaultMigrationLock(work) {
100
+ let release;
101
+ const turn = new Promise((resolve) => { release = resolve; });
102
+ const previous = multiSessionDefaultMigrationTail;
103
+ multiSessionDefaultMigrationTail = previous.then(() => turn);
104
+ await previous;
105
+ try {
106
+ return await work();
107
+ }
108
+ finally {
109
+ release();
110
+ }
111
+ }
15
112
  function syncJwcConfigDefault(currentSettings) {
16
113
  try {
17
114
  const cli = currentSettings["cli"];
@@ -114,21 +211,65 @@ async function invalidateSendOnlyClientsIfNeeded(prev, next) {
114
211
  }
115
212
  await Promise.all(tasks);
116
213
  }
214
+ function rollbackSettings(previous, context, write) {
215
+ try {
216
+ persistAndCommit(previous, write);
217
+ }
218
+ catch (rollbackError) {
219
+ // persistAndCommit writes before commit, so a failed rollback leaves the
220
+ // last successfully persisted candidate as the in-memory pair as well.
221
+ console.error(`[runtime-settings] ${context} rollback write failed:`, rollbackError.message);
222
+ }
223
+ }
224
+ // Every mutation runs to completion before the next one starts. The rollback
225
+ // path restores a candidate captured before the patch, so two overlapping
226
+ // requests would let a late failure in the first undo a value the second had
227
+ // already persisted successfully — the losing write disappears from both the
228
+ // file and memory. beginRuntimeSettingsMutation only counts in-flight work; it
229
+ // does not serialise, so the tail promise does.
230
+ let runtimeSettingsTail = Promise.resolve();
117
231
  export async function applyRuntimeSettingsPatch(rawPatch = {}, opts = {}) {
232
+ let release;
233
+ const turn = new Promise((resolve) => { release = resolve; });
234
+ const previous = runtimeSettingsTail;
235
+ runtimeSettingsTail = previous.then(() => turn);
236
+ await previous;
237
+ try {
238
+ return await applyRuntimeSettingsPatchSerialised(rawPatch, opts);
239
+ }
240
+ finally {
241
+ release();
242
+ }
243
+ }
244
+ async function applyRuntimeSettingsPatchSerialised(rawPatch = {}, opts = {}) {
118
245
  const finishSettingsMutation = beginRuntimeSettingsMutation();
119
- const prevCli = settings["cli"];
120
- const prevWorkingDir = settings["workingDir"];
121
- const prevSnapshot = { ...settings };
246
+ const prevCandidate = snapshotSettingsState();
247
+ const prevSnapshot = prevCandidate.value;
248
+ const prevCli = prevSnapshot["cli"];
249
+ const prevWorkingDir = prevSnapshot["workingDir"];
122
250
  const prevAiEProvider = selectedAiEProvider(prevSnapshot);
251
+ let candidateCommitted = false;
252
+ let rollbackHandled = false;
123
253
  try {
124
- const merged = mergeSettingsPatch(settings, rawPatch);
125
- if ('projectDirs' in rawPatch) {
254
+ const sanitized = sanitizeSettingsInput(rawPatch, 'api');
255
+ if (sanitized.serverOwnedPaths.length > 0) {
256
+ throw new Error('server_owned_settings_field');
257
+ }
258
+ if (sanitized.invalidPaths.length > 0) {
259
+ throw new Error('invalid_settings_field');
260
+ }
261
+ const patch = sanitized.value;
262
+ const merged = mergeSettingsPatch(prevSnapshot, patch);
263
+ if ('projectDirs' in patch) {
126
264
  merged["projectDirs"] = normalizeProjectDirs(merged["projectDirs"]);
127
265
  }
128
266
  const migrated = migrateSettings(merged);
129
- replaceSettings(migrated);
130
- saveSettings(settings);
131
- if (rawPatch["perCli"]?.codex && 'contextWindow' in rawPatch["perCli"].codex) {
267
+ const nextShape = sanitized.persistenceShape === 'present'
268
+ ? 'present'
269
+ : prevCandidate.shape;
270
+ persistAndCommit({ value: migrated, shape: nextShape }, opts.writeSettings);
271
+ candidateCommitted = true;
272
+ if (patch["perCli"]?.codex && 'contextWindow' in patch["perCli"].codex) {
132
273
  const codexCfg = settings["perCli"]?.codex || {};
133
274
  syncCodexContextWindow({
134
275
  enabled: !!codexCfg.contextWindow,
@@ -150,7 +291,8 @@ export async function applyRuntimeSettingsPatch(rawPatch = {}, opts = {}) {
150
291
  const toCli = settings["cli"];
151
292
  const toModel = selectedModelForCli(toCli, settings);
152
293
  try {
153
- const { cliSwitchRefresh } = await import('./compact.js');
294
+ const cliSwitchRefresh = opts.cliSwitchRefresh
295
+ ?? (await import('./compact.js')).cliSwitchRefresh;
154
296
  await cliSwitchRefresh({
155
297
  sourceWorkDir: prevWorkingDir || '',
156
298
  targetWorkDir: settings["workingDir"] || '',
@@ -162,8 +304,8 @@ export async function applyRuntimeSettingsPatch(rawPatch = {}, opts = {}) {
162
304
  }
163
305
  catch (e) {
164
306
  console.error('[runtime-settings] cli switch refresh failed, rolling back:', e.message);
165
- replaceSettings(prevSnapshot);
166
- saveSettings(prevSnapshot);
307
+ rollbackSettings(prevCandidate, 'cli switch refresh', opts.writeSettings);
308
+ rollbackHandled = true;
167
309
  throw e;
168
310
  }
169
311
  }
@@ -186,13 +328,13 @@ export async function applyRuntimeSettingsPatch(rawPatch = {}, opts = {}) {
186
328
  await invalidateSendOnlyClientsIfNeeded(prevSnapshot, settings);
187
329
  // Unified messaging runtime restart (handles both Telegram and Discord)
188
330
  try {
189
- await restartMessagingRuntime(prevSnapshot, settings, rawPatch);
331
+ await (opts.restartMessaging ?? restartMessagingRuntime)(prevSnapshot, settings, patch);
190
332
  }
191
333
  catch (e) {
192
334
  // Rollback: restore previous settings AND attempt to re-init previous runtime
193
335
  console.error('[runtime-settings] restart failed, rolling back:', e.message);
194
- replaceSettings(prevSnapshot);
195
- saveSettings(prevSnapshot);
336
+ rollbackSettings(prevCandidate, 'messaging restart', opts.writeSettings);
337
+ rollbackHandled = true;
196
338
  try {
197
339
  await initActiveMessagingRuntime();
198
340
  }
@@ -202,7 +344,7 @@ export async function applyRuntimeSettingsPatch(rawPatch = {}, opts = {}) {
202
344
  throw e;
203
345
  }
204
346
  broadcast('settings_change', {
205
- changedKeys: Object.keys(rawPatch),
347
+ changedKeys: Object.keys(patch),
206
348
  cli: settings["cli"],
207
349
  model: selectedModelForCli(settings["cli"], settings),
208
350
  projectDirs: settings["projectDirs"] ?? null,
@@ -210,6 +352,12 @@ export async function applyRuntimeSettingsPatch(rawPatch = {}, opts = {}) {
210
352
  });
211
353
  return settings;
212
354
  }
355
+ catch (error) {
356
+ if (candidateCommitted && !rollbackHandled) {
357
+ rollbackSettings(prevCandidate, 'post-write side effect', opts.writeSettings);
358
+ }
359
+ throw error;
360
+ }
213
361
  finally {
214
362
  finishSettingsMutation();
215
363
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-settings.js","sourceRoot":"","sources":["../../../src/core/runtime-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-settings.js","sourceRoot":"","sources":["../../../src/core/runtime-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ const storage = new AsyncLocalStorage();
3
+ export function currentSessionScope() { return storage.getStore(); }
4
+ export function withSessionScope(scope, fn) {
5
+ return storage.run(scope, fn);
6
+ }
7
+ //# sourceMappingURL=session-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-context.js","sourceRoot":"","sources":["../../../src/core/session-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAgB,CAAC;AAEtD,MAAM,UAAU,mBAAmB,KAA+B,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC9F,MAAM,UAAU,gBAAgB,CAAI,KAAmB,EAAE,EAAW;IAChE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC"}