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
@@ -302,6 +302,103 @@ h2 { font-size: 13px; }
302
302
  .quick-btn.action-open { text-decoration: none; color: var(--text-secondary); }
303
303
  .quick-btn.action-open:hover { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 40%, var(--border-subtle)); }
304
304
  .quick-btn:disabled, .quick-btn.is-disabled { opacity: 0.35; pointer-events: none; }
305
+ .quick-btn.action-sessions[aria-expanded="true"] {
306
+ color: var(--accent);
307
+ border-color: color-mix(in srgb, var(--accent) 40%, var(--border-subtle));
308
+ }
309
+
310
+ /* ─── Active-row session disclosure (devlog 260806 D2) ─── */
311
+ .instance-session-list {
312
+ display: grid;
313
+ gap: 2px;
314
+ margin: -2px 0 8px;
315
+ padding: 6px;
316
+ border: 1px solid var(--border-subtle);
317
+ border-radius: 8px;
318
+ background: var(--row-bg);
319
+ animation: session-list-in 0.12s ease;
320
+ }
321
+ @keyframes session-list-in {
322
+ from { opacity: 0; transform: translateY(-2px); }
323
+ to { opacity: 1; transform: none; }
324
+ }
325
+ @media (prefers-reduced-motion: reduce) {
326
+ .instance-session-list { animation: none; }
327
+ }
328
+ .instance-session-row {
329
+ display: flex;
330
+ align-items: center;
331
+ justify-content: space-between;
332
+ gap: 8px;
333
+ width: 100%;
334
+ padding: 5px 8px;
335
+ border: 0;
336
+ border-radius: 6px;
337
+ background: transparent;
338
+ color: var(--text-secondary);
339
+ font-size: 12px;
340
+ text-align: left;
341
+ cursor: pointer;
342
+ }
343
+ .instance-session-row:hover:not(:disabled) { background: var(--row-bg-hover); color: var(--text-primary); }
344
+ .instance-session-row:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
345
+ .instance-session-row:disabled { cursor: default; opacity: 0.6; }
346
+ .instance-session-row.is-active {
347
+ color: var(--text-primary);
348
+ box-shadow: inset 3px 0 0 var(--accent);
349
+ background: color-mix(in srgb, var(--accent) 5%, transparent);
350
+ }
351
+ .instance-session-title {
352
+ min-width: 0;
353
+ display: flex;
354
+ align-items: baseline;
355
+ gap: 6px;
356
+ overflow: hidden;
357
+ text-overflow: ellipsis;
358
+ white-space: nowrap;
359
+ }
360
+ .session-source-badge {
361
+ flex-shrink: 0;
362
+ padding: 1px 5px;
363
+ border: 1px solid var(--border-subtle);
364
+ border-radius: 999px;
365
+ font-size: 10px;
366
+ color: var(--text-tertiary, var(--text-secondary));
367
+ text-transform: lowercase;
368
+ }
369
+ .instance-session-meta {
370
+ flex-shrink: 0;
371
+ font-size: 11px;
372
+ color: var(--text-tertiary, var(--text-secondary));
373
+ font-variant-numeric: tabular-nums;
374
+ }
375
+ .instance-session-error, .instance-session-empty {
376
+ padding: 5px 8px;
377
+ font-size: 11px;
378
+ color: var(--text-secondary);
379
+ }
380
+ .instance-session-error {
381
+ display: flex;
382
+ align-items: center;
383
+ justify-content: space-between;
384
+ gap: 8px;
385
+ color: var(--status-error);
386
+ }
387
+ .instance-session-retry {
388
+ flex: 0 0 auto;
389
+ padding: 2px 7px;
390
+ border: 1px solid var(--border-subtle);
391
+ border-radius: 5px;
392
+ background: var(--row-bg);
393
+ color: var(--text-secondary);
394
+ font: inherit;
395
+ cursor: pointer;
396
+ }
397
+ .instance-session-retry:hover {
398
+ color: var(--text-primary);
399
+ background: var(--surface-raised);
400
+ }
401
+ .instance-session-retry:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
305
402
  .instance-row-title { min-width: 0; display: grid; gap: 3px; }
306
403
  .instance-row-title-line {
307
404
  min-width: 0;
@@ -34,7 +34,17 @@ export function validateImportPayload(text: string): { ok: true; value: Record<s
34
34
  if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
35
35
  return { ok: false, error: 'Import payload must be a JSON object.' };
36
36
  }
37
- return { ok: true, value: parsed as Record<string, unknown> };
37
+ return { ok: true, value: stripServerOwnedSettingsFields(parsed as Record<string, unknown>) };
38
+ }
39
+
40
+ export function stripServerOwnedSettingsFields(settings: Record<string, unknown>): Record<string, unknown> {
41
+ const {
42
+ settingsSchemaVersion: _schema,
43
+ runtimeDefaultMigration: _migration,
44
+ multiSessionDefaultMigration: _sessionMigration,
45
+ ...userOwned
46
+ } = settings;
47
+ return userOwned;
38
48
  }
39
49
 
