cli-jaw 2.2.16 → 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 (411) hide show
  1. package/README.md +10 -1
  2. package/dist/bin/commands/_shared/dashboard-client.js +42 -0
  3. package/dist/bin/commands/_shared/dashboard-client.js.map +1 -0
  4. package/dist/bin/commands/_shared/search-format.js +40 -0
  5. package/dist/bin/commands/_shared/search-format.js.map +1 -0
  6. package/dist/bin/commands/chat-search.js +5 -3
  7. package/dist/bin/commands/chat-search.js.map +1 -1
  8. package/dist/bin/commands/dashboard-chat.js +14 -31
  9. package/dist/bin/commands/dashboard-chat.js.map +1 -1
  10. package/dist/bin/commands/dashboard-memory.js +12 -49
  11. package/dist/bin/commands/dashboard-memory.js.map +1 -1
  12. package/dist/bin/commands/doctor.js +33 -10
  13. package/dist/bin/commands/doctor.js.map +1 -1
  14. package/dist/bin/commands/init.js +13 -1
  15. package/dist/bin/commands/init.js.map +1 -1
  16. package/dist/bin/commands/memory.js +5 -1
  17. package/dist/bin/commands/memory.js.map +1 -1
  18. package/dist/bin/commands/slack.js +57 -3
  19. package/dist/bin/commands/slack.js.map +1 -1
  20. package/dist/bin/commands/tui/input-handler.js +1 -1
  21. package/dist/bin/commands/tui/input-handler.js.map +1 -1
  22. package/dist/bin/commands/tui/slash-command-runner.js +4 -5
  23. package/dist/bin/commands/tui/slash-command-runner.js.map +1 -1
  24. package/dist/bin/postinstall.js +16 -18
  25. package/dist/bin/postinstall.js.map +1 -1
  26. package/dist/lib/media-kind.js +28 -0
  27. package/dist/lib/media-kind.js.map +1 -0
  28. package/dist/lib/upload.js +27 -10
  29. package/dist/lib/upload.js.map +1 -1
  30. package/dist/server.js +35 -51
  31. package/dist/server.js.map +1 -1
  32. package/dist/src/agent/args.js +34 -0
  33. package/dist/src/agent/args.js.map +1 -1
  34. package/dist/src/agent/codex-app-client.js +1016 -135
  35. package/dist/src/agent/codex-app-client.js.map +1 -1
  36. package/dist/src/agent/codex-app-events.js +72 -1
  37. package/dist/src/agent/codex-app-events.js.map +1 -1
  38. package/dist/src/agent/codex-host-pool.js +617 -0
  39. package/dist/src/agent/codex-host-pool.js.map +1 -0
  40. package/dist/src/agent/jwc-runtime.js +12 -4
  41. package/dist/src/agent/jwc-runtime.js.map +1 -1
  42. package/dist/src/agent/kiro-auth.js +10 -4
  43. package/dist/src/agent/kiro-auth.js.map +1 -1
  44. package/dist/src/agent/kiro-runtime.js +45 -8
  45. package/dist/src/agent/kiro-runtime.js.map +1 -1
  46. package/dist/src/agent/lifecycle-handler.js +75 -52
  47. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  48. package/dist/src/agent/memory-flush-controller.js +241 -33
  49. package/dist/src/agent/memory-flush-controller.js.map +1 -1
  50. package/dist/src/agent/prompt-context.js +4 -0
  51. package/dist/src/agent/prompt-context.js.map +1 -1
  52. package/dist/src/agent/runtime-pool.js +64 -34
  53. package/dist/src/agent/runtime-pool.js.map +1 -1
  54. package/dist/src/agent/session-persistence.js +71 -15
  55. package/dist/src/agent/session-persistence.js.map +1 -1
  56. package/dist/src/agent/spawn/queue.js +319 -162
  57. package/dist/src/agent/spawn/queue.js.map +1 -1
  58. package/dist/src/agent/spawn.js +581 -268
  59. package/dist/src/agent/spawn.js.map +1 -1
  60. package/dist/src/bgtask/types.js +1 -1
  61. package/dist/src/bgtask/types.js.map +1 -1
  62. package/dist/src/browser/adaptive-fetch/safety.js +25 -0
  63. package/dist/src/browser/adaptive-fetch/safety.js.map +1 -1
  64. package/dist/src/browser/connection.js +2 -8
  65. package/dist/src/browser/connection.js.map +1 -1
  66. package/dist/src/cli/capability-probe-worker.js +172 -0
  67. package/dist/src/cli/capability-probe-worker.js.map +1 -0
  68. package/dist/src/cli/capability-probe.js +83 -0
  69. package/dist/src/cli/capability-probe.js.map +1 -0
  70. package/dist/src/cli/claude-models.js +2 -2
  71. package/dist/src/cli/claude-models.js.map +1 -1
  72. package/dist/src/cli/cli-status-worker.js +296 -0
  73. package/dist/src/cli/cli-status-worker.js.map +1 -0
  74. package/dist/src/cli/cli-status.js +81 -0
  75. package/dist/src/cli/cli-status.js.map +1 -0
  76. package/dist/src/cli/command-context.js +17 -5
  77. package/dist/src/cli/command-context.js.map +1 -1
  78. package/dist/src/cli/compact.js +56 -19
  79. package/dist/src/cli/compact.js.map +1 -1
  80. package/dist/src/cli/handlers-runtime.js +6 -4
  81. package/dist/src/cli/handlers-runtime.js.map +1 -1
  82. package/dist/src/cli/handlers.js +7 -2
  83. package/dist/src/cli/handlers.js.map +1 -1
  84. package/dist/src/cli/opencodex-models.js +5 -32
  85. package/dist/src/cli/opencodex-models.js.map +1 -1
  86. package/dist/src/cli/opencodex-runtime.js +82 -0
  87. package/dist/src/cli/opencodex-runtime.js.map +1 -0
  88. package/dist/src/cli/readiness.js +35 -18
  89. package/dist/src/cli/readiness.js.map +1 -1
  90. package/dist/src/cli/registry-live.js +8 -2
  91. package/dist/src/cli/registry-live.js.map +1 -1
  92. package/dist/src/cli/registry.js +1 -1
  93. package/dist/src/cli/registry.js.map +1 -1
  94. package/dist/src/core/browser-open-default.js +6 -4
  95. package/dist/src/core/browser-open-default.js.map +1 -1
  96. package/dist/src/core/browser-open.js +11 -15
  97. package/dist/src/core/browser-open.js.map +1 -1
  98. package/dist/src/core/bus.js +7 -1
  99. package/dist/src/core/bus.js.map +1 -1
  100. package/dist/src/core/chat-sessions.js +121 -12
  101. package/dist/src/core/chat-sessions.js.map +1 -1
  102. package/dist/src/core/cli-detect.js +148 -4
  103. package/dist/src/core/cli-detect.js.map +1 -1
  104. package/dist/src/core/codex-config.js +21 -0
  105. package/dist/src/core/codex-config.js.map +1 -1
  106. package/dist/src/core/compact.js +73 -21
  107. package/dist/src/core/compact.js.map +1 -1
  108. package/dist/src/core/config.js +449 -20
  109. package/dist/src/core/config.js.map +1 -1
  110. package/dist/src/core/db.js +225 -0
  111. package/dist/src/core/db.js.map +1 -1
  112. package/dist/src/core/event-bus.js +49 -4
  113. package/dist/src/core/event-bus.js.map +1 -1
  114. package/dist/src/core/event-scope.js +100 -0
  115. package/dist/src/core/event-scope.js.map +1 -0
  116. package/dist/src/core/main-session.js +64 -21
  117. package/dist/src/core/main-session.js.map +1 -1
  118. package/dist/src/core/message-summary.js +12 -2
  119. package/dist/src/core/message-summary.js.map +1 -1
  120. package/dist/src/core/platform-kind.js +139 -0
  121. package/dist/src/core/platform-kind.js.map +1 -0
  122. package/dist/src/core/rate-limit.js +156 -0
  123. package/dist/src/core/rate-limit.js.map +1 -0
  124. package/dist/src/core/runtime-settings.js +165 -17
  125. package/dist/src/core/runtime-settings.js.map +1 -1
  126. package/dist/src/core/session-context.js +7 -0
  127. package/dist/src/core/session-context.js.map +1 -0
  128. package/dist/src/core/session-ops.js +53 -9
  129. package/dist/src/core/session-ops.js.map +1 -1
  130. package/dist/src/core/settings-merge.js +105 -3
  131. package/dist/src/core/settings-merge.js.map +1 -1
  132. package/dist/src/core/settings-watch.js +29 -5
  133. package/dist/src/core/settings-watch.js.map +1 -1
  134. package/dist/src/core/widget-watcher.js +15 -2
  135. package/dist/src/core/widget-watcher.js.map +1 -1
  136. package/dist/src/discord/bot.js +5 -2
  137. package/dist/src/discord/bot.js.map +1 -1
  138. package/dist/src/discord/commands.js +4 -4
  139. package/dist/src/discord/commands.js.map +1 -1
  140. package/dist/src/goal/heartbeat.js +1 -1
  141. package/dist/src/goal/heartbeat.js.map +1 -1
  142. package/dist/src/goal/runtime.js +1 -1
  143. package/dist/src/goal/runtime.js.map +1 -1
  144. package/dist/src/goal-run/controller.js +2 -2
  145. package/dist/src/goal-run/controller.js.map +1 -1
  146. package/dist/src/manager/internal-fetch.js +15 -0
  147. package/dist/src/manager/internal-fetch.js.map +1 -0
  148. package/dist/src/manager/logs.js +2 -1
  149. package/dist/src/manager/logs.js.map +1 -1
  150. package/dist/src/manager/memory/chat-federation.js +104 -11
  151. package/dist/src/manager/memory/chat-federation.js.map +1 -1
  152. package/dist/src/manager/memory/federation.js +100 -0
  153. package/dist/src/manager/memory/federation.js.map +1 -1
  154. package/dist/src/manager/metadata.js +4 -1
  155. package/dist/src/manager/metadata.js.map +1 -1
  156. package/dist/src/manager/notes/assets.js +1 -1
  157. package/dist/src/manager/notes/assets.js.map +1 -1
  158. package/dist/src/manager/notes/frontmatter.js +5 -49
  159. package/dist/src/manager/notes/frontmatter.js.map +1 -1
  160. package/dist/src/manager/notes/link-resolver.js +2 -2
  161. package/dist/src/manager/notes/link-resolver.js.map +1 -1
  162. package/dist/src/manager/notes/remote-assets.js +1 -1
  163. package/dist/src/manager/notes/remote-assets.js.map +1 -1
  164. package/dist/src/manager/notes/routes.js +2 -2
  165. package/dist/src/manager/notes/routes.js.map +1 -1
  166. package/dist/src/manager/notes/store.js +2 -2
  167. package/dist/src/manager/notes/store.js.map +1 -1
  168. package/dist/src/manager/notes/trash.js +1 -1
  169. package/dist/src/manager/notes/trash.js.map +1 -1
  170. package/dist/src/manager/notes/vault-index.js +2 -2
  171. package/dist/src/manager/notes/vault-index.js.map +1 -1
  172. package/dist/src/manager/notes/wiki-links.js +1 -1
  173. package/dist/src/manager/notes/wiki-links.js.map +1 -1
  174. package/dist/src/manager/notes/wiki-routes.js +84 -0
  175. package/dist/src/manager/notes/wiki-routes.js.map +1 -0
  176. package/dist/src/manager/proxy.js +1 -0
  177. package/dist/src/manager/proxy.js.map +1 -1
  178. package/dist/src/manager/routes/dashboard-memory.js +24 -1
  179. package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
  180. package/dist/src/manager/routes/runtime-monitor.js +1 -1
  181. package/dist/src/manager/routes/runtime-monitor.js.map +1 -1
  182. package/dist/src/manager/scan.js +5 -3
  183. package/dist/src/manager/scan.js.map +1 -1
  184. package/dist/src/manager/server.js +20 -6
  185. package/dist/src/manager/server.js.map +1 -1
  186. package/dist/src/manager/telegram-hub/hub-bot.js +4 -3
  187. package/dist/src/manager/telegram-hub/hub-bot.js.map +1 -1
  188. package/dist/src/manager/worker-events.js +2 -1
  189. package/dist/src/manager/worker-events.js.map +1 -1
  190. package/dist/src/memory/heartbeat.js +6 -5
  191. package/dist/src/memory/heartbeat.js.map +1 -1
  192. package/dist/src/memory/indexing.js +162 -45
  193. package/dist/src/memory/indexing.js.map +1 -1
  194. package/dist/src/messaging/channel-validate.js +14 -1
  195. package/dist/src/messaging/channel-validate.js.map +1 -1
  196. package/dist/src/messaging/redact.js +2 -1
  197. package/dist/src/messaging/redact.js.map +1 -1
  198. package/dist/src/messaging/session-key.js +21 -2
  199. package/dist/src/messaging/session-key.js.map +1 -1
  200. package/dist/src/notes/constants.js.map +1 -0
  201. package/dist/src/notes/frontmatter.js +59 -0
  202. package/dist/src/notes/frontmatter.js.map +1 -0
  203. package/dist/src/notes/path-guards.js.map +1 -0
  204. package/dist/src/notes/search.js.map +1 -0
  205. package/dist/src/orchestrator/attestation.js +1 -1
  206. package/dist/src/orchestrator/attestation.js.map +1 -1
  207. package/dist/src/orchestrator/gateway.js +135 -31
  208. package/dist/src/orchestrator/gateway.js.map +1 -1
  209. package/dist/src/orchestrator/pipeline.js +53 -21
  210. package/dist/src/orchestrator/pipeline.js.map +1 -1
  211. package/dist/src/orchestrator/scope.js +36 -2
  212. package/dist/src/orchestrator/scope.js.map +1 -1
  213. package/dist/src/orchestrator/session-lanes.js +87 -0
  214. package/dist/src/orchestrator/session-lanes.js.map +1 -0
  215. package/dist/src/orchestrator/session-work.js +25 -0
  216. package/dist/src/orchestrator/session-work.js.map +1 -0
  217. package/dist/src/orchestrator/state-machine.js +1 -5
  218. package/dist/src/orchestrator/state-machine.js.map +1 -1
  219. package/dist/src/orchestrator/worker-registry.js +20 -10
  220. package/dist/src/orchestrator/worker-registry.js.map +1 -1
  221. package/dist/src/prompt/builder.js +40 -2
  222. package/dist/src/prompt/builder.js.map +1 -1
  223. package/dist/src/prompt/templates/a1-system.md +8 -1
  224. package/dist/src/routes/agent-control.js +44 -8
  225. package/dist/src/routes/agent-control.js.map +1 -1
  226. package/dist/src/routes/chat-sessions.js +34 -6
  227. package/dist/src/routes/chat-sessions.js.map +1 -1
  228. package/dist/src/routes/command.js +63 -8
  229. package/dist/src/routes/command.js.map +1 -1
  230. package/dist/src/routes/events.js +11 -2
  231. package/dist/src/routes/events.js.map +1 -1
  232. package/dist/src/routes/link-preview.js +1 -27
  233. package/dist/src/routes/link-preview.js.map +1 -1
  234. package/dist/src/routes/messages.js +6 -5
  235. package/dist/src/routes/messages.js.map +1 -1
  236. package/dist/src/routes/messaging.js +45 -1
  237. package/dist/src/routes/messaging.js.map +1 -1
  238. package/dist/src/routes/orchestrate.js +53 -33
  239. package/dist/src/routes/orchestrate.js.map +1 -1
  240. package/dist/src/routes/search.js +84 -0
  241. package/dist/src/routes/search.js.map +1 -0
  242. package/dist/src/routes/session-request.js +29 -0
  243. package/dist/src/routes/session-request.js.map +1 -0
  244. package/dist/src/routes/settings.js +110 -3
  245. package/dist/src/routes/settings.js.map +1 -1
  246. package/dist/src/routes/static.js +30 -8
  247. package/dist/src/routes/static.js.map +1 -1
  248. package/dist/src/routes/system.js +1 -1
  249. package/dist/src/routes/system.js.map +1 -1
  250. package/dist/src/routes/wiki.js +122 -0
  251. package/dist/src/routes/wiki.js.map +1 -0
  252. package/dist/src/search/contract.js +2 -0
  253. package/dist/src/search/contract.js.map +1 -0
  254. package/dist/src/search/coordinator.js +153 -0
  255. package/dist/src/search/coordinator.js.map +1 -0
  256. package/dist/src/search/provider.js +40 -0
  257. package/dist/src/search/provider.js.map +1 -0
  258. package/dist/src/search/providers/chat.js +115 -0
  259. package/dist/src/search/providers/chat.js.map +1 -0
  260. package/dist/src/search/providers/memory.js +53 -0
  261. package/dist/src/search/providers/memory.js.map +1 -0
  262. package/dist/src/search/providers/wiki.js +80 -0
  263. package/dist/src/search/providers/wiki.js.map +1 -0
  264. package/dist/src/slack/api.js +10 -1
  265. package/dist/src/slack/api.js.map +1 -1
  266. package/dist/src/slack/attachment-recovery.js +42 -0
  267. package/dist/src/slack/attachment-recovery.js.map +1 -0
  268. package/dist/src/slack/bot.js +120 -41
  269. package/dist/src/slack/bot.js.map +1 -1
  270. package/dist/src/slack/commands.js +24 -8
  271. package/dist/src/slack/commands.js.map +1 -1
  272. package/dist/src/slack/events.js +12 -1
  273. package/dist/src/slack/events.js.map +1 -1
  274. package/dist/src/slack/history.js +108 -0
  275. package/dist/src/slack/history.js.map +1 -0
  276. package/dist/src/slack/inbound-file.js +242 -0
  277. package/dist/src/slack/inbound-file.js.map +1 -0
  278. package/dist/src/slack/inbound-url.js +39 -0
  279. package/dist/src/slack/inbound-url.js.map +1 -0
  280. package/dist/src/slack/ingress.js +140 -0
  281. package/dist/src/slack/ingress.js.map +1 -0
  282. package/dist/src/slack/manifest.js +3 -0
  283. package/dist/src/slack/manifest.js.map +1 -1
  284. package/dist/src/slack/socket.js +1 -1
  285. package/dist/src/slack/socket.js.map +1 -1
  286. package/dist/src/slack/thread-tracker.js +86 -0
  287. package/dist/src/slack/thread-tracker.js.map +1 -0
  288. package/dist/src/telegram/bot.js +21 -11
  289. package/dist/src/telegram/bot.js.map +1 -1
  290. package/dist/src/wiki/config.js +193 -0
  291. package/dist/src/wiki/config.js.map +1 -0
  292. package/dist/src/wiki/entities.js +61 -0
  293. package/dist/src/wiki/entities.js.map +1 -0
  294. package/dist/src/wiki/ontology.js +72 -0
  295. package/dist/src/wiki/ontology.js.map +1 -0
  296. package/dist/src/wiki/prompt.js +172 -0
  297. package/dist/src/wiki/prompt.js.map +1 -0
  298. package/dist/src/wiki/safe-traversal.js +198 -0
  299. package/dist/src/wiki/safe-traversal.js.map +1 -0
  300. package/dist/src/wiki/scaffold.js +77 -0
  301. package/dist/src/wiki/scaffold.js.map +1 -0
  302. package/package.json +1 -1
  303. package/public/css/session-hub.css +266 -0
  304. package/public/dist/assets/AdvancedExport-DYGcCAUq.js +1 -0
  305. package/public/dist/assets/Agent-CNNQ7KkJ.js +1 -0
  306. package/public/dist/assets/{DesignPanel-BGMPhZSx.js → DesignPanel-DcL369nB.js} +1 -1
  307. package/public/dist/assets/{DocPanel-Dz-J_l5M.js → DocPanel-K8A2pm_1.js} +1 -1
  308. package/public/dist/assets/{FolderPanel-DbPhzzvi.js → FolderPanel-CV52EzwG.js} +1 -1
  309. package/public/dist/assets/{MilkdownWysiwygEditor-Em7iC6y9.js → MilkdownWysiwygEditor-BKOCDI4Z.js} +1 -1
  310. package/public/dist/assets/api-B25zNNFJ.js +1 -0
  311. package/public/dist/assets/{app-DX4e6isX.css → app-DjgGeXhJ.css} +1 -1
  312. package/public/dist/assets/app-Dsgp4xpU.js +55 -0
  313. package/public/dist/assets/bgtask-badge-C6h5C-o4.js +1 -0
  314. package/public/dist/assets/{bgtask-badge-qMkKOZx0.js → bgtask-badge-CpavV0Jc.js} +4 -4
  315. package/public/dist/assets/{employees-BnobWM_2.js → employees-BJyEgim7.js} +4 -4
  316. package/public/dist/assets/idb-cache-B5PX63p7.js +1 -0
  317. package/public/dist/assets/{idb-cache-BzzftUET.js → idb-cache-lOntwU3S.js} +1 -1
  318. package/public/dist/assets/{iframe-renderer-C5vRbbl9.js → iframe-renderer-B8k3AvTv.js} +12 -12
  319. package/public/dist/assets/iframe-renderer-BO_GgCTR.js +1 -0
  320. package/public/dist/assets/manager-LkGs6qEJ.css +1 -0
  321. package/public/dist/assets/manager-kXYQyMhR.js +13 -0
  322. package/public/dist/assets/{memory-DF4kPwwC.js → memory-D2RbBVO-.js} +11 -11
  323. package/public/dist/assets/memory-amsvg4Ey.js +1 -0
  324. package/public/dist/assets/message-history-BGHZxvgV.js +1 -0
  325. package/public/dist/assets/message-history-Bw2E_b8L.js +1 -0
  326. package/public/dist/assets/pi-settings-5HVg1sXJ.js +1 -0
  327. package/public/dist/assets/render-BkGcpH7z.js +157 -0
  328. package/public/dist/assets/settings-B1FPORO2.js +56 -0
  329. package/public/dist/assets/settings-CMN-zN4Q.js +1 -0
  330. package/public/dist/assets/settings-core-B_OjGYVN.js +1 -0
  331. package/public/dist/assets/settings-core-CxRwqx86.js +144 -0
  332. package/public/dist/assets/sidebar-DW78DANx.js +49 -0
  333. package/public/dist/assets/skills-Dz-9Yrxr.js +1 -0
  334. package/public/dist/assets/{skills-IGquen_j.js → skills-lWi0ZFiV.js} +6 -6
  335. package/public/dist/assets/{slash-commands-ZRDOL99E.js → slash-commands-DYOI6nKj.js} +1 -1
  336. package/public/dist/assets/slash-commands-xJFCdTTM.js +1 -0
  337. package/public/dist/assets/{trace-drawer-D8To8fYt.js → trace-drawer-DBX9xzmt.js} +1 -1
  338. package/public/dist/assets/{ui-Hx_mNoDf.js → ui-Bx7eqnXt.js} +1 -1
  339. package/public/dist/assets/ui-JOcrYeG-.js +1 -0
  340. package/public/dist/assets/{wiki-link-suggestions-DZQc78gj.js → wiki-link-suggestions-Dp6kBQVu.js} +1 -1
  341. package/public/dist/index.html +4 -4
  342. package/public/dist/manager/index.html +2 -2
  343. package/public/index.html +3 -2
  344. package/public/js/event-channel.ts +25 -0
  345. package/public/js/features/channel-onboarding-flow.ts +16 -1
  346. package/public/js/features/channel-onboarding.ts +20 -2
  347. package/public/js/features/chat-messages.ts +3 -1
  348. package/public/js/features/chat-search.ts +2 -1
  349. package/public/js/features/chat.ts +56 -18
  350. package/public/js/features/elicitation.ts +15 -0
  351. package/public/js/features/idb-cache.ts +34 -0
  352. package/public/js/features/message-history.ts +2 -1
  353. package/public/js/features/session-hub.ts +334 -0
  354. package/public/js/features/settings-cli-status-render.ts +1 -1
  355. package/public/js/features/settings-cli-status.ts +25 -11
  356. package/public/js/features/settings-core.ts +72 -3
  357. package/public/js/features/settings-types.ts +32 -0
  358. package/public/js/features/ui-status.ts +2 -1
  359. package/public/js/main.ts +20 -0
  360. package/public/js/render/compose-block.ts +7 -0
  361. package/public/js/ws.ts +22 -2
  362. package/public/locales/en.json +46 -4
  363. package/public/locales/ja.json +46 -4
  364. package/public/locales/ko.json +46 -4
  365. package/public/locales/zh.json +46 -4
  366. package/public/manager/src/App.tsx +1 -1
  367. package/public/manager/src/InstancePreview.tsx +5 -1
  368. package/public/manager/src/api.ts +2 -1
  369. package/public/manager/src/components/InstanceGroups.tsx +10 -0
  370. package/public/manager/src/components/InstanceListContent.tsx +24 -1
  371. package/public/manager/src/components/InstanceRow.tsx +33 -3
  372. package/public/manager/src/components/InstanceSessionList.tsx +132 -0
  373. package/public/manager/src/hooks/useActiveSessionDisclosure.ts +45 -0
  374. package/public/manager/src/lib/resilient-fetch.ts +93 -0
  375. package/public/manager/src/lib/session-store.ts +216 -0
  376. package/public/manager/src/manager-components.css +97 -0
  377. package/public/manager/src/settings/pages/AdvancedExport.tsx +12 -2
  378. package/public/manager/src/settings/pages/Agent.tsx +113 -1
  379. package/public/manager/src/settings/pages/components/agent/agent-meta.ts +1 -1
  380. package/scripts/burst-scenario.mjs +72 -0
  381. package/scripts/check-redaction-sinks.mjs +1 -0
  382. package/scripts/check-strict-baseline.mjs +1 -1
  383. package/dist/src/manager/notes/constants.js.map +0 -1
  384. package/dist/src/manager/notes/path-guards.js.map +0 -1
  385. package/dist/src/manager/notes/search.js.map +0 -1
  386. package/public/dist/assets/AdvancedExport-DsDpqXoH.js +0 -1
  387. package/public/dist/assets/Agent-BjbZVZ9p.js +0 -1
  388. package/public/dist/assets/api-C9dOxby7.js +0 -1
  389. package/public/dist/assets/app-BzD_ZLvt.js +0 -55
  390. package/public/dist/assets/bgtask-badge-Dqbp-Y4e.js +0 -1
  391. package/public/dist/assets/idb-cache-ZH6lOebk.js +0 -1
  392. package/public/dist/assets/iframe-renderer-Df4KIVyx.js +0 -1
  393. package/public/dist/assets/manager-C4eNDNFt.css +0 -1
  394. package/public/dist/assets/manager-DaN201mN.js +0 -13
  395. package/public/dist/assets/memory-D-bULTHl.js +0 -1
  396. package/public/dist/assets/message-history-C4WOisGx.js +0 -1
  397. package/public/dist/assets/message-history-ZBoza6ew.js +0 -1
  398. package/public/dist/assets/pi-settings-CBUGDAuT.js +0 -1
  399. package/public/dist/assets/render-DYX6GRQ0.js +0 -122
  400. package/public/dist/assets/settings-DbJpGoaX.js +0 -55
  401. package/public/dist/assets/settings-SreihUje.js +0 -1
  402. package/public/dist/assets/settings-core-B1Y5Nb4Z.js +0 -1
  403. package/public/dist/assets/settings-core-DobZWIZ7.js +0 -140
  404. package/public/dist/assets/sidebar-Cp22g0Gv.js +0 -49
  405. package/public/dist/assets/skills-DwPIP08e.js +0 -1
  406. package/public/dist/assets/slash-commands-BBVfwcnW.js +0 -1
  407. package/public/dist/assets/ui-CAicpUZc.js +0 -1
  408. /package/dist/src/{manager/notes → notes}/constants.js +0 -0
  409. /package/dist/src/{manager/notes → notes}/path-guards.js +0 -0
  410. /package/dist/src/{manager/notes → notes}/search.js +0 -0
  411. /package/public/dist/assets/{pi-settings-Dh5lgb87.js → pi-settings-DEuKgvIj.js} +0 -0
@@ -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"}
@@ -2,13 +2,21 @@
2
2
  // Extracted from server.ts in Phase 2 (devlog 260609, 20 §3.1).
3
3
  // Grouped here because all three bump the session ownership generation
4
4
  // before mutating session or runtime-settings state.
5
- import { bumpSessionOwnershipGeneration } from '../agent/session-persistence.js';
5
+ import { bumpGenerationForSessionLocalReset, bumpSessionOwnershipGeneration } from '../agent/session-persistence.js';
6
6
  import { resetFallbackState } from '../agent/spawn.js';
7
7
  import { clearMainSessionState, resetSessionPreservingHistory } from './main-session.js';
8
8
  import { applyRuntimeSettingsPatch } from './runtime-settings.js';
9
9
  import { settings } from './config.js';
10
+ import { currentSessionScope } from './session-context.js';
10
11
  /** Full reset: compact first, then delete message history. */
11
12
  export async function clearSessionState() {
13
+ // The reset belongs to whichever session asked for it. Without passing the scope on,
14
+ // the compact below falls back to the global ownership bump and the narrowing done at
15
+ // the end of this function never matters — a reset in one tab still discards the turn
16
+ // another tab has in flight (073 §2.2a).
17
+ const sessionScope = currentSessionScope();
18
+ const scopeKey = sessionScope?.scope;
19
+ const chatSessionId = sessionScope?.chatSessionId;
12
20
  try {
13
21
  const { autoCompactRefresh } = await import('./compact.js');
14
22
  await autoCompactRefresh({
@@ -16,6 +24,8 @@ export async function clearSessionState() {
16
24
  instructions: '',
17
25
  cli: settings["cli"] || 'claude',
18
26
  model: settings["model"] || '',
27
+ ...(scopeKey ? { scopeKey } : {}),
28
+ ...(chatSessionId ? { chatSessionId } : {}),
19
29
  });
20
30
  }
21
31
  catch { } // best-effort: compact failure must not block session reset
@@ -24,27 +34,61 @@ export async function clearSessionState() {
24
34
  // an explicit reset must invalidate resumable native sessions (guarded AGY
25
35
  // resume reads session_buckets, not the main session row), even when
26
36
  // autoCompactRefresh() threw before reaching its own bucket clear.
27
- const { clearSessionBucket } = await import('./db.js');
28
- const { resolveSessionBucket } = await import('../agent/args.js');
29
- const bucket = resolveSessionBucket(settings["cli"] || 'claude', settings["model"] || '');
30
- if (bucket)
31
- clearSessionBucket.run(bucket);
37
+ const { clearSessionBucket, clearSessionBucketsByPrefix } = await import('./db.js');
38
+ const { aiEProviderForBucket, resolveSessionBucket } = await import('../agent/args.js');
39
+ const cli = settings["cli"] || 'claude';
40
+ const model = settings["model"] || '';
41
+ // A reset with a session behind it belongs to that session even when the session
42
+ // is the default one. Treating `default` as "no session" would let a reset of the
43
+ // default chat clear the Slack and local scopes' lanes, which is the same
44
+ // cross-session damage 073 exists to stop. Only an absent scope is instance-wide.
45
+ const isInstanceWide = scopeKey === undefined;
46
+ const scope = scopeKey ?? 'default';
47
+ // ai-e keys its bucket by provider; without it the name is re-derived from the
48
+ // model and a reset can clear a bucket the conversation never used.
49
+ const base = resolveSessionBucket(cli, model, aiEProviderForBucket(cli, model, settings));
50
+ if (isInstanceWide) {
51
+ clearSessionBucketsByPrefix.run(base, 'codex-app:');
52
+ }
53
+ else {
54
+ // Since 073 §2.1 every scope owns its bucket. The prefix form is needed
55
+ // because codex-app folds lane mode and effort into its key and this path
56
+ // knows neither, so an exact key built with those blank would match no row.
57
+ // The scope has to be a whole segment of the pattern: `codex-app:local:a%`
58
+ // would also delete `local:abc`, a different session's rows.
59
+ const scoped = `${base}:${scope}`;
60
+ clearSessionBucketsByPrefix.run(scoped, `${scoped}:`);
61
+ // The default scope also owns the bare legacy name, which is what a session
62
+ // created before 073 has been resuming from all along.
63
+ if (scope === 'default')
64
+ clearSessionBucket.run(base);
65
+ }
66
+ // The stored rows are half of it: an idle lane holds its thread in memory and,
67
+ // with nothing left to contradict it, the next turn resumes the conversation this
68
+ // reset just discarded.
69
+ try {
70
+ const { invalidateCodexAppLanesForScope } = await import('../agent/codex-host-pool.js');
71
+ invalidateCodexAppLanesForScope(isInstanceWide ? null : scope);
72
+ }
73
+ catch (e) {
74
+ console.warn('[jaw:reset] lane invalidation failed:', e.message);
75
+ }
32
76
  }
33
77
  catch (e) {
34
78
  console.warn('[jaw:reset] session bucket clear failed:', e.message);
35
79
  }
36
- bumpSessionOwnershipGeneration();
80
+ bumpGenerationForSessionLocalReset();
37
81
  clearMainSessionState();
38
82
  }
39
83
  /** Soft reset: new session, history preserved. */
40
84
  export function resetSessionOnly() {
41
- bumpSessionOwnershipGeneration();
85
+ bumpGenerationForSessionLocalReset();
42
86
  resetSessionPreservingHistory();
43
87
  }
44
88
  export async function applySettingsPatch(rawPatch = {}) {
45
89
  bumpSessionOwnershipGeneration();
46
90
  return applyRuntimeSettingsPatch(rawPatch, {
47
- resetFallbackState,
91
+ resetFallbackState: () => resetFallbackState(null),
48
92
  });
49
93
  }
50
94
  //# sourceMappingURL=session-ops.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-ops.js","sourceRoot":"","sources":["../../../src/core/session-ops.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,gEAAgE;AAChE,uEAAuE;AACvE,qDAAqD;AAErD,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACnC,IAAI,CAAC;QACD,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,kBAAkB,CAAC;YACrB,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI;YACvC,YAAY,EAAE,EAAE;YAChB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ;YAChC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE;SACjC,CAAC,CAAC;IACP,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC,CAAC,4DAA4D;IACvE,IAAI,CAAC;QACD,0EAA0E;QAC1E,2EAA2E;QAC3E,qEAAqE;QACrE,mEAAmE;QACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1F,IAAI,MAAM;YAAE,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;IACnF,CAAC;IACD,8BAA8B,EAAE,CAAC;IACjC,qBAAqB,EAAE,CAAC;AAC5B,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,gBAAgB;IAC5B,8BAA8B,EAAE,CAAC;IACjC,6BAA6B,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAoC,EAAE;IAC3E,8BAA8B,EAAE,CAAC;IACjC,OAAO,yBAAyB,CAAC,QAAQ,EAAE;QACvC,kBAAkB;KACrB,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"session-ops.js","sourceRoot":"","sources":["../../../src/core/session-ops.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,78 @@
1
1
  // ─── Settings Merge Logic ────────────────────────────
2
2
  // Phase 9.4 — server.js의 applySettingsPatch에서 추출한 deep merge 로직
3
+ function isPlainRecord(value) {
4
+ return !!value && typeof value === 'object' && !Array.isArray(value);
5
+ }
6
+ /**
7
+ * Apply the shared nested settings policy at every untrusted ingress.
8
+ * Boot/watch consume full documents, so an absent or invalid gate becomes the
9
+ * execution default false while persistence shape remains absent. API input is
10
+ * a patch, so a missing gate must not overwrite the current runtime value.
11
+ */
12
+ export function sanitizeSettingsInput(input, source) {
13
+ const value = { ...input };
14
+ const serverOwnedPaths = [];
15
+ const invalidPaths = [];
16
+ const rejectedPaths = [];
17
+ let persistenceShape = 'absent';
18
+ const runtimeInput = isPlainRecord(input["runtime"]) ? input["runtime"] : null;
19
+ const codexAppInput = runtimeInput && isPlainRecord(runtimeInput["codexApp"])
20
+ ? runtimeInput["codexApp"]
21
+ : null;
22
+ const runtime = runtimeInput ? { ...runtimeInput } : {};
23
+ const codexApp = codexAppInput ? { ...codexAppInput } : {};
24
+ if (codexAppInput && Object.prototype.hasOwnProperty.call(codexAppInput, 'laneMode')) {
25
+ const path = 'runtime.codexApp.laneMode';
26
+ delete codexApp["laneMode"];
27
+ rejectedPaths.push(path);
28
+ if (source === 'api')
29
+ serverOwnedPaths.push(path);
30
+ }
31
+ if (codexAppInput && Object.prototype.hasOwnProperty.call(codexAppInput, 'multiplex')) {
32
+ if (typeof codexAppInput["multiplex"] === 'boolean') {
33
+ persistenceShape = 'present';
34
+ }
35
+ else {
36
+ delete codexApp["multiplex"];
37
+ invalidPaths.push('runtime.codexApp.multiplex');
38
+ }
39
+ }
40
+ if (source !== 'api' && persistenceShape === 'absent') {
41
+ codexApp["multiplex"] = false;
42
+ }
43
+ if (runtimeInput || source !== 'api') {
44
+ runtime["codexApp"] = codexApp;
45
+ value["runtime"] = runtime;
46
+ }
47
+ // `multiSession` has to be a plain object or not be here at all. A non-object survives
48
+ // the merge as-is and then meets `if (!s["multiSession"])` in migrateSettings, which
49
+ // reads falsy as absent and fills the block with the current defaults — so a single
50
+ // `{"multiSession": null}` would switch sessions on for a user who never accepted the
51
+ // migration. Both ingresses that can carry one, the API patch and the settings-file
52
+ // watcher, pass through here, which is why the guard lives in this function rather
53
+ // than at either call site (110 §4b-3).
54
+ if (Object.prototype.hasOwnProperty.call(input, 'multiSession') && !isPlainRecord(input["multiSession"])) {
55
+ delete value["multiSession"];
56
+ invalidPaths.push('multiSession');
57
+ }
58
+ else if (isPlainRecord(input["multiSession"])) {
59
+ const block = { ...input["multiSession"] };
60
+ // Same reasoning one level down: a non-object `channels` reaches the per-channel
61
+ // reads as something that is not indexable.
62
+ if (Object.prototype.hasOwnProperty.call(block, 'channels') && !isPlainRecord(block["channels"])) {
63
+ delete block["channels"];
64
+ invalidPaths.push('multiSession.channels');
65
+ }
66
+ value["multiSession"] = block;
67
+ }
68
+ return {
69
+ value,
70
+ persistenceShape,
71
+ serverOwnedPaths,
72
+ invalidPaths,
73
+ rejectedPaths,
74
+ };
75
+ }
3
76
  /**
4
77
  * settings 객체에 patch를 deep merge
5
78
  * perCli와 activeOverrides는 CLI별로 개별 merge (기존 effort/model 보존)
@@ -8,7 +81,7 @@
8
81
  * @returns {object} 새 settings (current를 직접 변경하지 않음)
9
82
  */
10
83
  export function mergeSettingsPatch(current, patch) {
11
- const result = { ...current };
84
+ const result = structuredClone(current);
12
85
  const remaining = { ...patch };
13
86
  // Deep merge perCli at per-CLI level
14
87
  if (remaining["perCli"] && typeof remaining["perCli"] === 'object') {
@@ -26,8 +99,10 @@ export function mergeSettingsPatch(current, patch) {
26
99
  }
27
100
  delete remaining["activeOverrides"];
28
101
  }
29
- // Deep merge nested objects (heartbeat, telegram, telegramHub, memory, stt, jawCeo, pi, tui, network)
30
- for (const key of ['heartbeat', 'telegram', 'telegramHub', 'discord', 'slack', 'memory', 'stt', 'jawCeo', 'pi', 'tui', 'messaging', 'network']) {
102
+ // Deep merge nested objects. A key missing from this list is REPLACED wholesale by a
103
+ // partial patch, so `{wiki:{promptDigest:true}}` would silently drop the root and the
104
+ // enabled flag along with it.
105
+ for (const key of ['heartbeat', 'telegram', 'telegramHub', 'discord', 'slack', 'memory', 'stt', 'jawCeo', 'pi', 'tui', 'messaging', 'network', 'wiki']) {
31
106
  if (remaining[key] && typeof remaining[key] === 'object') {
32
107
  result[key] = { ...result[key], ...remaining[key] };
33
108
  delete remaining[key];
@@ -39,6 +114,33 @@ export function mergeSettingsPatch(current, patch) {
39
114
  result["network"].remoteAccess = { ...result["network"].remoteAccess, ...remaining["network"].remoteAccess };
40
115
  delete remaining["network"].remoteAccess;
41
116
  }
117
+ // runtime.codexApp is a two-level merge boundary: a multiplex-only patch
118
+ // must preserve both other runtime blocks and codexApp-owned siblings.
119
+ if (isPlainRecord(remaining["runtime"])) {
120
+ const runtimePatch = remaining["runtime"];
121
+ result["runtime"] = { ...(result["runtime"] || {}), ...runtimePatch };
122
+ if (isPlainRecord(runtimePatch["codexApp"])) {
123
+ result["runtime"].codexApp = {
124
+ ...(current["runtime"]?.codexApp || {}),
125
+ ...runtimePatch["codexApp"],
126
+ };
127
+ }
128
+ delete remaining["runtime"];
129
+ }
130
+ // multiSession.channels is the same shape of boundary. An enabled-only patch must
131
+ // keep midRunPolicy and the channel gates, and a single-channel patch must keep the
132
+ // other two channels — which is exactly what a per-channel session gate will send.
133
+ if (isPlainRecord(remaining["multiSession"])) {
134
+ const sessionPatch = remaining["multiSession"];
135
+ result["multiSession"] = { ...(result["multiSession"] || {}), ...sessionPatch };
136
+ if (isPlainRecord(sessionPatch["channels"])) {
137
+ result["multiSession"].channels = {
138
+ ...(current["multiSession"]?.channels || {}),
139
+ ...sessionPatch["channels"],
140
+ };
141
+ }
142
+ delete remaining["multiSession"];
143
+ }
42
144
  // Top-level scalar fields
43
145
  Object.assign(result, remaining);
44
146
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-merge.js","sourceRoot":"","sources":["../../../src/core/settings-merge.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,gEAAgE;AAEhE;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA4B,EAAE,KAA0B;IACvF,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAE/B,qCAAqC;IACrC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;QACjE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAoC,EAAE,CAAC;YAC9F,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,8CAA8C;IAC9C,IAAI,SAAS,CAAC,iBAAiB,CAAC,IAAI,OAAO,SAAS,CAAC,iBAAiB,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnF,MAAM,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC5D,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAoC,EAAE,CAAC;YACvG,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;QACnF,CAAC;QACD,OAAO,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IAED,sGAAsG;IACtG,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;QAC7I,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,yCAAyC;IACzC,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,YAAY,IAAI,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9F,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,CAAC;QAC7G,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC;IAC7C,CAAC;IAED,0BAA0B;IAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEjC,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"settings-merge.js","sourceRoot":"","sources":["../../../src/core/settings-merge.ts"],"names":[],"mappings":"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"}