40
50
  export default function AdvancedExport({ port, client, triggerDownload }: ExportImportProps) {
@@ -55,7 +65,7 @@ export default function AdvancedExport({ port, client, triggerDownload }: Export
55
65
  const onExport = useCallback(() => {
56
66
  if (state.kind !== 'ready') return;
57
67
  const filename = `cli-jaw-settings-${port}.json`;
58
- download(filename, JSON.stringify(state.data, null, 2));
68
+ download(filename, JSON.stringify(stripServerOwnedSettingsFields(state.data), null, 2));
59
69
  }, [state, port, download]);
60
70
 
61
71
  const onImport = useCallback(async () => {
@@ -35,6 +35,8 @@ import {
35
35
  splitAgentSaveBundle,
36
36
  type AgentSettingsSnapshot,
37
37
  } from './components/agent/agent-save';
38
+ import { SettingsRequestError } from '../settings-client';
39
+ import { describeError } from '../components/error-normalize';
38
40
 
39
41
  export { splitAgentSaveBundle };
40
42
 
@@ -44,8 +46,30 @@ type AgentSnapshot = AgentSettingsSnapshot & {
44
46
  permissions?: 'auto' | string[] | unknown;
45
47
  perCli?: Record<string, PerCliEntry>;
46
48
  activeOverrides?: Record<string, ActiveOverride>;
49
+ runtimeDefaultMigration?: {
50
+ id: string;
51
+ state: 'pending' | 'accepted' | 'kept' | 'already-codex-app';
52
+ fromCli: string;
53
+ toCli: 'codex-app';
54
+ } | null;
47
55
  };
48
56
 
57
+ type CliStatusInfo = {
58
+ available: boolean | null;
59
+ capabilityReady: boolean | null;
60
+ probeState: 'checking' | 'fresh' | 'stale';
61
+ };
62
+
63
+ export function conflictSettingsFromError(error: unknown): AgentSnapshot | null {
64
+ if (!(error instanceof SettingsRequestError) || error.status !== 409) return null;
65
+ try {
66
+ const payload = JSON.parse(error.detail) as { settings?: AgentSnapshot };
67
+ return payload.settings ?? null;
68
+ } catch {
69
+ return null;
70
+ }
71
+ }
72
+
49
73
  type FlushSnapshot = {
50
74
  cli?: string;
51
75
  model?: string;
@@ -80,6 +104,11 @@ export default function Agent({ port, client, dirty, registerSave }: SettingsPag
80
104
  const [employeeLoading, setEmployeeLoading] = useState(true);
81
105
  const [employeeError, setEmployeeError] = useState<string | null>(null);
82
106
  const [cliMeta, setCliMeta] = useState<Record<string, CliMeta> | null>(null);
107
+ const [cliStatus, setCliStatus] = useState<Record<string, CliStatusInfo>>({});
108
+ const [migrationBusy, setMigrationBusy] = useState(false);
109
+ const [migrationError, setMigrationError] = useState<string | null>(null);
110
+ const [sessionMigrationBusy, setSessionMigrationBusy] = useState(false);
111
+ const [sessionMigrationError, setSessionMigrationError] = useState<string | null>(null);
83
112
 
84
113
  const loadCliMeta = useCallback(async () => {
85
114
  try {
@@ -93,6 +122,11 @@ export default function Agent({ port, client, dirty, registerSave }: SettingsPag
93
122
  }
94
123
  }, [client]);
95
124
 
125
+ const loadCliStatus = useCallback(async () => {
126
+ try { setCliStatus(await client.get<Record<string, CliStatusInfo>>('/api/cli-status')); }
127
+ catch { setCliStatus({}); }
128
+ }, [client]);
129
+
96
130
  const loadFlush = useCallback(async () => {
97
131
  setFlushLoading(true);
98
132
  setFlushError(null);
@@ -125,9 +159,10 @@ export default function Agent({ port, client, dirty, registerSave }: SettingsPag
125
159
 
126
160
  useEffect(() => {
127
161
  void loadCliMeta();
162
+ void loadCliStatus();
128
163
  void loadFlush();
129
164
  void loadEmployees();
130
- }, [loadCliMeta, loadEmployees, loadFlush]);
165
+ }, [loadCliMeta, loadCliStatus, loadEmployees, loadFlush]);
131
166
 
132
167
  useEffect(() => {
133
168
  if (state.kind !== 'ready') return;
@@ -199,6 +234,58 @@ export default function Agent({ port, client, dirty, registerSave }: SettingsPag
199
234
  : effortChoicesForModel(activeMeta, draft.model);
200
235
  const workingDirError = draft.workingDir.trim() ? null : 'Required';
201
236
 
237
+ const resolveMigration = useCallback(async (action: 'accept' | 'keep') => {
238
+ setMigrationBusy(true);
239
+ setMigrationError(null);
240
+ try {
241
+ const response = await client.post<AgentSnapshot | { data?: AgentSnapshot; settings?: AgentSnapshot }>(
242
+ '/api/settings/runtime-default-migration',
243
+ { action },
244
+ );
245
+ let next: AgentSnapshot;
246
+ if ('settings' in response && response.settings) next = response.settings as AgentSnapshot;
247
+ else if ('data' in response && response.data) next = response.data as AgentSnapshot;
248
+ else next = response as AgentSnapshot;
249
+ setData(next);
250
+ } catch (error) {
251
+ const conflictSettings = conflictSettingsFromError(error);
252
+ if (conflictSettings) {
253
+ setData(conflictSettings);
254
+ return;
255
+ }
256
+ setMigrationError(describeError(error));
257
+ } finally {
258
+ setMigrationBusy(false);
259
+ }
260
+ }, [client, setData]);
261
+
262
+ // Same shape, its own endpoint and its own busy state, because a v1 install has both
263
+ // migrations pending and answering one must not look like answering the other.
264
+ const resolveSessionMigration = useCallback(async (action: 'accept' | 'keep') => {
265
+ setSessionMigrationBusy(true);
266
+ setSessionMigrationError(null);
267
+ try {
268
+ const response = await client.post<AgentSnapshot | { data?: AgentSnapshot; settings?: AgentSnapshot }>(
269
+ '/api/settings/multi-session-default-migration',
270
+ { action },
271
+ );
272
+ let next: AgentSnapshot;
273
+ if ('settings' in response && response.settings) next = response.settings as AgentSnapshot;
274
+ else if ('data' in response && response.data) next = response.data as AgentSnapshot;
275
+ else next = response as AgentSnapshot;
276
+ setData(next);
277
+ } catch (error) {
278
+ const conflictSettings = conflictSettingsFromError(error);
279
+ if (conflictSettings) {
280
+ setData(conflictSettings);
281
+ return;
282
+ }
283
+ setSessionMigrationError(describeError(error));
284
+ } finally {
285
+ setSessionMigrationBusy(false);
286
+ }
287
+ }, [client, setData]);
288
+
202
289
  if (state.kind === 'loading') return <PageLoading />;
203
290
  if (state.kind === 'offline') return <PageOffline port={port} />;
204
291
  if (state.kind === 'error') return <PageError message={state.message} />;
@@ -221,6 +308,31 @@ export default function Agent({ port, client, dirty, registerSave }: SettingsPag
221
308
  void onSave();
222
309
  }}
223
310
  >
311
+ {settingsData.runtimeDefaultMigration?.state === 'pending' ? (
312
+ <div className="settings-inline-notice" role="status">
313
+ <strong>기본 런타임 변경 안내</strong>
314
+ <p>기존 선택은 유지됩니다. Codex App으로 전환하거나 현재 런타임을 계속 사용할 수 있습니다.</p>
315
+ <div className="settings-inline-actions">
316
+ <button type="button" className="settings-action settings-action-save" disabled={migrationBusy} onClick={() => void resolveMigration('accept')}>Codex App 사용</button>
317
+ <button type="button" className="settings-action settings-action-secondary" disabled={migrationBusy} onClick={() => void resolveMigration('keep')}>현재 런타임 유지</button>
318
+ </div>
319
+ {migrationError ? <span className="settings-field-error" role="alert">{migrationError}</span> : null}
320
+ </div>
321
+ ) : null}
322
+ {(settingsData['multiSessionDefaultMigration'] as Record<string, unknown> | undefined)?.['state'] === 'pending' ? (
323
+ <div className="settings-inline-notice" role="status">
324
+ <strong>다중 세션 안내</strong>
325
+ <p>대화 세션을 여러 개 열 수 있습니다. 켜면 동시 실행도 2로 올라가서, 두 번째 세션이 첫 번째가 끝나기를 기다리지 않습니다. 지금 설정은 그대로 유지됩니다.</p>
326
+ <div className="settings-inline-actions">
327
+ <button type="button" className="settings-action settings-action-save" disabled={sessionMigrationBusy} onClick={() => void resolveSessionMigration('accept')}>다중 세션 켜기</button>
328
+ <button type="button" className="settings-action settings-action-secondary" disabled={sessionMigrationBusy} onClick={() => void resolveSessionMigration('keep')}>지금 설정 유지</button>
329
+ </div>
330
+ {sessionMigrationError ? <span className="settings-field-error" role="alert">{sessionMigrationError}</span> : null}
331
+ </div>
332
+ ) : null}
333
+ {cliStatus[draft.cli]?.probeState === 'checking' ? (
334
+ <div className="settings-inline-notice" role="status" aria-live="polite">상태 확인 중</div>
335
+ ) : null}
224
336
  <RuntimeHeader
225
337
  cli={draft.cli}
226
338
  cliOptions={cliOptions.length > 0 ? cliOptions : [draft.cli || 'claude']}
@@ -102,7 +102,7 @@ export const CLI_META: Record<string, CliMeta> = {
102
102
  // parsed by Claude Code (stripped before send, enables 1M context
103
103
  // on Fable 5 + Sonnet 5 + Opus 5 + Opus 4.8/4.7/4.6 + Sonnet 4.6). Mirrors getDefaultClaudeChoices()
104
104
  // in src/cli/claude-models.ts. Verified via Grok web research
105
- // 2026-05-01 (devlog/_plan/260501_claude_model_passthrough/).
105
+ // 2026-05-01 (devlog/_fin/260501_claude_model_passthrough/).
106
106
  models: [
107
107
  'opus',
108
108
  'sonnet',
@@ -0,0 +1,72 @@
1
+ // Burst measurement for the 260806 rate-limit hardening unit (devlog 050).
2
+ // Three sequential phases so before/after runs are deterministic:
3
+ // 0. fetch + validate the Bearer token BEFORE any load (429-impossible here)
4
+ // 1. "sacrificial" lane: 350 unheadered (browser-class) GETs, concurrency 20
5
+ // — exceeds the browser poll budget (300/min) to force the 429 branch
6
+ // 2. "protected" lane: Bearer (cli-class) chat-sessions/switch/goal traffic
7
+ // — must see zero 429s after hardening; deterministically 429s before it
8
+ // (the old single 120/min bucket is already exhausted by phase 1).
9
+ // Usage: node scripts/burst-scenario.mjs --port <P> --switch-seq <N> [--sacrificial-count 350]
10
+
11
+ const args = process.argv.slice(2);
12
+ function argOf(name, fallback) {
13
+ const i = args.indexOf(name);
14
+ return i >= 0 ? args[i + 1] : fallback;
15
+ }
16
+ const PORT = Number(argOf('--port'));
17
+ const SWITCH_SEQ = argOf('--switch-seq', '');
18
+ const SACRIFICIAL = Number(argOf('--sacrificial-count', '350'));
19
+ if (!PORT) { console.error('usage: burst-scenario.mjs --port <P> --switch-seq <N>'); process.exit(1); }
20
+ const BASE = `http://127.0.0.1:${PORT}`;
21
+
22
+ // Phase 0 — token first: after phase 1 exhausts the shared bucket, a
23
+ // pre-hardening server would 429 the token endpoint itself.
24
+ const tokenRes = await fetch(`${BASE}/api/auth/token`);
25
+ const token = tokenRes.ok ? (await tokenRes.json()).token || '' : '';
26
+ if (!token) { console.error('token fetch failed — aborting'); process.exit(1); }
27
+ const AUTH = { Authorization: `Bearer ${token}` };
28
+
29
+ async function fire(url, init = {}) {
30
+ try {
31
+ const res = await fetch(url, init);
32
+ return { status: res.status, retryAfter: res.headers.get('retry-after') };
33
+ } catch {
34
+ return { status: 0, retryAfter: null };
35
+ }
36
+ }
37
+
38
+ // Phase 1 — sacrificial burst, bounded concurrency 20, single-window guard.
39
+ const phase1Start = Date.now();
40
+ const sacrificial = { total: 0, s429: 0, retryAfterSeen: false };
41
+ let inFlight = [];
42
+ for (let i = 0; i < SACRIFICIAL; i++) {
43
+ inFlight.push(fire(`${BASE}/api/messages/count`).then(r => {
44
+ sacrificial.total++;
45
+ if (r.status === 429) {
46
+ sacrificial.s429++;
47
+ if (r.retryAfter) sacrificial.retryAfterSeen = true;
48
+ }
49
+ }));
50
+ if (inFlight.length >= 20) { await Promise.all(inFlight); inFlight = []; }
51
+ }
52
+ await Promise.all(inFlight);
53
+ const phase1ElapsedMs = Date.now() - phase1Start;
54
+ if (phase1ElapsedMs > 45_000) {
55
+ console.error(`phase 1 took ${phase1ElapsedMs}ms — crossed the window boundary, scenario invalid`);
56
+ process.exit(1);
57
+ }
58
+
59
+ // Phase 2 — protected lane (cli class via Bearer).
60
+ const protectedLane = { total: 0, s429: 0 };
61
+ function track(promise) {
62
+ return promise.then(r => { protectedLane.total++; if (r.status === 429) protectedLane.s429++; });
63
+ }
64
+ const protectedCalls = [];
65
+ for (let i = 0; i < 20; i++) protectedCalls.push(track(fire(`${BASE}/api/chat-sessions`, { headers: AUTH })));
66
+ for (let i = 0; i < 5; i++) {
67
+ protectedCalls.push(track(fire(`${BASE}/api/chat-sessions/${SWITCH_SEQ}/switch`, { method: 'POST', headers: AUTH })));
68
+ }
69
+ for (let i = 0; i < 10; i++) protectedCalls.push(track(fire(`${BASE}/api/goal`, { headers: AUTH })));
70
+ await Promise.all(protectedCalls);
71
+
72
+ console.log(JSON.stringify({ tokenOk: true, phase1ElapsedMs, sacrificial, protected: protectedLane }, null, 2));
@@ -83,6 +83,7 @@ const ALLOWLIST = [
83
83
  { contains: '이 토픽은 인스턴스에 연결되지', why: 'fixed string' },
84
84
  { contains: 'ctx.answerCallbackQuery(ack', why: 'ack is masked where it is built' },
85
85
  { contains: 'ctx.reply(syncText)', why: 'syncText is masked where it is built' },
86
+ { contains: "persist failed:", why: "a Node.js Error.message from fs write, not a credential" },
86
87
  { contains: 'await ctx.reply(syncText)', why: 'syncText is masked where it is built' },
87
88
  { contains: 'Chat ID: <code>', why: 'a chat id the user just asked for' },
88
89
  ];
@@ -2,7 +2,7 @@
2
2
  // @file scripts/check-strict-baseline.mjs
3
3
  // Strict-migration regression gate (AST-aware).
4
4
  //
5
- // Per R2.2 (devlog/_plan/strict-migration/07-pro-review-r2.md), this scanner
5
+ // Per R2.2 (devlog/_fin/strict-migration/07-pro-review-r2.md), this scanner
6
6
  // uses the TypeScript Compiler API to walk source files and count AST nodes
7
7
  // of kind `AnyKeyword` plus any-typed `TypeReference` (Array<any>, Promise<any>,
8
8
  // Record<string, any>, etc.). Comments and string literals are automatically
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/manager/notes/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS;IAC/C,MAAM;IACN,SAAS;IACT,YAAY;IACZ,WAAW;IACX,UAAU;CACb,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IAClD,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"path-guards.js","sourceRoot":"","sources":["../../../../src/manager/notes/path-guards.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/manager/notes/search.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{t as r}from"./error-normalize-BzeO0SXE.js";import{a as i,i as a,n as o,r as s,t as c}from"./page-shell-LF7vVVfG.js";var l=e(t(),1),u=n();function d(e,t){let n=new Blob([t],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=e,i.click(),URL.revokeObjectURL(r)}function f(e){let t;try{t=JSON.parse(e)}catch(e){return{ok:!1,error:`Invalid JSON: ${e.message}`}}return!t||typeof t!=`object`||Array.isArray(t)?{ok:!1,error:`Import payload must be a JSON object.`}:{ok:!0,value:t}}function p({port:e,client:t,triggerDownload:n}){let{state:p}=i(t,`/api/settings`),[m,h]=(0,l.useState)(!1),[g,_]=(0,l.useState)(``),[v,y]=(0,l.useState)(null),[b,x]=(0,l.useState)(!1),[S,C]=(0,l.useState)(null),w=n||d;(0,l.useEffect)(()=>{_(``),y(null),C(null)},[e]);let T=(0,l.useCallback)(()=>{p.kind===`ready`&&w(`cli-jaw-settings-${e}.json`,JSON.stringify(p.data,null,2))},[p,e,w]),E=(0,l.useCallback)(async()=>{let e=f(g);if(!e.ok){y(e.error),C(null);return}y(null),C(null),x(!0);try{await t.put(`/api/settings`,e.value),C(`Imported. Reload the page to refresh other tabs.`)}catch(e){y(r(e))}finally{x(!1)}},[t,g]);return p.kind===`loading`?(0,u.jsx)(o,{}):p.kind===`offline`?(0,u.jsx)(s,{port:e}):p.kind===`error`?(0,u.jsx)(c,{message:p.message}):(0,u.jsxs)(`div`,{className:`settings-page-form`,children:[(0,u.jsx)(a,{title:`Export`,hint:`Download the resolved /i/${e}/api/settings document as JSON.`,children:(0,u.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,onClick:T,children:`Download settings JSON`})}),(0,u.jsxs)(a,{title:`Import (advanced)`,hint:`Replaces matching keys via PUT. Only enable when you understand the impact.`,children:[(0,u.jsxs)(`label`,{className:`settings-field`,htmlFor:`advanced-toggle`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Show import controls`}),(0,u.jsx)(`input`,{id:`advanced-toggle`,type:`checkbox`,checked:m,onChange:e=>h(e.target.checked)})]}),m?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`label`,{className:`settings-field`,htmlFor:`advanced-import`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Settings JSON`}),(0,u.jsx)(`textarea`,{id:`advanced-import`,rows:8,value:g,placeholder:`{"cli":"codex","tui":{"themeSeed":"jaw-dark"}}`,onChange:e=>_(e.target.value),"aria-invalid":!!v}),v?(0,u.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:v}):null,S?(0,u.jsx)(`span`,{className:`settings-field-description`,role:`status`,children:S}):null]}),(0,u.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,onClick:()=>void E(),disabled:b||g.trim()===``,children:b?`Importing…`:`Apply import`})]}):null]})]})}export{p as default,f as validateImportPayload};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-LF7vVVfG.js";import{i as c,s as l}from"./fields-zkeByFQW.js";import{a as u,n as d,o as f}from"./Permissions-CnKt44dN.js";import{a as p,c as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x}from"./agent-meta-Y3DE6sxh.js";import{t as S}from"./path-utils-LsJeDCKF.js";var C=e(t(),1),w=n();function ee({cli:e,cliOptions:t,provider:n=``,providerOptions:r=[],model:a,modelOptions:o,effort:s,effortOptions:u,workingDir:d,workingDirError:f,cliMeta:p,onCliChange:m,onProviderChange:g,onModelChange:_,onEffortChange:v,onWorkingDirChange:y}){let S=b(t),C=S.filter(e=>x.includes(e)).length;return(0,w.jsx)(i,{title:`Agent runtime`,hint:`Active CLI, model, effort, and workspace used by this instance.`,children:(0,w.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,w.jsx)(c,{id:`agent-cli`,label:`Active CLI`,value:e,options:S.map(e=>({value:e,label:h(e,p).label||e})),collapsedAfter:C,onChange:m}),r.length>0?(0,w.jsx)(c,{id:`agent-${e}-provider`,label:`Provider`,value:n,options:r.map(e=>({value:e,label:e})),onChange:e=>g?.(e)}):null,(0,w.jsx)(c,{id:`agent-model`,label:`Active model`,value:a,options:o.length>0?o:[{value:``,label:`(default)`}],onChange:_}),(0,w.jsx)(c,{id:`agent-effort`,label:`Effort`,value:s,options:[{value:``,label:`(default)`},...u.map(e=>({value:e,label:e}))],disabled:u.length===0,onChange:v}),(0,w.jsx)(l,{id:`agent-workingDir`,label:`Working directory`,value:d,error:f,placeholder:`/path/to/project`,onChange:y})]})})}var T=[{value:`auto`,label:`Auto`},{value:`custom`,label:`Custom allowlist`}];function te({value:e,onChange:t}){let n=u(e),r=n.mode===`custom`?`custom`:`auto`,a=n.mode===`custom`?n.tokens:[],o=n.mode===`custom`?`${a.length} explicit token${a.length===1?``:`s`}`:`Runtime resolves allowed capabilities`;return(0,w.jsxs)(i,{title:`Permissions`,hint:`Quick runtime mode. Open Permissions for detailed allowlist editing.`,children:[(0,w.jsx)(c,{id:`agent-permissions-mode`,label:`Mode`,value:r,options:T,onChange:e=>{t(e===`auto`?`auto`:a.length>0&&d(a)?a:f(null))}}),(0,w.jsx)(`p`,{className:`settings-agent-note`,children:o})]})}function ne({activeCli:e,flushCli:t,flushModel:n,cliOptions:r,modelOptions:a,cliMeta:o,loading:s,error:l,onFlushCliChange:u,onFlushModelChange:d}){let f=t||e,p=f?h(f,o).label||f:`active`;return(0,w.jsx)(i,{title:`Flush Agent`,hint:`Separate summary agent used for context flush and compact work.`,children:(0,w.jsxs)(`details`,{className:`settings-agent-flush`,children:[(0,w.jsxs)(`summary`,{children:[(0,w.jsx)(`span`,{children:`Flush runtime`}),(0,w.jsxs)(`code`,{children:[p,n&&n!==`default`?` / ${n}`:``]})]}),s?(0,w.jsx)(`p`,{className:`settings-agent-note`,children:`Loading flush settings...`}):null,l?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:l}):null,(0,w.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,w.jsx)(c,{id:`agent-flush-cli`,label:`Flush CLI`,value:t,options:[{value:``,label:`(active CLI)`},...r.map(e=>({value:e,label:h(e,o).label||e}))],onChange:u}),(0,w.jsx)(c,{id:`agent-flush-model`,label:`Flush model`,value:n,options:[{value:``,label:`(default)`},...a],onChange:d})]})]})})}function E(e){return e.source===`static`||e.id.startsWith(`static:`)}function re(){return`new:${Date.now().toString(36)}:${Math.random().toString(36).slice(2,8)}`}function D(e,t){let n=e[0]||`claude`,r=t?.[n]?.models?.[0]||`default`;return{id:re(),name:`New Agent`,cli:n,model:r,role:``,status:`idle`,source:`db`}}function ie(e){return Array.isArray(e)?e.map(O).filter(Boolean):e.data.map(O).filter(Boolean)}function O(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.id==`string`?t.id:``,r=typeof t.name==`string`?t.name:``;if(!n||!r)return null;let i=t.source===`static`||n.startsWith(`static:`)?`static`:`db`,a={id:n,name:r,cli:typeof t.cli==`string`&&t.cli?t.cli:`claude`,model:typeof t.model==`string`&&t.model?t.model:`default`,role:typeof t.role==`string`?t.role:``,source:i};return typeof t.status==`string`&&(a.status=t.status),a}function k(e){return e.name.trim()?e.cli.trim()?e.model.trim()?null:`Model is required`:`CLI is required`:`Name is required`}function A(e){return e.some(e=>k(e)!==null)}function ae(e,t){return JSON.stringify(e.map(F))===JSON.stringify(t.map(F))}function j(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Set(t.map(e=>e.id)),i=[],a=[],o=[];for(let e of t){let t=n.get(e.id);if(!t||e.id.startsWith(`new:`)){i.push(e);continue}let r=N(t,e);Object.keys(r).length>0&&a.push({before:t,after:e,patch:r})}for(let t of e)!r.has(t.id)&&!E(t)&&o.push(t);return{added:i,updated:a,removed:o}}function oe(e,t){let n=j(e,t);return{added:n.added.length,updated:n.updated.length,removed:n.removed.length}}async function M(e,t,n){let r=j(t,n);for(let t of r.removed)await e.delete(`/api/employees/${encodeURIComponent(t.id)}`);for(let t of r.added)await e.post(`/api/employees`,P(t));for(let t of r.updated)await e.put(`/api/employees/${encodeURIComponent(t.after.id)}`,t.patch)}function N(e,t){if(E(t))return e.model===t.model?{}:{model:t.model};let n={};for(let r of[`name`,`cli`,`model`,`role`,`status`])(e[r]||``)!==(t[r]||``)&&(n[r]=t[r]||``);return n}function P(e){return{name:e.name.trim()||`New Agent`,cli:e.cli.trim()||`claude`,model:e.model.trim()||`default`,role:e.role.trim()}}function F(e){let t={id:e.id,name:e.name,cli:e.cli,model:e.model,role:e.role,source:e.source};return e.status!==void 0&&(t.status=e.status),t}function I({employee:e,index:t,cliOptions:n,cliMeta:r,onChange:i,onRemove:a}){let o=E(e),s=v(h(e.cli,r).models,e.model),u=k(e),d=Array.from(new Set([...n,e.cli,`claude`])).filter(Boolean);return(0,w.jsxs)(`fieldset`,{className:`settings-runtime-employee-row`,children:[(0,w.jsxs)(`legend`,{children:[e.name||`Employee ${t+1}`,o?(0,w.jsx)(`span`,{children:`static`}):null]}),(0,w.jsxs)(`div`,{className:`settings-runtime-employee-grid`,children:[(0,w.jsx)(l,{id:`runtime-employee-${e.id}-name`,label:`Name`,value:e.name,disabled:o,error:u===`Name is required`?u:null,onChange:e=>i({name:e})}),(0,w.jsx)(c,{id:`runtime-employee-${e.id}-cli`,label:`CLI`,value:e.cli,disabled:o,options:d.map(e=>({value:e,label:h(e,r).label||e})),onChange:e=>{i({cli:e,model:h(e,r).models[0]||`default`})}}),(0,w.jsx)(c,{id:`runtime-employee-${e.id}-model`,label:`Model`,value:e.model,options:s.length>0?s:[{value:`default`,label:`default`}],onChange:e=>i({model:e})}),(0,w.jsx)(l,{id:`runtime-employee-${e.id}-role`,label:`Role`,value:e.role,disabled:o,onChange:e=>i({role:e})})]}),(0,w.jsxs)(`div`,{className:`settings-runtime-employee-footer`,children:[(0,w.jsxs)(`span`,{children:[e.source,e.status?` / ${e.status}`:``]}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:o,onClick:a,"aria-label":`Remove employee ${e.name||t+1}`,children:`Remove`})]})]})}function se({roster:e,original:t,cliOptions:n,cliMeta:r,loading:a,error:o,onRosterChange:s}){let c=oe(t,e),l=A(e);function u(t,n){s(e.map((e,r)=>r===t?{...e,...n}:e))}function d(t){s(e.filter((e,n)=>n!==t))}return(0,w.jsxs)(i,{title:`Employees`,hint:`Runtime dispatch roster. Static employees keep their locked identity; database employees can be edited.`,children:[(0,w.jsxs)(`div`,{className:`settings-runtime-employee-summary`,children:[(0,w.jsxs)(`span`,{children:[`+`,c.added]}),(0,w.jsxs)(`span`,{children:[`~`,c.updated]}),(0,w.jsxs)(`span`,{children:[`-`,c.removed]}),l?(0,w.jsx)(`strong`,{children:`Fix invalid rows before saving.`}):null]}),a?(0,w.jsx)(`p`,{className:`settings-agent-note`,children:`Loading employees...`}):null,o?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:o}):null,e.length===0?(0,w.jsx)(`p`,{className:`settings-empty`,children:`No runtime employees configured.`}):(0,w.jsx)(`div`,{className:`settings-runtime-employee-list`,children:e.map((e,t)=>(0,w.jsx)(I,{employee:e,index:t,cliOptions:n,cliMeta:r??null,onChange:e=>u(t,e),onRemove:()=>d(t)},e.id))}),(0,w.jsx)(`div`,{className:`settings-employee-footer-bar`,children:(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>s([...e,D(n,r)]),children:`+ Add employee`})})]})}var L=new Set([`runtimeEmployees`,`flushCli`,`flushModel`]);function R(e){let t={},n=null,r=null;for(let[i,a]of Object.entries(e))i===`runtimeEmployees`?r=a:i===`flushCli`||i===`flushModel`?(n??={},n[i===`flushCli`?`cli`:`model`]=String(a??``)):L.has(i)||(t[i]=a);return{settingsBundle:t,flushPatch:n,runtimeEmployeesNext:r}}async function ce(e){let{client:t,bundle:n,employeeDraft:r,employeeOriginal:i}=e;if(A(r))throw Error(`runtime employees: fix invalid rows before saving`);let{settingsBundle:a,flushPatch:o,runtimeEmployeesNext:s}=R(n),c=null;try{if(Object.keys(a).length>0){let e=await t.put(`/api/settings`,S(a));c=e&&typeof e==`object`&&`data`in e?e.data:e}}catch(e){throw Error(`settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{o&&await t.put(`/api/memory-files/settings`,o)}catch(e){throw Error(`flush settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{s&&await M(t,i,s)}catch(e){throw Error(`runtime employees save failed: ${e instanceof Error?e.message:String(e)}`)}return c}function z({port:e,client:t,dirty:n,registerSave:i}){let{state:c,refresh:l,setData:d}=r(t,`/api/settings`),[f,b]=(0,C.useState)({cli:``,provider:``,model:``,effort:``,workingDir:``,permissions:`auto`}),[x,S]=(0,C.useState)({}),[T,E]=(0,C.useState)({}),[re,D]=(0,C.useState)(!0),[O,k]=(0,C.useState)(null),[j,oe]=(0,C.useState)([]),[M,N]=(0,C.useState)([]),[P,F]=(0,C.useState)(!0),[I,L]=(0,C.useState)(null),[R,z]=(0,C.useState)(null),B=(0,C.useCallback)(async()=>{try{let e=await t.get(`/api/cli-registry`);z(p(e&&typeof e==`object`&&`data`in e?e.data:e))}catch{z(null)}},[t]),V=(0,C.useCallback)(async()=>{D(!0),k(null);try{let e=await t.get(`/api/memory-files`),n={cli:e.cli||``,model:e.model||``};S(n),E(n)}catch(e){k(e instanceof Error?e.message:String(e))}finally{D(!1)}},[t]),H=(0,C.useCallback)(async()=>{F(!0),L(null);try{let e=ie(await t.get(`/api/employees`));oe(e),N(e)}catch(e){L(e instanceof Error?e.message:String(e))}finally{F(!1)}},[t]);(0,C.useEffect)(()=>{B(),V(),H()},[B,H,V]),(0,C.useEffect)(()=>{if(c.kind!==`ready`)return;let e=Object.keys(c.data.perCli||{}),t=c.data.cli||e[0]||``,n=u(c.data.permissions),r=h(t,R);b({cli:t,provider:c.data.perCli?.[t]?.provider||r.defaultProvider||``,model:g(t,c.data.perCli,c.data.activeOverrides),effort:m(t,c.data.perCli,c.data.activeOverrides),workingDir:c.data.workingDir||``,permissions:n.mode===`custom`?n.tokens:`auto`})},[R,c]),(0,C.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`cli`||e===`workingDir`||e===`permissions`||e===`runtimeEmployees`||e===`flushCli`||e===`flushModel`||e.startsWith(`activeOverrides.`))&&n.remove(e)},[n]);let U=(0,C.useCallback)((e,t)=>n.set(e,t),[n]),W=(0,C.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await ce({client:t,bundle:e,employeeDraft:M,employeeOriginal:j});n.clear(),r&&d(r),await l(),await B(),await V(),await H()},[t,n,M,j,B,H,V,l,d]);(0,C.useEffect)(()=>{if(i)return i(W),()=>i(null)},[i,W]);let G=c.kind===`ready`?c.data:{},K=G.perCli||{},q=G.activeOverrides||{},J=(0,C.useMemo)(()=>Object.keys(K),[K]),Y=h(f.cli,R),X=f.provider||Y.defaultProvider||Y.providers?.[0]||``,Z=f.cli===`pi`,Q=!Z&&(Y.providers?.length??0)>0,le=v(Q&&Y.modelsByProvider?.[X]||Y.models,f.model),ue=Q?y(Y,f.model,Y.effortsByProvider?.[X]||Y.efforts,X):y(Y,f.model),de=f.workingDir.trim()?null:`Required`;if(c.kind===`loading`)return(0,w.jsx)(a,{});if(c.kind===`offline`)return(0,w.jsx)(o,{port:e});if(c.kind===`error`)return(0,w.jsx)(s,{message:c.message});function fe(){for(let e of Array.from(n.pending.keys()))e.startsWith(`activeOverrides.`)&&n.remove(e)}function $(e){b(e)}return(0,w.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),W()},children:[(0,w.jsx)(ee,{cli:f.cli,cliOptions:J.length>0?J:[f.cli||`claude`],provider:X,providerOptions:Z?[]:Y.providers||[],model:f.model,modelOptions:le,effort:f.effort,effortOptions:ue,workingDir:f.workingDir,workingDirError:de,cliMeta:R,onCliChange:e=>{let t=h(e,R),n={...f,cli:e,provider:K[e]?.provider||t.defaultProvider||``,model:g(e,K,q),effort:m(e,K,q)};fe(),$(n),U(`cli`,{value:e,original:G.cli||``,valid:!0})},onProviderChange:e=>{let t=Y.modelsByProvider?.[e]||[],n=Y.effortsByProvider?.[e]||[],r=t.includes(f.model)?f.model:t[0]||``,i=_(Y,r,f.effort,n,e);$({...f,provider:e,model:r,effort:i}),U(`perCli.${f.cli}.provider`,{value:e,original:K[f.cli]?.provider||Y.defaultProvider||``,valid:!0}),U(`activeOverrides.${f.cli}.model`,{value:r,original:g(f.cli,K,q),valid:r.trim().length>0}),U(`activeOverrides.${f.cli}.effort`,{value:i,original:m(f.cli,K,q),valid:!0})},onModelChange:e=>{let t=_(Y,e,f.effort,Q?Y.effortsByProvider?.[X]||Y.efforts:void 0,Q?X:void 0);$({...f,model:e,effort:t}),U(`activeOverrides.${f.cli}.model`,{value:e,original:g(f.cli,K,q),valid:e.trim().length>0}),t!==f.effort&&U(`activeOverrides.${f.cli}.effort`,{value:t,original:m(f.cli,K,q),valid:!0})},onEffortChange:e=>{$({...f,effort:e}),U(`activeOverrides.${f.cli}.effort`,{value:e,original:m(f.cli,K,q),valid:!0})},onWorkingDirChange:e=>{$({...f,workingDir:e}),U(`workingDir`,{value:e,original:G.workingDir||``,valid:e.trim().length>0})}}),(0,w.jsx)(te,{value:f.permissions,onChange:e=>{$({...f,permissions:e}),U(`permissions`,{value:e,original:G.permissions??`auto`,valid:e===`auto`||e.length>0})}}),(0,w.jsx)(ne,{activeCli:f.cli,flushCli:T.cli||``,flushModel:T.model||``,cliOptions:J,cliMeta:R,modelOptions:v(h(T.cli||f.cli,R).models,T.model||``),loading:re,error:O,onFlushCliChange:e=>{let t=e&&h(e,R).models[0]||``;E({cli:e,model:t}),U(`flushCli`,{value:e,original:x.cli||``,valid:!0}),U(`flushModel`,{value:t,original:x.model||``,valid:!0})},onFlushModelChange:e=>{E({...T,model:e}),U(`flushModel`,{value:e,original:x.model||``,valid:!0})}}),(0,w.jsx)(se,{roster:M,original:j,cliOptions:J,cliMeta:R,loading:P,error:I,onRosterChange:e=>{if(N(e),ae(e,j)){n.remove(`runtimeEmployees`);return}n.set(`runtimeEmployees`,{value:e,original:j,valid:!A(e)})}})]})}export{z as default,R as splitAgentSaveBundle};
@@ -1 +0,0 @@
1
- var e=class extends Error{status;code;constructor(e,t,n=null){super(e),this.name=`DashboardApiError`,this.status=t,this.code=n}};async function t(e=!1,t={}){let n=new URLSearchParams;e&&n.set(`showHidden`,`1`),t.fresh&&n.set(`fresh`,`1`);let r=n.toString(),i=r?`/api/dashboard/instances?${r}`:`/api/dashboard/instances`,a=await fetch(i);if(!a.ok)throw Error(`scan failed: ${a.status}`);return await a.json()}async function n(){let e=await fetch(`/api/dashboard/registry`);if(!e.ok)throw Error(`registry load failed: ${e.status}`);return await e.json()}async function r(e){let t=await fetch(`/api/dashboard/registry`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(!t.ok)throw Error(`registry save failed: ${t.status}`);return await t.json()}async function i(e,t,n){let r=await fetch(`/api/dashboard/lifecycle/${e}`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({port:t,...n?.trim()?{home:n.trim()}:{}})}),i=await r.json();if(!r.ok||!i.ok)throw Error(i.message||`${e} failed: ${r.status}`);return i}async function a(){let e=await fetch(`/api/dashboard/process-control`);if(!e.ok)throw Error(`process control fetch failed: ${e.status}`);return(await e.json()).state}async function o(){let e=await fetch(`/api/dashboard/process-control/adopt`,{method:`POST`});if(!e.ok)throw Error(`adopt managed failed: ${e.status}`);return(await e.json()).state}async function s(){let e=await fetch(`/api/dashboard/process-control/stop-managed`,{method:`POST`});if(!e.ok)throw Error(`stop managed failed: ${e.status}`);return(await e.json()).state}async function c(e,t={}){let n={};t.signal!==void 0&&(n.signal=t.signal);let r=await fetch(`/api/dashboard/instances/${e}`,n);if(!r.ok)throw Error(`status fetch failed: ${r.status}`);return(await r.json()).instance}async function l(e){let t=await fetch(`/api/dashboard/instances/${e}/project/pick`,{method:`POST`}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`project pick failed: ${t.status}`);return n.data??n}async function u(e,t){let n=await fetch(`/api/dashboard/instances/${e}/message`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompt:t})}),r=await n.json().catch(()=>({}));return{ok:n.ok,status:n.status,data:r}}async function d(e=null){let t=e?`/api/manager/events?since=${encodeURIComponent(e)}`:`/api/manager/events`,n=await fetch(t);if(!n.ok)throw Error(`events fetch failed: ${n.status}`);return(await n.json()).events}async function f(t,n){let r=await t.text(),i=null;if(r.trim())try{i=JSON.parse(r)}catch{throw new e(`${n}: response was not JSON`,t.status,`invalid_json`)}if(!t.ok){let r=typeof i==`object`&&i&&`error`in i?String(i.error):n,a=typeof i==`object`&&i&&`code`in i&&typeof i.code==`string`?i.code:null;throw new e(r||n,t.status,a)}return i}async function p(){let e=await fetch(`/api/dashboard/notes/info`);return await f(e,`notes info fetch failed: ${e.status}`)}async function m(){let e=await fetch(`/api/dashboard/notes/version`);return(await f(e,`notes version fetch failed: ${e.status}`)).version}async function h(){let e=await fetch(`/api/dashboard/notes/tree`);return await f(e,`notes tree fetch failed: ${e.status}`)}async function g(){let e=await fetch(`/api/dashboard/notes/templates`);return await f(e,`note templates fetch failed: ${e.status}`)}async function _(e){let t=await fetch(`/api/dashboard/notes/template?name=${encodeURIComponent(e)}`);return await f(t,`note template fetch failed: ${t.status}`)}async function v(){let e=await fetch(`/api/dashboard/notes/snippets`);return await f(e,`note snippets fetch failed: ${e.status}`)}async function y(t){let n=await fetch(`/api/dashboard/notes/snippets/file?name=${encodeURIComponent(t)}`);if(!n.ok)throw new e(`snippet fetch failed: ${n.status}`,n.status);return await n.text()}async function b(t,n){let r=await fetch(`/api/dashboard/notes/snippets/toggle`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t,enabled:n})});if(!r.ok)throw new e(`snippet toggle failed: ${r.status}`,r.status)}async function x(t){let n=await fetch(`/api/dashboard/notes/theme`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({theme:t})});if(!n.ok)throw new e(`theme set failed: ${n.status}`,n.status)}async function S(){let e=await fetch(`/api/dashboard/notes/index`);return await f(e,`notes index fetch failed: ${e.status}`)}async function C(e,t={}){let n=new URLSearchParams({q:e});t.limit!==void 0&&n.set(`limit`,String(t.limit)),t.regex&&n.set(`regex`,`true`);let r={};t.signal&&(r.signal=t.signal);let i=await fetch(`/api/dashboard/notes/search?${n}`,r);return await f(i,`notes search failed: ${i.status}`)}async function w(e){let t=await fetch(`/api/dashboard/notes/file?path=${encodeURIComponent(e)}`);return await f(t,`note fetch failed: ${t.status}`)}async function T(e,t=``){let n=await fetch(`/api/dashboard/notes/file`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({path:e,content:t})});return await f(n,`note create failed: ${n.status}`)}async function E(e){let t=await fetch(`/api/dashboard/notes/file`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});return await f(t,`note save failed: ${t.status}`)}function D(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n){let i=e.subarray(r,r+n);t+=String.fromCharCode(...i)}return btoa(t)}async function O(e,t){let n=new Uint8Array(await t.arrayBuffer()),r=await fetch(`/api/dashboard/notes/asset`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({notePath:e,mime:t.type,dataBase64:D(n)})});return await f(r,`note asset upload failed: ${r.status}`)}async function k(e,t){let n=await fetch(`/api/dashboard/notes/asset/remote`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({notePath:e,url:t})});return await f(n,`remote note asset upload failed: ${n.status}`)}async function A(e){let t=await fetch(`/api/dashboard/notes/folder`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({path:e})});return await f(t,`note folder create failed: ${t.status}`)}async function j(e,t){let n=await fetch(`/api/dashboard/notes/rename`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({from:e,to:t})});return await f(n,`note rename failed: ${n.status}`)}async function M(e,t=`file`){let n=await fetch(`/api/dashboard/notes/trash`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({path:e,kind:t})});return await f(n,`note trash failed: ${n.status}`)}export{O as A,E as C,s as D,x as E,b as O,i as S,u as T,a as _,c as a,l as b,w as c,_ as d,g as f,m as g,h,A as i,k as j,M as k,y as l,p as m,o as n,t as o,S as p,T as r,d as s,e as t,v as u,n as v,C as w,j as x,r as y};