cli-jaw 2.2.4 → 2.2.5

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 (631) hide show
  1. package/README.md +5 -4
  2. package/dist/bin/cli-jaw.js +9 -1
  3. package/dist/bin/cli-jaw.js.map +1 -1
  4. package/dist/bin/commands/chat.js +9 -1
  5. package/dist/bin/commands/chat.js.map +1 -1
  6. package/dist/bin/commands/design.js +172 -0
  7. package/dist/bin/commands/design.js.map +1 -0
  8. package/dist/bin/commands/dispatch-helpers.js +28 -0
  9. package/dist/bin/commands/dispatch-helpers.js.map +1 -1
  10. package/dist/bin/commands/dispatch.js +133 -31
  11. package/dist/bin/commands/dispatch.js.map +1 -1
  12. package/dist/bin/commands/doctor.js +1 -1
  13. package/dist/bin/commands/doctor.js.map +1 -1
  14. package/dist/bin/commands/init.js +1 -1
  15. package/dist/bin/commands/init.js.map +1 -1
  16. package/dist/bin/commands/map.js +53 -0
  17. package/dist/bin/commands/map.js.map +1 -0
  18. package/dist/bin/commands/mcp.js +1 -1
  19. package/dist/bin/commands/mcp.js.map +1 -1
  20. package/dist/bin/commands/skill.js +64 -3
  21. package/dist/bin/commands/skill.js.map +1 -1
  22. package/dist/bin/commands/status.js +1 -1
  23. package/dist/bin/commands/status.js.map +1 -1
  24. package/dist/bin/commands/tui/channel.js +20 -4
  25. package/dist/bin/commands/tui/channel.js.map +1 -1
  26. package/dist/bin/commands/tui/fullscreen-mode.js +17 -9
  27. package/dist/bin/commands/tui/fullscreen-mode.js.map +1 -1
  28. package/dist/bin/commands/tui/input-handler.js +30 -22
  29. package/dist/bin/commands/tui/input-handler.js.map +1 -1
  30. package/dist/bin/commands/tui/overlays.js +36 -8
  31. package/dist/bin/commands/tui/overlays.js.map +1 -1
  32. package/dist/bin/commands/tui/queue-command.js +71 -0
  33. package/dist/bin/commands/tui/queue-command.js.map +1 -0
  34. package/dist/bin/commands/tui/renderer.js +1 -0
  35. package/dist/bin/commands/tui/renderer.js.map +1 -1
  36. package/dist/bin/commands/tui/simple-mode.js +39 -1
  37. package/dist/bin/commands/tui/simple-mode.js.map +1 -1
  38. package/dist/bin/commands/tui/slash-command-runner.js +92 -4
  39. package/dist/bin/commands/tui/slash-command-runner.js.map +1 -1
  40. package/dist/bin/commands/tui/types.js +6 -4
  41. package/dist/bin/commands/tui/types.js.map +1 -1
  42. package/dist/bin/commands/tui/ws-handler.js +78 -9
  43. package/dist/bin/commands/tui/ws-handler.js.map +1 -1
  44. package/dist/bin/commands/worker.js +1 -3
  45. package/dist/bin/commands/worker.js.map +1 -1
  46. package/dist/bin/postinstall.js +3 -3
  47. package/dist/bin/postinstall.js.map +1 -1
  48. package/dist/server.js +7 -2
  49. package/dist/server.js.map +1 -1
  50. package/dist/src/agent/args.js +3 -0
  51. package/dist/src/agent/args.js.map +1 -1
  52. package/dist/src/agent/lifecycle-handler.js +20 -0
  53. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  54. package/dist/src/agent/spawn.js +24 -2
  55. package/dist/src/agent/spawn.js.map +1 -1
  56. package/dist/src/bgtask/notifier.js +2 -1
  57. package/dist/src/bgtask/notifier.js.map +1 -1
  58. package/dist/src/bgtask/recover.js +8 -7
  59. package/dist/src/bgtask/recover.js.map +1 -1
  60. package/dist/src/bgtask/registry.js +2 -1
  61. package/dist/src/bgtask/registry.js.map +1 -1
  62. package/dist/src/bgtask/runner.js +3 -2
  63. package/dist/src/bgtask/runner.js.map +1 -1
  64. package/dist/src/browser/vision.js +3 -1
  65. package/dist/src/browser/vision.js.map +1 -1
  66. package/dist/src/browser/web-ai/tab-lease-store.js +1 -3
  67. package/dist/src/browser/web-ai/tab-lease-store.js.map +1 -1
  68. package/dist/src/cli/commands.js +26 -4
  69. package/dist/src/cli/commands.js.map +1 -1
  70. package/dist/src/cli/handlers-runtime.js +7 -1
  71. package/dist/src/cli/handlers-runtime.js.map +1 -1
  72. package/dist/src/cli/handlers.js +1 -1
  73. package/dist/src/cli/handlers.js.map +1 -1
  74. package/dist/src/cli/tui/jawcode-bridge.js +13 -14
  75. package/dist/src/cli/tui/jawcode-bridge.js.map +1 -1
  76. package/dist/src/cli/tui/markdown.js +1 -1
  77. package/dist/src/cli/tui/markdown.js.map +1 -1
  78. package/dist/src/cli/tui/overlay.js +65 -10
  79. package/dist/src/cli/tui/overlay.js.map +1 -1
  80. package/dist/src/cli/tui/render/frame.js +109 -103
  81. package/dist/src/cli/tui/render/frame.js.map +1 -1
  82. package/dist/src/cli/tui/transcript.js +31 -9
  83. package/dist/src/cli/tui/transcript.js.map +1 -1
  84. package/dist/src/core/bus.js +2 -0
  85. package/dist/src/core/bus.js.map +1 -1
  86. package/dist/src/core/chat-sessions.js +2 -0
  87. package/dist/src/core/chat-sessions.js.map +1 -1
  88. package/dist/src/core/codex-config.js +2 -1
  89. package/dist/src/core/codex-config.js.map +1 -1
  90. package/dist/src/core/config.js +6 -3
  91. package/dist/src/core/config.js.map +1 -1
  92. package/dist/src/core/event-bus.js +1 -1
  93. package/dist/src/core/event-bus.js.map +1 -1
  94. package/dist/src/core/logger.js +9 -1
  95. package/dist/src/core/logger.js.map +1 -1
  96. package/dist/src/core/main-session.js +2 -1
  97. package/dist/src/core/main-session.js.map +1 -1
  98. package/dist/src/core/runtime-settings.js +2 -1
  99. package/dist/src/core/runtime-settings.js.map +1 -1
  100. package/dist/src/core/session-ops.js +1 -1
  101. package/dist/src/core/session-ops.js.map +1 -1
  102. package/dist/src/core/widget-watcher.js +113 -0
  103. package/dist/src/core/widget-watcher.js.map +1 -0
  104. package/dist/src/discord/bot.js +42 -31
  105. package/dist/src/discord/bot.js.map +1 -1
  106. package/dist/src/discord/channel-types.js +16 -0
  107. package/dist/src/discord/channel-types.js.map +1 -1
  108. package/dist/src/discord/commands.js +8 -6
  109. package/dist/src/discord/commands.js.map +1 -1
  110. package/dist/src/discord/discord-file.js +4 -2
  111. package/dist/src/discord/discord-file.js.map +1 -1
  112. package/dist/src/discord/forwarder.js +10 -6
  113. package/dist/src/discord/forwarder.js.map +1 -1
  114. package/dist/src/ide/diff.js +1 -1
  115. package/dist/src/ide/diff.js.map +1 -1
  116. package/dist/src/manager/dashboard-service.js +5 -5
  117. package/dist/src/manager/dashboard-service.js.map +1 -1
  118. package/dist/src/manager/design/path-guards.js +86 -0
  119. package/dist/src/manager/design/path-guards.js.map +1 -0
  120. package/dist/src/manager/design/schema.js +54 -0
  121. package/dist/src/manager/design/schema.js.map +1 -0
  122. package/dist/src/manager/design/snapshots.js +62 -0
  123. package/dist/src/manager/design/snapshots.js.map +1 -0
  124. package/dist/src/manager/design/store.js +269 -0
  125. package/dist/src/manager/design/store.js.map +1 -0
  126. package/dist/src/manager/design/watcher.js +49 -0
  127. package/dist/src/manager/design/watcher.js.map +1 -0
  128. package/dist/src/manager/memory/embedding/vec-store.js +1 -1
  129. package/dist/src/manager/memory/embedding/vec-store.js.map +1 -1
  130. package/dist/src/manager/registry.js +84 -0
  131. package/dist/src/manager/registry.js.map +1 -1
  132. package/dist/src/manager/routes/dashboard-design.js +234 -0
  133. package/dist/src/manager/routes/dashboard-design.js.map +1 -0
  134. package/dist/src/manager/routes/dashboard-memory.js +1 -1
  135. package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
  136. package/dist/src/manager/routes/embedded-browser.js +497 -0
  137. package/dist/src/manager/routes/embedded-browser.js.map +1 -0
  138. package/dist/src/manager/routes/telegram-hub.js +4 -3
  139. package/dist/src/manager/routes/telegram-hub.js.map +1 -1
  140. package/dist/src/manager/server.js +17 -2
  141. package/dist/src/manager/server.js.map +1 -1
  142. package/dist/src/manager/telegram-hub/hub-bot.js +127 -7
  143. package/dist/src/manager/telegram-hub/hub-bot.js.map +1 -1
  144. package/dist/src/memory/heartbeat.js +15 -14
  145. package/dist/src/memory/heartbeat.js.map +1 -1
  146. package/dist/src/memory/identity.js +3 -2
  147. package/dist/src/memory/identity.js.map +1 -1
  148. package/dist/src/memory/memory.js +3 -2
  149. package/dist/src/memory/memory.js.map +1 -1
  150. package/dist/src/memory/reflect.js +2 -1
  151. package/dist/src/memory/reflect.js.map +1 -1
  152. package/dist/src/memory/runtime.js +3 -2
  153. package/dist/src/memory/runtime.js.map +1 -1
  154. package/dist/src/memory/shared.js +4 -3
  155. package/dist/src/memory/shared.js.map +1 -1
  156. package/dist/src/memory/worklog.js +3 -2
  157. package/dist/src/memory/worklog.js.map +1 -1
  158. package/dist/src/messaging/runtime.js +4 -3
  159. package/dist/src/messaging/runtime.js.map +1 -1
  160. package/dist/src/messaging/send.js +1 -1
  161. package/dist/src/messaging/send.js.map +1 -1
  162. package/dist/src/orchestrator/attestation.js +33 -0
  163. package/dist/src/orchestrator/attestation.js.map +1 -1
  164. package/dist/src/orchestrator/collect.js +9 -4
  165. package/dist/src/orchestrator/collect.js.map +1 -1
  166. package/dist/src/orchestrator/distribute.js +0 -142
  167. package/dist/src/orchestrator/distribute.js.map +1 -1
  168. package/dist/src/orchestrator/gateway.js +3 -3
  169. package/dist/src/orchestrator/gateway.js.map +1 -1
  170. package/dist/src/orchestrator/pipeline.js +19 -1
  171. package/dist/src/orchestrator/pipeline.js.map +1 -1
  172. package/dist/src/orchestrator/state-machine.js +93 -16
  173. package/dist/src/orchestrator/state-machine.js.map +1 -1
  174. package/dist/src/orchestrator/worker-replay-notice.js +31 -11
  175. package/dist/src/orchestrator/worker-replay-notice.js.map +1 -1
  176. package/dist/src/prompt/builder.js +20 -20
  177. package/dist/src/prompt/builder.js.map +1 -1
  178. package/dist/src/prompt/context-hooks.js +2 -1
  179. package/dist/src/prompt/context-hooks.js.map +1 -1
  180. package/dist/src/prompt/templates/a1-system.md +69 -45
  181. package/dist/src/prompt/templates/employee.md +3 -2
  182. package/dist/src/prompt/templates/orchestration.md +13 -15
  183. package/dist/src/prompt/templates/skills.md +1 -0
  184. package/dist/src/routes/avatar.js +4 -3
  185. package/dist/src/routes/avatar.js.map +1 -1
  186. package/dist/src/routes/bgtask.js +2 -1
  187. package/dist/src/routes/bgtask.js.map +1 -1
  188. package/dist/src/routes/browser.js +2 -1
  189. package/dist/src/routes/browser.js.map +1 -1
  190. package/dist/src/routes/command.js +32 -2
  191. package/dist/src/routes/command.js.map +1 -1
  192. package/dist/src/routes/messaging.js +6 -5
  193. package/dist/src/routes/messaging.js.map +1 -1
  194. package/dist/src/routes/orchestrate.js +144 -29
  195. package/dist/src/routes/orchestrate.js.map +1 -1
  196. package/dist/src/routes/quota.js +217 -33
  197. package/dist/src/routes/quota.js.map +1 -1
  198. package/dist/src/routes/settings.js +3 -2
  199. package/dist/src/routes/settings.js.map +1 -1
  200. package/dist/src/routes/static.js +37 -2
  201. package/dist/src/routes/static.js.map +1 -1
  202. package/dist/src/telegram/bot.js +123 -67
  203. package/dist/src/telegram/bot.js.map +1 -1
  204. package/dist/src/telegram/elicitation-buttons.js +71 -0
  205. package/dist/src/telegram/elicitation-buttons.js.map +1 -0
  206. package/dist/src/telegram/fetch-body.js +11 -0
  207. package/dist/src/telegram/fetch-body.js.map +1 -0
  208. package/dist/src/telegram/forwarder.js +3 -5
  209. package/dist/src/telegram/forwarder.js.map +1 -1
  210. package/dist/src/telegram/rich-message.js +85 -11
  211. package/dist/src/telegram/rich-message.js.map +1 -1
  212. package/dist/src/telegram/status-update-buffer.js +15 -0
  213. package/dist/src/telegram/status-update-buffer.js.map +1 -0
  214. package/dist/src/telegram/telegram-file.js +5 -4
  215. package/dist/src/telegram/telegram-file.js.map +1 -1
  216. package/dist/src/telegram/voice.js +5 -4
  217. package/dist/src/telegram/voice.js.map +1 -1
  218. package/dist/src/workflows/planaudit.js +2 -1
  219. package/dist/src/workflows/planaudit.js.map +1 -1
  220. package/dist/src/workflows/repo-map/index.js +157 -0
  221. package/dist/src/workflows/repo-map/index.js.map +1 -0
  222. package/dist/src/workflows/scope-sandbox.js +1 -0
  223. package/dist/src/workflows/scope-sandbox.js.map +1 -1
  224. package/package.json +5 -2
  225. package/public/css/chat.css +17 -1
  226. package/public/css/orc-state.css +2 -1
  227. package/public/css/variables.css +0 -1
  228. package/public/dist/assets/{AdvancedExport-qa01DKDO.js → AdvancedExport-DsDpqXoH.js} +1 -1
  229. package/public/dist/assets/{Agent-CHCXjXSN.js → Agent-CrLn42Jb.js} +1 -1
  230. package/public/dist/assets/{Browser-Df4B5cnl.js → Browser-B52Bdaeu.js} +1 -1
  231. package/public/dist/assets/BrowserPanel-Bh3JpkZO.js +3 -0
  232. package/public/dist/assets/BrowserPanel-DpntR8EJ.css +1 -0
  233. package/public/dist/assets/{ChannelsDiscord-BqPckWSY.js → ChannelsDiscord-Bt1_rtNC.js} +1 -1
  234. package/public/dist/assets/{ChannelsTelegram-B9Feggy7.js → ChannelsTelegram-BLV0m1oq.js} +1 -1
  235. package/public/dist/assets/{CodeCanvas-BzhNLZVF.js → CodeCanvas-COgs1P6U.js} +2 -2
  236. package/public/dist/assets/{DashboardEmbeddingSection-CocnWvOE.js → DashboardEmbeddingSection-DMgHZQnn.js} +1 -1
  237. package/public/dist/assets/{DashboardMeta-C9BshDiw.js → DashboardMeta-B7CVqXcU.js} +1 -1
  238. package/public/dist/assets/DesignPanel-3XpGjuEW.css +1 -0
  239. package/public/dist/assets/DesignPanel-BGMPhZSx.js +2 -0
  240. package/public/dist/assets/{DiffPanel-DsFwEFjd.js → DiffPanel-B_ljObDk.js} +1 -1
  241. package/public/dist/assets/{Display-D_r_BwdJ.js → Display-BF-rACK6.js} +1 -1
  242. package/public/dist/assets/{DocPanel-6Z_RELzd.js → DocPanel-DtYwv3n3.js} +1 -1
  243. package/public/dist/assets/{Employees-DL3R3z7K.js → Employees-D3hnciP0.js} +1 -1
  244. package/public/dist/assets/{FolderPanel-DdlzWAuK.js → FolderPanel-DbPhzzvi.js} +3 -3
  245. package/public/dist/assets/{Heartbeat-BblY8Z4a.js → Heartbeat-Dk-_TtKV.js} +1 -1
  246. package/public/dist/assets/{InlineWarn-DrqqH39Y.js → InlineWarn-DDzeHxQw.js} +1 -1
  247. package/public/dist/assets/{MarkdownRenderer-Cl0oEICj.js → MarkdownRenderer-CHacL2M_.js} +2 -2
  248. package/public/dist/assets/MarkdownRenderer-DyrB9FbZ.js +1 -0
  249. package/public/dist/assets/{Mcp-CP6h9IQP.js → Mcp-SfytKWGX.js} +1 -1
  250. package/public/dist/assets/{Memory-BWcfxzCz.js → Memory-BOicOlcn.js} +1 -1
  251. package/public/dist/assets/{MilkdownWysiwygEditor-B-j0IUe6.js → MilkdownWysiwygEditor-BNoLGbFC.js} +1 -1
  252. package/public/dist/assets/{ModelProvider-D4LBX7K2.js → ModelProvider-DQ2AA0gJ.js} +1 -1
  253. package/public/dist/assets/{Network-TkeE8ldB.js → Network-DISUhige.js} +1 -1
  254. package/public/dist/assets/{NotesGraphWorkspace-B55jfeiE.js → NotesGraphWorkspace-Dm1xUFl8.js} +1 -1
  255. package/public/dist/assets/PanelLayoutProvider-XpTo-i_s.js +1 -0
  256. package/public/dist/assets/{Permissions-Dc5xnPMu.js → Permissions-CnKt44dN.js} +1 -1
  257. package/public/dist/assets/Permissions-DNT0TxYL.js +1 -0
  258. package/public/dist/assets/{Profile-Bacunq6W.js → Profile-B8yBO3Ju.js} +1 -1
  259. package/public/dist/assets/{Prompts-D36Mj9HS.js → Prompts-5lNQ5qOm.js} +1 -1
  260. package/public/dist/assets/{SpeechKeys-Dda4Dt6M.js → SpeechKeys-BepaIHBa.js} +1 -1
  261. package/public/dist/assets/{TelegramHub-CuJoPPib.js → TelegramHub--DNjRAwW.js} +1 -1
  262. package/public/dist/assets/{TerminalPanel-DSCJeGjp.js → TerminalPanel-DQovYfwz.js} +1 -1
  263. package/public/dist/assets/{TransportStatusChips-C5QcQVCy.js → TransportStatusChips-Bld0yXi7.js} +1 -1
  264. package/public/dist/assets/app-BJVZZqTm.js +55 -0
  265. package/public/dist/assets/app-CvNmD8jx.css +1 -0
  266. package/public/dist/assets/architecture-7EHR7CIX-D-6Nx315.js +1 -0
  267. package/public/dist/assets/{architectureDiagram-3BPJPVTR-C4lVLx8A.js → architectureDiagram-3BPJPVTR-q8idz3H3.js} +1 -1
  268. package/public/dist/assets/{bgtask-badge-b7pj_Dbh.js → bgtask-badge-Bz8_kUKd.js} +1 -1
  269. package/public/dist/assets/bgtask-badge-iOk9R0RF.js +1 -0
  270. package/public/dist/assets/{blockDiagram-GPEHLZMM-BHjdqDcb.js → blockDiagram-GPEHLZMM-DGB0dsia.js} +1 -1
  271. package/public/dist/assets/{c4Diagram-AAUBKEIU-B1QuN7gf.js → c4Diagram-AAUBKEIU-ChP5YfVt.js} +1 -1
  272. package/public/dist/assets/channel-ByNDsZsH.js +1 -0
  273. package/public/dist/assets/{chunk-2J33WTMH-D1olIwij.js → chunk-2J33WTMH-D3OPoEHg.js} +1 -1
  274. package/public/dist/assets/{chunk-3OPIFGDE-Cf7991q8.js → chunk-3OPIFGDE-CULJ8ZHF.js} +1 -1
  275. package/public/dist/assets/{chunk-4BX2VUAB-zmO3Vjrm.js → chunk-4BX2VUAB-DGgktZYr.js} +1 -1
  276. package/public/dist/assets/{chunk-4EGX6M5U-B-uS9w6F.js → chunk-4EGX6M5U-BD3v8KR4.js} +1 -1
  277. package/public/dist/assets/chunk-55IACEB6-CQFLXxVc.js +1 -0
  278. package/public/dist/assets/{chunk-5DO6E6H7-AkI69lqb.js → chunk-5DO6E6H7-B-FbGqHn.js} +1 -1
  279. package/public/dist/assets/{chunk-5ZQYHXKU-C3d9OOmT.js → chunk-5ZQYHXKU-DVpWOoGS.js} +1 -1
  280. package/public/dist/assets/{chunk-727SXJPM-BOt5gU_h.js → chunk-727SXJPM-CZjR7q6H.js} +1 -1
  281. package/public/dist/assets/{chunk-AQP2D5EJ-CrRyjYkJ.js → chunk-AQP2D5EJ-BlGjnlsV.js} +1 -1
  282. package/public/dist/assets/{chunk-BR22UD5L-DR9GxWFk.js → chunk-BR22UD5L-MK8KuB9X.js} +1 -1
  283. package/public/dist/assets/{chunk-BSJP7CBP-B24w6Ihw.js → chunk-BSJP7CBP-ypXC4wBv.js} +1 -1
  284. package/public/dist/assets/{chunk-CSCIHK7Q-BPBO8B3q.js → chunk-CSCIHK7Q-CmvetykJ.js} +1 -1
  285. package/public/dist/assets/{chunk-FHYWG6QK-CXhRbK1g.js → chunk-FHYWG6QK-Do5csWDm.js} +1 -1
  286. package/public/dist/assets/{chunk-FMBD7UC4-tu50fn_l.js → chunk-FMBD7UC4-BXpT25MP.js} +1 -1
  287. package/public/dist/assets/{chunk-KSCS5N6A-CnJg0Z_l.js → chunk-KSCS5N6A-DtlfLqto.js} +1 -1
  288. package/public/dist/assets/{chunk-L5ZTLDWV-B3Ak80dW.js → chunk-L5ZTLDWV-Czv9NkHn.js} +1 -1
  289. package/public/dist/assets/{chunk-LZXEDZCA-C3fVGX8q.js → chunk-LZXEDZCA-vD7oFdiq.js} +1 -1
  290. package/public/dist/assets/{chunk-MPE355IW-iQbf4K4s.js → chunk-MPE355IW-2ei0PVn0.js} +1 -1
  291. package/public/dist/assets/{chunk-MZUSXYTE-BEKROhpC.js → chunk-MZUSXYTE-JO_qTk4K.js} +1 -1
  292. package/public/dist/assets/{chunk-N66VUXT2-DUtPpNne.js → chunk-N66VUXT2-BXL-FniY.js} +1 -1
  293. package/public/dist/assets/{chunk-ND2GUHAM-DW2SkbNq.js → chunk-ND2GUHAM-B9SIO-4a.js} +1 -1
  294. package/public/dist/assets/{chunk-NZK2D7GU-SJvHIVX3.js → chunk-NZK2D7GU-CqOo06-Z.js} +1 -1
  295. package/public/dist/assets/{chunk-O5CBEL6O-D_hkyy5c.js → chunk-O5CBEL6O-BWbe_grt.js} +1 -1
  296. package/public/dist/assets/{chunk-PUPMXCY4-DcRmz6F2.js → chunk-PUPMXCY4-aFTMGBaR.js} +1 -1
  297. package/public/dist/assets/chunk-QZHKN3VN-Becu19mF.js +1 -0
  298. package/public/dist/assets/{chunk-UIBZB4QT-CFemVDOF.js → chunk-UIBZB4QT-S8EH0jZR.js} +1 -1
  299. package/public/dist/assets/{chunk-WCWK7LTN-B6ske8a4.js → chunk-WCWK7LTN-EgrNk7Dj.js} +1 -1
  300. package/public/dist/assets/chunk-WU5MYG2G-CkoHFn0F.js +1 -0
  301. package/public/dist/assets/{chunk-XPW4576I-elhPZgkY.js → chunk-XPW4576I-8oydVjY6.js} +1 -1
  302. package/public/dist/assets/classDiagram-4FO5ZUOK-DVGoKviY.js +1 -0
  303. package/public/dist/assets/classDiagram-v2-Q7XG4LA2-BIZeptY-.js +1 -0
  304. package/public/dist/assets/{copy-text-BKruhU_y.js → copy-text-BDs2wKjA.js} +1 -1
  305. package/public/dist/assets/{cose-bilkent-S5V4N54A-B-gwVajW.js → cose-bilkent-S5V4N54A-PNmvcq_6.js} +1 -1
  306. package/public/dist/assets/{dagre-BM42HDAG-C9BDjgRM.js → dagre-BM42HDAG-BP_m3uo9.js} +1 -1
  307. package/public/dist/assets/{dagre-HAOs7bVl.js → dagre-Ct2n78X9.js} +1 -1
  308. package/public/dist/assets/{diagram-2AECGRRQ-CvEawheC.js → diagram-2AECGRRQ-DhgfR-ol.js} +1 -1
  309. package/public/dist/assets/{diagram-5GNKFQAL-Da4DwByP.js → diagram-5GNKFQAL-BRLvmdeK.js} +1 -1
  310. package/public/dist/assets/{diagram-KO2AKTUF-Cnhf5Czo.js → diagram-KO2AKTUF-Co3C18-Q.js} +1 -1
  311. package/public/dist/assets/{diagram-LMA3HP47-CMusMTT2.js → diagram-LMA3HP47-3SwoWQij.js} +1 -1
  312. package/public/dist/assets/{diagram-OG6HWLK6-D5nQR5rT.js → diagram-OG6HWLK6-bjEryAd3.js} +1 -1
  313. package/public/dist/assets/{dist-jZTs_0Zg.js → dist-B6T-R4xY.js} +1 -1
  314. package/public/dist/assets/{dist-woWoxWmX.js → dist-B8V2LYzt.js} +1 -1
  315. package/public/dist/assets/{dist-DL8oabBM.js → dist-BDPUxeoi.js} +1 -1
  316. package/public/dist/assets/{dist-Dpn3ujr3.js → dist-BMC_dTfR.js} +1 -1
  317. package/public/dist/assets/{dist-C4WouNM7.js → dist-BSf40pae.js} +1 -1
  318. package/public/dist/assets/{dist-CPOW-jfg.js → dist-BlMOeJym.js} +1 -1
  319. package/public/dist/assets/dist-BmXnOAlo.js +1 -0
  320. package/public/dist/assets/{dist-C_6E126b.js → dist-BqzMcuh8.js} +1 -1
  321. package/public/dist/assets/{dist-CHB0SFvU.js → dist-BvQlb9-o.js} +1 -1
  322. package/public/dist/assets/{dist-BvgkNZ7r.js → dist-C7pD0dEn.js} +1 -1
  323. package/public/dist/assets/{dist-DvlZh9GF.js → dist-CC2vK_6S.js} +1 -1
  324. package/public/dist/assets/{dist-wdt8RQwr.js → dist-CFU9RsAu.js} +1 -1
  325. package/public/dist/assets/{dist-Y5dy_sSf.js → dist-CS1XLdz3.js} +1 -1
  326. package/public/dist/assets/{dist-CiaEUSjf.js → dist-CjzfPsGt.js} +1 -1
  327. package/public/dist/assets/{dist-DlqIM5Y-.js → dist-CvzAXxlb.js} +1 -1
  328. package/public/dist/assets/{dist-CLMpv9qF.js → dist-D8SW_REQ.js} +1 -1
  329. package/public/dist/assets/dist-DLY5I6dK.js +1 -0
  330. package/public/dist/assets/{dist-DfOlJSUk.js → dist-DMZVNaIe.js} +1 -1
  331. package/public/dist/assets/{dist-BSwjNBYz.js → dist-DN-hkAIC.js} +1 -1
  332. package/public/dist/assets/dist-DPHcMCqI.js +1 -0
  333. package/public/dist/assets/{dist-DQR4gW5j.js → dist-DStWZVZ0.js} +1 -1
  334. package/public/dist/assets/{dist-BpbqDhsq.js → dist-DTcoHNXr.js} +1 -1
  335. package/public/dist/assets/{dist-DRKfpxOd.js → dist-DdJuxxG7.js} +1 -1
  336. package/public/dist/assets/{dist-KuP6Gt4m.js → dist-DhgwoIqj.js} +1 -1
  337. package/public/dist/assets/{dist-nbzW6Sn7.js → dist-DmjSXJAP.js} +1 -1
  338. package/public/dist/assets/{dist-8hLkyg-D.js → dist-cBBDKBli.js} +1 -1
  339. package/public/dist/assets/{dist-CKTQ2eXH.js → dist-ph7PUr0c.js} +1 -1
  340. package/public/dist/assets/{dist-DGJG2rr2.js → dist-qUky5WRy.js} +1 -1
  341. package/public/dist/assets/{dist-CYw9JGM_.js → dist-w2YzIhc5.js} +1 -1
  342. package/public/dist/assets/dist-xHOEvyuU.js +1 -0
  343. package/public/dist/assets/{dockerfile-Bq20q5i6.js → dockerfile-C0jniLkw.js} +1 -1
  344. package/public/dist/assets/{employees-DbgFV33i.js → employees-BYebrTfH.js} +1 -1
  345. package/public/dist/assets/{erDiagram-TEJ5UH35-BnsX5Dzt.js → erDiagram-TEJ5UH35-DQBxHU1q.js} +1 -1
  346. package/public/dist/assets/{error-normalize-DLzj47d_.js → error-normalize-BzeO0SXE.js} +1 -1
  347. package/public/dist/assets/eventmodeling-FCH6USID-BB1OVDLb.js +1 -0
  348. package/public/dist/assets/{factor-BfAVKjvH.js → factor-nzjoQ9cK.js} +1 -1
  349. package/public/dist/assets/{fields-MeoSVgIK.js → fields-zkeByFQW.js} +1 -1
  350. package/public/dist/assets/{flowDiagram-I6XJVG4X-BSy1p30u.js → flowDiagram-I6XJVG4X-BN90fCt5.js} +1 -1
  351. package/public/dist/assets/{ganttDiagram-6RSMTGT7-BILWylat.js → ganttDiagram-6RSMTGT7-B-JAlIhh.js} +1 -1
  352. package/public/dist/assets/gitGraph-WXDBUCRP-DAWTa5Fn.js +1 -0
  353. package/public/dist/assets/{gitGraphDiagram-PVQCEYII-BaRlZZ_k.js → gitGraphDiagram-PVQCEYII-CLL2G5U-.js} +1 -1
  354. package/public/dist/assets/{graphlib-DdtRn62K.js → graphlib-B6dRm8vZ.js} +1 -1
  355. package/public/dist/assets/idb-cache-ZH6lOebk.js +1 -0
  356. package/public/dist/assets/iframe-renderer-Clu9EYLW.js +1 -0
  357. package/public/dist/assets/iframe-renderer-DACMLTYf.js +142 -0
  358. package/public/dist/assets/info-J43DQDTF-C530y5-j.js +1 -0
  359. package/public/dist/assets/{infoDiagram-5YYISTIA-BElvxLr3.js → infoDiagram-5YYISTIA-CftYDPfc.js} +1 -1
  360. package/public/dist/assets/{ishikawaDiagram-YF4QCWOH-DPQZsd5R.js → ishikawaDiagram-YF4QCWOH-BVa5AJbz.js} +1 -1
  361. package/public/dist/assets/javascript-DbM-pSY-.js +1 -0
  362. package/public/dist/assets/{journeyDiagram-JHISSGLW-BJZNR2qA.js → journeyDiagram-JHISSGLW-BeUKm6ME.js} +1 -1
  363. package/public/dist/assets/{kanban-definition-UN3LZRKU-OQLDtH0g.js → kanban-definition-UN3LZRKU-K5DYNY4p.js} +1 -1
  364. package/public/dist/assets/{manager-rHNwUB4e.css → manager-C4eNDNFt.css} +1 -1
  365. package/public/dist/assets/manager-pcvo6od1.js +13 -0
  366. package/public/dist/assets/{memory-QobGT0Kv.js → memory-DLD5Xpk8.js} +1 -1
  367. package/public/dist/assets/memory-oWWwCkg5.js +1 -0
  368. package/public/dist/assets/mermaid-loader-Bd9rYyxD.js +1 -0
  369. package/public/dist/assets/{mermaid-parser.core-D1KUUauv.js → mermaid-parser.core-Cz70RgAa.js} +1 -1
  370. package/public/dist/assets/mermaid-preprocess-0hqEN7sn.js +5 -0
  371. package/public/dist/assets/{mermaid.core-R6dUFqZC.js → mermaid.core-Dj5GOPe1.js} +2 -2
  372. package/public/dist/assets/mermaid.core-TSG49mwm.js +1 -0
  373. package/public/dist/assets/message-history-C6D4juRe.js +1 -0
  374. package/public/dist/assets/message-history-DdIshS4Q.js +1 -0
  375. package/public/dist/assets/{mindmap-definition-RKZ34NQL-B8WJHpYI.js → mindmap-definition-RKZ34NQL-PsH0E_3e.js} +1 -1
  376. package/public/dist/assets/{nsis-CIoRNUaw.js → nsis-BI3I3OhH.js} +1 -1
  377. package/public/dist/assets/packet-YPE3B663-BHcxn4sy.js +1 -0
  378. package/public/dist/assets/{page-shell-BeAyKBJW.js → page-shell-LF7vVVfG.js} +1 -1
  379. package/public/dist/assets/pi-settings-CBUGDAuT.js +1 -0
  380. package/public/dist/assets/pie-LRSECV5Y-DjigSia_.js +1 -0
  381. package/public/dist/assets/{pieDiagram-4H26LBE5-BuBruIcx.js → pieDiagram-4H26LBE5-Dtwtlr0z.js} +1 -1
  382. package/public/dist/assets/{pug-Cb8OCun5.js → pug-DHfNwv1w.js} +1 -1
  383. package/public/dist/assets/{quadrantDiagram-W4KKPZXB-B6rzGZvr.js → quadrantDiagram-W4KKPZXB-CAFUbaV6.js} +1 -1
  384. package/public/dist/assets/radar-GUYGQ44K-DPCrmsHJ.js +1 -0
  385. package/public/dist/assets/{react-dom-CZtrmbYs.js → react-dom-AWKMTIe7.js} +1 -1
  386. package/public/dist/assets/render-E2PXsTyS.js +122 -0
  387. package/public/dist/assets/{requirementDiagram-4Y6WPE33-Cvj5JknB.js → requirementDiagram-4Y6WPE33-CvBM4AjK.js} +1 -1
  388. package/public/dist/assets/{sankeyDiagram-5OEKKPKP-DNGNYR7j.js → sankeyDiagram-5OEKKPKP-cordQgRs.js} +1 -1
  389. package/public/dist/assets/{sequenceDiagram-3UESZ5HK-DuUAH96Z.js → sequenceDiagram-3UESZ5HK-DDAqRdga.js} +1 -1
  390. package/public/dist/assets/{settings-D70uFh8l.js → settings-DYIfnpYq.js} +1 -1
  391. package/public/dist/assets/settings-core-BURhLoX3.js +1 -0
  392. package/public/dist/assets/{settings-core-B2lw2bgO.js → settings-core-DRYE_5Wb.js} +1 -1
  393. package/public/dist/assets/settings-yyDc7X3c.js +1 -0
  394. package/public/dist/assets/{sidebar-BqWm2XWP.js → sidebar-Cn-KLQ0U.js} +3 -3
  395. package/public/dist/assets/{skills-CdNOfXlk.js → skills-Brt3opa5.js} +1 -1
  396. package/public/dist/assets/skills-KHfKUuAJ.js +1 -0
  397. package/public/dist/assets/{slash-commands-4Ntm5N7h.js → slash-commands-jMNf0b43.js} +1 -1
  398. package/public/dist/assets/slash-commands-nb096e6A.js +1 -0
  399. package/public/dist/assets/{stateDiagram-AJRCARHV-DGZNs20Q.js → stateDiagram-AJRCARHV-DUaoSRgZ.js} +1 -1
  400. package/public/dist/assets/stateDiagram-v2-BHNVJYJU-BAesfdhr.js +1 -0
  401. package/public/dist/assets/{timeline-definition-PNZ67QCA-yDl1yISI.js → timeline-definition-PNZ67QCA-D85QNy9b.js} +1 -1
  402. package/public/dist/assets/{trace-drawer-DqAwwHHQ.js → trace-drawer-Dv5cDGLR.js} +1 -1
  403. package/public/dist/assets/treeView-BLDUP644-DmufUMul.js +1 -0
  404. package/public/dist/assets/treemap-LRROVOQU-Cg48uw_D.js +1 -0
  405. package/public/dist/assets/ui-BeyzLs7f.js +2 -0
  406. package/public/dist/assets/ui-DabvyDGc.js +1 -0
  407. package/public/dist/assets/{vennDiagram-CIIHVFJN-C0TNoBYO.js → vennDiagram-CIIHVFJN-CQSILdx8.js} +1 -1
  408. package/public/dist/assets/wardley-L42UT6IY-QZOEXU7f.js +1 -0
  409. package/public/dist/assets/{wardleyDiagram-YWT4CUSO-C6cJR4Ib.js → wardleyDiagram-YWT4CUSO-BZEVMlJ4.js} +1 -1
  410. package/public/dist/assets/{wiki-link-suggestions-BMHWTE4_.js → wiki-link-suggestions-DZQc78gj.js} +1 -1
  411. package/public/dist/assets/{xychartDiagram-2RQKCTM6-DqEqpcox.js → xychartDiagram-2RQKCTM6-C8573Tgs.js} +1 -1
  412. package/public/dist/index.html +2 -2
  413. package/public/dist/manager/index.html +2 -2
  414. package/public/js/diagram/iframe-renderer.ts +197 -49
  415. package/public/js/diagram/widget-validator.ts +17 -3
  416. package/public/js/features/chat-messages.ts +5 -1
  417. package/public/js/features/chat-scroll.ts +10 -5
  418. package/public/js/features/chat.ts +9 -1
  419. package/public/js/features/elicitation.ts +1 -5
  420. package/public/js/features/message-item-html.ts +3 -1
  421. package/public/js/features/process-block.ts +46 -3
  422. package/public/js/features/settings-mcp.ts +1 -1
  423. package/public/js/locale.ts +2 -2
  424. package/public/js/main.ts +15 -4
  425. package/public/js/preview-parent-origin.ts +73 -9
  426. package/public/js/render/chart-json.ts +2 -5
  427. package/public/js/render/compose-block.ts +2 -5
  428. package/public/js/render/dataframe.ts +2 -5
  429. package/public/js/render/diff-viewer.ts +2 -5
  430. package/public/js/render/link-preview.ts +1 -5
  431. package/public/js/render/markdown.ts +22 -0
  432. package/public/js/render/post-render.ts +7 -3
  433. package/public/js/render/sanitize.ts +6 -0
  434. package/public/js/render/search-results.ts +2 -5
  435. package/public/js/streaming-render.ts +12 -1
  436. package/public/js/ui.ts +6 -3
  437. package/public/js/ws.ts +39 -25
  438. package/public/locales/en.json +2 -1
  439. package/public/locales/ja.json +2 -1
  440. package/public/locales/ko.json +2 -1
  441. package/public/locales/zh.json +2 -1
  442. package/public/manager/src/InstancePreview.tsx +35 -0
  443. package/public/manager/src/SidebarRailRouter.tsx +209 -124
  444. package/public/manager/src/browser-panel/BrowserPanel.tsx +714 -17
  445. package/public/manager/src/browser-panel/browser-panel.css +305 -0
  446. package/public/manager/src/browser-panel/use-embedded-target-sync.ts +182 -0
  447. package/public/manager/src/components/DesktopPanelControls.tsx +1 -1
  448. package/public/manager/src/design-panel/DesignPageSelector.tsx +27 -0
  449. package/public/manager/src/design-panel/DesignPanel.tsx +265 -0
  450. package/public/manager/src/design-panel/DesignViewport.tsx +34 -0
  451. package/public/manager/src/design-panel/design-api.ts +106 -0
  452. package/public/manager/src/design-panel/design-panel.css +137 -0
  453. package/public/manager/src/design-panel/design-types.ts +43 -0
  454. package/public/manager/src/folder-panel/FolderPanel.tsx +15 -1
  455. package/public/manager/src/jaw-ceo/JawCeoWorkbenchButton.tsx +10 -5
  456. package/public/manager/src/jaw-ceo/jaw-ceo.css +8 -0
  457. package/public/manager/src/jaw-ceo/useJawCeoDashboardBridge.tsx +2 -1
  458. package/public/manager/src/panels/FileFolderSplitPanel.tsx +97 -0
  459. package/public/manager/src/panels/PanelErrorBoundary.tsx +44 -0
  460. package/public/manager/src/panels/PanelLayoutProvider.tsx +569 -86
  461. package/public/manager/src/panels/RightSidebar.tsx +389 -134
  462. package/public/manager/src/panels/desktop-bridge.ts +88 -0
  463. package/public/manager/src/panels/panel-layout-registry-state.ts +252 -10
  464. package/public/manager/src/panels/panels.css +479 -0
  465. package/public/manager/src/panels/right-sidebar-tab-display.ts +36 -0
  466. package/public/manager/src/panels/types.ts +79 -4
  467. package/public/manager/src/types.ts +11 -0
  468. package/scripts/bundle-sidecar.sh +3 -0
  469. package/scripts/check-strict-baseline.mjs +26 -2
  470. package/scripts/docs/check-docs.mts +87 -0
  471. package/scripts/docs/extract-commands.mts +215 -0
  472. package/scripts/docs/extract-routes.mts +350 -0
  473. package/scripts/release-gates.mjs +32 -0
  474. package/public/dist/assets/BrowserPanel-CV_bbQpM.css +0 -1
  475. package/public/dist/assets/BrowserPanel-Ua0Xck6V.js +0 -1
  476. package/public/dist/assets/MarkdownRenderer-BivJ4hJm.js +0 -1
  477. package/public/dist/assets/Permissions-CddCEaJl.js +0 -1
  478. package/public/dist/assets/app-BPsa7jSJ.css +0 -1
  479. package/public/dist/assets/app-DszWzakT.js +0 -55
  480. package/public/dist/assets/architecture-7EHR7CIX-GJhmD5MC.js +0 -1
  481. package/public/dist/assets/bgtask-badge-DZEQ5fMl.js +0 -1
  482. package/public/dist/assets/channel-Sut8CY6m.js +0 -1
  483. package/public/dist/assets/chunk-55IACEB6-C3KMx7HH.js +0 -1
  484. package/public/dist/assets/chunk-QZHKN3VN-C7Qk10ab.js +0 -1
  485. package/public/dist/assets/chunk-WU5MYG2G-BpCiJpUL.js +0 -1
  486. package/public/dist/assets/classDiagram-4FO5ZUOK-BVeAlcVw.js +0 -1
  487. package/public/dist/assets/classDiagram-v2-Q7XG4LA2-mvRsJL7t.js +0 -1
  488. package/public/dist/assets/dist-BQ6IjZAx.js +0 -1
  489. package/public/dist/assets/dist-CB1yXHdY.js +0 -1
  490. package/public/dist/assets/dist-El7lM3OZ.js +0 -1
  491. package/public/dist/assets/dist-ZXqltO6b.js +0 -1
  492. package/public/dist/assets/eventmodeling-FCH6USID-BASBZB6y.js +0 -1
  493. package/public/dist/assets/gitGraph-WXDBUCRP-C6UAXKTO.js +0 -1
  494. package/public/dist/assets/idb-cache-DQM-odDV.js +0 -1
  495. package/public/dist/assets/info-J43DQDTF-DZvaZ8fx.js +0 -1
  496. package/public/dist/assets/javascript-ocJZALE4.js +0 -1
  497. package/public/dist/assets/manager-CdNOlCyS.js +0 -13
  498. package/public/dist/assets/memory-BT-rs3ag.js +0 -1
  499. package/public/dist/assets/mermaid-loader-BMIvbrMb.js +0 -1
  500. package/public/dist/assets/mermaid-preprocess-CqOBWYEb.js +0 -5
  501. package/public/dist/assets/mermaid.core-CE6des8A.js +0 -1
  502. package/public/dist/assets/message-history-BY1UNJAO.js +0 -1
  503. package/public/dist/assets/message-history-BmP5JKio.js +0 -142
  504. package/public/dist/assets/packet-YPE3B663-Br_gfHDJ.js +0 -1
  505. package/public/dist/assets/pi-settings-BVYmGHWD.js +0 -1
  506. package/public/dist/assets/pie-LRSECV5Y-CPSw09Lc.js +0 -1
  507. package/public/dist/assets/radar-GUYGQ44K-D5jGe4n0.js +0 -1
  508. package/public/dist/assets/render-C3r-9_-J.js +0 -119
  509. package/public/dist/assets/settings-CJm8ZSJs.js +0 -1
  510. package/public/dist/assets/settings-core-gdS0lo1b.js +0 -1
  511. package/public/dist/assets/skills-DG_CbTEf.js +0 -1
  512. package/public/dist/assets/slash-commands-B9kOEhJ_.js +0 -1
  513. package/public/dist/assets/stateDiagram-v2-BHNVJYJU-D2I0t9Bo.js +0 -1
  514. package/public/dist/assets/treeView-BLDUP644-i3ZwrLGf.js +0 -1
  515. package/public/dist/assets/treemap-LRROVOQU-CJRBfbOx.js +0 -1
  516. package/public/dist/assets/ui-Anw2S64o.js +0 -1
  517. package/public/dist/assets/ui-DsK6r0Xv.js +0 -2
  518. package/public/dist/assets/wardley-L42UT6IY-B1NLyOET.js +0 -1
  519. /package/public/dist/assets/{agent-meta-FyI15KAa.js → agent-meta-tiPlp7OI.js} +0 -0
  520. /package/public/dist/assets/{api-DvCd2Uff.js → api-C9dOxby7.js} +0 -0
  521. /package/public/dist/assets/{apl-CUNx2Nxr.js → apl-2tE96F_Y.js} +0 -0
  522. /package/public/dist/assets/{asciiarmor-B9JjJqLb.js → asciiarmor-ynSKiC17.js} +0 -0
  523. /package/public/dist/assets/{asn1-NstwUq_r.js → asn1-CfqO1VY8.js} +0 -0
  524. /package/public/dist/assets/{asterisk-Box6GWx7.js → asterisk-DSiRJoqT.js} +0 -0
  525. /package/public/dist/assets/{brainfuck-DAD60u2v.js → brainfuck-DTcanv-8.js} +0 -0
  526. /package/public/dist/assets/{chunk-AGHRB4JF-BeNb9aN4.js → chunk-AGHRB4JF-BXLzSehp.js} +0 -0
  527. /package/public/dist/assets/{chunk-NNHCCRGN-hPUSf84G.js → chunk-NNHCCRGN-D69GtSOc.js} +0 -0
  528. /package/public/dist/assets/{clike-B-3e4_rA.js → clike-qn72CMAj.js} +0 -0
  529. /package/public/dist/assets/{clojure-DpNVclFl.js → clojure-m8yDiYVc.js} +0 -0
  530. /package/public/dist/assets/{cmake-DzNe63Ys.js → cmake-4AHAWHiF.js} +0 -0
  531. /package/public/dist/assets/{cobol-CoytNvhw.js → cobol-CxxJP5eX.js} +0 -0
  532. /package/public/dist/assets/{coffeescript-Cq3xHp7h.js → coffeescript-BAB3zi48.js} +0 -0
  533. /package/public/dist/assets/{commonlisp-CVjsh9SW.js → commonlisp-BPbWuAds.js} +0 -0
  534. /package/public/dist/assets/{constants-EMUBd5RQ.js → constants-DzwdndBj.js} +0 -0
  535. /package/public/dist/assets/{crystal-BlIILE-v.js → crystal-CGuSsWYR.js} +0 -0
  536. /package/public/dist/assets/{css-D1TAh_-V.js → css-DszbR74r.js} +0 -0
  537. /package/public/dist/assets/{cypher-ZntLuJzU.js → cypher-GUnmv522.js} +0 -0
  538. /package/public/dist/assets/{cytoscape.esm-89N3cqwG.js → cytoscape.esm-D_XyYSBG.js} +0 -0
  539. /package/public/dist/assets/{d-CzwXOQ5h.js → d-Cfm0cznj.js} +0 -0
  540. /package/public/dist/assets/{desktop-bridge-B1whMBS2.js → desktop-bridge-CvdhnJQo.js} +0 -0
  541. /package/public/dist/assets/{diff-DI7-Ikca.js → diff-C6rPA7NX.js} +0 -0
  542. /package/public/dist/assets/{dist-B51C28kc.js → dist-AgQwqBLq.js} +0 -0
  543. /package/public/dist/assets/{dtd-7UKQtPWR.js → dtd-Dxh5tS6M.js} +0 -0
  544. /package/public/dist/assets/{dylan-CM1mkXYp.js → dylan-BdIVFR1j.js} +0 -0
  545. /package/public/dist/assets/{ebnf-Llv_5uW5.js → ebnf-iU-8xYFu.js} +0 -0
  546. /package/public/dist/assets/{ecl-uqtp9saI.js → ecl-DjbzOHI6.js} +0 -0
  547. /package/public/dist/assets/{eiffel-BqzGlVPY.js → eiffel-B2ID8LZ3.js} +0 -0
  548. /package/public/dist/assets/{elm-bajSbBYX.js → elm-B6vPcfMj.js} +0 -0
  549. /package/public/dist/assets/{erlang-B5uEM5Ke.js → erlang-nDQwRdZV.js} +0 -0
  550. /package/public/dist/assets/{esm-3SgqVBY5.js → esm-CT1xxdH5.js} +0 -0
  551. /package/public/dist/assets/{fcl-BcH_K33Z.js → fcl-Bf86o55I.js} +0 -0
  552. /package/public/dist/assets/{folder-drag-payload-DE3ZS9PZ.js → folder-drag-payload-Bhln9Mk2.js} +0 -0
  553. /package/public/dist/assets/{forth-DpLesGXt.js → forth-CeQJji0n.js} +0 -0
  554. /package/public/dist/assets/{fortran--G-GJVGI.js → fortran-Dm_CqDsH.js} +0 -0
  555. /package/public/dist/assets/{gas-DpoQvniR.js → gas-e3EfgE3p.js} +0 -0
  556. /package/public/dist/assets/{gherkin-Dr59UACG.js → gherkin-Dn_7tSzg.js} +0 -0
  557. /package/public/dist/assets/{groovy-Cn2K6Dx3.js → groovy-LaKuGRkK.js} +0 -0
  558. /package/public/dist/assets/{haskell-B7lFmXEG.js → haskell-D9nNX9Mr.js} +0 -0
  559. /package/public/dist/assets/{haxe-BHWvyysr.js → haxe-Rp176QXJ.js} +0 -0
  560. /package/public/dist/assets/{http-DBZ5ODWR.js → http-BOeYLbuM.js} +0 -0
  561. /package/public/dist/assets/{idb-cache-DTKWSF12.js → idb-cache-BzzftUET.js} +0 -0
  562. /package/public/dist/assets/{idl-D6JLbJZt.js → idl-DHv3vdme.js} +0 -0
  563. /package/public/dist/assets/{javascript-CMsRa3Ah.js → javascript-Dk2fbl1a.js} +0 -0
  564. /package/public/dist/assets/{jsx-runtime-B3ZGMGGg.js → jsx-runtime-gFMgZ0TQ.js} +0 -0
  565. /package/public/dist/assets/{julia-BgEiFqoe.js → julia-D7CKCk5I.js} +0 -0
  566. /package/public/dist/assets/{livescript-Bl00ljSh.js → livescript-gRbr9rhj.js} +0 -0
  567. /package/public/dist/assets/{locale-GY3-GGWm.js → locale-DC-ZsWOf.js} +0 -0
  568. /package/public/dist/assets/{lua-C7XaZlrp.js → lua-CgZ_7bxf.js} +0 -0
  569. /package/public/dist/assets/{mathematica-8EcxUjYb.js → mathematica-B6bTyoab.js} +0 -0
  570. /package/public/dist/assets/{mbox-rZy25Spd.js → mbox-C8oQj1cJ.js} +0 -0
  571. /package/public/dist/assets/{mirc-BUmwqSCT.js → mirc-v6L6kZuh.js} +0 -0
  572. /package/public/dist/assets/{mllike-BqDqEdQF.js → mllike-CWu4RdWO.js} +0 -0
  573. /package/public/dist/assets/{modelica-MhacK6Xw.js → modelica-B3NBpX1d.js} +0 -0
  574. /package/public/dist/assets/{mscgen-B_VJszPL.js → mscgen-C8u7qRYw.js} +0 -0
  575. /package/public/dist/assets/{mumps-CEdRH9V2.js → mumps-DHjVG4PS.js} +0 -0
  576. /package/public/dist/assets/{nginx-CnXgGeyP.js → nginx-BMt87X3t.js} +0 -0
  577. /package/public/dist/assets/{notes-graph-settings-BaqO8hYl.js → notes-graph-settings-BgNrT_58.js} +0 -0
  578. /package/public/dist/assets/{ntriples-CyZcmI8c.js → ntriples-C8U-Jud2.js} +0 -0
  579. /package/public/dist/assets/{octave-DGH2kDhB.js → octave-Bq37AoFm.js} +0 -0
  580. /package/public/dist/assets/{oz-DUSpf7eX.js → oz-D6HxSRn3.js} +0 -0
  581. /package/public/dist/assets/{pascal-BYIqfrcG.js → pascal-BBqiAVg6.js} +0 -0
  582. /package/public/dist/assets/{path-utils-DX1HplvB.js → path-utils-LsJeDCKF.js} +0 -0
  583. /package/public/dist/assets/{perl-C7iNkbFR.js → perl-sHANlXjx.js} +0 -0
  584. /package/public/dist/assets/{pi-settings-D6opgoo4.js → pi-settings-Dh5lgb87.js} +0 -0
  585. /package/public/dist/assets/{pig-CR5p2dpV.js → pig-Cufgew--.js} +0 -0
  586. /package/public/dist/assets/{powershell-UK-_nKBG.js → powershell--Q4mDip6.js} +0 -0
  587. /package/public/dist/assets/{properties-CJAqwakm.js → properties-DoVpJ-kT.js} +0 -0
  588. /package/public/dist/assets/{protobuf-D3Vrac9j.js → protobuf-B5OiV2Zv.js} +0 -0
  589. /package/public/dist/assets/{provider-icons-BXm8sy5x.js → provider-icons-stsNmQKx.js} +0 -0
  590. /package/public/dist/assets/{puppet-DxgW6kGv.js → puppet-Ce_CFfqW.js} +0 -0
  591. /package/public/dist/assets/{python-C_ebQp0Y.js → python-pK7Wt6QH.js} +0 -0
  592. /package/public/dist/assets/{q-IMCDaQ03.js → q-Dd3Ltku0.js} +0 -0
  593. /package/public/dist/assets/{r-BXdh3mvZ.js → r-CsX__2f0.js} +0 -0
  594. /package/public/dist/assets/{rough.esm-BJMyUbab.js → rough.esm--LLpAgPj.js} +0 -0
  595. /package/public/dist/assets/{rpm-DA-4RGFa.js → rpm-D78AjDAl.js} +0 -0
  596. /package/public/dist/assets/{ruby-Bl1KGNRx.js → ruby-D_-KI498.js} +0 -0
  597. /package/public/dist/assets/{sas-vK1DtUVf.js → sas-D-GUPiy4.js} +0 -0
  598. /package/public/dist/assets/{scheme-DiOFQmiy.js → scheme-DF9WwQDv.js} +0 -0
  599. /package/public/dist/assets/{settings-client-Di8KLXq_.js → settings-client-CjbBShxm.js} +0 -0
  600. /package/public/dist/assets/{shell-DlO-WCDP.js → shell-BTUwbV-w.js} +0 -0
  601. /package/public/dist/assets/{sieve-CbtkgRpt.js → sieve--Z-EbGZo.js} +0 -0
  602. /package/public/dist/assets/{simple-mode-BlwHYanN.js → simple-mode-BUow4bpn.js} +0 -0
  603. /package/public/dist/assets/{smalltalk-BvKYa3AC.js → smalltalk-C2YIwVx3.js} +0 -0
  604. /package/public/dist/assets/{solr-BR4fru6p.js → solr-CYVq4fbf.js} +0 -0
  605. /package/public/dist/assets/{sparql-DXGln-02.js → sparql-Ccd4fsFv.js} +0 -0
  606. /package/public/dist/assets/{spreadsheet-vehQVAxe.js → spreadsheet-DW0WgMrS.js} +0 -0
  607. /package/public/dist/assets/{sql-DqGFyXDS.js → sql-C71Zp6qn.js} +0 -0
  608. /package/public/dist/assets/{stex-BMDhbycI.js → stex-CKuX0g_6.js} +0 -0
  609. /package/public/dist/assets/{stylus-KnS0CroG.js → stylus-CBH8s0NO.js} +0 -0
  610. /package/public/dist/assets/{swift-DgdcCI7r.js → swift-CfZoxKRA.js} +0 -0
  611. /package/public/dist/assets/{tcl-BdAMpvp9.js → tcl-D5MGbeQu.js} +0 -0
  612. /package/public/dist/assets/{textile-BHP2MzNo.js → textile-DJ3U30FW.js} +0 -0
  613. /package/public/dist/assets/{tiddlywiki-DXpY2p61.js → tiddlywiki-_fe1dHUq.js} +0 -0
  614. /package/public/dist/assets/{tiki-rmXXYsbl.js → tiki-Dd1udTrQ.js} +0 -0
  615. /package/public/dist/assets/{toml-C5KR4pi6.js → toml-xpw8pqjz.js} +0 -0
  616. /package/public/dist/assets/{troff-CCKOxFhE.js → troff-CgWiec8m.js} +0 -0
  617. /package/public/dist/assets/{ttcn-DbUUkNp1.js → ttcn-CSwmFrer.js} +0 -0
  618. /package/public/dist/assets/{ttcn-cfg-DXcL9aHC.js → ttcn-cfg-B5HVIC6z.js} +0 -0
  619. /package/public/dist/assets/{turtle-C8XIIixq.js → turtle-Cl_SuWQk.js} +0 -0
  620. /package/public/dist/assets/{vb-6dJ8H6C5.js → vb-BT131bSf.js} +0 -0
  621. /package/public/dist/assets/{vbscript-DIhYyfyM.js → vbscript-D6S8_XkU.js} +0 -0
  622. /package/public/dist/assets/{velocity-D4VFCVF7.js → velocity-9HkI645n.js} +0 -0
  623. /package/public/dist/assets/{vendor-utils-BgdgpA_R.js → vendor-utils-DJY0EWnQ.js} +0 -0
  624. /package/public/dist/assets/{verilog-CMPJNboz.js → verilog-BzMguKeI.js} +0 -0
  625. /package/public/dist/assets/{vhdl-CnU0dAe0.js → vhdl-bHScWzT1.js} +0 -0
  626. /package/public/dist/assets/{w3c-keyname-_Vjqp3zl.js → w3c-keyname-a_sRwNLm.js} +0 -0
  627. /package/public/dist/assets/{webidl-DrscPGMb.js → webidl-CbgaVHNS.js} +0 -0
  628. /package/public/dist/assets/{wiki-link-resolver-C197VhRP.js → wiki-link-resolver-BfNXN9px.js} +0 -0
  629. /package/public/dist/assets/{xquery-B8_nl088.js → xquery-DWZPmAiC.js} +0 -0
  630. /package/public/dist/assets/{yacas-BCnk2qQq.js → yacas-CEdW4z4K.js} +0 -0
  631. /package/public/dist/assets/{z80-CG_mQV7a.js → z80-CMH3qxNg.js} +0 -0
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-BeAyKBJW.js";import{a as c,i as l,r as u}from"./fields-MeoSVgIK.js";import{n as d}from"./agent-meta-FyI15KAa.js";import{t as f}from"./path-utils-DX1HplvB.js";var p=e(t(),1),m=[`memory.enabled`,`memory.flushEvery`,`memory.cli`,`memory.retentionDays`,`memory.autoReflectAfterFlush`,`memory.flushLanguage`],h=[{value:`en`,label:`English (en)`},{value:`ko`,label:`한국어 (ko)`},{value:`ja`,label:`日本語 (ja)`},{value:`zh`,label:`中文 (zh)`}],g=50;function _(e){return m.includes(e)}function v(e){let t=y(e);if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=b(e);t&&n.push(t)}return n}function y(e){if(!e||typeof e!=`object`)return e;let t=e;return Array.isArray(t)?t:`data`in t?t.data:e}function b(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.key==`string`?t.key:null;return n?{key:n,value:typeof t.value==`string`?t.value:``,source:typeof t.source==`string`?t.source:`manual`}:null}function x(e,t){return!Number.isFinite(e)||!Number.isInteger(e)||e<=0?`${t} must be a positive integer`:null}function S(e,t,n=50){let r=Math.max(0,Math.floor(t))*n,i=e.slice(r,r+n),a=Math.max(1,Math.ceil(e.length/n));return{slice:i,hasMore:r+n<e.length,pageCount:a}}function C(e,t=80){return e.length<=t?e:`${e.slice(0,t)}…`}var w=n();function T({row:e,onOpen:t}){return(0,w.jsxs)(`tr`,{className:`settings-memory-row`,children:[(0,w.jsx)(`td`,{className:`settings-memory-key`,children:(0,w.jsx)(`button`,{type:`button`,className:`settings-memory-link`,onClick:()=>t(e),"aria-label":`Open memory entry ${e.key}`,children:e.key})}),(0,w.jsx)(`td`,{className:`settings-memory-source`,children:e.source}),(0,w.jsx)(`td`,{className:`settings-memory-length`,children:e.value.length}),(0,w.jsx)(`td`,{className:`settings-memory-preview`,title:e.value,children:C(e.value)})]})}var E={busy:null,notice:null,error:null};function D({port:e,client:t,dirty:n,registerSave:g}){let y=r(t,`/api/settings`),b=r(t,`/api/memory`),[C,D]=(0,p.useState)(!0),[O,k]=(0,p.useState)(10),[A,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(30),[ee,P]=(0,p.useState)(!1),[F,I]=(0,p.useState)(`en`),[L,R]=(0,p.useState)(0),[z,B]=(0,p.useState)(null),[V,H]=(0,p.useState)(E);(0,p.useEffect)(()=>{if(y.state.kind!==`ready`)return;let e=y.state.data.memory||{};D(e.enabled!==!1),k(typeof e.flushEvery==`number`?e.flushEvery:10),j(typeof e.cli==`string`?e.cli:``),N(typeof e.retentionDays==`number`?e.retentionDays:30),P(!!e.autoReflectAfterFlush),I(typeof e.flushLanguage==`string`&&e.flushLanguage?e.flushLanguage:`en`)},[y.state]),(0,p.useEffect)(()=>()=>{for(let e of m)n.remove(e)},[n]),(0,p.useEffect)(()=>{if(!z)return;let e=e=>{e.key===`Escape`&&B(null)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[z]);let U=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),W=(0,p.useMemo)(()=>y.state.kind===`ready`&&y.state.data.memory||{},[y.state]),G=(0,p.useCallback)(async()=>{let e=n.saveBundle(),r={};for(let[t,n]of Object.entries(e))_(t)&&(r[t]=n);if(Object.keys(r).length===0)return;let i=f(r),a=await t.put(`/api/settings`,i),o=a&&typeof a==`object`&&`data`in a?a.data:a;for(let e of m)n.remove(e);y.setData(o);let s=o.memory||{};D(s.enabled!==!1),k(typeof s.flushEvery==`number`?s.flushEvery:10),j(typeof s.cli==`string`?s.cli:``),N(typeof s.retentionDays==`number`?s.retentionDays:30),P(!!s.autoReflectAfterFlush),I(typeof s.flushLanguage==`string`&&s.flushLanguage?s.flushLanguage:`en`),await y.refresh()},[t,n,y]);(0,p.useEffect)(()=>{if(g)return g(G),()=>g(null)},[g,G]);let K=(0,p.useCallback)(async()=>{H({busy:`flush`,notice:null,error:null});try{await t.post(`/api/jaw-memory/flush`,{}),H({busy:null,notice:`Memory flush queued. Browse refreshes when it completes.`,error:null}),await b.refresh()}catch(e){H({busy:null,notice:null,error:e instanceof Error?e.message:String(e)})}},[t,b]),q=(0,p.useCallback)(async()=>{H({busy:`reflect`,notice:null,error:null});try{await t.post(`/api/jaw-memory/reflect`,{}),H({busy:null,notice:`Reflect complete.`,error:null}),await b.refresh()}catch(e){H({busy:null,notice:null,error:e instanceof Error?e.message:String(e)})}},[t,b]),J=(0,p.useCallback)(()=>{if(b.state.kind!==`ready`)return;let t=v(b.state.data),n=new Blob([JSON.stringify(t,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`jaw-memory-${e}-${Date.now()}.json`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r)},[b.state,e]);if(y.state.kind===`loading`)return(0,w.jsx)(a,{});if(y.state.kind===`offline`)return(0,w.jsx)(o,{port:e});if(y.state.kind===`error`)return(0,w.jsx)(s,{message:y.state.message});let Y=x(O,`Flush every`),X=x(M,`Retention days`),Z=y.state.data.perCli||{},Q=[{value:``,label:`(profile default)`},...Object.keys(Z).map(e=>({value:e,label:d(e).label||e}))];A&&!Q.some(e=>e.value===A)&&Q.push({value:A,label:`${d(A).label||A} (legacy)`});let $=b.state.kind===`ready`?v(b.state.data):[],{slice:te,hasMore:ne,pageCount:re}=S($,Math.min(L,Math.max(0,Math.ceil($.length/50)-1)));return(0,w.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),G()},children:[(0,w.jsxs)(i,{title:`Memory engine`,hint:`Background memory flush and reflection cadence.`,children:[(0,w.jsx)(c,{id:`memory-enabled`,label:`Memory enabled`,value:C,onChange:e=>{D(e),U(`memory.enabled`,{value:e,original:W.enabled!==!1,valid:!0})}}),(0,w.jsx)(u,{id:`memory-flush-every`,label:`Flush every (sessions)`,value:O,min:1,error:Y,onChange:e=>{k(e),U(`memory.flushEvery`,{value:e,original:typeof W.flushEvery==`number`?W.flushEvery:10,valid:x(e,`Flush every`)===null})}}),(0,w.jsx)(l,{id:`memory-cli`,label:`Flush CLI`,value:A,options:Q,onChange:e=>{j(e),U(`memory.cli`,{value:e,original:W.cli??``,valid:!0})}}),(0,w.jsx)(u,{id:`memory-retention`,label:`Retention days`,value:M,min:1,error:X,onChange:e=>{N(e),U(`memory.retentionDays`,{value:e,original:typeof W.retentionDays==`number`?W.retentionDays:30,valid:x(e,`Retention days`)===null})}}),(0,w.jsx)(c,{id:`memory-auto-reflect`,label:`Auto-reflect after flush`,value:ee,onChange:e=>{P(e),U(`memory.autoReflectAfterFlush`,{value:e,original:!!W.autoReflectAfterFlush,valid:!0})}}),(0,w.jsx)(l,{id:`memory-flush-language`,label:`Flush language`,value:F,options:[...h],onChange:e=>{I(e),U(`memory.flushLanguage`,{value:e,original:W.flushLanguage??`en`,valid:!0})}})]}),(0,w.jsx)(i,{title:`Stored entries`,hint:`Read-only browse of the key/value memory table (50/page).`,children:b.state.kind===`loading`?(0,w.jsx)(`p`,{className:`settings-section-hint`,children:`Loading entries…`}):b.state.kind===`offline`?(0,w.jsx)(o,{port:e}):b.state.kind===`error`?(0,w.jsx)(s,{message:b.state.message}):$.length===0?(0,w.jsx)(`p`,{className:`settings-section-hint`,children:`No memory entries yet.`}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(`table`,{className:`settings-memory-table`,children:[(0,w.jsx)(`thead`,{children:(0,w.jsxs)(`tr`,{children:[(0,w.jsx)(`th`,{scope:`col`,children:`Key`}),(0,w.jsx)(`th`,{scope:`col`,children:`Source`}),(0,w.jsx)(`th`,{scope:`col`,children:`Length`}),(0,w.jsx)(`th`,{scope:`col`,children:`Preview`})]})}),(0,w.jsx)(`tbody`,{children:te.map(e=>(0,w.jsx)(T,{row:e,onOpen:B},e.key))})]}),(0,w.jsxs)(`div`,{className:`settings-memory-pagination`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:L===0,onClick:()=>R(e=>Math.max(0,e-1)),children:`Prev`}),(0,w.jsxs)(`span`,{className:`settings-memory-pageinfo`,children:[`Page `,L+1,` / `,re]}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:!ne,onClick:()=>R(e=>e+1),children:`Next`})]})]})}),(0,w.jsxs)(i,{title:`Actions`,hint:`Flush runs async — the browse list refreshes when it finishes.`,children:[(0,w.jsxs)(`div`,{className:`settings-memory-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:V.busy!==null,onClick:()=>void K(),children:V.busy===`flush`?`Queuing…`:`Flush now`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:V.busy!==null,onClick:()=>void q(),children:V.busy===`reflect`?`Reflecting…`:`Reflect soul`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:b.state.kind!==`ready`,onClick:J,children:`Export memory`})]}),V.notice?(0,w.jsx)(`p`,{className:`settings-section-hint`,role:`status`,children:V.notice}):null,V.error?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:V.error}):null]}),z?(0,w.jsx)(`div`,{className:`settings-memory-modal`,role:`dialog`,"aria-modal":`true`,"aria-label":`Memory entry ${z.key}`,onClick:e=>{e.target===e.currentTarget&&B(null)},children:(0,w.jsxs)(`div`,{className:`settings-memory-modal-card`,children:[(0,w.jsxs)(`header`,{className:`settings-memory-modal-header`,children:[(0,w.jsx)(`h3`,{children:z.key}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>B(null),"aria-label":`Close memory entry`,children:`Close`})]}),(0,w.jsx)(`pre`,{className:`settings-memory-modal-body`,children:z.value})]})}):null]})}export{h as FLUSH_LANGUAGE_OPTIONS,g as MEMORY_PAGE_SIZE,m as MEMORY_SECTION_A_KEYS,D as default,_ as isMemorySettingsKey,v as normalizeMemoryRows,S as paginate,C as previewValue,x as validatePositiveInt};
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{a as c,i as l,r as u}from"./fields-zkeByFQW.js";import{n as d}from"./agent-meta-tiPlp7OI.js";import{t as f}from"./path-utils-LsJeDCKF.js";var p=e(t(),1),m=[`memory.enabled`,`memory.flushEvery`,`memory.cli`,`memory.retentionDays`,`memory.autoReflectAfterFlush`,`memory.flushLanguage`],h=[{value:`en`,label:`English (en)`},{value:`ko`,label:`한국어 (ko)`},{value:`ja`,label:`日本語 (ja)`},{value:`zh`,label:`中文 (zh)`}],g=50;function _(e){return m.includes(e)}function v(e){let t=y(e);if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=b(e);t&&n.push(t)}return n}function y(e){if(!e||typeof e!=`object`)return e;let t=e;return Array.isArray(t)?t:`data`in t?t.data:e}function b(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.key==`string`?t.key:null;return n?{key:n,value:typeof t.value==`string`?t.value:``,source:typeof t.source==`string`?t.source:`manual`}:null}function x(e,t){return!Number.isFinite(e)||!Number.isInteger(e)||e<=0?`${t} must be a positive integer`:null}function S(e,t,n=50){let r=Math.max(0,Math.floor(t))*n,i=e.slice(r,r+n),a=Math.max(1,Math.ceil(e.length/n));return{slice:i,hasMore:r+n<e.length,pageCount:a}}function C(e,t=80){return e.length<=t?e:`${e.slice(0,t)}…`}var w=n();function T({row:e,onOpen:t}){return(0,w.jsxs)(`tr`,{className:`settings-memory-row`,children:[(0,w.jsx)(`td`,{className:`settings-memory-key`,children:(0,w.jsx)(`button`,{type:`button`,className:`settings-memory-link`,onClick:()=>t(e),"aria-label":`Open memory entry ${e.key}`,children:e.key})}),(0,w.jsx)(`td`,{className:`settings-memory-source`,children:e.source}),(0,w.jsx)(`td`,{className:`settings-memory-length`,children:e.value.length}),(0,w.jsx)(`td`,{className:`settings-memory-preview`,title:e.value,children:C(e.value)})]})}var E={busy:null,notice:null,error:null};function D({port:e,client:t,dirty:n,registerSave:g}){let y=r(t,`/api/settings`),b=r(t,`/api/memory`),[C,D]=(0,p.useState)(!0),[O,k]=(0,p.useState)(10),[A,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(30),[ee,P]=(0,p.useState)(!1),[F,I]=(0,p.useState)(`en`),[L,R]=(0,p.useState)(0),[z,B]=(0,p.useState)(null),[V,H]=(0,p.useState)(E);(0,p.useEffect)(()=>{if(y.state.kind!==`ready`)return;let e=y.state.data.memory||{};D(e.enabled!==!1),k(typeof e.flushEvery==`number`?e.flushEvery:10),j(typeof e.cli==`string`?e.cli:``),N(typeof e.retentionDays==`number`?e.retentionDays:30),P(!!e.autoReflectAfterFlush),I(typeof e.flushLanguage==`string`&&e.flushLanguage?e.flushLanguage:`en`)},[y.state]),(0,p.useEffect)(()=>()=>{for(let e of m)n.remove(e)},[n]),(0,p.useEffect)(()=>{if(!z)return;let e=e=>{e.key===`Escape`&&B(null)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[z]);let U=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),W=(0,p.useMemo)(()=>y.state.kind===`ready`&&y.state.data.memory||{},[y.state]),G=(0,p.useCallback)(async()=>{let e=n.saveBundle(),r={};for(let[t,n]of Object.entries(e))_(t)&&(r[t]=n);if(Object.keys(r).length===0)return;let i=f(r),a=await t.put(`/api/settings`,i),o=a&&typeof a==`object`&&`data`in a?a.data:a;for(let e of m)n.remove(e);y.setData(o);let s=o.memory||{};D(s.enabled!==!1),k(typeof s.flushEvery==`number`?s.flushEvery:10),j(typeof s.cli==`string`?s.cli:``),N(typeof s.retentionDays==`number`?s.retentionDays:30),P(!!s.autoReflectAfterFlush),I(typeof s.flushLanguage==`string`&&s.flushLanguage?s.flushLanguage:`en`),await y.refresh()},[t,n,y]);(0,p.useEffect)(()=>{if(g)return g(G),()=>g(null)},[g,G]);let K=(0,p.useCallback)(async()=>{H({busy:`flush`,notice:null,error:null});try{await t.post(`/api/jaw-memory/flush`,{}),H({busy:null,notice:`Memory flush queued. Browse refreshes when it completes.`,error:null}),await b.refresh()}catch(e){H({busy:null,notice:null,error:e instanceof Error?e.message:String(e)})}},[t,b]),q=(0,p.useCallback)(async()=>{H({busy:`reflect`,notice:null,error:null});try{await t.post(`/api/jaw-memory/reflect`,{}),H({busy:null,notice:`Reflect complete.`,error:null}),await b.refresh()}catch(e){H({busy:null,notice:null,error:e instanceof Error?e.message:String(e)})}},[t,b]),J=(0,p.useCallback)(()=>{if(b.state.kind!==`ready`)return;let t=v(b.state.data),n=new Blob([JSON.stringify(t,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`jaw-memory-${e}-${Date.now()}.json`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r)},[b.state,e]);if(y.state.kind===`loading`)return(0,w.jsx)(a,{});if(y.state.kind===`offline`)return(0,w.jsx)(o,{port:e});if(y.state.kind===`error`)return(0,w.jsx)(s,{message:y.state.message});let Y=x(O,`Flush every`),X=x(M,`Retention days`),Z=y.state.data.perCli||{},Q=[{value:``,label:`(profile default)`},...Object.keys(Z).map(e=>({value:e,label:d(e).label||e}))];A&&!Q.some(e=>e.value===A)&&Q.push({value:A,label:`${d(A).label||A} (legacy)`});let $=b.state.kind===`ready`?v(b.state.data):[],{slice:te,hasMore:ne,pageCount:re}=S($,Math.min(L,Math.max(0,Math.ceil($.length/50)-1)));return(0,w.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),G()},children:[(0,w.jsxs)(i,{title:`Memory engine`,hint:`Background memory flush and reflection cadence.`,children:[(0,w.jsx)(c,{id:`memory-enabled`,label:`Memory enabled`,value:C,onChange:e=>{D(e),U(`memory.enabled`,{value:e,original:W.enabled!==!1,valid:!0})}}),(0,w.jsx)(u,{id:`memory-flush-every`,label:`Flush every (sessions)`,value:O,min:1,error:Y,onChange:e=>{k(e),U(`memory.flushEvery`,{value:e,original:typeof W.flushEvery==`number`?W.flushEvery:10,valid:x(e,`Flush every`)===null})}}),(0,w.jsx)(l,{id:`memory-cli`,label:`Flush CLI`,value:A,options:Q,onChange:e=>{j(e),U(`memory.cli`,{value:e,original:W.cli??``,valid:!0})}}),(0,w.jsx)(u,{id:`memory-retention`,label:`Retention days`,value:M,min:1,error:X,onChange:e=>{N(e),U(`memory.retentionDays`,{value:e,original:typeof W.retentionDays==`number`?W.retentionDays:30,valid:x(e,`Retention days`)===null})}}),(0,w.jsx)(c,{id:`memory-auto-reflect`,label:`Auto-reflect after flush`,value:ee,onChange:e=>{P(e),U(`memory.autoReflectAfterFlush`,{value:e,original:!!W.autoReflectAfterFlush,valid:!0})}}),(0,w.jsx)(l,{id:`memory-flush-language`,label:`Flush language`,value:F,options:[...h],onChange:e=>{I(e),U(`memory.flushLanguage`,{value:e,original:W.flushLanguage??`en`,valid:!0})}})]}),(0,w.jsx)(i,{title:`Stored entries`,hint:`Read-only browse of the key/value memory table (50/page).`,children:b.state.kind===`loading`?(0,w.jsx)(`p`,{className:`settings-section-hint`,children:`Loading entries…`}):b.state.kind===`offline`?(0,w.jsx)(o,{port:e}):b.state.kind===`error`?(0,w.jsx)(s,{message:b.state.message}):$.length===0?(0,w.jsx)(`p`,{className:`settings-section-hint`,children:`No memory entries yet.`}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(`table`,{className:`settings-memory-table`,children:[(0,w.jsx)(`thead`,{children:(0,w.jsxs)(`tr`,{children:[(0,w.jsx)(`th`,{scope:`col`,children:`Key`}),(0,w.jsx)(`th`,{scope:`col`,children:`Source`}),(0,w.jsx)(`th`,{scope:`col`,children:`Length`}),(0,w.jsx)(`th`,{scope:`col`,children:`Preview`})]})}),(0,w.jsx)(`tbody`,{children:te.map(e=>(0,w.jsx)(T,{row:e,onOpen:B},e.key))})]}),(0,w.jsxs)(`div`,{className:`settings-memory-pagination`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:L===0,onClick:()=>R(e=>Math.max(0,e-1)),children:`Prev`}),(0,w.jsxs)(`span`,{className:`settings-memory-pageinfo`,children:[`Page `,L+1,` / `,re]}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:!ne,onClick:()=>R(e=>e+1),children:`Next`})]})]})}),(0,w.jsxs)(i,{title:`Actions`,hint:`Flush runs async — the browse list refreshes when it finishes.`,children:[(0,w.jsxs)(`div`,{className:`settings-memory-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:V.busy!==null,onClick:()=>void K(),children:V.busy===`flush`?`Queuing…`:`Flush now`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:V.busy!==null,onClick:()=>void q(),children:V.busy===`reflect`?`Reflecting…`:`Reflect soul`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:b.state.kind!==`ready`,onClick:J,children:`Export memory`})]}),V.notice?(0,w.jsx)(`p`,{className:`settings-section-hint`,role:`status`,children:V.notice}):null,V.error?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:V.error}):null]}),z?(0,w.jsx)(`div`,{className:`settings-memory-modal`,role:`dialog`,"aria-modal":`true`,"aria-label":`Memory entry ${z.key}`,onClick:e=>{e.target===e.currentTarget&&B(null)},children:(0,w.jsxs)(`div`,{className:`settings-memory-modal-card`,children:[(0,w.jsxs)(`header`,{className:`settings-memory-modal-header`,children:[(0,w.jsx)(`h3`,{children:z.key}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>B(null),"aria-label":`Close memory entry`,children:`Close`})]}),(0,w.jsx)(`pre`,{className:`settings-memory-modal-body`,children:z.value})]})}):null]})}export{h as FLUSH_LANGUAGE_OPTIONS,g as MEMORY_PAGE_SIZE,m as MEMORY_SECTION_A_KEYS,D as default,_ as isMemorySettingsKey,v as normalizeMemoryRows,S as paginate,C as previewValue,x as validatePositiveInt};
@@ -1,4 +1,4 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{A as t}from"./vendor-render-DCb9B75Q.js";import{n,t as r}from"./jsx-runtime-B3ZGMGGg.js";import{t as i}from"./copy-text-BKruhU_y.js";import{n as a,t as o}from"./w3c-keyname-_Vjqp3zl.js";import{C as s,D as c,O as l,T as u,_ as d,a as f,d as p,f as m,g as h,h as g,i as _,l as v,m as y,o as b,p as x,t as S,u as ee,v as te,w as ne,x as re}from"./wiki-link-resolver-C197VhRP.js";import{n as C,o as ie,r as ae,s as oe,t as se}from"./wiki-link-suggestions-BMHWTE4_.js";import{M as ce}from"./vendor-utils-BgdgpA_R.js";var le={}.hasOwnProperty;function ue(e,t){let n=t||{};function r(t,...n){let i=r.invalid,a=r.handlers;if(t&&le.call(t,e)){let n=String(t[e]);i=le.call(a,n)?a[n]:r.unknown}if(i)return i.call(this,t,...n)}return r.handlers=n.handlers||{},r.invalid=n.invalid,r.unknown=n.unknown,r}var de={}.hasOwnProperty;function fe(e,t){let n=-1,r;if(t.extensions)for(;++n<t.extensions.length;)fe(e,t.extensions[n]);for(r in t)if(de.call(t,r))switch(r){case`extensions`:break;case`unsafe`:pe(e[r],t[r]);break;case`join`:pe(e[r],t[r]);break;case`handlers`:me(e[r],t[r]);break;default:e.options[r]=t[r]}return e}function pe(e,t){t&&e.push(...t)}function me(e,t){t&&Object.assign(e,t)}var he=[ge];function ge(e,t,n,r){if(t.type===`code`&&d(t,r)&&(e.type===`list`||e.type===t.type&&d(e,r)))return!1;if(`spread`in n&&typeof n.spread==`boolean`)return e.type===`paragraph`&&(e.type===t.type||t.type===`definition`||t.type===`heading`&&g(t,r))?void 0:+!!n.spread}var _e=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`],ve=[{character:` `,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`\r`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:`
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{A as t}from"./vendor-render-DCb9B75Q.js";import{n,t as r}from"./jsx-runtime-gFMgZ0TQ.js";import{t as i}from"./copy-text-BDs2wKjA.js";import{n as a,t as o}from"./w3c-keyname-a_sRwNLm.js";import{C as s,D as c,O as l,T as u,_ as d,a as f,d as p,f as m,g as h,h as g,i as _,l as v,m as y,o as b,p as x,t as S,u as ee,v as te,w as ne,x as re}from"./wiki-link-resolver-BfNXN9px.js";import{n as C,o as ie,r as ae,s as oe,t as se}from"./wiki-link-suggestions-DZQc78gj.js";import{M as ce}from"./vendor-utils-DJY0EWnQ.js";var le={}.hasOwnProperty;function ue(e,t){let n=t||{};function r(t,...n){let i=r.invalid,a=r.handlers;if(t&&le.call(t,e)){let n=String(t[e]);i=le.call(a,n)?a[n]:r.unknown}if(i)return i.call(this,t,...n)}return r.handlers=n.handlers||{},r.invalid=n.invalid,r.unknown=n.unknown,r}var de={}.hasOwnProperty;function fe(e,t){let n=-1,r;if(t.extensions)for(;++n<t.extensions.length;)fe(e,t.extensions[n]);for(r in t)if(de.call(t,r))switch(r){case`extensions`:break;case`unsafe`:pe(e[r],t[r]);break;case`join`:pe(e[r],t[r]);break;case`handlers`:me(e[r],t[r]);break;default:e.options[r]=t[r]}return e}function pe(e,t){t&&e.push(...t)}function me(e,t){t&&Object.assign(e,t)}var he=[ge];function ge(e,t,n,r){if(t.type===`code`&&d(t,r)&&(e.type===`list`||e.type===t.type&&d(e,r)))return!1;if(`spread`in n&&typeof n.spread==`boolean`)return e.type===`paragraph`&&(e.type===t.type||t.type===`definition`||t.type===`heading`&&g(t,r))?void 0:+!!n.spread}var _e=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`],ve=[{character:` `,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`\r`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:`
2
2
  `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:` `,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`!`,after:`\\[`,inConstruct:`phrasing`,notInConstruct:_e},{character:`"`,inConstruct:`titleQuote`},{atBreak:!0,character:`#`},{character:`#`,inConstruct:`headingAtx`,after:`(?:[\r
3
3
  ]|$)`},{character:`&`,after:`[#A-Za-z]`,inConstruct:`phrasing`},{character:`'`,inConstruct:`titleApostrophe`},{character:`(`,inConstruct:`destinationRaw`},{before:`\\]`,character:`(`,inConstruct:`phrasing`,notInConstruct:_e},{atBreak:!0,before:`\\d+`,character:`)`},{character:`)`,inConstruct:`destinationRaw`},{atBreak:!0,character:`*`,after:`(?:[ \r
4
4
  *])`},{character:`*`,inConstruct:`phrasing`,notInConstruct:_e},{atBreak:!0,character:`+`,after:`(?:[ \r
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-BeAyKBJW.js";import{a as c,i as l,n as u,r as d,s as f}from"./fields-MeoSVgIK.js";import{n as p,r as m}from"./agent-meta-FyI15KAa.js";import{t as h}from"./path-utils-DX1HplvB.js";var g=e(t(),1),_=n(),v=[`basic`,`openai`,`anthropic`,`vertex`];function y(e){return e===`anthropic`?`https://api.anthropic.com/v1/messages`:e===`vertex`?`https://LOCATION-aiplatform.googleapis.com/v1`:`http://127.0.0.1:18645/v1`}function b({client:e,pi:t,provider:n,model:r,onClose:i,onRegistered:a}){let o=(0,g.useMemo)(()=>t?.profiles?.find(e=>e.id===n)||t?.profiles?.[0],[t,n]),[s,c]=(0,g.useState)(o?.mode||`basic`),[u,d]=(0,g.useState)(o?.id||n||`progrok`),[p,m]=(0,g.useState)(o?.endpoint||y(s)),[h,b]=(0,g.useState)(r||o?.model||`grok-composer-2.5-fast`),[x,S]=(0,g.useState)(``),[C,w]=(0,g.useState)(!1),[T,E]=(0,g.useState)(null);(0,g.useEffect)(()=>{m(e=>e||y(s))},[s]);let D=async()=>{w(!0),E(null);try{let t=await e.post(`/api/pi/profiles/register`,{id:u,label:u,mode:s,endpoint:p,model:h,apiKey:x});a({provider:u,model:h,models:t.models||[],pi:t.settings?.pi}),i()}catch(e){E(e instanceof Error?e.message:String(e))}finally{w(!1)}};return(0,_.jsx)(`div`,{className:`settings-memory-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`pi-profile-title`,children:(0,_.jsxs)(`div`,{className:`settings-memory-modal-card`,children:[(0,_.jsxs)(`header`,{className:`settings-memory-modal-header`,children:[(0,_.jsx)(`h3`,{id:`pi-profile-title`,children:`Pi Settings`}),(0,_.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:i,children:`Close`})]}),(0,_.jsxs)(`div`,{className:`settings-page-form`,children:[(0,_.jsx)(l,{id:`pi-profile-mode`,label:`Mode`,value:s,options:v.map(e=>({value:e,label:e})),onChange:e=>c(e)}),(0,_.jsx)(f,{id:`pi-profile-id`,label:`Provider`,value:u,onChange:d,placeholder:`progrok`}),(0,_.jsx)(f,{id:`pi-profile-endpoint`,label:`Endpoint`,value:p,onChange:m,placeholder:y(s)}),(0,_.jsx)(f,{id:`pi-profile-model`,label:`Model`,value:h,onChange:b,placeholder:`grok-composer-2.5-fast`}),(0,_.jsx)(f,{id:`pi-profile-key`,label:`API Key`,value:x,onChange:S,placeholder:o?.apiKeySet?`set (${o.apiKeyLast4||`****`})`:`empty for local proxy`}),(0,_.jsx)(`p`,{className:`settings-empty`,children:`Default: grok-composer-2.5-fast. Bare grok-composer-2.5 currently has no verified team access.`}),T?(0,_.jsx)(`p`,{className:`settings-field-error`,children:T}):null,(0,_.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:C,onClick:()=>void D(),children:C?`Registering...`:`Register`})]})]})})}function x(e,t,n=``){let r=new Set;n&&r.add(n);for(let n of e?.discoveredModels?.[t]||[])r.add(n);let i=e?.profiles?.find(e=>e.id===t);return i?.model&&r.add(i.model),[...r]}function S(e,t=``){let n=new Set;t&&n.add(t);for(let t of e?.profiles||[])n.add(t.id);return[...n]}function C(e,t,n=!0){return{value:e,original:t,valid:n}}function w({cli:e,meta:t,original:n,value:r,setValue:i,setEntry:a,client:o,pi:s,setPi:u}){let d=`percli-${e}-models`,p=e===`pi`,[m,h]=(0,g.useState)(!1),v=r.provider||t.defaultProvider||t.providers?.[0]||`claude`,y=p?x(s,v,r.model||``):[],w=!p&&(t.providers?.length??0)>0,T=p?y:w?t.modelsByProvider?.[v]??t.models:t.models,E=w?t.effortsByProvider?.[v]??t.efforts:t.efforts;return(0,_.jsxs)(`div`,{className:`settings-percli-row`,"data-cli":e,children:[(0,_.jsx)(`h3`,{className:`settings-percli-title`,children:t.label}),(0,_.jsxs)(`div`,{className:`settings-percli-grid`,children:[p&&S(s,v).length?(0,_.jsx)(l,{id:`percli-${e}-provider`,label:`Provider`,value:v,options:S(s,v).map(e=>({value:e,label:e})),onChange:t=>{let o=x(s,t),c=o.includes(r.model||``)?r.model||``:o[0]||``;i({...r,provider:t,model:c}),a(`perCli.${e}.provider`,C(t,n.provider??`progrok`)),a(`perCli.${e}.model`,C(c,n.model??``))}}):w?(0,_.jsx)(l,{id:`percli-${e}-provider`,label:`Provider`,value:v,options:(t.providers??[]).map(e=>({value:e,label:e})),onChange:o=>{let s=t.modelsByProvider?.[o]??[],c=t.effortsByProvider?.[o]??[],l=s.includes(r.model||``)?r.model||``:s[0]||``,u=c.includes(r.effort||``)&&r.effort||``;i({...r,provider:o,model:l,effort:u}),a(`perCli.${e}.provider`,C(o,n.provider??t.defaultProvider??`claude`)),a(`perCli.${e}.model`,C(l,n.model??``)),a(`perCli.${e}.effort`,C(u,n.effort??``))}}):null,(0,_.jsxs)(`div`,{className:`settings-percli-model`,children:[p&&T.length>0?(0,_.jsx)(l,{id:`percli-${e}-model`,label:`Model`,value:r.model??T[0]??``,options:T.map(e=>({value:e,label:e})),onChange:t=>{i({...r,model:t}),a(`perCli.${e}.model`,C(t,n.model??``))}}):(0,_.jsx)(f,{id:`percli-${e}-model`,label:`Model`,value:r.model??``,onChange:t=>{i({...r,model:t}),a(`perCli.${e}.model`,C(t,n.model??``))},placeholder:T[0]??`model id`}),t.modelNote?(0,_.jsx)(`p`,{className:`settings-percli-note`,children:t.modelNote}):null,T.length>0?(0,_.jsx)(`datalist`,{id:d,children:T.map(e=>(0,_.jsx)(`option`,{value:e},e))}):null]}),E.length>0?(0,_.jsxs)(`div`,{className:`settings-percli-effort`,children:[(0,_.jsx)(l,{id:`percli-${e}-effort`,label:`Effort`,value:r.effort??``,options:[{value:``,label:`(default)`},...E.map(e=>({value:e,label:e}))],onChange:t=>{i({...r,effort:t}),a(`perCli.${e}.effort`,C(t,n.effort??``))}}),t.effortNote?(0,_.jsx)(`p`,{className:`settings-percli-note`,children:t.effortNote}):null]}):t.effortNote?(0,_.jsx)(`p`,{className:`settings-percli-note settings-percli-note--effort`,children:t.effortNote}):null,(0,_.jsx)(c,{id:`percli-${e}-fastmode`,label:`Fast mode`,value:!!r.fastMode,onChange:t=>{i({...r,fastMode:t}),a(`perCli.${e}.fastMode`,C(t,!!n.fastMode))}}),p&&o?(0,_.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:()=>h(!0),children:`Settings`}):null]}),p&&o&&m?(0,_.jsx)(b,{client:o,pi:s,provider:v,model:r.model||`grok-composer-2.5-fast`,onClose:()=>h(!1),onRegistered:({provider:t,model:o,pi:s})=>{s&&u&&u(s),i({...r,provider:t,model:o}),a(`perCli.${e}.provider`,C(t,n.provider??`progrok`)),a(`perCli.${e}.model`,C(o,n.model??``))}}):null]})}function T(e){return[...e].sort((e,t)=>e===`pi`?-1:t===`pi`?1:e===`ai-e`?t===`pi`?1:-1:t===`ai-e`?e===`pi`?-1:1:0)}function E(e){let t=new Set;for(let n of Object.keys(e.activeOverrides||{}))t.add(n);for(let n of Object.keys(e.perCli||{}))t.add(n);let n={};for(let e of t)n[e]={model:``,effort:``};return{activeOverrides:n}}function D({port:e,client:t,dirty:n,registerSave:c}){let{state:l,refresh:f,setData:v}=r(t,`/api/settings`),[y,b]=(0,g.useState)({}),[x,S]=(0,g.useState)(void 0),[C,D]=(0,g.useState)([]),[O,k]=(0,g.useState)({}),[A,j]=(0,g.useState)(!1),[M,N]=(0,g.useState)(null),[P,F]=(0,g.useState)(null),I=(0,g.useCallback)(async()=>{try{let e=await t.get(`/api/cli-registry`);F(m(e&&typeof e==`object`&&`data`in e?e.data:e))}catch{F(null)}},[t]);(0,g.useEffect)(()=>{I()},[I]),(0,g.useEffect)(()=>{if(l.kind!==`ready`)return;b({...l.data.perCli||{}}),S(l.data.pi),D([...l.data.fallbackOrder||[]]);let e=l.data.perCli?.codex||{},t={};typeof e.contextWindowSize==`number`&&(t.contextWindowSize=e.contextWindowSize),typeof e.contextWindowCompactLimit==`number`&&(t.contextWindowCompactLimit=e.contextWindowCompactLimit),k(t)},[l]),(0,g.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`fallbackOrder`||e.startsWith(`perCli.`))&&n.remove(e)},[n]);let L=(0,g.useCallback)((e,t)=>n.set(e,t),[n]),R=(0,g.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=h(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),v(a),b({...a.perCli||{}}),D([...a.fallbackOrder||[]]),await f(),await I()},[t,n,I,f,v]);(0,g.useEffect)(()=>{if(c)return c(R),()=>c(null)},[c,R]);let z=(0,g.useCallback)(async()=>{if(l.kind===`ready`&&window.confirm(`Reset all active overrides?`)){j(!0),N(null);try{let e=E(l.data),n=await t.put(`/api/settings`,e);v(n&&typeof n==`object`&&`data`in n?n.data:n),await f()}catch(e){N(e instanceof Error?e.message:String(e))}finally{j(!1)}}},[t,f,v,l]);if(l.kind===`loading`)return(0,_.jsx)(a,{});if(l.kind===`offline`)return(0,_.jsx)(o,{port:e});if(l.kind===`error`)return(0,_.jsx)(s,{message:l.message});let B=l.data,V=B.perCli||{},H=T(Object.keys(V)),U=V.codex||{},W=B.activeOverrides||{},G=Object.entries(W);return(0,_.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),R()},children:[(0,_.jsx)(i,{title:`Model defaults`,hint:`Per-CLI defaults applied when no active override is set on the Agent page.`,children:H.length===0?(0,_.jsx)(`p`,{className:`settings-empty`,children:`No CLIs registered for this instance.`}):H.map(e=>(0,_.jsx)(w,{cli:e,meta:p(e,P),original:V[e]||{},value:y[e]||V[e]||{},setValue:t=>b({...y,[e]:t}),setEntry:L,client:t,pi:x,setPi:S},e))}),V.codex?(0,_.jsxs)(i,{title:`Codex context window`,hint:`Codex-only sliders. Other CLIs ignore these values.`,children:[(0,_.jsx)(d,{id:`model-codex-ctx`,label:`Context window size`,value:O.contextWindowSize??(typeof U.contextWindowSize==`number`?U.contextWindowSize:1e6),min:0,step:1e4,onChange:e=>{k({...O,contextWindowSize:e}),L(`perCli.codex.contextWindowSize`,{value:e,original:U.contextWindowSize??1e6,valid:Number.isFinite(e)&&e>=0})}}),(0,_.jsx)(d,{id:`model-codex-compact`,label:`Compact limit`,value:O.contextWindowCompactLimit??(typeof U.contextWindowCompactLimit==`number`?U.contextWindowCompactLimit:9e5),min:0,step:1e4,onChange:e=>{k({...O,contextWindowCompactLimit:e}),L(`perCli.codex.contextWindowCompactLimit`,{value:e,original:U.contextWindowCompactLimit??9e5,valid:Number.isFinite(e)&&e>=0})}})]}):null,(0,_.jsx)(i,{title:`Fallback order`,hint:`Order of CLIs used when the active CLI fails. Press Enter to add a chip; Backspace to remove the last.`,children:(0,_.jsx)(u,{id:`model-fallbackOrder`,label:`Fallback order`,value:C,onChange:e=>{D(e),L(`fallbackOrder`,{value:e,original:B.fallbackOrder||[],valid:!0})},placeholder:`cli name`})}),(0,_.jsxs)(i,{title:`Active overrides`,hint:`Per-session overrides applied on top of per-CLI defaults.`,children:[G.length===0?(0,_.jsx)(`p`,{className:`settings-empty`,children:`No active overrides.`}):(0,_.jsxs)(`table`,{className:`settings-overrides-table`,children:[(0,_.jsx)(`thead`,{children:(0,_.jsxs)(`tr`,{children:[(0,_.jsx)(`th`,{scope:`col`,children:`CLI`}),(0,_.jsx)(`th`,{scope:`col`,children:`Model`}),(0,_.jsx)(`th`,{scope:`col`,children:`Effort`})]})}),(0,_.jsx)(`tbody`,{children:G.map(([e,t])=>(0,_.jsxs)(`tr`,{children:[(0,_.jsx)(`td`,{children:e}),(0,_.jsx)(`td`,{children:(0,_.jsx)(`code`,{children:t?.model||`—`})}),(0,_.jsx)(`td`,{children:(0,_.jsx)(`code`,{children:t?.effort||`—`})})]},e))})]}),(0,_.jsxs)(`div`,{className:`settings-overrides-actions`,children:[(0,_.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void z(),disabled:A||G.length===0,children:A?`Resetting…`:`Reset overrides`}),M?(0,_.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:M}):null]})]})]})}export{E as buildResetOverridesPatch,D as default,T as orderModelCliKeys};
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{a as c,i as l,n as u,r as d,s as f}from"./fields-zkeByFQW.js";import{n as p,r as m}from"./agent-meta-tiPlp7OI.js";import{t as h}from"./path-utils-LsJeDCKF.js";var g=e(t(),1),_=n(),v=[`basic`,`openai`,`anthropic`,`vertex`];function y(e){return e===`anthropic`?`https://api.anthropic.com/v1/messages`:e===`vertex`?`https://LOCATION-aiplatform.googleapis.com/v1`:`http://127.0.0.1:18645/v1`}function b({client:e,pi:t,provider:n,model:r,onClose:i,onRegistered:a}){let o=(0,g.useMemo)(()=>t?.profiles?.find(e=>e.id===n)||t?.profiles?.[0],[t,n]),[s,c]=(0,g.useState)(o?.mode||`basic`),[u,d]=(0,g.useState)(o?.id||n||`progrok`),[p,m]=(0,g.useState)(o?.endpoint||y(s)),[h,b]=(0,g.useState)(r||o?.model||`grok-composer-2.5-fast`),[x,S]=(0,g.useState)(``),[C,w]=(0,g.useState)(!1),[T,E]=(0,g.useState)(null);(0,g.useEffect)(()=>{m(e=>e||y(s))},[s]);let D=async()=>{w(!0),E(null);try{let t=await e.post(`/api/pi/profiles/register`,{id:u,label:u,mode:s,endpoint:p,model:h,apiKey:x});a({provider:u,model:h,models:t.models||[],pi:t.settings?.pi}),i()}catch(e){E(e instanceof Error?e.message:String(e))}finally{w(!1)}};return(0,_.jsx)(`div`,{className:`settings-memory-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`pi-profile-title`,children:(0,_.jsxs)(`div`,{className:`settings-memory-modal-card`,children:[(0,_.jsxs)(`header`,{className:`settings-memory-modal-header`,children:[(0,_.jsx)(`h3`,{id:`pi-profile-title`,children:`Pi Settings`}),(0,_.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:i,children:`Close`})]}),(0,_.jsxs)(`div`,{className:`settings-page-form`,children:[(0,_.jsx)(l,{id:`pi-profile-mode`,label:`Mode`,value:s,options:v.map(e=>({value:e,label:e})),onChange:e=>c(e)}),(0,_.jsx)(f,{id:`pi-profile-id`,label:`Provider`,value:u,onChange:d,placeholder:`progrok`}),(0,_.jsx)(f,{id:`pi-profile-endpoint`,label:`Endpoint`,value:p,onChange:m,placeholder:y(s)}),(0,_.jsx)(f,{id:`pi-profile-model`,label:`Model`,value:h,onChange:b,placeholder:`grok-composer-2.5-fast`}),(0,_.jsx)(f,{id:`pi-profile-key`,label:`API Key`,value:x,onChange:S,placeholder:o?.apiKeySet?`set (${o.apiKeyLast4||`****`})`:`empty for local proxy`}),(0,_.jsx)(`p`,{className:`settings-empty`,children:`Default: grok-composer-2.5-fast. Bare grok-composer-2.5 currently has no verified team access.`}),T?(0,_.jsx)(`p`,{className:`settings-field-error`,children:T}):null,(0,_.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:C,onClick:()=>void D(),children:C?`Registering...`:`Register`})]})]})})}function x(e,t,n=``){let r=new Set;n&&r.add(n);for(let n of e?.discoveredModels?.[t]||[])r.add(n);let i=e?.profiles?.find(e=>e.id===t);return i?.model&&r.add(i.model),[...r]}function S(e,t=``){let n=new Set;t&&n.add(t);for(let t of e?.profiles||[])n.add(t.id);return[...n]}function C(e,t,n=!0){return{value:e,original:t,valid:n}}function w({cli:e,meta:t,original:n,value:r,setValue:i,setEntry:a,client:o,pi:s,setPi:u}){let d=`percli-${e}-models`,p=e===`pi`,[m,h]=(0,g.useState)(!1),v=r.provider||t.defaultProvider||t.providers?.[0]||`claude`,y=p?x(s,v,r.model||``):[],w=!p&&(t.providers?.length??0)>0,T=p?y:w?t.modelsByProvider?.[v]??t.models:t.models,E=w?t.effortsByProvider?.[v]??t.efforts:t.efforts;return(0,_.jsxs)(`div`,{className:`settings-percli-row`,"data-cli":e,children:[(0,_.jsx)(`h3`,{className:`settings-percli-title`,children:t.label}),(0,_.jsxs)(`div`,{className:`settings-percli-grid`,children:[p&&S(s,v).length?(0,_.jsx)(l,{id:`percli-${e}-provider`,label:`Provider`,value:v,options:S(s,v).map(e=>({value:e,label:e})),onChange:t=>{let o=x(s,t),c=o.includes(r.model||``)?r.model||``:o[0]||``;i({...r,provider:t,model:c}),a(`perCli.${e}.provider`,C(t,n.provider??`progrok`)),a(`perCli.${e}.model`,C(c,n.model??``))}}):w?(0,_.jsx)(l,{id:`percli-${e}-provider`,label:`Provider`,value:v,options:(t.providers??[]).map(e=>({value:e,label:e})),onChange:o=>{let s=t.modelsByProvider?.[o]??[],c=t.effortsByProvider?.[o]??[],l=s.includes(r.model||``)?r.model||``:s[0]||``,u=c.includes(r.effort||``)&&r.effort||``;i({...r,provider:o,model:l,effort:u}),a(`perCli.${e}.provider`,C(o,n.provider??t.defaultProvider??`claude`)),a(`perCli.${e}.model`,C(l,n.model??``)),a(`perCli.${e}.effort`,C(u,n.effort??``))}}):null,(0,_.jsxs)(`div`,{className:`settings-percli-model`,children:[p&&T.length>0?(0,_.jsx)(l,{id:`percli-${e}-model`,label:`Model`,value:r.model??T[0]??``,options:T.map(e=>({value:e,label:e})),onChange:t=>{i({...r,model:t}),a(`perCli.${e}.model`,C(t,n.model??``))}}):(0,_.jsx)(f,{id:`percli-${e}-model`,label:`Model`,value:r.model??``,onChange:t=>{i({...r,model:t}),a(`perCli.${e}.model`,C(t,n.model??``))},placeholder:T[0]??`model id`}),t.modelNote?(0,_.jsx)(`p`,{className:`settings-percli-note`,children:t.modelNote}):null,T.length>0?(0,_.jsx)(`datalist`,{id:d,children:T.map(e=>(0,_.jsx)(`option`,{value:e},e))}):null]}),E.length>0?(0,_.jsxs)(`div`,{className:`settings-percli-effort`,children:[(0,_.jsx)(l,{id:`percli-${e}-effort`,label:`Effort`,value:r.effort??``,options:[{value:``,label:`(default)`},...E.map(e=>({value:e,label:e}))],onChange:t=>{i({...r,effort:t}),a(`perCli.${e}.effort`,C(t,n.effort??``))}}),t.effortNote?(0,_.jsx)(`p`,{className:`settings-percli-note`,children:t.effortNote}):null]}):t.effortNote?(0,_.jsx)(`p`,{className:`settings-percli-note settings-percli-note--effort`,children:t.effortNote}):null,(0,_.jsx)(c,{id:`percli-${e}-fastmode`,label:`Fast mode`,value:!!r.fastMode,onChange:t=>{i({...r,fastMode:t}),a(`perCli.${e}.fastMode`,C(t,!!n.fastMode))}}),p&&o?(0,_.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:()=>h(!0),children:`Settings`}):null]}),p&&o&&m?(0,_.jsx)(b,{client:o,pi:s,provider:v,model:r.model||`grok-composer-2.5-fast`,onClose:()=>h(!1),onRegistered:({provider:t,model:o,pi:s})=>{s&&u&&u(s),i({...r,provider:t,model:o}),a(`perCli.${e}.provider`,C(t,n.provider??`progrok`)),a(`perCli.${e}.model`,C(o,n.model??``))}}):null]})}function T(e){return[...e].sort((e,t)=>e===`pi`?-1:t===`pi`?1:e===`ai-e`?t===`pi`?1:-1:t===`ai-e`?e===`pi`?-1:1:0)}function E(e){let t=new Set;for(let n of Object.keys(e.activeOverrides||{}))t.add(n);for(let n of Object.keys(e.perCli||{}))t.add(n);let n={};for(let e of t)n[e]={model:``,effort:``};return{activeOverrides:n}}function D({port:e,client:t,dirty:n,registerSave:c}){let{state:l,refresh:f,setData:v}=r(t,`/api/settings`),[y,b]=(0,g.useState)({}),[x,S]=(0,g.useState)(void 0),[C,D]=(0,g.useState)([]),[O,k]=(0,g.useState)({}),[A,j]=(0,g.useState)(!1),[M,N]=(0,g.useState)(null),[P,F]=(0,g.useState)(null),I=(0,g.useCallback)(async()=>{try{let e=await t.get(`/api/cli-registry`);F(m(e&&typeof e==`object`&&`data`in e?e.data:e))}catch{F(null)}},[t]);(0,g.useEffect)(()=>{I()},[I]),(0,g.useEffect)(()=>{if(l.kind!==`ready`)return;b({...l.data.perCli||{}}),S(l.data.pi),D([...l.data.fallbackOrder||[]]);let e=l.data.perCli?.codex||{},t={};typeof e.contextWindowSize==`number`&&(t.contextWindowSize=e.contextWindowSize),typeof e.contextWindowCompactLimit==`number`&&(t.contextWindowCompactLimit=e.contextWindowCompactLimit),k(t)},[l]),(0,g.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`fallbackOrder`||e.startsWith(`perCli.`))&&n.remove(e)},[n]);let L=(0,g.useCallback)((e,t)=>n.set(e,t),[n]),R=(0,g.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=h(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),v(a),b({...a.perCli||{}}),D([...a.fallbackOrder||[]]),await f(),await I()},[t,n,I,f,v]);(0,g.useEffect)(()=>{if(c)return c(R),()=>c(null)},[c,R]);let z=(0,g.useCallback)(async()=>{if(l.kind===`ready`&&window.confirm(`Reset all active overrides?`)){j(!0),N(null);try{let e=E(l.data),n=await t.put(`/api/settings`,e);v(n&&typeof n==`object`&&`data`in n?n.data:n),await f()}catch(e){N(e instanceof Error?e.message:String(e))}finally{j(!1)}}},[t,f,v,l]);if(l.kind===`loading`)return(0,_.jsx)(a,{});if(l.kind===`offline`)return(0,_.jsx)(o,{port:e});if(l.kind===`error`)return(0,_.jsx)(s,{message:l.message});let B=l.data,V=B.perCli||{},H=T(Object.keys(V)),U=V.codex||{},W=B.activeOverrides||{},G=Object.entries(W);return(0,_.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),R()},children:[(0,_.jsx)(i,{title:`Model defaults`,hint:`Per-CLI defaults applied when no active override is set on the Agent page.`,children:H.length===0?(0,_.jsx)(`p`,{className:`settings-empty`,children:`No CLIs registered for this instance.`}):H.map(e=>(0,_.jsx)(w,{cli:e,meta:p(e,P),original:V[e]||{},value:y[e]||V[e]||{},setValue:t=>b({...y,[e]:t}),setEntry:L,client:t,pi:x,setPi:S},e))}),V.codex?(0,_.jsxs)(i,{title:`Codex context window`,hint:`Codex-only sliders. Other CLIs ignore these values.`,children:[(0,_.jsx)(d,{id:`model-codex-ctx`,label:`Context window size`,value:O.contextWindowSize??(typeof U.contextWindowSize==`number`?U.contextWindowSize:1e6),min:0,step:1e4,onChange:e=>{k({...O,contextWindowSize:e}),L(`perCli.codex.contextWindowSize`,{value:e,original:U.contextWindowSize??1e6,valid:Number.isFinite(e)&&e>=0})}}),(0,_.jsx)(d,{id:`model-codex-compact`,label:`Compact limit`,value:O.contextWindowCompactLimit??(typeof U.contextWindowCompactLimit==`number`?U.contextWindowCompactLimit:9e5),min:0,step:1e4,onChange:e=>{k({...O,contextWindowCompactLimit:e}),L(`perCli.codex.contextWindowCompactLimit`,{value:e,original:U.contextWindowCompactLimit??9e5,valid:Number.isFinite(e)&&e>=0})}})]}):null,(0,_.jsx)(i,{title:`Fallback order`,hint:`Order of CLIs used when the active CLI fails. Press Enter to add a chip; Backspace to remove the last.`,children:(0,_.jsx)(u,{id:`model-fallbackOrder`,label:`Fallback order`,value:C,onChange:e=>{D(e),L(`fallbackOrder`,{value:e,original:B.fallbackOrder||[],valid:!0})},placeholder:`cli name`})}),(0,_.jsxs)(i,{title:`Active overrides`,hint:`Per-session overrides applied on top of per-CLI defaults.`,children:[G.length===0?(0,_.jsx)(`p`,{className:`settings-empty`,children:`No active overrides.`}):(0,_.jsxs)(`table`,{className:`settings-overrides-table`,children:[(0,_.jsx)(`thead`,{children:(0,_.jsxs)(`tr`,{children:[(0,_.jsx)(`th`,{scope:`col`,children:`CLI`}),(0,_.jsx)(`th`,{scope:`col`,children:`Model`}),(0,_.jsx)(`th`,{scope:`col`,children:`Effort`})]})}),(0,_.jsx)(`tbody`,{children:G.map(([e,t])=>(0,_.jsxs)(`tr`,{children:[(0,_.jsx)(`td`,{children:e}),(0,_.jsx)(`td`,{children:(0,_.jsx)(`code`,{children:t?.model||`—`})}),(0,_.jsx)(`td`,{children:(0,_.jsx)(`code`,{children:t?.effort||`—`})})]},e))})]}),(0,_.jsxs)(`div`,{className:`settings-overrides-actions`,children:[(0,_.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void z(),disabled:A||G.length===0,children:A?`Resetting…`:`Reset overrides`}),M?(0,_.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:M}):null]})]})]})}export{E as buildResetOverridesPatch,D as default,T as orderModelCliKeys};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-BeAyKBJW.js";import{a as c,i as l,s as u}from"./fields-MeoSVgIK.js";import{t as d}from"./InlineWarn-DrqqH39Y.js";import{t as f}from"./path-utils-DX1HplvB.js";var p=e(t(),1),m=n(),h=[`off`,`http-only`,`full`];function g(e){return e===`off`||e===`http-only`||e===`full`}var _=[`network.bindHost`,`network.lanBypass`,`network.remoteAccess.mode`,`network.remoteAccess.trustProxies`,`network.remoteAccess.trustForwardedFor`,`network.remoteAccess.publicOriginHint`],v=[{value:`127.0.0.1`,label:`127.0.0.1 — loopback only (recommended)`},{value:`0.0.0.0`,label:`0.0.0.0 — all interfaces (LAN exposed)`}],y=[{value:`off`,label:`off — block remote requests`},{value:`http-only`,label:`http-only — read-only HTTP from remote`},{value:`full`,label:`full — HTTP + WebSocket from remote`}];function b(e){let t={};return e.bindHost!==void 0&&(t.bindHost=e.bindHost),e.lanBypass!==void 0&&(t.lanBypass=e.lanBypass),t.remoteAccess={...e.remoteAccess??{}},t}function x(e){let t=(e||``).trim();if(t===``)return{kind:`empty`};let n;try{n=new URL(t)}catch{return{kind:`invalid`,reason:`Must be an absolute URL (https://… or http://…).`}}return n.protocol!==`http:`&&n.protocol!==`https:`?{kind:`invalid`,reason:`Only http:// or https:// origins are accepted.`}:n.hostname?n.pathname&&n.pathname!==`/`?{kind:`invalid`,reason:`Origin must not include a path.`}:n.search||n.hash?{kind:`invalid`,reason:`Origin must not include query or hash.`}:{kind:`valid`,origin:n.origin}:{kind:`invalid`,reason:`Origin must include a host.`}}function S(e){let t=(e.locationHost||``).toLowerCase().split(`:`)[0]||``;return t===``||t===`localhost`||t===`127.0.0.1`||t===`::1`||e.currentMode===e.nextMode?!1:e.nextMode===`off`}function C({port:e,client:t,dirty:n,registerSave:h}){let{state:C,refresh:w,setData:T}=r(t,`/api/settings`),[E,D]=(0,p.useState)({});(0,p.useEffect)(()=>{C.kind===`ready`&&D(b(C.data.network??{}))},[C]),(0,p.useEffect)(()=>()=>{for(let e of _)n.remove(e)},[n]);let O=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),k=(0,p.useMemo)(()=>C.kind===`ready`?C.data.network??{}:{},[C]),A=k.remoteAccess??{},j=E.remoteAccess??{},M=E.bindHost??k.bindHost??`127.0.0.1`,N=!!(E.lanBypass??k.lanBypass),P=g(j.mode)?j.mode:g(A.mode)?A.mode:`off`,F=P!==`off`,I=!!(j.trustProxies??A.trustProxies),L=!!(j.trustForwardedFor??A.trustForwardedFor),R=j.publicOriginHint??A.publicOriginHint??``,z=x(R),B=S({currentMode:g(A.mode)?A.mode:`off`,nextMode:P,locationHost:typeof window<`u`?window.location.host:``}),V=(0,p.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0||B&&typeof window<`u`&&!window.confirm(`You are accessing this dashboard over a remote origin. Saving with remote access "off" will lock you out. Continue?`))return;let r=f(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),D(b(a.network??{})),T(a),await w()},[t,n,B,w,T]);if((0,p.useEffect)(()=>{if(h)return h(V),()=>h(null)},[h,V]),C.kind===`loading`)return(0,m.jsx)(a,{});if(C.kind===`offline`)return(0,m.jsx)(o,{port:e});if(C.kind===`error`)return(0,m.jsx)(s,{message:C.message});let H=(E.bindHost??k.bindHost)!==(k.bindHost??`127.0.0.1`);return(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),V()},children:[(0,m.jsxs)(i,{title:`Bind`,hint:`Listening interface for /i/${e}. Changes require an instance restart.`,children:[(0,m.jsx)(l,{id:`network-bindHost`,label:`Bind host`,value:M,options:v,onChange:e=>{D({...E,bindHost:e}),O(`network.bindHost`,{value:e,original:k.bindHost??`127.0.0.1`,valid:!0})}}),M===`0.0.0.0`&&(0,m.jsxs)(d,{children:[`Listening on `,(0,m.jsx)(`code`,{children:`0.0.0.0`}),` exposes this instance's API to anyone on your LAN. Pair with auth + firewall rules.`]}),H&&(0,m.jsx)(d,{tone:`info`,children:`Restart the instance for the new bind host to take effect.`}),(0,m.jsx)(c,{id:`network-lanBypass`,label:`LAN bypass`,description:`Skip auth checks for clients on the same LAN.`,value:N,onChange:e=>{D({...E,lanBypass:e}),O(`network.lanBypass`,{value:e,original:!!k.lanBypass,valid:!0})}}),N&&(0,m.jsx)(d,{children:`LAN bypass disables auth for any client on the same network. Only enable on a trusted network.`})]}),(0,m.jsxs)(i,{title:`Remote access`,hint:`Mode controls what reaches the API from outside the loopback interface.`,children:[(0,m.jsx)(l,{id:`network-remoteAccess-mode`,label:`Remote access mode`,value:P,options:y,onChange:e=>{g(e)&&(D({...E,remoteAccess:{...j,mode:e}}),O(`network.remoteAccess.mode`,{value:e,original:g(A.mode)?A.mode:`off`,valid:!0}))}}),(0,m.jsxs)(`p`,{className:`settings-section-hint`,children:[(0,m.jsx)(`strong`,{children:`off`}),` — only loopback can talk to the API.`,` `,(0,m.jsx)(`strong`,{children:`http-only`}),` — remote can issue HTTP requests but no WebSocket upgrades. `,(0,m.jsx)(`strong`,{children:`full`}),` — HTTP + WebSocket open to remote (use with auth).`]}),B&&(0,m.jsxs)(d,{role:`alert`,children:[`Saving will close remote access while you're connected from`,(0,m.jsxs)(`code`,{children:[` `,typeof window<`u`?window.location.host:``,` `]}),`— you will be locked out. Reach the dashboard over loopback first.`]}),F&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(c,{id:`network-remoteAccess-trustProxies`,label:`Trust proxies`,description:`Honor proxy headers when computing the client origin.`,value:I,onChange:e=>{D({...E,remoteAccess:{...j,trustProxies:e}}),O(`network.remoteAccess.trustProxies`,{value:e,original:!!A.trustProxies,valid:!0})}}),(0,m.jsx)(c,{id:`network-remoteAccess-trustForwardedFor`,label:`Trust X-Forwarded-For`,description:`Use X-Forwarded-For for the client IP. Only enable behind a known proxy.`,value:L,onChange:e=>{D({...E,remoteAccess:{...j,trustForwardedFor:e}}),O(`network.remoteAccess.trustForwardedFor`,{value:e,original:!!A.trustForwardedFor,valid:!0})}}),L&&!I&&(0,m.jsx)(d,{children:`Trusting X-Forwarded-For without trusting the proxy chain lets any client spoof its IP. Enable "Trust proxies" too.`}),(0,m.jsx)(u,{id:`network-remoteAccess-publicOriginHint`,label:`Public origin hint`,value:R,placeholder:`https://your-tunnel-url`,error:z.kind===`invalid`?z.reason:null,onChange:e=>{D({...E,remoteAccess:{...j,publicOriginHint:e}});let t=x(e);O(`network.remoteAccess.publicOriginHint`,{value:t.kind===`valid`?t.origin:e,original:A.publicOriginHint??``,valid:t.kind!==`invalid`})}})]})]})]})}export{h as REMOTE_ACCESS_MODES,C as default,S as detectSelfLockoutRisk,g as isRemoteAccessMode,x as parsePublicOriginHint};
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{a as c,i as l,s as u}from"./fields-zkeByFQW.js";import{t as d}from"./InlineWarn-DDzeHxQw.js";import{t as f}from"./path-utils-LsJeDCKF.js";var p=e(t(),1),m=n(),h=[`off`,`http-only`,`full`];function g(e){return e===`off`||e===`http-only`||e===`full`}var _=[`network.bindHost`,`network.lanBypass`,`network.remoteAccess.mode`,`network.remoteAccess.trustProxies`,`network.remoteAccess.trustForwardedFor`,`network.remoteAccess.publicOriginHint`],v=[{value:`127.0.0.1`,label:`127.0.0.1 — loopback only (recommended)`},{value:`0.0.0.0`,label:`0.0.0.0 — all interfaces (LAN exposed)`}],y=[{value:`off`,label:`off — block remote requests`},{value:`http-only`,label:`http-only — read-only HTTP from remote`},{value:`full`,label:`full — HTTP + WebSocket from remote`}];function b(e){let t={};return e.bindHost!==void 0&&(t.bindHost=e.bindHost),e.lanBypass!==void 0&&(t.lanBypass=e.lanBypass),t.remoteAccess={...e.remoteAccess??{}},t}function x(e){let t=(e||``).trim();if(t===``)return{kind:`empty`};let n;try{n=new URL(t)}catch{return{kind:`invalid`,reason:`Must be an absolute URL (https://… or http://…).`}}return n.protocol!==`http:`&&n.protocol!==`https:`?{kind:`invalid`,reason:`Only http:// or https:// origins are accepted.`}:n.hostname?n.pathname&&n.pathname!==`/`?{kind:`invalid`,reason:`Origin must not include a path.`}:n.search||n.hash?{kind:`invalid`,reason:`Origin must not include query or hash.`}:{kind:`valid`,origin:n.origin}:{kind:`invalid`,reason:`Origin must include a host.`}}function S(e){let t=(e.locationHost||``).toLowerCase().split(`:`)[0]||``;return t===``||t===`localhost`||t===`127.0.0.1`||t===`::1`||e.currentMode===e.nextMode?!1:e.nextMode===`off`}function C({port:e,client:t,dirty:n,registerSave:h}){let{state:C,refresh:w,setData:T}=r(t,`/api/settings`),[E,D]=(0,p.useState)({});(0,p.useEffect)(()=>{C.kind===`ready`&&D(b(C.data.network??{}))},[C]),(0,p.useEffect)(()=>()=>{for(let e of _)n.remove(e)},[n]);let O=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),k=(0,p.useMemo)(()=>C.kind===`ready`?C.data.network??{}:{},[C]),A=k.remoteAccess??{},j=E.remoteAccess??{},M=E.bindHost??k.bindHost??`127.0.0.1`,N=!!(E.lanBypass??k.lanBypass),P=g(j.mode)?j.mode:g(A.mode)?A.mode:`off`,F=P!==`off`,I=!!(j.trustProxies??A.trustProxies),L=!!(j.trustForwardedFor??A.trustForwardedFor),R=j.publicOriginHint??A.publicOriginHint??``,z=x(R),B=S({currentMode:g(A.mode)?A.mode:`off`,nextMode:P,locationHost:typeof window<`u`?window.location.host:``}),V=(0,p.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0||B&&typeof window<`u`&&!window.confirm(`You are accessing this dashboard over a remote origin. Saving with remote access "off" will lock you out. Continue?`))return;let r=f(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),D(b(a.network??{})),T(a),await w()},[t,n,B,w,T]);if((0,p.useEffect)(()=>{if(h)return h(V),()=>h(null)},[h,V]),C.kind===`loading`)return(0,m.jsx)(a,{});if(C.kind===`offline`)return(0,m.jsx)(o,{port:e});if(C.kind===`error`)return(0,m.jsx)(s,{message:C.message});let H=(E.bindHost??k.bindHost)!==(k.bindHost??`127.0.0.1`);return(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),V()},children:[(0,m.jsxs)(i,{title:`Bind`,hint:`Listening interface for /i/${e}. Changes require an instance restart.`,children:[(0,m.jsx)(l,{id:`network-bindHost`,label:`Bind host`,value:M,options:v,onChange:e=>{D({...E,bindHost:e}),O(`network.bindHost`,{value:e,original:k.bindHost??`127.0.0.1`,valid:!0})}}),M===`0.0.0.0`&&(0,m.jsxs)(d,{children:[`Listening on `,(0,m.jsx)(`code`,{children:`0.0.0.0`}),` exposes this instance's API to anyone on your LAN. Pair with auth + firewall rules.`]}),H&&(0,m.jsx)(d,{tone:`info`,children:`Restart the instance for the new bind host to take effect.`}),(0,m.jsx)(c,{id:`network-lanBypass`,label:`LAN bypass`,description:`Skip auth checks for clients on the same LAN.`,value:N,onChange:e=>{D({...E,lanBypass:e}),O(`network.lanBypass`,{value:e,original:!!k.lanBypass,valid:!0})}}),N&&(0,m.jsx)(d,{children:`LAN bypass disables auth for any client on the same network. Only enable on a trusted network.`})]}),(0,m.jsxs)(i,{title:`Remote access`,hint:`Mode controls what reaches the API from outside the loopback interface.`,children:[(0,m.jsx)(l,{id:`network-remoteAccess-mode`,label:`Remote access mode`,value:P,options:y,onChange:e=>{g(e)&&(D({...E,remoteAccess:{...j,mode:e}}),O(`network.remoteAccess.mode`,{value:e,original:g(A.mode)?A.mode:`off`,valid:!0}))}}),(0,m.jsxs)(`p`,{className:`settings-section-hint`,children:[(0,m.jsx)(`strong`,{children:`off`}),` — only loopback can talk to the API.`,` `,(0,m.jsx)(`strong`,{children:`http-only`}),` — remote can issue HTTP requests but no WebSocket upgrades. `,(0,m.jsx)(`strong`,{children:`full`}),` — HTTP + WebSocket open to remote (use with auth).`]}),B&&(0,m.jsxs)(d,{role:`alert`,children:[`Saving will close remote access while you're connected from`,(0,m.jsxs)(`code`,{children:[` `,typeof window<`u`?window.location.host:``,` `]}),`— you will be locked out. Reach the dashboard over loopback first.`]}),F&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(c,{id:`network-remoteAccess-trustProxies`,label:`Trust proxies`,description:`Honor proxy headers when computing the client origin.`,value:I,onChange:e=>{D({...E,remoteAccess:{...j,trustProxies:e}}),O(`network.remoteAccess.trustProxies`,{value:e,original:!!A.trustProxies,valid:!0})}}),(0,m.jsx)(c,{id:`network-remoteAccess-trustForwardedFor`,label:`Trust X-Forwarded-For`,description:`Use X-Forwarded-For for the client IP. Only enable behind a known proxy.`,value:L,onChange:e=>{D({...E,remoteAccess:{...j,trustForwardedFor:e}}),O(`network.remoteAccess.trustForwardedFor`,{value:e,original:!!A.trustForwardedFor,valid:!0})}}),L&&!I&&(0,m.jsx)(d,{children:`Trusting X-Forwarded-For without trusting the proxy chain lets any client spoof its IP. Enable "Trust proxies" too.`}),(0,m.jsx)(u,{id:`network-remoteAccess-publicOriginHint`,label:`Public origin hint`,value:R,placeholder:`https://your-tunnel-url`,error:z.kind===`invalid`?z.reason:null,onChange:e=>{D({...E,remoteAccess:{...j,publicOriginHint:e}});let t=x(e);O(`network.remoteAccess.publicOriginHint`,{value:t.kind===`valid`?t.origin:e,original:A.publicOriginHint??``,valid:t.kind!==`invalid`})}})]})]})]})}export{h as REMOTE_ACCESS_MODES,C as default,S as detectSelfLockoutRisk,g as isRemoteAccessMode,x as parsePublicOriginHint};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{a as r,i,n as a,o,r as s,t as c}from"./notes-graph-settings-BaqO8hYl.js";import{Bt as l,Ft as u,H as d,It as f,Lt as p,Pt as m,Rt as h,V as g,Vt as _}from"./vendor-utils-BgdgpA_R.js";var v=e(t(),1);function y(e){return{nodeSize:e.nodeSize,linkDistance:e.linkDistance,chargeStrength:e.chargeStrength,labelDensity:e.labelDensity,showArrows:e.showArrows,animate:e.animate}}function b(e,t){let n=e.kind===`tag`?5:e.kind===`missing`||e.kind===`ambiguous`?6:7,r=Math.sqrt(Math.max(0,e.degree))*2.4;return Math.min(26,Math.max(4,(n+r)*t.nodeSize))}function x(e,t,n){return e.kind===`missing`||e.kind===`ambiguous`?t>=.45:e.kind===`tag`?n.labelDensity>.35&&t>=.65:n.labelDensity>=.75?t>=.35:n.labelDensity>=.45?e.degree>0&&t>=.6:e.degree>=2&&t>=.85}var S=n();function C(e,t){let n=e.id===t?` is-selected`:``;return`notes-graph-node notes-graph-node-${e.kind}${n}`}function w(e){return`notes-graph-link notes-graph-link-${e.status}${e.virtual?` is-virtual`:``}`}function T(e){let t=(0,v.useRef)(null),n=(0,v.useRef)(null),r=(0,v.useRef)(e.onNavigate),[i,a]=(0,v.useState)({width:900,height:650});r.current=e.onNavigate;let o=(0,v.useMemo)(()=>y(e.settings),[e.settings]);return(0,v.useEffect)(()=>{let e=n.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect();a({width:Math.max(320,Math.floor(t.width||900)),height:Math.max(320,Math.floor(t.height||650))})};if(t(),typeof window.ResizeObserver!=`function`)return;let r=new window.ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[]),(0,v.useEffect)(()=>{let n=t.current;if(!n)return;let a=_(n);if(a.selectAll(`*`).remove(),a.attr(`viewBox`,`0 0 ${i.width} ${i.height}`),e.data.nodes.length===0)return;let s=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1,c=e.data.nodes.map(e=>({...e})),v=new Map(c.map(e=>[e.id,e])),y=e.data.edges.flatMap(e=>{let t=v.get(e.source),n=v.get(e.target),r={raw:e.raw,status:e.status,...e.resolvedPath?{resolvedPath:e.resolvedPath}:{},...e.virtual?{virtual:e.virtual}:{}};return t&&n?[{...r,source:t,target:n}]:[]});a.append(`defs`).append(`marker`).attr(`id`,`notes-graph-arrow`).attr(`viewBox`,`0 -5 10 10`).attr(`refX`,15).attr(`refY`,0).attr(`markerWidth`,6).attr(`markerHeight`,6).attr(`orient`,`auto`).append(`path`).attr(`d`,`M0,-5L10,0L0,5`).attr(`fill`,`currentColor`);let S=a.append(`g`).attr(`class`,`notes-graph-viewport`),T=S.append(`g`).attr(`class`,`notes-graph-links`).selectAll(`line`).data(y).join(`line`).attr(`class`,w).attr(`marker-end`,o.showArrows?`url(#notes-graph-arrow)`:null),E=S.append(`g`).attr(`class`,`notes-graph-nodes`).selectAll(`g`).data(c).join(`g`).attr(`class`,t=>C(t,e.selectedPath)).attr(`tabindex`,e=>e.kind===`note`?0:-1).attr(`role`,e=>e.kind===`note`?`button`:`img`).attr(`aria-label`,e=>`${e.title}, ${e.kind}, ${e.degree} links`).on(`click`,(e,t)=>{t.kind===`note`&&t.path&&r.current(t.path)}).on(`keydown`,(e,t)=>{t.kind!==`note`||!t.path||e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),r.current(t.path))});E.append(`circle`).attr(`r`,e=>b(e,o)).attr(`fill`,e=>e.groupColor??null),E.append(`text`).attr(`class`,`notes-graph-label`).attr(`x`,e=>b(e,o)+8).attr(`y`,4).text(e=>e.title),E.append(`title`).text(e=>e.groupLabel?`${e.title} · ${e.groupLabel}`:e.title);let D=u(c).force(`link`,f(y).id(e=>e.id).distance(o.linkDistance)).force(`charge`,m().strength(o.chargeStrength)).force(`center`,h(i.width/2,i.height/2)).force(`collision`,p().radius(e=>b(e,o)+8));function O(){T.attr(`x1`,e=>e.source.x??0).attr(`y1`,e=>e.source.y??0).attr(`x2`,e=>e.target.x??0).attr(`y2`,e=>e.target.y??0),E.attr(`transform`,e=>`translate(${e.x??i.width/2},${e.y??i.height/2})`)}let k=g().scaleExtent([.18,5]).on(`zoom`,e=>{S.attr(`transform`,e.transform),E.classed(`is-label-visible`,t=>x(t,e.transform.k,o))});a.call(k);let A=d.translate(0,0).scale(1);a.call(k.transform,A);let j=l().on(`start`,(e,t)=>{!e.active&&o.animate&&!s&&D.alphaTarget(.25).restart(),t.fx=t.x,t.fy=t.y}).on(`drag`,(e,t)=>{t.fx=e.x,t.fy=e.y}).on(`end`,(e,t)=>{e.active||D.alphaTarget(0),t.fx=null,t.fy=null});return E.call(j),o.animate&&!s?D.on(`tick`,O):(D.tick(120),O(),D.stop()),()=>{D.stop(),a.on(`.zoom`,null)}},[e.data,e.selectedPath,i,o,e.fitToken]),(0,S.jsxs)(`div`,{ref:n,className:`notes-graph-canvas`,"data-empty":e.data.nodes.length===0?`true`:`false`,children:[e.data.nodes.length===0?(0,S.jsx)(`div`,{className:`notes-graph-empty-state`,children:`No matching graph nodes`}):null,(0,S.jsx)(`svg`,{ref:t,className:`notes-graph-svg`,"aria-label":`Notes graph`})]})}function E(e){return e===`filters`?`Filters`:e===`display`?`Display`:e===`forces`?`Forces`:`Groups`}function D(e,t){return{...e,...t,collapsedSections:t.collapsedSections??e.collapsedSections,groups:t.groups??e.groups}}function O(e){return(0,S.jsxs)(`label`,{className:`notes-graph-toggle${e.disabled?` is-disabled`:``}`,children:[(0,S.jsx)(`span`,{children:e.label}),(0,S.jsx)(`input`,{type:`checkbox`,checked:e.checked,disabled:e.disabled,onChange:t=>e.onChange(t.currentTarget.checked)})]})}function k(e){let{settings:t}=e;function n(n){e.onChange(D(t,n))}function i(e){n({[e]:!t[e]})}function o(e){n({collapsedSections:{...t.collapsedSections,[e]:!t.collapsedSections[e]}})}function c(e,r){n({groups:t.groups.map(t=>t.id===e?{...t,...r}:t)})}function l(){n({groups:[...t.groups,r(t.groups.length,t.query)]})}function u(e){n({groups:t.groups.filter(t=>t.id!==e)})}return(0,S.jsxs)(`aside`,{className:`notes-graph-controls`,"aria-label":`Graph controls`,children:[(0,S.jsxs)(`header`,{className:`notes-graph-controls-header`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h3`,{children:`Graph`}),(0,S.jsx)(`span`,{children:e.selectedPath?`Focus-ready`:`Global view`})]}),(0,S.jsx)(`button`,{type:`button`,className:`notes-graph-icon-button`,onClick:e.onClose,"aria-label":`Close graph controls`,children:`X`})]}),s.map(r=>(0,S.jsxs)(`section`,{className:`notes-graph-control-section`,children:[(0,S.jsxs)(`button`,{type:`button`,className:`notes-graph-section-toggle`,onClick:()=>o(r),"aria-expanded":!t.collapsedSections[r],children:[(0,S.jsx)(`span`,{children:E(r)}),(0,S.jsx)(`span`,{children:t.collapsedSections[r]?`+`:`-`})]}),!t.collapsedSections[r]&&r===`filters`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsx)(`span`,{children:`Search`}),(0,S.jsx)(`input`,{value:t.query,onChange:e=>n({query:e.currentTarget.value}),placeholder:`title, path:, tag:, kind:`})]}),(0,S.jsx)(O,{label:`Existing files only`,checked:t.existingFilesOnly,onChange:()=>i(`existingFilesOnly`)}),(0,S.jsx)(O,{label:`Show orphans`,checked:t.showOrphans,onChange:()=>i(`showOrphans`)}),(0,S.jsx)(O,{label:`Show tags`,checked:t.showTags,onChange:()=>i(`showTags`)}),(0,S.jsx)(O,{label:`Show attachments`,checked:t.showAttachments,onChange:()=>i(`showAttachments`)}),(0,S.jsx)(O,{label:`Focus selected`,checked:t.focusSelected,disabled:!e.selectedPath,onChange:()=>i(`focusSelected`)}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Depth `,t.focusDepth]}),(0,S.jsx)(`input`,{type:`range`,min:`1`,max:`4`,value:t.focusDepth,disabled:!t.focusSelected||!e.selectedPath,onChange:e=>n({focusDepth:Number(e.currentTarget.value)})})]})]}):null,!t.collapsedSections[r]&&r===`display`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Node size `,t.nodeSize.toFixed(1)]}),(0,S.jsx)(`input`,{type:`range`,min:`0.6`,max:`2`,step:`0.1`,value:t.nodeSize,onChange:e=>n({nodeSize:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Labels `,Math.round(t.labelDensity*100),`%`]}),(0,S.jsx)(`input`,{type:`range`,min:`0`,max:`1`,step:`0.05`,value:t.labelDensity,onChange:e=>n({labelDensity:Number(e.currentTarget.value)})})]}),(0,S.jsx)(O,{label:`Show arrows`,checked:t.showArrows,onChange:()=>i(`showArrows`)}),(0,S.jsx)(O,{label:`Animate`,checked:t.animate,onChange:()=>i(`animate`)})]}):null,!t.collapsedSections[r]&&r===`forces`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Link distance `,t.linkDistance]}),(0,S.jsx)(`input`,{type:`range`,min:`40`,max:`240`,value:t.linkDistance,onChange:e=>n({linkDistance:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Repel `,Math.abs(t.chargeStrength)]}),(0,S.jsx)(`input`,{type:`range`,min:`-800`,max:`-20`,value:t.chargeStrength,onChange:e=>n({chargeStrength:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`div`,{className:`notes-graph-control-row`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:e.onFit,children:`Fit`}),(0,S.jsx)(`button`,{type:`button`,onClick:e.onReset,children:`Reset`})]})]}):null,!t.collapsedSections[r]&&r===`groups`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsx)(O,{label:`Query groups`,checked:t.groupMode===`query`,onChange:e=>n({groupMode:e?`query`:`off`})}),(0,S.jsx)(`div`,{className:`notes-graph-groups`,children:t.groups.map((e,t)=>(0,S.jsxs)(`div`,{className:`notes-graph-group-row`,children:[(0,S.jsx)(`input`,{className:`notes-graph-color`,type:`color`,value:e.color,onChange:t=>c(e.id,{color:t.currentTarget.value})}),(0,S.jsx)(`input`,{value:e.label,onChange:t=>c(e.id,{label:t.currentTarget.value}),"aria-label":`Group ${t+1} label`}),(0,S.jsx)(`input`,{value:e.query,onChange:t=>c(e.id,{query:t.currentTarget.value}),"aria-label":`Group ${t+1} query`}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>c(e.id,{enabled:!e.enabled}),"aria-pressed":e.enabled,children:e.enabled?`On`:`Off`}),(0,S.jsx)(`button`,{type:`button`,className:`notes-graph-icon-button`,onClick:()=>u(e.id),"aria-label":`Remove ${e.label}`,children:`X`})]},e.id))}),(0,S.jsx)(`div`,{className:`notes-graph-swatches`,"aria-label":`Group color presets`,children:a.map(e=>(0,S.jsx)(`span`,{style:{background:e}},e))}),(0,S.jsx)(`button`,{type:`button`,onClick:l,children:`Add group`})]}):null]},r))]})}var A={note:0,tag:1,missing:2,ambiguous:3,attachment:4};function j(e){return e.trim().replace(/^#/,``).toLowerCase()}function M(e){return`tag:${j(e)}`}function N(e,t){let n=[e.id,e.title,e.path??``];return t&&n.push(t.title,t.path,...t.aliases,...t.tags),n.filter(Boolean).map(e=>e.toLowerCase())}function P(e,t,n){let r=e.toLowerCase();if(r.startsWith(`kind:`))return t.kind===r.slice(5);if(r.startsWith(`path:`))return(t.path??t.id).toLowerCase().includes(r.slice(5));if(r.startsWith(`tag:`)){let e=j(r.slice(4));return e?t.kind===`tag`?j(t.title).includes(e)||t.id.includes(e):!!n?.tags.some(t=>j(t).includes(e)):!0}return N(t,n).some(e=>e.includes(r))}function F(e,t,n){let r=e.trim().split(/\s+/).filter(Boolean);return r.length===0?!0:r.every(e=>P(e,t,n))}function I(e,t,n){if(n.groupMode!==`off`)return n.groups.find(n=>n.enabled&&F(n.query,e,t))}function L(e,t){let n=new Map;for(let t of e.graph.nodes)n.set(t.id,{...t});for(let t of e.notes)n.has(t.path)||n.set(t.path,{id:t.path,title:t.title,kind:`note`,path:t.path});let r=e.graph.edges.map(e=>({...e}));if(t.showTags)for(let t of e.notes)for(let e of t.tags){let i=j(e);if(!i)continue;let a=M(i);n.has(a)||n.set(a,{id:a,title:`#${i}`,kind:`tag`}),r.push({source:t.path,target:a,raw:`#${i}`,status:`resolved`,resolvedPath:t.path})}return{nodes:[...n.values()],edges:r}}function R(e){let t=new Map;for(let n of e)t.set(n.source,(t.get(n.source)??0)+1),t.set(n.target,(t.get(n.target)??0)+1);return t}function z(e,t,n){let r=new Map;for(let t of e)r.has(t.source)||r.set(t.source,new Set),r.has(t.target)||r.set(t.target,new Set),r.get(t.source)?.add(t.target),r.get(t.target)?.add(t.source);let i=new Set([t]),a=new Set([t]);for(let e=0;e<n;e+=1){let e=new Set;for(let t of a)for(let n of r.get(t)??[])i.has(n)||(i.add(n),e.add(n));if(a=e,a.size===0)break}return i}function B(e,t){return A[e.kind]-A[t.kind]||e.title.localeCompare(t.title)||e.id.localeCompare(t.id)}function V(e,t,n){if(!e)return{nodes:[],edges:[],noteCount:0,linkCount:0,missingCount:0,tagCount:0,hiddenCount:0};let r=new Map(e.notes.map(e=>[e.path,e])),i=L(e,t),a=i.nodes.filter(e=>t.existingFilesOnly&&(e.kind===`missing`||e.kind===`ambiguous`)||!t.showTags&&e.kind===`tag`||!t.showAttachments&&e.kind===`attachment`?!1:F(t.query,e,r.get(e.path??e.id))),o=new Set(a.map(e=>e.id)),s=i.edges.filter(e=>o.has(e.source)&&o.has(e.target));if(!t.showOrphans){let e=R(s);a=a.filter(t=>t.id===n||(e.get(t.id)??0)>0||t.kind!==`note`),o=new Set(a.map(e=>e.id)),s=s.filter(e=>o.has(e.source)&&o.has(e.target))}if(t.focusSelected&&n&&o.has(n)){let e=z(s,n,t.focusDepth);a=a.filter(t=>e.has(t.id)),o=new Set(a.map(e=>e.id)),s=s.filter(e=>o.has(e.source)&&o.has(e.target))}let c=R(s),l=a.map(e=>{let n=r.get(e.path??e.id),i=I(e,n,t);return{...e,degree:c.get(e.id)??0,...i?{groupColor:i.color,groupLabel:i.label}:{},searchMatch:F(t.query,e,n)}}).sort(B),u=new Set(l.map(e=>e.id)),d=s.filter(e=>u.has(e.source)&&u.has(e.target)).map(e=>({...e,virtual:e.target.startsWith(`tag:`)||e.source.startsWith(`tag:`)})).sort((e,t)=>e.source.localeCompare(t.source)||e.target.localeCompare(t.target)||e.raw.localeCompare(t.raw));return{nodes:l,edges:d,noteCount:l.filter(e=>e.kind===`note`).length,linkCount:d.filter(e=>!e.virtual).length,missingCount:l.filter(e=>e.kind===`missing`||e.kind===`ambiguous`).length,tagCount:l.filter(e=>e.kind===`tag`).length,hiddenCount:i.nodes.length-l.length}}var H={dataPlane:`dashboard-notes-api`,shellPanels:`render-only`};function U(){return i(c)}function W(e){let[t,n]=(0,v.useState)(()=>o(e.settings??U())),[r,i]=(0,v.useState)(0),a=(0,v.useRef)(null);(0,v.useEffect)(()=>{n(o(e.settings??U()))},[e.settings]),(0,v.useEffect)(()=>()=>{a.current!=null&&window.clearTimeout(a.current)},[]);function s(t,r=!1){if(n(t),e.onSettingsChange){if(a.current!=null&&window.clearTimeout(a.current),r){e.onSettingsChange(t);return}a.current=window.setTimeout(()=>e.onSettingsChange?.(t),140)}}function c(){s(U(),!0),i(e=>e+1)}function l(){s({...t,panelOpen:!1},!0)}function u(){s({...t,panelOpen:!0},!0)}let d=(0,v.useMemo)(()=>V(e.vaultIndex,t,e.selectedPath),[e.vaultIndex,t,e.selectedPath]);return(0,S.jsxs)(`div`,{className:`notes-graph-workspace${t.panelOpen?` has-controls`:``}`,children:[(0,S.jsxs)(`header`,{className:`notes-graph-toolbar`,children:[(0,S.jsxs)(`div`,{className:`notes-graph-counts`,"aria-live":`polite`,children:[(0,S.jsx)(`strong`,{children:d.noteCount}),` notes`,(0,S.jsxs)(`span`,{children:[d.linkCount,` links`]}),(0,S.jsxs)(`span`,{children:[d.missingCount,` unresolved`]}),d.tagCount>0?(0,S.jsxs)(`span`,{children:[d.tagCount,` tags`]}):null]}),(0,S.jsxs)(`div`,{className:`notes-graph-actions`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:()=>i(e=>e+1),children:`Fit`}),(0,S.jsx)(`button`,{type:`button`,onClick:c,children:`Reset`}),t.panelOpen?null:(0,S.jsx)(`button`,{type:`button`,onClick:u,children:`Controls`})]})]}),(0,S.jsxs)(`div`,{className:`notes-graph-body`,children:[(0,S.jsx)(T,{data:d,selectedPath:e.selectedPath,settings:t,fitToken:r,onNavigate:e.onNavigate}),t.panelOpen?(0,S.jsx)(k,{settings:t,selectedPath:e.selectedPath,onChange:e=>s(e),onReset:c,onFit:()=>i(e=>e+1),onClose:l}):null]})]})}export{H as NOTES_GRAPH_RUNTIME_BOUNDARY,W as NotesGraphWorkspace};
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,o,r as s,t as c}from"./notes-graph-settings-BgNrT_58.js";import{Bt as l,Ft as u,H as d,It as f,Lt as p,Pt as m,Rt as h,V as g,Vt as _}from"./vendor-utils-DJY0EWnQ.js";var v=e(t(),1);function y(e){return{nodeSize:e.nodeSize,linkDistance:e.linkDistance,chargeStrength:e.chargeStrength,labelDensity:e.labelDensity,showArrows:e.showArrows,animate:e.animate}}function b(e,t){let n=e.kind===`tag`?5:e.kind===`missing`||e.kind===`ambiguous`?6:7,r=Math.sqrt(Math.max(0,e.degree))*2.4;return Math.min(26,Math.max(4,(n+r)*t.nodeSize))}function x(e,t,n){return e.kind===`missing`||e.kind===`ambiguous`?t>=.45:e.kind===`tag`?n.labelDensity>.35&&t>=.65:n.labelDensity>=.75?t>=.35:n.labelDensity>=.45?e.degree>0&&t>=.6:e.degree>=2&&t>=.85}var S=n();function C(e,t){let n=e.id===t?` is-selected`:``;return`notes-graph-node notes-graph-node-${e.kind}${n}`}function w(e){return`notes-graph-link notes-graph-link-${e.status}${e.virtual?` is-virtual`:``}`}function T(e){let t=(0,v.useRef)(null),n=(0,v.useRef)(null),r=(0,v.useRef)(e.onNavigate),[i,a]=(0,v.useState)({width:900,height:650});r.current=e.onNavigate;let o=(0,v.useMemo)(()=>y(e.settings),[e.settings]);return(0,v.useEffect)(()=>{let e=n.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect();a({width:Math.max(320,Math.floor(t.width||900)),height:Math.max(320,Math.floor(t.height||650))})};if(t(),typeof window.ResizeObserver!=`function`)return;let r=new window.ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[]),(0,v.useEffect)(()=>{let n=t.current;if(!n)return;let a=_(n);if(a.selectAll(`*`).remove(),a.attr(`viewBox`,`0 0 ${i.width} ${i.height}`),e.data.nodes.length===0)return;let s=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1,c=e.data.nodes.map(e=>({...e})),v=new Map(c.map(e=>[e.id,e])),y=e.data.edges.flatMap(e=>{let t=v.get(e.source),n=v.get(e.target),r={raw:e.raw,status:e.status,...e.resolvedPath?{resolvedPath:e.resolvedPath}:{},...e.virtual?{virtual:e.virtual}:{}};return t&&n?[{...r,source:t,target:n}]:[]});a.append(`defs`).append(`marker`).attr(`id`,`notes-graph-arrow`).attr(`viewBox`,`0 -5 10 10`).attr(`refX`,15).attr(`refY`,0).attr(`markerWidth`,6).attr(`markerHeight`,6).attr(`orient`,`auto`).append(`path`).attr(`d`,`M0,-5L10,0L0,5`).attr(`fill`,`currentColor`);let S=a.append(`g`).attr(`class`,`notes-graph-viewport`),T=S.append(`g`).attr(`class`,`notes-graph-links`).selectAll(`line`).data(y).join(`line`).attr(`class`,w).attr(`marker-end`,o.showArrows?`url(#notes-graph-arrow)`:null),E=S.append(`g`).attr(`class`,`notes-graph-nodes`).selectAll(`g`).data(c).join(`g`).attr(`class`,t=>C(t,e.selectedPath)).attr(`tabindex`,e=>e.kind===`note`?0:-1).attr(`role`,e=>e.kind===`note`?`button`:`img`).attr(`aria-label`,e=>`${e.title}, ${e.kind}, ${e.degree} links`).on(`click`,(e,t)=>{t.kind===`note`&&t.path&&r.current(t.path)}).on(`keydown`,(e,t)=>{t.kind!==`note`||!t.path||e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),r.current(t.path))});E.append(`circle`).attr(`r`,e=>b(e,o)).attr(`fill`,e=>e.groupColor??null),E.append(`text`).attr(`class`,`notes-graph-label`).attr(`x`,e=>b(e,o)+8).attr(`y`,4).text(e=>e.title),E.append(`title`).text(e=>e.groupLabel?`${e.title} · ${e.groupLabel}`:e.title);let D=u(c).force(`link`,f(y).id(e=>e.id).distance(o.linkDistance)).force(`charge`,m().strength(o.chargeStrength)).force(`center`,h(i.width/2,i.height/2)).force(`collision`,p().radius(e=>b(e,o)+8));function O(){T.attr(`x1`,e=>e.source.x??0).attr(`y1`,e=>e.source.y??0).attr(`x2`,e=>e.target.x??0).attr(`y2`,e=>e.target.y??0),E.attr(`transform`,e=>`translate(${e.x??i.width/2},${e.y??i.height/2})`)}let k=g().scaleExtent([.18,5]).on(`zoom`,e=>{S.attr(`transform`,e.transform),E.classed(`is-label-visible`,t=>x(t,e.transform.k,o))});a.call(k);let A=d.translate(0,0).scale(1);a.call(k.transform,A);let j=l().on(`start`,(e,t)=>{!e.active&&o.animate&&!s&&D.alphaTarget(.25).restart(),t.fx=t.x,t.fy=t.y}).on(`drag`,(e,t)=>{t.fx=e.x,t.fy=e.y}).on(`end`,(e,t)=>{e.active||D.alphaTarget(0),t.fx=null,t.fy=null});return E.call(j),o.animate&&!s?D.on(`tick`,O):(D.tick(120),O(),D.stop()),()=>{D.stop(),a.on(`.zoom`,null)}},[e.data,e.selectedPath,i,o,e.fitToken]),(0,S.jsxs)(`div`,{ref:n,className:`notes-graph-canvas`,"data-empty":e.data.nodes.length===0?`true`:`false`,children:[e.data.nodes.length===0?(0,S.jsx)(`div`,{className:`notes-graph-empty-state`,children:`No matching graph nodes`}):null,(0,S.jsx)(`svg`,{ref:t,className:`notes-graph-svg`,"aria-label":`Notes graph`})]})}function E(e){return e===`filters`?`Filters`:e===`display`?`Display`:e===`forces`?`Forces`:`Groups`}function D(e,t){return{...e,...t,collapsedSections:t.collapsedSections??e.collapsedSections,groups:t.groups??e.groups}}function O(e){return(0,S.jsxs)(`label`,{className:`notes-graph-toggle${e.disabled?` is-disabled`:``}`,children:[(0,S.jsx)(`span`,{children:e.label}),(0,S.jsx)(`input`,{type:`checkbox`,checked:e.checked,disabled:e.disabled,onChange:t=>e.onChange(t.currentTarget.checked)})]})}function k(e){let{settings:t}=e;function n(n){e.onChange(D(t,n))}function i(e){n({[e]:!t[e]})}function o(e){n({collapsedSections:{...t.collapsedSections,[e]:!t.collapsedSections[e]}})}function c(e,r){n({groups:t.groups.map(t=>t.id===e?{...t,...r}:t)})}function l(){n({groups:[...t.groups,r(t.groups.length,t.query)]})}function u(e){n({groups:t.groups.filter(t=>t.id!==e)})}return(0,S.jsxs)(`aside`,{className:`notes-graph-controls`,"aria-label":`Graph controls`,children:[(0,S.jsxs)(`header`,{className:`notes-graph-controls-header`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h3`,{children:`Graph`}),(0,S.jsx)(`span`,{children:e.selectedPath?`Focus-ready`:`Global view`})]}),(0,S.jsx)(`button`,{type:`button`,className:`notes-graph-icon-button`,onClick:e.onClose,"aria-label":`Close graph controls`,children:`X`})]}),s.map(r=>(0,S.jsxs)(`section`,{className:`notes-graph-control-section`,children:[(0,S.jsxs)(`button`,{type:`button`,className:`notes-graph-section-toggle`,onClick:()=>o(r),"aria-expanded":!t.collapsedSections[r],children:[(0,S.jsx)(`span`,{children:E(r)}),(0,S.jsx)(`span`,{children:t.collapsedSections[r]?`+`:`-`})]}),!t.collapsedSections[r]&&r===`filters`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsx)(`span`,{children:`Search`}),(0,S.jsx)(`input`,{value:t.query,onChange:e=>n({query:e.currentTarget.value}),placeholder:`title, path:, tag:, kind:`})]}),(0,S.jsx)(O,{label:`Existing files only`,checked:t.existingFilesOnly,onChange:()=>i(`existingFilesOnly`)}),(0,S.jsx)(O,{label:`Show orphans`,checked:t.showOrphans,onChange:()=>i(`showOrphans`)}),(0,S.jsx)(O,{label:`Show tags`,checked:t.showTags,onChange:()=>i(`showTags`)}),(0,S.jsx)(O,{label:`Show attachments`,checked:t.showAttachments,onChange:()=>i(`showAttachments`)}),(0,S.jsx)(O,{label:`Focus selected`,checked:t.focusSelected,disabled:!e.selectedPath,onChange:()=>i(`focusSelected`)}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Depth `,t.focusDepth]}),(0,S.jsx)(`input`,{type:`range`,min:`1`,max:`4`,value:t.focusDepth,disabled:!t.focusSelected||!e.selectedPath,onChange:e=>n({focusDepth:Number(e.currentTarget.value)})})]})]}):null,!t.collapsedSections[r]&&r===`display`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Node size `,t.nodeSize.toFixed(1)]}),(0,S.jsx)(`input`,{type:`range`,min:`0.6`,max:`2`,step:`0.1`,value:t.nodeSize,onChange:e=>n({nodeSize:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Labels `,Math.round(t.labelDensity*100),`%`]}),(0,S.jsx)(`input`,{type:`range`,min:`0`,max:`1`,step:`0.05`,value:t.labelDensity,onChange:e=>n({labelDensity:Number(e.currentTarget.value)})})]}),(0,S.jsx)(O,{label:`Show arrows`,checked:t.showArrows,onChange:()=>i(`showArrows`)}),(0,S.jsx)(O,{label:`Animate`,checked:t.animate,onChange:()=>i(`animate`)})]}):null,!t.collapsedSections[r]&&r===`forces`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Link distance `,t.linkDistance]}),(0,S.jsx)(`input`,{type:`range`,min:`40`,max:`240`,value:t.linkDistance,onChange:e=>n({linkDistance:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Repel `,Math.abs(t.chargeStrength)]}),(0,S.jsx)(`input`,{type:`range`,min:`-800`,max:`-20`,value:t.chargeStrength,onChange:e=>n({chargeStrength:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`div`,{className:`notes-graph-control-row`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:e.onFit,children:`Fit`}),(0,S.jsx)(`button`,{type:`button`,onClick:e.onReset,children:`Reset`})]})]}):null,!t.collapsedSections[r]&&r===`groups`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsx)(O,{label:`Query groups`,checked:t.groupMode===`query`,onChange:e=>n({groupMode:e?`query`:`off`})}),(0,S.jsx)(`div`,{className:`notes-graph-groups`,children:t.groups.map((e,t)=>(0,S.jsxs)(`div`,{className:`notes-graph-group-row`,children:[(0,S.jsx)(`input`,{className:`notes-graph-color`,type:`color`,value:e.color,onChange:t=>c(e.id,{color:t.currentTarget.value})}),(0,S.jsx)(`input`,{value:e.label,onChange:t=>c(e.id,{label:t.currentTarget.value}),"aria-label":`Group ${t+1} label`}),(0,S.jsx)(`input`,{value:e.query,onChange:t=>c(e.id,{query:t.currentTarget.value}),"aria-label":`Group ${t+1} query`}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>c(e.id,{enabled:!e.enabled}),"aria-pressed":e.enabled,children:e.enabled?`On`:`Off`}),(0,S.jsx)(`button`,{type:`button`,className:`notes-graph-icon-button`,onClick:()=>u(e.id),"aria-label":`Remove ${e.label}`,children:`X`})]},e.id))}),(0,S.jsx)(`div`,{className:`notes-graph-swatches`,"aria-label":`Group color presets`,children:a.map(e=>(0,S.jsx)(`span`,{style:{background:e}},e))}),(0,S.jsx)(`button`,{type:`button`,onClick:l,children:`Add group`})]}):null]},r))]})}var A={note:0,tag:1,missing:2,ambiguous:3,attachment:4};function j(e){return e.trim().replace(/^#/,``).toLowerCase()}function M(e){return`tag:${j(e)}`}function N(e,t){let n=[e.id,e.title,e.path??``];return t&&n.push(t.title,t.path,...t.aliases,...t.tags),n.filter(Boolean).map(e=>e.toLowerCase())}function P(e,t,n){let r=e.toLowerCase();if(r.startsWith(`kind:`))return t.kind===r.slice(5);if(r.startsWith(`path:`))return(t.path??t.id).toLowerCase().includes(r.slice(5));if(r.startsWith(`tag:`)){let e=j(r.slice(4));return e?t.kind===`tag`?j(t.title).includes(e)||t.id.includes(e):!!n?.tags.some(t=>j(t).includes(e)):!0}return N(t,n).some(e=>e.includes(r))}function F(e,t,n){let r=e.trim().split(/\s+/).filter(Boolean);return r.length===0?!0:r.every(e=>P(e,t,n))}function I(e,t,n){if(n.groupMode!==`off`)return n.groups.find(n=>n.enabled&&F(n.query,e,t))}function L(e,t){let n=new Map;for(let t of e.graph.nodes)n.set(t.id,{...t});for(let t of e.notes)n.has(t.path)||n.set(t.path,{id:t.path,title:t.title,kind:`note`,path:t.path});let r=e.graph.edges.map(e=>({...e}));if(t.showTags)for(let t of e.notes)for(let e of t.tags){let i=j(e);if(!i)continue;let a=M(i);n.has(a)||n.set(a,{id:a,title:`#${i}`,kind:`tag`}),r.push({source:t.path,target:a,raw:`#${i}`,status:`resolved`,resolvedPath:t.path})}return{nodes:[...n.values()],edges:r}}function R(e){let t=new Map;for(let n of e)t.set(n.source,(t.get(n.source)??0)+1),t.set(n.target,(t.get(n.target)??0)+1);return t}function z(e,t,n){let r=new Map;for(let t of e)r.has(t.source)||r.set(t.source,new Set),r.has(t.target)||r.set(t.target,new Set),r.get(t.source)?.add(t.target),r.get(t.target)?.add(t.source);let i=new Set([t]),a=new Set([t]);for(let e=0;e<n;e+=1){let e=new Set;for(let t of a)for(let n of r.get(t)??[])i.has(n)||(i.add(n),e.add(n));if(a=e,a.size===0)break}return i}function B(e,t){return A[e.kind]-A[t.kind]||e.title.localeCompare(t.title)||e.id.localeCompare(t.id)}function V(e,t,n){if(!e)return{nodes:[],edges:[],noteCount:0,linkCount:0,missingCount:0,tagCount:0,hiddenCount:0};let r=new Map(e.notes.map(e=>[e.path,e])),i=L(e,t),a=i.nodes.filter(e=>t.existingFilesOnly&&(e.kind===`missing`||e.kind===`ambiguous`)||!t.showTags&&e.kind===`tag`||!t.showAttachments&&e.kind===`attachment`?!1:F(t.query,e,r.get(e.path??e.id))),o=new Set(a.map(e=>e.id)),s=i.edges.filter(e=>o.has(e.source)&&o.has(e.target));if(!t.showOrphans){let e=R(s);a=a.filter(t=>t.id===n||(e.get(t.id)??0)>0||t.kind!==`note`),o=new Set(a.map(e=>e.id)),s=s.filter(e=>o.has(e.source)&&o.has(e.target))}if(t.focusSelected&&n&&o.has(n)){let e=z(s,n,t.focusDepth);a=a.filter(t=>e.has(t.id)),o=new Set(a.map(e=>e.id)),s=s.filter(e=>o.has(e.source)&&o.has(e.target))}let c=R(s),l=a.map(e=>{let n=r.get(e.path??e.id),i=I(e,n,t);return{...e,degree:c.get(e.id)??0,...i?{groupColor:i.color,groupLabel:i.label}:{},searchMatch:F(t.query,e,n)}}).sort(B),u=new Set(l.map(e=>e.id)),d=s.filter(e=>u.has(e.source)&&u.has(e.target)).map(e=>({...e,virtual:e.target.startsWith(`tag:`)||e.source.startsWith(`tag:`)})).sort((e,t)=>e.source.localeCompare(t.source)||e.target.localeCompare(t.target)||e.raw.localeCompare(t.raw));return{nodes:l,edges:d,noteCount:l.filter(e=>e.kind===`note`).length,linkCount:d.filter(e=>!e.virtual).length,missingCount:l.filter(e=>e.kind===`missing`||e.kind===`ambiguous`).length,tagCount:l.filter(e=>e.kind===`tag`).length,hiddenCount:i.nodes.length-l.length}}var H={dataPlane:`dashboard-notes-api`,shellPanels:`render-only`};function U(){return i(c)}function W(e){let[t,n]=(0,v.useState)(()=>o(e.settings??U())),[r,i]=(0,v.useState)(0),a=(0,v.useRef)(null);(0,v.useEffect)(()=>{n(o(e.settings??U()))},[e.settings]),(0,v.useEffect)(()=>()=>{a.current!=null&&window.clearTimeout(a.current)},[]);function s(t,r=!1){if(n(t),e.onSettingsChange){if(a.current!=null&&window.clearTimeout(a.current),r){e.onSettingsChange(t);return}a.current=window.setTimeout(()=>e.onSettingsChange?.(t),140)}}function c(){s(U(),!0),i(e=>e+1)}function l(){s({...t,panelOpen:!1},!0)}function u(){s({...t,panelOpen:!0},!0)}let d=(0,v.useMemo)(()=>V(e.vaultIndex,t,e.selectedPath),[e.vaultIndex,t,e.selectedPath]);return(0,S.jsxs)(`div`,{className:`notes-graph-workspace${t.panelOpen?` has-controls`:``}`,children:[(0,S.jsxs)(`header`,{className:`notes-graph-toolbar`,children:[(0,S.jsxs)(`div`,{className:`notes-graph-counts`,"aria-live":`polite`,children:[(0,S.jsx)(`strong`,{children:d.noteCount}),` notes`,(0,S.jsxs)(`span`,{children:[d.linkCount,` links`]}),(0,S.jsxs)(`span`,{children:[d.missingCount,` unresolved`]}),d.tagCount>0?(0,S.jsxs)(`span`,{children:[d.tagCount,` tags`]}):null]}),(0,S.jsxs)(`div`,{className:`notes-graph-actions`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:()=>i(e=>e+1),children:`Fit`}),(0,S.jsx)(`button`,{type:`button`,onClick:c,children:`Reset`}),t.panelOpen?null:(0,S.jsx)(`button`,{type:`button`,onClick:u,children:`Controls`})]})]}),(0,S.jsxs)(`div`,{className:`notes-graph-body`,children:[(0,S.jsx)(T,{data:d,selectedPath:e.selectedPath,settings:t,fitToken:r,onNavigate:e.onNavigate}),t.panelOpen?(0,S.jsx)(k,{settings:t,selectedPath:e.selectedPath,onChange:e=>s(e),onReset:c,onFit:()=>i(e=>e+1),onClose:l}):null]})]})}export{H as NOTES_GRAPH_RUNTIME_BOUNDARY,W as NotesGraphWorkspace};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";var r=e(t(),1),i=null,a={register(e){return i=e,()=>{i===e&&(i=null)}},dispatch(e){return i?.(e)??!1}},o=[`terminal`,`browser`,`logs`,`activity`],s=9999,c=[`files`,`diff`,`browser`,`design`],l={files:`Files`,diff:`Diff`,browser:`Browser`,design:`Design`},u=[`files`,`browser`,`design`],d=`Working tree`,f=.5,p=n();function m(e){return u.includes(e)}function h(e,t){return e===`diff`?`right-diff`:`right-${e}-${t??1}`}function g(e,t){return e===`diff`?d:`${l[e]} ${t??1}`}function _(e,t,n){if(t===`diff`){let t=e.openTabs.find(e=>e.kind===`diff`);if(t)return{...e,activeTabId:t.id};let r={id:h(`diff`),kind:`diff`,title:n?.title??l.diff,specificName:n?.specificName??`Working tree`,...n?.sourceLabel?{sourceLabel:n.sourceLabel}:{}};return{...e,openTabs:[...e.openTabs,r],activeTabId:r.id}}let r=e.openTabs.filter(e=>e.kind===t).reduce((e,t)=>Math.max(e,t.ordinal??1),0),i=Math.max(e.nextOrdinalByKind[t]??1,r+1),a={id:h(t,i),kind:t,title:n?.title??l[t],specificName:n?.specificName??g(t,i),ordinal:i,...n?.sourceLabel?{sourceLabel:n.sourceLabel}:{}},o=m(t)?{...e.nextOrdinalByKind,[t]:i+1}:e.nextOrdinalByKind;return{openTabs:[...e.openTabs,a],activeTabId:a.id,nextOrdinalByKind:o}}function v(e,t){let n=e.openTabs.find(e=>e.kind===t);return n?{...e,activeTabId:n.id}:_(e,t)}function y(e,t){return e.openTabs.find(e=>e.id===t)?{...e,activeTabId:t}:e}function b(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t);if(r===-1)return e;let i=e.openTabs[r],a={...i,...n.title===void 0?{}:{title:n.title},...n.specificName===void 0?{}:{specificName:n.specificName},...n.sourceLabel===void 0?{}:{sourceLabel:n.sourceLabel}};if(a.title===i.title&&a.specificName===i.specificName&&a.sourceLabel===i.sourceLabel)return e;let o=[...e.openTabs];return o[r]=a,{...e,openTabs:o}}function x(e){if(!e)return null;let t=e.replace(/\\/g,`/`).replace(/\/+$/,``).split(`/`).filter(Boolean);return t[t.length-1]??null}function S(e,t){return x(t.activeFilePath)??x(t.folderRootPath)??g(`files`,e.ordinal)}function C(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`files`);if(r===-1)return e;let i=e.openTabs[r],a={...i.files,...n},o=S(i,a),s=a.activeFilePath??a.folderRootPath??void 0,c=[...e.openTabs];return c[r]={...i,files:a,specificName:o,...s?{sourceLabel:s}:{}},{...e,openTabs:c}}function w(e,t,n,r){let i=e.openTabs.find(e=>e.id===t&&e.kind===`files`);return i?r===`follow-instance`?C(e,t,{repoRootPath:n,repoRootMode:`instance`}):r===`instance`&&i.files?.repoRootMode===`manual`?e:C(e,t,{repoRootPath:n,repoRootMode:r}):e}function T(e){let t=e.openTabs.find(t=>t.id===e.activeTabId);return t?.kind===`files`?t:e.openTabs.find(e=>e.kind===`files`)??null}function E(e,t){let n=e,r=T(n);return r?n=y(n,r.id):(n=_(n,`files`),r=n.openTabs[n.openTabs.length-1]??null),r?C(n,r.id,{activeFilePath:t}):n}function D(e,t){let n=e,r=T(n);return r?n=y(n,r.id):(n=_(n,`files`),r=n.openTabs[n.openTabs.length-1]??null),r?C(n,r.id,{folderRootPath:t,repoRootPath:null,repoRootMode:`instance`}):n}function O(e){if(!e)return null;try{return new URL(e).hostname.replace(/^www\./,``)||null}catch{return null}}function k(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`browser`);if(r===-1)return e;let i=e.openTabs[r],a=n.url??i.browser?.url,o=n.title?.trim()||O(a)||g(`browser`,i.ordinal),s={...i,...a?{browser:{...i.browser,url:a}}:{},specificName:o,...a?{sourceLabel:a}:{}};if(s.specificName===i.specificName&&s.sourceLabel===i.sourceLabel&&s.browser?.url===i.browser?.url)return e;let c=[...e.openTabs];return c[r]=s,{...e,openTabs:c}}function A(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`design`);if(r===-1)return e;let i=e.openTabs[r],a={...i.design};if(n.pageId!==void 0&&(a.pageId=n.pageId),n.zoom!==void 0&&(a.zoom=n.zoom),n.projectKey!==void 0&&(a.projectKey===void 0||a.projectKey===null)&&(a.projectKey=n.projectKey),a.pageId===i.design?.pageId&&a.projectKey===i.design?.projectKey&&a.zoom===i.design?.zoom)return e;let o=[...e.openTabs];return o[r]={...i,design:a},{...e,openTabs:o}}function j(e,t){let n=_(e,`browser`),r=n.openTabs[n.openTabs.length-1];return r?k(n,r.id,{url:t}):n}function M(e,t){let n=e.openTabs.findIndex(e=>e.id===t);if(n===-1)return e;let r=e.openTabs.filter(e=>e.id!==t),i=e.activeTabId;if(e.activeTabId===t)if(r.length===0)i=null;else{let e=Math.min(n,r.length-1);i=(n>0?r[n-1]:r[e])?.id??null}return{openTabs:r,activeTabId:i,nextOrdinalByKind:e.nextOrdinalByKind}}function N(e){return e<=.12?`folder-only`:e>=.88?`file-only`:`split`}function P(e){return typeof e!=`number`||!Number.isFinite(e)?f:Math.max(0,Math.min(1,e))}function F(e){if(e.mode!==`folder-only`)return e;let t=e.lastSplitRatio||.5;return{mode:`split`,splitRatio:t,lastSplitRatio:t}}function I(e){return typeof e!=`number`||!Number.isFinite(e)?480:Math.min(s,Math.max(260,Math.round(e)))}function L(e){return typeof e!=`number`||!Number.isFinite(e)?320:Math.min(520,Math.max(180,Math.round(e)))}function R(e){let t={...e};t.width=I(t.width);let n=t.tabs.openTabs.filter(e=>c.includes(e.kind));return n.length!==t.tabs.openTabs.length&&(t.tabs={...t.tabs,openTabs:n}),t.tabs.activeTabId&&!n.find(e=>e.id===t.tabs.activeTabId)&&(t.tabs={...t.tabs,activeTabId:n[0]?.id??null}),!t.tabs.activeTabId&&n.length>0&&(t.tabs={...t.tabs,activeTabId:n[0].id}),t.tabs.openTabs.length===0&&t.open&&(t.open=!1),t}function z(e,t){switch(t.type){case`SET_RIGHT_OPEN`:return{...e,rightPanel:{...e.rightPanel,open:t.open}};case`SET_RIGHT_WIDTH`:return{...e,rightPanel:{...e.rightPanel,width:I(t.width)}};case`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`:{let n=v(e.rightPanel.tabs,t.kind);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`CREATE_RIGHT_SIDEBAR_TAB`:{let n=_(e.rightPanel.tabs,t.kind,t.tab);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`ACTIVATE_RIGHT_SIDEBAR_TAB`:{let n=y(e.rightPanel.tabs,t.tabId);return{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_RIGHT_SIDEBAR_TAB_META`:{let n=b(e.rightPanel.tabs,t.tabId,t.patch);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`CLOSE_RIGHT_SIDEBAR_TAB`:{let n=M(e.rightPanel.tabs,t.tabId),r=n.openTabs.length>0;return{...e,rightPanel:{...e.rightPanel,open:r,tabs:n}}}case`OPEN_FILE_IN_FILES_TAB`:{let n=E(e.rightPanel.tabs,t.path);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n,fileFolderLayout:F(e.rightPanel.fileFolderLayout)}}}case`OPEN_FOLDER_IN_FILES_TAB`:{let n=D(e.rightPanel.tabs,t.path);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`SET_FILES_TAB_FILE`:{let n=C(e.rightPanel.tabs,t.tabId,{activeFilePath:t.path});if(n===e.rightPanel.tabs)return e;let r=t.path?F(e.rightPanel.fileFolderLayout):e.rightPanel.fileFolderLayout;return{...e,rightPanel:{...e.rightPanel,tabs:n,fileFolderLayout:r}}}case`SET_FILES_TAB_ROOT`:{let n=C(e.rightPanel.tabs,t.tabId,{folderRootPath:t.path,repoRootPath:null,repoRootMode:`instance`});return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_FILES_TAB_REPO_ROOT`:{let n=w(e.rightPanel.tabs,t.tabId,t.path,t.mode);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_BROWSER_TAB_STATE`:{let n={};t.url!==void 0&&(n.url=t.url),t.title!==void 0&&(n.title=t.title);let r=k(e.rightPanel.tabs,t.tabId,n);return r===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:r}}}case`OPEN_BROWSER_MODULE_TAB`:{let n=j(e.rightPanel.tabs,t.url);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`SET_DESIGN_TAB_STATE`:{let n=A(e.rightPanel.tabs,t.tabId,t.patch);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_FILE_FOLDER_SPLIT_RATIO`:{let n=P(t.ratio),r=N(n),i=r===`split`?n:e.rightPanel.fileFolderLayout.lastSplitRatio;return{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:r,splitRatio:n,lastSplitRatio:i}}}}case`SET_FILE_FOLDER_VIEW_MODE`:{let n=e.rightPanel.fileFolderLayout;if(t.mode===n.mode)return e;let r=n.splitRatio,i=n.lastSplitRatio;return t.mode===`folder-only`?r=0:t.mode===`file-only`?r=1:(r=i||.5,i=r),{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:t.mode,splitRatio:r,lastSplitRatio:i}}}}case`RESTORE_FILE_FOLDER_SPLIT`:{let t=e.rightPanel.fileFolderLayout.lastSplitRatio||.5;return{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:`split`,splitRatio:t,lastSplitRatio:t}}}}case`SET_BOTTOM_OPEN`:return{...e,bottomPanel:{...e.bottomPanel,open:t.open}};case`SET_BOTTOM_HEIGHT`:return{...e,bottomPanel:{...e.bottomPanel,height:L(t.height)}};case`OPEN_BOTTOM_TAB`:{let n=e.bottomPanel,r=n.tabs.includes(t.tab)?n.tabs:[...n.tabs,t.tab];return{...e,bottomPanel:{...n,open:!0,tabs:r,activeTab:t.tab}}}case`CLOSE_BOTTOM_TAB`:{let n=e.bottomPanel,r=n.tabs.filter(e=>e!==t.tab),i=n.activeTab===t.tab?r[0]??null:n.activeTab,a=r.length>0;return{...e,bottomPanel:{...n,tabs:r,activeTab:i,open:a}}}case`SET_BOTTOM_ACTIVE_TAB`:return{...e,bottomPanel:{...e.bottomPanel,activeTab:t.tab}};case`HYDRATE`:{let n=t.state,r=R({...e.rightPanel,...n.rightPanel}),i={...e.bottomPanel,...n.bottomPanel};return i.height=L(i.height),i.tabs=(i.tabs??[]).filter(e=>o.includes(e)),i.activeTab!==null&&!i.tabs.includes(i.activeTab)&&(i.activeTab=i.tabs[0]??null),{rightPanel:r,bottomPanel:i}}default:return e}}var B={rightPanel:{open:!1,width:480,tabs:{openTabs:[],activeTabId:null,nextOrdinalByKind:{}},fileFolderLayout:{mode:`split`,splitRatio:f,lastSplitRatio:f}},bottomPanel:{open:!1,height:320,tabs:[],activeTab:null}},V=(0,r.createContext)(null);function H(e){let t=window;t.__cliJawPendingTerminalActions=[...t.__cliJawPendingTerminalActions??[],e],window.setTimeout(()=>{document.dispatchEvent(new CustomEvent(`jaw:shortcut-action`,{detail:`flushTerminalShortcutQueue`}))},0)}function U(e){let{tabs:t}=e.rightPanel;return t.activeTabId?t.openTabs.find(e=>e.id===t.activeTabId)?.kind??null:null}function W(e){let[t,n]=(0,r.useReducer)(z,B),i=(0,r.useRef)(!1);(0,r.useEffect)(()=>{!e.initialPanelState||i.current||(i.current=!0,n({type:`HYDRATE`,state:e.initialPanelState}))},[e.initialPanelState]);let o=(0,r.useRef)(e.onStateChange);o.current=e.onStateChange,(0,r.useEffect)(()=>{if(!o.current)return;let e=setTimeout(()=>o.current?.(t),300);return()=>clearTimeout(e)},[t]);let s=t.rightPanel.open&&t.rightPanel.tabs.openTabs.length>0&&t.rightPanel.tabs.activeTabId!==null,c=U(t);(0,r.useEffect)(()=>a.register(e=>{switch(e){case`toggleBottomPanel`:return t.bottomPanel.open?n({type:`SET_BOTTOM_OPEN`,open:!1}):n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),!0;case`toggleRightPanel`:return n(s?{type:`SET_RIGHT_OPEN`,open:!1}:{type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),!0;case`focusTerminal`:return n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),H(`focusTerminal`),!0;case`newTerminalSession`:return n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),H(`newTerminalSession`),!0;case`openDiff`:return n({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`diff`}),!0;case`openFolderTree`:return n({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),!0;case`closeActiveBottomTab`:return t.bottomPanel.activeTab&&n({type:`CLOSE_BOTTOM_TAB`,tab:t.bottomPanel.activeTab}),!0;default:return!1}}),[t.bottomPanel.open,t.bottomPanel.activeTab,s]);let l=(0,r.useMemo)(()=>({state:t,dispatch:n,effectiveRightOpen:s,activeRightTabKind:c}),[t,s,c]);return(0,p.jsx)(V.Provider,{value:l,children:e.children})}function G(){let e=(0,r.useContext)(V);if(!e)throw Error(`usePanelLayout must be used within PanelLayoutProvider`);return e}function K(){let{dispatch:e,state:t}=G();return(0,r.useMemo)(()=>({focusOrCreateFirstRightSidebarTab:t=>e({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:t}),createRightSidebarTab:(t,n)=>e({type:`CREATE_RIGHT_SIDEBAR_TAB`,kind:t,...n?{tab:n}:{}}),activateRightSidebarTab:t=>e({type:`ACTIVATE_RIGHT_SIDEBAR_TAB`,tabId:t}),setRightSidebarTabMeta:(t,n)=>e({type:`SET_RIGHT_SIDEBAR_TAB_META`,tabId:t,patch:n}),closeRightSidebarTab:t=>e({type:`CLOSE_RIGHT_SIDEBAR_TAB`,tabId:t}),setRightWidth:t=>e({type:`SET_RIGHT_WIDTH`,width:t}),setFileFolderSplitRatio:t=>e({type:`SET_FILE_FOLDER_SPLIT_RATIO`,ratio:t}),setFileFolderViewMode:t=>e({type:`SET_FILE_FOLDER_VIEW_MODE`,mode:t}),restoreFileFolderSplit:()=>e({type:`RESTORE_FILE_FOLDER_SPLIT`}),toggleRightPanel:()=>t.rightPanel.open&&t.rightPanel.tabs.openTabs.length>0?e({type:`SET_RIGHT_OPEN`,open:!1}):e({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),openBottomTab:t=>e({type:`OPEN_BOTTOM_TAB`,tab:t}),closeBottomTab:t=>e({type:`CLOSE_BOTTOM_TAB`,tab:t}),setBottomActiveTab:t=>e({type:`SET_BOTTOM_ACTIVE_TAB`,tab:t}),setBottomHeight:t=>e({type:`SET_BOTTOM_HEIGHT`,height:t}),toggleBottomPanel:()=>t.bottomPanel.open?e({type:`SET_BOTTOM_OPEN`,open:!1}):e({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),hydrate:t=>e({type:`HYDRATE`,state:t})}),[e,t.rightPanel.open,t.bottomPanel.open])}export{f as a,c,G as i,l,N as n,d as o,K as r,u as s,W as t,a as u};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-BeAyKBJW.js";import{i as c,n as l}from"./fields-MeoSVgIK.js";import{t as u}from"./InlineWarn-DrqqH39Y.js";var d=e(t(),1),f=n(),p=/^[a-zA-Z0-9._:*-]+$/,m=[`bash`,`read`,`write`,`edit`,`mcp.*`];function h(e){return e===`auto`}function g(e){return h(e)?{mode:`auto`}:Array.isArray(e)?{mode:`custom`,tokens:e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0)}:{mode:`unknown`}}function _(e){return typeof e!=`string`||e.length===0||e.length>64?!1:p.test(e)}function v(e){return Array.isArray(e)&&e.length>0?Array.from(new Set(e.filter(_))):[...m]}function y(e){return e.length===0?!1:e.every(_)}var b=[{value:`auto`,label:`Auto — runtime resolves the allowlist`},{value:`custom`,label:`Custom — explicit allowlist below`}];function x({port:e,client:t,dirty:n,registerSave:p}){let{state:m,refresh:h,setData:x}=r(t,`/api/settings`),[S,C]=(0,d.useState)(`auto`),[w,T]=(0,d.useState)([]),E=(0,d.useMemo)(()=>m.kind===`ready`?g(m.data.permissions):null,[m]);(0,d.useEffect)(()=>{if(m.kind!==`ready`)return;let e=g(m.data.permissions);e.mode===`custom`?(C(`custom`),T(e.tokens)):(C(`auto`),T([]))},[m]),(0,d.useEffect)(()=>()=>{n.remove(`permissions`)},[n]);let D=(0,d.useCallback)(e=>n.set(`permissions`,e),[n]),O=(0,d.useMemo)(()=>E&&E.mode===`custom`?E.tokens:`auto`,[E]),k=(0,d.useCallback)(e=>{if(e===`auto`){C(`auto`),T([]),D({value:`auto`,original:O,valid:!0});return}if(e===`custom`){C(`custom`);let e=E&&E.mode===`custom`&&E.tokens.length>0?[...E.tokens]:v(null);T(e),D({value:e,original:O,valid:y(e)})}},[E,O,D]),A=(0,d.useCallback)(e=>{let t=e.map(e=>e.trim()).filter(e=>e.length>0);T(t),D({value:t,original:O,valid:y(t)})},[O,D]),j=(0,d.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await t.put(`/api/settings`,e),i=r&&typeof r==`object`&&`data`in r?r.data:r;n.clear();let a=g(i.permissions);a.mode===`custom`?(C(`custom`),T(a.tokens)):(C(`auto`),T([])),x(i),await h()},[t,n,h,x]);if((0,d.useEffect)(()=>{if(p)return p(j),()=>p(null)},[p,j]),m.kind===`loading`)return(0,f.jsx)(a,{});if(m.kind===`offline`)return(0,f.jsx)(o,{port:e});if(m.kind===`error`)return(0,f.jsx)(s,{message:m.message});let M=w.filter(e=>!_(e)),N=M.length>0,P=S===`custom`&&w.length===0,F=E?.mode===`custom`?`${E.tokens.length} explicit token${E.tokens.length===1?``:`s`}: ${E.tokens.join(`, `)}`:E?.mode===`auto`?`auto (runtime decides)`:`unknown shape — saved value will overwrite on next save`;return(0,f.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,f.jsxs)(i,{title:`Permissions`,hint:`Controls which capabilities the CLI can use. Auto delegates to the runtime; Custom freezes the list to your allowlist.`,children:[(0,f.jsx)(c,{id:`permissions-mode`,label:`Mode`,value:S,options:b,onChange:k}),S===`custom`&&(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(l,{id:`permissions-allowlist`,label:`Allowlist`,value:w,onChange:A,placeholder:`bash, read, mcp.*`,error:N?`Invalid token${M.length===1?``:`s`}: ${M.join(`, `)}`:P?`Allowlist cannot be empty in Custom mode.`:null}),(0,f.jsxs)(`p`,{className:`settings-section-hint`,children:[`Each chip is a permission token. Examples: `,(0,f.jsx)(`code`,{children:`bash`}),`,`,(0,f.jsx)(`code`,{children:` read`}),`, `,(0,f.jsx)(`code`,{children:` write`}),`, `,(0,f.jsx)(`code`,{children:` mcp.*`}),`.`]}),P&&(0,f.jsx)(u,{role:`alert`,children:`Saving with an empty Custom allowlist would deny every action. Add at least one token or switch back to Auto.`})]})]}),(0,f.jsx)(i,{title:`Currently active`,hint:`Reflects the saved snapshot from /api/settings.`,children:(0,f.jsxs)(`p`,{className:`settings-readonly-line`,children:[(0,f.jsx)(`span`,{className:`settings-field-label`,children:`Resolved permissions`}),(0,f.jsx)(`span`,{children:F})]})})]})}export{g as a,h as i,y as n,v as o,_ as r,x as t};
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,n as l}from"./fields-zkeByFQW.js";import{t as u}from"./InlineWarn-DDzeHxQw.js";var d=e(t(),1),f=n(),p=/^[a-zA-Z0-9._:*-]+$/,m=[`bash`,`read`,`write`,`edit`,`mcp.*`];function h(e){return e===`auto`}function g(e){return h(e)?{mode:`auto`}:Array.isArray(e)?{mode:`custom`,tokens:e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0)}:{mode:`unknown`}}function _(e){return typeof e!=`string`||e.length===0||e.length>64?!1:p.test(e)}function v(e){return Array.isArray(e)&&e.length>0?Array.from(new Set(e.filter(_))):[...m]}function y(e){return e.length===0?!1:e.every(_)}var b=[{value:`auto`,label:`Auto — runtime resolves the allowlist`},{value:`custom`,label:`Custom — explicit allowlist below`}];function x({port:e,client:t,dirty:n,registerSave:p}){let{state:m,refresh:h,setData:x}=r(t,`/api/settings`),[S,C]=(0,d.useState)(`auto`),[w,T]=(0,d.useState)([]),E=(0,d.useMemo)(()=>m.kind===`ready`?g(m.data.permissions):null,[m]);(0,d.useEffect)(()=>{if(m.kind!==`ready`)return;let e=g(m.data.permissions);e.mode===`custom`?(C(`custom`),T(e.tokens)):(C(`auto`),T([]))},[m]),(0,d.useEffect)(()=>()=>{n.remove(`permissions`)},[n]);let D=(0,d.useCallback)(e=>n.set(`permissions`,e),[n]),O=(0,d.useMemo)(()=>E&&E.mode===`custom`?E.tokens:`auto`,[E]),k=(0,d.useCallback)(e=>{if(e===`auto`){C(`auto`),T([]),D({value:`auto`,original:O,valid:!0});return}if(e===`custom`){C(`custom`);let e=E&&E.mode===`custom`&&E.tokens.length>0?[...E.tokens]:v(null);T(e),D({value:e,original:O,valid:y(e)})}},[E,O,D]),A=(0,d.useCallback)(e=>{let t=e.map(e=>e.trim()).filter(e=>e.length>0);T(t),D({value:t,original:O,valid:y(t)})},[O,D]),j=(0,d.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await t.put(`/api/settings`,e),i=r&&typeof r==`object`&&`data`in r?r.data:r;n.clear();let a=g(i.permissions);a.mode===`custom`?(C(`custom`),T(a.tokens)):(C(`auto`),T([])),x(i),await h()},[t,n,h,x]);if((0,d.useEffect)(()=>{if(p)return p(j),()=>p(null)},[p,j]),m.kind===`loading`)return(0,f.jsx)(a,{});if(m.kind===`offline`)return(0,f.jsx)(o,{port:e});if(m.kind===`error`)return(0,f.jsx)(s,{message:m.message});let M=w.filter(e=>!_(e)),N=M.length>0,P=S===`custom`&&w.length===0,F=E?.mode===`custom`?`${E.tokens.length} explicit token${E.tokens.length===1?``:`s`}: ${E.tokens.join(`, `)}`:E?.mode===`auto`?`auto (runtime decides)`:`unknown shape — saved value will overwrite on next save`;return(0,f.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,f.jsxs)(i,{title:`Permissions`,hint:`Controls which capabilities the CLI can use. Auto delegates to the runtime; Custom freezes the list to your allowlist.`,children:[(0,f.jsx)(c,{id:`permissions-mode`,label:`Mode`,value:S,options:b,onChange:k}),S===`custom`&&(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(l,{id:`permissions-allowlist`,label:`Allowlist`,value:w,onChange:A,placeholder:`bash, read, mcp.*`,error:N?`Invalid token${M.length===1?``:`s`}: ${M.join(`, `)}`:P?`Allowlist cannot be empty in Custom mode.`:null}),(0,f.jsxs)(`p`,{className:`settings-section-hint`,children:[`Each chip is a permission token. Examples: `,(0,f.jsx)(`code`,{children:`bash`}),`,`,(0,f.jsx)(`code`,{children:` read`}),`, `,(0,f.jsx)(`code`,{children:` write`}),`, `,(0,f.jsx)(`code`,{children:` mcp.*`}),`.`]}),P&&(0,f.jsx)(u,{role:`alert`,children:`Saving with an empty Custom allowlist would deny every action. Add at least one token or switch back to Auto.`})]})]}),(0,f.jsx)(i,{title:`Currently active`,hint:`Reflects the saved snapshot from /api/settings.`,children:(0,f.jsxs)(`p`,{className:`settings-readonly-line`,children:[(0,f.jsx)(`span`,{className:`settings-field-label`,children:`Resolved permissions`}),(0,f.jsx)(`span`,{children:F})]})})]})}export{g as a,h as i,y as n,v as o,_ as r,x as t};
@@ -0,0 +1 @@
1
+ import{a as e,i as t,n,o as r,r as i,t as a}from"./Permissions-CnKt44dN.js";export{a as default,n as isAllowlistValid,i as isPermissionToken,t as isPermissionsAuto,e as parsePermissionsValue,r as seedAutoAllowlist};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-BeAyKBJW.js";import{a as c,i as l}from"./fields-MeoSVgIK.js";import{t as u}from"./path-utils-DX1HplvB.js";var d=e(t(),1),f=n(),p=`image/png,image/jpeg,image/webp,image/gif`;function m({kind:e,port:t}){let[n,r]=(0,d.useState)(null),[i,a]=(0,d.useState)(!1),[o,s]=(0,d.useState)(null),c=(0,d.useRef)(null);(0,d.useEffect)(()=>{let n=!1;return s(null),r(null),fetch(`/i/${t}/api/avatar`).then(e=>e.ok?e.json():Promise.reject(Error(`avatar HTTP ${e.status}`))).then(t=>{n||r((`data`in t&&t.data?t.data:t)[e]||null)}).catch(e=>{n||s(e instanceof Error?e.message:String(e))}),()=>{n=!0}},[e,t]);let l=()=>c.current?.click(),u=async n=>{a(!0),s(null);try{let i=await n.arrayBuffer(),a=n.type||`application/octet-stream`,o=await fetch(`/i/${t}/api/avatar/${e}/upload`,{method:`POST`,headers:{"content-type":a,"x-filename":encodeURIComponent(n.name)},body:i});if(!o.ok){let e=await o.text().catch(()=>``);throw Error(`upload failed: ${o.status} ${e}`)}let s=await o.json();r(`data`in s&&s.data?s.data:s)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1),c.current&&(c.current.value=``)}},m=async()=>{a(!0),s(null);try{let n=await fetch(`/i/${t}/api/avatar/${e}/image`,{method:`DELETE`});if(!n.ok)throw Error(`clear failed: ${n.status}`);let i=await n.json();r(`data`in i&&i.data?i.data:i)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1)}},h=n&&n.kind===`image`?`/i/${t}${n.imageUrl}`:null,g=e===`agent`?`Agent avatar`:`User avatar`;return(0,f.jsxs)(`div`,{className:`settings-avatar-card`,children:[(0,f.jsx)(`div`,{className:`settings-avatar-preview`,"aria-label":`${g} preview`,children:h?(0,f.jsx)(`img`,{src:h,alt:`${g} current`}):(0,f.jsx)(`span`,{className:`settings-avatar-placeholder`,"aria-hidden":`true`,children:e===`agent`?`🦈`:`👤`})}),(0,f.jsxs)(`div`,{className:`settings-avatar-controls`,children:[(0,f.jsx)(`span`,{className:`settings-field-label`,children:g}),(0,f.jsx)(`input`,{ref:c,type:`file`,accept:p,style:{display:`none`},onChange:e=>{let t=e.target.files?.[0];t&&u(t)}}),(0,f.jsxs)(`div`,{className:`settings-avatar-buttons`,children:[(0,f.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,onClick:l,disabled:i,children:i?`Working…`:`Upload image`}),h?(0,f.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void m(),disabled:i,children:`Clear`}):null]}),o?(0,f.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:o}):null]})]})}var h=[{value:`ko`,label:`한국어 (ko)`},{value:`en`,label:`English (en)`},{value:`ja`,label:`日本語 (ja)`},{value:`zh`,label:`中文 (zh)`}];function g({port:e,client:t,dirty:n,registerSave:p}){let{state:g,refresh:_,setData:v}=r(t,`/api/settings`),[y,b]=(0,d.useState)({});(0,d.useEffect)(()=>{g.kind===`ready`&&b(g.data)},[g]),(0,d.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`locale`||e===`showReasoning`)&&n.remove(e)},[n]);let x=(0,d.useCallback)((e,t)=>n.set(e,t),[n]),S=(0,d.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=u(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),b(a),v(a),await _()},[t,n,_,v]);if((0,d.useEffect)(()=>{if(p)return p(S),()=>p(null)},[p,S]),g.kind===`loading`)return(0,f.jsx)(a,{});if(g.kind===`offline`)return(0,f.jsx)(o,{port:e});if(g.kind===`error`)return(0,f.jsx)(s,{message:g.message});let C=g.data;return(0,f.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),S()},children:[(0,f.jsxs)(i,{title:`Profile`,hint:`Identity and display preferences for this instance.`,children:[(0,f.jsx)(l,{id:`profile-locale`,label:`Locale`,value:y.locale??C.locale??`ko`,options:h,onChange:e=>{b({...y,locale:e}),x(`locale`,{value:e,original:C.locale??`ko`,valid:!0})}}),(0,f.jsx)(c,{id:`profile-showReasoning`,label:`Show reasoning traces`,value:!!(y.showReasoning??C.showReasoning),onChange:e=>{b({...y,showReasoning:e}),x(`showReasoning`,{value:e,original:!!C.showReasoning,valid:!0})}})]}),(0,f.jsxs)(i,{title:`Avatars`,hint:`Uploads write to the instance's home folder.`,children:[(0,f.jsx)(m,{kind:`agent`,port:e}),(0,f.jsx)(m,{kind:`user`,port:e})]})]})}export{g as default};
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{a as c,i as l}from"./fields-zkeByFQW.js";import{t as u}from"./path-utils-LsJeDCKF.js";var d=e(t(),1),f=n(),p=`image/png,image/jpeg,image/webp,image/gif`;function m({kind:e,port:t}){let[n,r]=(0,d.useState)(null),[i,a]=(0,d.useState)(!1),[o,s]=(0,d.useState)(null),c=(0,d.useRef)(null);(0,d.useEffect)(()=>{let n=!1;return s(null),r(null),fetch(`/i/${t}/api/avatar`).then(e=>e.ok?e.json():Promise.reject(Error(`avatar HTTP ${e.status}`))).then(t=>{n||r((`data`in t&&t.data?t.data:t)[e]||null)}).catch(e=>{n||s(e instanceof Error?e.message:String(e))}),()=>{n=!0}},[e,t]);let l=()=>c.current?.click(),u=async n=>{a(!0),s(null);try{let i=await n.arrayBuffer(),a=n.type||`application/octet-stream`,o=await fetch(`/i/${t}/api/avatar/${e}/upload`,{method:`POST`,headers:{"content-type":a,"x-filename":encodeURIComponent(n.name)},body:i});if(!o.ok){let e=await o.text().catch(()=>``);throw Error(`upload failed: ${o.status} ${e}`)}let s=await o.json();r(`data`in s&&s.data?s.data:s)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1),c.current&&(c.current.value=``)}},m=async()=>{a(!0),s(null);try{let n=await fetch(`/i/${t}/api/avatar/${e}/image`,{method:`DELETE`});if(!n.ok)throw Error(`clear failed: ${n.status}`);let i=await n.json();r(`data`in i&&i.data?i.data:i)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1)}},h=n&&n.kind===`image`?`/i/${t}${n.imageUrl}`:null,g=e===`agent`?`Agent avatar`:`User avatar`;return(0,f.jsxs)(`div`,{className:`settings-avatar-card`,children:[(0,f.jsx)(`div`,{className:`settings-avatar-preview`,"aria-label":`${g} preview`,children:h?(0,f.jsx)(`img`,{src:h,alt:`${g} current`}):(0,f.jsx)(`span`,{className:`settings-avatar-placeholder`,"aria-hidden":`true`,children:e===`agent`?`🦈`:`👤`})}),(0,f.jsxs)(`div`,{className:`settings-avatar-controls`,children:[(0,f.jsx)(`span`,{className:`settings-field-label`,children:g}),(0,f.jsx)(`input`,{ref:c,type:`file`,accept:p,style:{display:`none`},onChange:e=>{let t=e.target.files?.[0];t&&u(t)}}),(0,f.jsxs)(`div`,{className:`settings-avatar-buttons`,children:[(0,f.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,onClick:l,disabled:i,children:i?`Working…`:`Upload image`}),h?(0,f.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void m(),disabled:i,children:`Clear`}):null]}),o?(0,f.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:o}):null]})]})}var h=[{value:`ko`,label:`한국어 (ko)`},{value:`en`,label:`English (en)`},{value:`ja`,label:`日本語 (ja)`},{value:`zh`,label:`中文 (zh)`}];function g({port:e,client:t,dirty:n,registerSave:p}){let{state:g,refresh:_,setData:v}=r(t,`/api/settings`),[y,b]=(0,d.useState)({});(0,d.useEffect)(()=>{g.kind===`ready`&&b(g.data)},[g]),(0,d.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`locale`||e===`showReasoning`)&&n.remove(e)},[n]);let x=(0,d.useCallback)((e,t)=>n.set(e,t),[n]),S=(0,d.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=u(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),b(a),v(a),await _()},[t,n,_,v]);if((0,d.useEffect)(()=>{if(p)return p(S),()=>p(null)},[p,S]),g.kind===`loading`)return(0,f.jsx)(a,{});if(g.kind===`offline`)return(0,f.jsx)(o,{port:e});if(g.kind===`error`)return(0,f.jsx)(s,{message:g.message});let C=g.data;return(0,f.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),S()},children:[(0,f.jsxs)(i,{title:`Profile`,hint:`Identity and display preferences for this instance.`,children:[(0,f.jsx)(l,{id:`profile-locale`,label:`Locale`,value:y.locale??C.locale??`ko`,options:h,onChange:e=>{b({...y,locale:e}),x(`locale`,{value:e,original:C.locale??`ko`,valid:!0})}}),(0,f.jsx)(c,{id:`profile-showReasoning`,label:`Show reasoning traces`,value:!!(y.showReasoning??C.showReasoning),onChange:e=>{b({...y,showReasoning:e}),x(`showReasoning`,{value:e,original:!!C.showReasoning,valid:!0})}})]}),(0,f.jsxs)(i,{title:`Avatars`,hint:`Uploads write to the instance's home folder.`,children:[(0,f.jsx)(m,{kind:`agent`,port:e}),(0,f.jsx)(m,{kind:`user`,port:e})]})]})}export{g as default};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-BeAyKBJW.js";import{t as c}from"./InlineWarn-DrqqH39Y.js";var l=e(t(),1),u=n(),d=`prompt.system`;function f(e){return`prompt.template.${e}`}function p(e){return!e||!Array.isArray(e.templates)?[]:e.templates.filter(e=>!!e&&typeof e.id==`string`&&typeof e.content==`string`)}function m(e){let t=p(e),n=e?.tree,r=[],i=new Set;if(Array.isArray(n)){for(let e of n)if(!(!e||!Array.isArray(e.children)))for(let n of e.children){if(i.has(n))continue;let a=t.find(e=>e.id===n);if(!a)continue;let o=e.emoji?`${e.emoji} ${e.label} · `:`${e.label} · `;r.push({value:a.id,label:`${o}${a.id}`}),i.add(n)}}for(let e of t)i.has(e.id)||(r.push({value:e.id,label:e.id}),i.add(e.id));return r}function h(e,t){return p(e).find(e=>e.id===t)??null}function g({port:e,client:t,dirty:n,registerSave:g}){let _=r(t,`/api/prompt`),v=r(t,`/api/prompt-templates`),[y,b]=(0,l.useState)(``),[x,S]=(0,l.useState)(null),[C,w]=(0,l.useState)(``),T=(0,l.useMemo)(()=>_.state.kind===`ready`?_.state.data?.content??``:``,[_.state]),E=(0,l.useMemo)(()=>v.state.kind===`ready`?v.state.data:null,[v.state]),D=(0,l.useMemo)(()=>m(E),[E]),O=(0,l.useRef)(new Set);(0,l.useEffect)(()=>{_.state.kind===`ready`&&b(_.state.data?.content??``)},[_.state]),(0,l.useEffect)(()=>{if(!E||x!==null)return;let e=p(E);if(e.length===0)return;let t=D[0]?.value??e[0].id;S(t),w(h(E,t)?.content??``)},[E,D,x]),(0,l.useEffect)(()=>()=>{n.remove(d);for(let e of O.current)n.remove(e)},[n]);let k=(0,l.useCallback)((e,t)=>{n.set(e,t),O.current.add(e)},[n]),A=(0,l.useCallback)(e=>{b(e),n.set(d,{value:e,original:T,valid:!0})},[n,T]),j=(0,l.useCallback)(e=>{if(!x)return;w(e);let t=h(E,x)?.content??``;k(f(x),{value:e,original:t,valid:!0})},[x,k,E]),M=(0,l.useCallback)(e=>{if(!x||e===x)return;let t=f(x);if(n.pending.get(t)&&typeof window<`u`&&!window.confirm(`You have unsaved edits to "${x}". Switching will keep them pending — Save will write all dirty templates.`))return;S(e);let r=f(e),i=n.pending.get(r),a=h(E,e)?.content??``;w(i&&typeof i.value==`string`?i.value:a)},[x,n,E]),N=(0,l.useCallback)(async()=>{let e=n.saveBundle(),r=[];d in e&&r.push(t.put(`/api/prompt`,{content:e[d]}));for(let[n,i]of Object.entries(e)){if(!n.startsWith(`prompt.template.`))continue;let e=n.slice(16);r.push(t.put(`/api/prompt-templates/${e}`,{content:i}))}if(r.length!==0){for(let e of r)await e;n.clear(),O.current.clear(),await Promise.all([_.refresh(),v.refresh()])}},[t,n,_,v]);if((0,l.useEffect)(()=>{if(g)return g(N),()=>g(null)},[g,N]),_.state.kind===`loading`||v.state.kind===`loading`)return(0,u.jsx)(a,{});if(_.state.kind===`offline`||v.state.kind===`offline`)return(0,u.jsx)(o,{port:e});if(_.state.kind===`error`)return(0,u.jsx)(s,{message:_.state.message});if(v.state.kind===`error`)return(0,u.jsx)(s,{message:v.state.message});let P=p(E),F=x?h(E,x)?.content??``:``,I=x!==null&&C!==F;return(0,u.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,u.jsxs)(i,{title:`System prompt`,hint:`The agent's a2/system prompt. Saved to a2.md; regenerates the merged b prompt.`,children:[(0,u.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`prompt-system-body`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`a2.md`}),(0,u.jsx)(`textarea`,{id:`prompt-system-body`,className:`settings-field-monospace`,value:y,rows:14,spellCheck:!1,onChange:e=>A(e.target.value)})]}),y!==T&&(0,u.jsx)(`p`,{className:`settings-section-hint`,children:`Pending edits to a2.md.`})]}),(0,u.jsx)(i,{title:`Templates`,hint:`Edit individual prompt template bodies. Saving regenerates b automatically.`,children:P.length===0?(0,u.jsx)(c,{tone:`info`,children:`No templates returned by /api/prompt-templates.`}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`label`,{className:`settings-field settings-field-select`,htmlFor:`prompt-template-select`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Template`}),(0,u.jsx)(`select`,{id:`prompt-template-select`,value:x??``,onChange:e=>M(e.target.value),children:D.map(e=>(0,u.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,u.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`prompt-template-body`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:x?`${x}.md`:`Template body`}),(0,u.jsx)(`textarea`,{id:`prompt-template-body`,className:`settings-field-monospace`,value:C,rows:16,spellCheck:!1,disabled:!x,onChange:e=>j(e.target.value)})]}),I&&(0,u.jsxs)(`p`,{className:`settings-section-hint`,children:[`Pending edits to `,x,`.md.`]})]})})]})}export{m as buildTemplateOptions,g as default,h as findTemplate,p as flattenTemplates,f as templateDirtyKey};
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{t as c}from"./InlineWarn-DDzeHxQw.js";var l=e(t(),1),u=n(),d=`prompt.system`;function f(e){return`prompt.template.${e}`}function p(e){return!e||!Array.isArray(e.templates)?[]:e.templates.filter(e=>!!e&&typeof e.id==`string`&&typeof e.content==`string`)}function m(e){let t=p(e),n=e?.tree,r=[],i=new Set;if(Array.isArray(n)){for(let e of n)if(!(!e||!Array.isArray(e.children)))for(let n of e.children){if(i.has(n))continue;let a=t.find(e=>e.id===n);if(!a)continue;let o=e.emoji?`${e.emoji} ${e.label} · `:`${e.label} · `;r.push({value:a.id,label:`${o}${a.id}`}),i.add(n)}}for(let e of t)i.has(e.id)||(r.push({value:e.id,label:e.id}),i.add(e.id));return r}function h(e,t){return p(e).find(e=>e.id===t)??null}function g({port:e,client:t,dirty:n,registerSave:g}){let _=r(t,`/api/prompt`),v=r(t,`/api/prompt-templates`),[y,b]=(0,l.useState)(``),[x,S]=(0,l.useState)(null),[C,w]=(0,l.useState)(``),T=(0,l.useMemo)(()=>_.state.kind===`ready`?_.state.data?.content??``:``,[_.state]),E=(0,l.useMemo)(()=>v.state.kind===`ready`?v.state.data:null,[v.state]),D=(0,l.useMemo)(()=>m(E),[E]),O=(0,l.useRef)(new Set);(0,l.useEffect)(()=>{_.state.kind===`ready`&&b(_.state.data?.content??``)},[_.state]),(0,l.useEffect)(()=>{if(!E||x!==null)return;let e=p(E);if(e.length===0)return;let t=D[0]?.value??e[0].id;S(t),w(h(E,t)?.content??``)},[E,D,x]),(0,l.useEffect)(()=>()=>{n.remove(d);for(let e of O.current)n.remove(e)},[n]);let k=(0,l.useCallback)((e,t)=>{n.set(e,t),O.current.add(e)},[n]),A=(0,l.useCallback)(e=>{b(e),n.set(d,{value:e,original:T,valid:!0})},[n,T]),j=(0,l.useCallback)(e=>{if(!x)return;w(e);let t=h(E,x)?.content??``;k(f(x),{value:e,original:t,valid:!0})},[x,k,E]),M=(0,l.useCallback)(e=>{if(!x||e===x)return;let t=f(x);if(n.pending.get(t)&&typeof window<`u`&&!window.confirm(`You have unsaved edits to "${x}". Switching will keep them pending — Save will write all dirty templates.`))return;S(e);let r=f(e),i=n.pending.get(r),a=h(E,e)?.content??``;w(i&&typeof i.value==`string`?i.value:a)},[x,n,E]),N=(0,l.useCallback)(async()=>{let e=n.saveBundle(),r=[];d in e&&r.push(t.put(`/api/prompt`,{content:e[d]}));for(let[n,i]of Object.entries(e)){if(!n.startsWith(`prompt.template.`))continue;let e=n.slice(16);r.push(t.put(`/api/prompt-templates/${e}`,{content:i}))}if(r.length!==0){for(let e of r)await e;n.clear(),O.current.clear(),await Promise.all([_.refresh(),v.refresh()])}},[t,n,_,v]);if((0,l.useEffect)(()=>{if(g)return g(N),()=>g(null)},[g,N]),_.state.kind===`loading`||v.state.kind===`loading`)return(0,u.jsx)(a,{});if(_.state.kind===`offline`||v.state.kind===`offline`)return(0,u.jsx)(o,{port:e});if(_.state.kind===`error`)return(0,u.jsx)(s,{message:_.state.message});if(v.state.kind===`error`)return(0,u.jsx)(s,{message:v.state.message});let P=p(E),F=x?h(E,x)?.content??``:``,I=x!==null&&C!==F;return(0,u.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,u.jsxs)(i,{title:`System prompt`,hint:`The agent's a2/system prompt. Saved to a2.md; regenerates the merged b prompt.`,children:[(0,u.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`prompt-system-body`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`a2.md`}),(0,u.jsx)(`textarea`,{id:`prompt-system-body`,className:`settings-field-monospace`,value:y,rows:14,spellCheck:!1,onChange:e=>A(e.target.value)})]}),y!==T&&(0,u.jsx)(`p`,{className:`settings-section-hint`,children:`Pending edits to a2.md.`})]}),(0,u.jsx)(i,{title:`Templates`,hint:`Edit individual prompt template bodies. Saving regenerates b automatically.`,children:P.length===0?(0,u.jsx)(c,{tone:`info`,children:`No templates returned by /api/prompt-templates.`}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`label`,{className:`settings-field settings-field-select`,htmlFor:`prompt-template-select`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Template`}),(0,u.jsx)(`select`,{id:`prompt-template-select`,value:x??``,onChange:e=>M(e.target.value),children:D.map(e=>(0,u.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,u.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`prompt-template-body`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:x?`${x}.md`:`Template body`}),(0,u.jsx)(`textarea`,{id:`prompt-template-body`,className:`settings-field-monospace`,value:C,rows:16,spellCheck:!1,disabled:!x,onChange:e=>j(e.target.value)})]}),I&&(0,u.jsxs)(`p`,{className:`settings-section-hint`,children:[`Pending edits to `,x,`.md.`]})]})})]})}export{m as buildTemplateOptions,g as default,h as findTemplate,p as flattenTemplates,f as templateDirtyKey};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-BeAyKBJW.js";import{i as c,o as l,s as u,t as d}from"./fields-MeoSVgIK.js";import{t as f}from"./path-utils-DX1HplvB.js";var p=e(t(),1),m=n();function h({title:e,hint:t,children:n}){return(0,m.jsxs)(`fieldset`,{className:`settings-engine-subsection`,children:[(0,m.jsx)(`legend`,{className:`settings-engine-subsection-legend`,children:e}),t?(0,m.jsx)(`p`,{className:`settings-engine-subsection-hint`,children:t}):null,(0,m.jsx)(`div`,{className:`settings-engine-subsection-body`,children:n})]})}var g=[`auto`,`gemini`,`openai`,`whisper`,`vertex`],_={auto:`Auto (try in order)`,gemini:`Gemini`,openai:`OpenAI`,whisper:`Whisper (local MLX)`,vertex:`Vertex AI`};function v(e){return e===`auto`?[`gemini`,`openai`,`whisper`,`vertex`]:[e]}function y(e){if(e.trim()===``)return{valid:!0,error:null};try{return JSON.parse(e),{valid:!0,error:null}}catch(e){return{valid:!1,error:e instanceof Error?e.message:`Invalid JSON`}}}var b=[`stt.engine`,`stt.geminiApiKey`,`stt.geminiModel`,`stt.openaiApiKey`,`stt.openaiBaseUrl`,`stt.openaiModel`,`stt.whisperModel`,`stt.vertexConfig`];function x(e){return g.includes(e)?e:`auto`}function S({port:e,client:t,dirty:n,registerSave:S}){let{state:C,refresh:w,setData:T}=r(t,`/api/settings`),[E,D]=(0,p.useState)(`auto`),[O,k]=(0,p.useState)(``),[A,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(``),[P,F]=(0,p.useState)(``),[I,L]=(0,p.useState)(``),[R,z]=(0,p.useState)(``),[B,V]=(0,p.useState)(``),[H,U]=(0,p.useState)(null);(0,p.useEffect)(()=>{if(C.kind!==`ready`)return;let e=C.data.stt||{};D(x(e.engine)),k(``),j(e.geminiModel??``),N(``),F(e.openaiBaseUrl??``),L(e.openaiModel??``),z(e.whisperModel??``),V(e.vertexConfig??``),U(null)},[C]),(0,p.useEffect)(()=>()=>{for(let e of b)n.remove(e)},[n]);let W=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),G=(0,p.useMemo)(()=>C.kind===`ready`&&C.data.stt||{},[C]),K=(0,p.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=f(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),T(a);let o=a.stt||{};D(x(o.engine)),k(``),j(o.geminiModel??``),N(``),F(o.openaiBaseUrl??``),L(o.openaiModel??``),z(o.whisperModel??``),V(o.vertexConfig??``),U(null),await w()},[t,n,w,T]);if((0,p.useEffect)(()=>{if(S)return S(K),()=>S(null)},[S,K]),C.kind===`loading`)return(0,m.jsx)(a,{});if(C.kind===`offline`)return(0,m.jsx)(o,{port:e});if(C.kind===`error`)return(0,m.jsx)(s,{message:C.message});let q=v(E),J=q.includes(`gemini`),Y=q.includes(`openai`),X=q.includes(`whisper`),Z=q.includes(`vertex`),Q=G.geminiKeySet?`••••••••${G.geminiKeyLast4??``}`:`(empty)`,$=G.openaiKeySet?`••••••••${G.openaiKeyLast4??``}`:`(empty)`;return(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),K()},children:[(0,m.jsx)(i,{title:`Engine`,hint:`Pick a single engine, or 'auto' to fall back through the ladder.`,children:(0,m.jsx)(c,{id:`stt-engine`,label:`Speech-to-text engine`,value:E,options:g.map(e=>({value:e,label:_[e]})),onChange:e=>{let t=x(e);D(t),W(`stt.engine`,{value:t,original:x(G.engine),valid:!0})}})}),J?(0,m.jsx)(i,{title:`Gemini`,hint:`Google AI Studio key. Used by the Gemini transcription path.`,children:(0,m.jsxs)(h,{title:`Credentials`,children:[(0,m.jsx)(l,{id:`stt-gemini-key`,label:`API key`,value:O,placeholder:Q,onChange:e=>{if(k(e),e.length===0){n.remove(`stt.geminiApiKey`);return}W(`stt.geminiApiKey`,{value:e,original:``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-gemini-model`,label:`Model`,value:A,placeholder:`gemini-2.5-flash-lite`,onChange:e=>{j(e),W(`stt.geminiModel`,{value:e,original:G.geminiModel??``,valid:!0})}})]})}):null,Y?(0,m.jsx)(i,{title:`OpenAI`,hint:`Compatible with OpenAI-style transcription endpoints (incl. self-hosted).`,children:(0,m.jsxs)(h,{title:`Credentials`,children:[(0,m.jsx)(l,{id:`stt-openai-key`,label:`API key`,value:M,placeholder:$,onChange:e=>{if(N(e),e.length===0){n.remove(`stt.openaiApiKey`);return}W(`stt.openaiApiKey`,{value:e,original:``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-openai-base-url`,label:`Base URL (optional)`,value:P,placeholder:`https://api.openai.com/v1`,onChange:e=>{F(e),W(`stt.openaiBaseUrl`,{value:e,original:G.openaiBaseUrl??``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-openai-model`,label:`Model`,value:I,placeholder:`whisper-1`,onChange:e=>{L(e),W(`stt.openaiModel`,{value:e,original:G.openaiModel??``,valid:!0})}})]})}):null,X?(0,m.jsx)(i,{title:`Whisper (local MLX)`,hint:`Runs on-device via mlx-whisper. No API key required.`,children:(0,m.jsx)(h,{title:`Model`,children:(0,m.jsx)(u,{id:`stt-whisper-model`,label:`Model identifier`,value:R,placeholder:`mlx-community/whisper-large-v3-mlx`,onChange:e=>{z(e),W(`stt.whisperModel`,{value:e,original:G.whisperModel??``,valid:!0})}})})}):null,Z?(0,m.jsx)(i,{title:`Vertex AI`,hint:`Service-account credentials JSON for Google Cloud Vertex transcription.`,children:(0,m.jsxs)(h,{title:`Service account`,hint:`Paste the service-account credentials JSON. Treated as a secret — invalid JSON refuses to save.`,children:[(0,m.jsx)(d,{id:`stt-vertex-config`,label:`Credentials JSON`,value:B,onChange:(e,t)=>{let n=typeof e==`string`?e:e==null?``:JSON.stringify(e);V(n);let r=y(n);U(t?null:r.error),W(`stt.vertexConfig`,{value:n,original:G.vertexConfig??``,valid:t&&r.valid})}}),H?(0,m.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:H}):null]})}):null,(0,m.jsx)(i,{title:`Probe`,hint:`A live mic-test isn't available yet — verify by triggering speech-to-text from the active channel.`,children:(0,m.jsx)(`p`,{className:`settings-section-hint`,children:`No backend self-test endpoint is exposed for speech today; this lands as a Phase 9 polish.`})})]})}export{g as STT_ENGINES,S as default,v as revealsForEngine,y as validateVertexConfig};
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,o as l,s as u,t as d}from"./fields-zkeByFQW.js";import{t as f}from"./path-utils-LsJeDCKF.js";var p=e(t(),1),m=n();function h({title:e,hint:t,children:n}){return(0,m.jsxs)(`fieldset`,{className:`settings-engine-subsection`,children:[(0,m.jsx)(`legend`,{className:`settings-engine-subsection-legend`,children:e}),t?(0,m.jsx)(`p`,{className:`settings-engine-subsection-hint`,children:t}):null,(0,m.jsx)(`div`,{className:`settings-engine-subsection-body`,children:n})]})}var g=[`auto`,`gemini`,`openai`,`whisper`,`vertex`],_={auto:`Auto (try in order)`,gemini:`Gemini`,openai:`OpenAI`,whisper:`Whisper (local MLX)`,vertex:`Vertex AI`};function v(e){return e===`auto`?[`gemini`,`openai`,`whisper`,`vertex`]:[e]}function y(e){if(e.trim()===``)return{valid:!0,error:null};try{return JSON.parse(e),{valid:!0,error:null}}catch(e){return{valid:!1,error:e instanceof Error?e.message:`Invalid JSON`}}}var b=[`stt.engine`,`stt.geminiApiKey`,`stt.geminiModel`,`stt.openaiApiKey`,`stt.openaiBaseUrl`,`stt.openaiModel`,`stt.whisperModel`,`stt.vertexConfig`];function x(e){return g.includes(e)?e:`auto`}function S({port:e,client:t,dirty:n,registerSave:S}){let{state:C,refresh:w,setData:T}=r(t,`/api/settings`),[E,D]=(0,p.useState)(`auto`),[O,k]=(0,p.useState)(``),[A,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(``),[P,F]=(0,p.useState)(``),[I,L]=(0,p.useState)(``),[R,z]=(0,p.useState)(``),[B,V]=(0,p.useState)(``),[H,U]=(0,p.useState)(null);(0,p.useEffect)(()=>{if(C.kind!==`ready`)return;let e=C.data.stt||{};D(x(e.engine)),k(``),j(e.geminiModel??``),N(``),F(e.openaiBaseUrl??``),L(e.openaiModel??``),z(e.whisperModel??``),V(e.vertexConfig??``),U(null)},[C]),(0,p.useEffect)(()=>()=>{for(let e of b)n.remove(e)},[n]);let W=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),G=(0,p.useMemo)(()=>C.kind===`ready`&&C.data.stt||{},[C]),K=(0,p.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=f(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),T(a);let o=a.stt||{};D(x(o.engine)),k(``),j(o.geminiModel??``),N(``),F(o.openaiBaseUrl??``),L(o.openaiModel??``),z(o.whisperModel??``),V(o.vertexConfig??``),U(null),await w()},[t,n,w,T]);if((0,p.useEffect)(()=>{if(S)return S(K),()=>S(null)},[S,K]),C.kind===`loading`)return(0,m.jsx)(a,{});if(C.kind===`offline`)return(0,m.jsx)(o,{port:e});if(C.kind===`error`)return(0,m.jsx)(s,{message:C.message});let q=v(E),J=q.includes(`gemini`),Y=q.includes(`openai`),X=q.includes(`whisper`),Z=q.includes(`vertex`),Q=G.geminiKeySet?`••••••••${G.geminiKeyLast4??``}`:`(empty)`,$=G.openaiKeySet?`••••••••${G.openaiKeyLast4??``}`:`(empty)`;return(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),K()},children:[(0,m.jsx)(i,{title:`Engine`,hint:`Pick a single engine, or 'auto' to fall back through the ladder.`,children:(0,m.jsx)(c,{id:`stt-engine`,label:`Speech-to-text engine`,value:E,options:g.map(e=>({value:e,label:_[e]})),onChange:e=>{let t=x(e);D(t),W(`stt.engine`,{value:t,original:x(G.engine),valid:!0})}})}),J?(0,m.jsx)(i,{title:`Gemini`,hint:`Google AI Studio key. Used by the Gemini transcription path.`,children:(0,m.jsxs)(h,{title:`Credentials`,children:[(0,m.jsx)(l,{id:`stt-gemini-key`,label:`API key`,value:O,placeholder:Q,onChange:e=>{if(k(e),e.length===0){n.remove(`stt.geminiApiKey`);return}W(`stt.geminiApiKey`,{value:e,original:``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-gemini-model`,label:`Model`,value:A,placeholder:`gemini-2.5-flash-lite`,onChange:e=>{j(e),W(`stt.geminiModel`,{value:e,original:G.geminiModel??``,valid:!0})}})]})}):null,Y?(0,m.jsx)(i,{title:`OpenAI`,hint:`Compatible with OpenAI-style transcription endpoints (incl. self-hosted).`,children:(0,m.jsxs)(h,{title:`Credentials`,children:[(0,m.jsx)(l,{id:`stt-openai-key`,label:`API key`,value:M,placeholder:$,onChange:e=>{if(N(e),e.length===0){n.remove(`stt.openaiApiKey`);return}W(`stt.openaiApiKey`,{value:e,original:``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-openai-base-url`,label:`Base URL (optional)`,value:P,placeholder:`https://api.openai.com/v1`,onChange:e=>{F(e),W(`stt.openaiBaseUrl`,{value:e,original:G.openaiBaseUrl??``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-openai-model`,label:`Model`,value:I,placeholder:`whisper-1`,onChange:e=>{L(e),W(`stt.openaiModel`,{value:e,original:G.openaiModel??``,valid:!0})}})]})}):null,X?(0,m.jsx)(i,{title:`Whisper (local MLX)`,hint:`Runs on-device via mlx-whisper. No API key required.`,children:(0,m.jsx)(h,{title:`Model`,children:(0,m.jsx)(u,{id:`stt-whisper-model`,label:`Model identifier`,value:R,placeholder:`mlx-community/whisper-large-v3-mlx`,onChange:e=>{z(e),W(`stt.whisperModel`,{value:e,original:G.whisperModel??``,valid:!0})}})})}):null,Z?(0,m.jsx)(i,{title:`Vertex AI`,hint:`Service-account credentials JSON for Google Cloud Vertex transcription.`,children:(0,m.jsxs)(h,{title:`Service account`,hint:`Paste the service-account credentials JSON. Treated as a secret — invalid JSON refuses to save.`,children:[(0,m.jsx)(d,{id:`stt-vertex-config`,label:`Credentials JSON`,value:B,onChange:(e,t)=>{let n=typeof e==`string`?e:e==null?``:JSON.stringify(e);V(n);let r=y(n);U(t?null:r.error),W(`stt.vertexConfig`,{value:n,original:G.vertexConfig??``,valid:t&&r.valid})}}),H?(0,m.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:H}):null]})}):null,(0,m.jsx)(i,{title:`Probe`,hint:`A live mic-test isn't available yet — verify by triggering speech-to-text from the active channel.`,children:(0,m.jsx)(`p`,{className:`settings-section-hint`,children:`No backend self-test endpoint is exposed for speech today; this lands as a Phase 9 polish.`})})]})}export{g as STT_ENGINES,S as default,v as revealsForEngine,y as validateVertexConfig};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{a as r,i,n as a,t as o}from"./page-shell-BeAyKBJW.js";import{a as s,o as c,s as l}from"./fields-MeoSVgIK.js";var u=e(t(),1),d=n(),f=3457,p=3506;function m(){return{async get(e){let t=await fetch(e);if(!t.ok)throw Error(`GET ${e} → ${t.status}`);return await t.json()},async put(e,t){let n=await fetch(e,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`PUT ${e} → ${n.status}`);return await n.json()},async delete(e){let t=await fetch(e,{method:`DELETE`});if(!t.ok)throw Error(`DELETE ${e} → ${t.status}`);return await t.json()}}}var h=[`hub.enabled`,`hub.token`,`hub.chatId`,`hub.defaultPort`];function g({port:e,client:t,dirty:n,registerSave:g,managerClient:_}){let{state:v}=r(t,`__telegram_hub_unused__`,[e]),[y,b]=(0,u.useState)(null),[x,S]=(0,u.useState)(null),[C,w]=(0,u.useState)(null),[T,E]=(0,u.useState)(!1),[D,O]=(0,u.useState)(``),[k,A]=(0,u.useState)(``),[j,M]=(0,u.useState)(f),N=_||m(),P=(0,u.useCallback)(async()=>{w(null);try{let e=await N.get(`/api/dashboard/telegram-hub`);b(e.config),S(e.runtime||null),E(e.config.enabled),A(e.config.chatId),M(e.config.defaultPort),O(``)}catch(e){w(e instanceof Error?e.message:String(e))}},[N]);(0,u.useEffect)(()=>{P()},[e]),(0,u.useEffect)(()=>()=>{for(let e of h)n.remove(e)},[n]);let F=(0,u.useCallback)(async()=>{let e={enabled:T,chatId:k.trim(),defaultPort:j};D.trim()&&(e.token=D.trim());let t=await N.put(`/api/dashboard/telegram-hub`,e);b(t.config),S(t.runtime||null),O(``);for(let e of h)n.remove(e)},[T,k,j,D,N,n]);(0,u.useEffect)(()=>{if(g)return g(F),()=>g(null)},[g,F]);let I=(0,u.useCallback)(async e=>{try{await N.delete(`/api/dashboard/telegram-hub/routes/${encodeURIComponent(e.chatId)}/${encodeURIComponent(e.threadId)}`)}catch(e){w(e instanceof Error?e.message:String(e))}await P()},[N,P]);return C?(0,d.jsx)(o,{message:C}):y?(0,d.jsxs)(`form`,{className:`settings-page-form settings-form`,onSubmit:e=>{e.preventDefault(),F()},children:[(0,d.jsxs)(i,{title:`Telegram hub`,hint:`One dashboard-owned bot routes Telegram chat topics to instances 3457–3506.`,children:[(0,d.jsx)(s,{id:`hub-enabled`,label:`Enable hub`,value:T,onChange:e=>{E(e),n.set(`hub.enabled`,{value:e,original:y.enabled,valid:!0})}}),(0,d.jsx)(c,{id:`hub-token`,label:`Bot token`,value:D,placeholder:y.hasToken?`•••• (saved)`:`paste bot token`,onChange:e=>{O(e),n.set(`hub.token`,{value:e,original:``,valid:!0})}}),(0,d.jsx)(l,{id:`hub-chat-id`,label:`Hub chat ID`,value:k,placeholder:`823… or -100…`,onChange:e=>{A(e),n.set(`hub.chatId`,{value:e,original:y.chatId,valid:!0})}}),x?(0,d.jsxs)(`p`,{className:`settings-help`,children:[`Runtime: `,x.state,x.chatId?` · ${x.chatId}`:``,x.error?` · ${x.error}`:``]}):null,(0,d.jsxs)(`label`,{className:`settings-field`,htmlFor:`hub-default-port`,children:[(0,d.jsx)(`span`,{className:`settings-field-label`,children:`Default port`}),(0,d.jsx)(`input`,{id:`hub-default-port`,type:`number`,min:f,max:p,value:j,onChange:e=>{let t=Number(e.target.value);M(t),n.set(`hub.defaultPort`,{value:t,original:y.defaultPort,valid:t>=f&&t<=p})}})]})]}),(0,d.jsx)(i,{title:`Topic routes`,hint:`(chatId, threadId) → instance port. Bind in a bot private topic or group topic with /setthread <port>.`,children:y.routes.length===0?(0,d.jsx)(`p`,{className:`settings-empty`,children:`No routes yet.`}):(0,d.jsxs)(`table`,{className:`settings-table`,children:[(0,d.jsx)(`thead`,{children:(0,d.jsxs)(`tr`,{children:[(0,d.jsx)(`th`,{children:`Thread`}),(0,d.jsx)(`th`,{children:`Port`}),(0,d.jsx)(`th`,{children:`Label`}),(0,d.jsx)(`th`,{children:`Model`}),(0,d.jsx)(`th`,{children:`Prompt`}),(0,d.jsx)(`th`,{children:`On`}),(0,d.jsx)(`th`,{})]})}),(0,d.jsx)(`tbody`,{children:y.routes.map(e=>(0,d.jsxs)(`tr`,{children:[(0,d.jsx)(`td`,{children:e.threadId}),(0,d.jsx)(`td`,{children:e.port}),(0,d.jsx)(`td`,{children:e.label||`—`}),(0,d.jsx)(`td`,{children:e.model||`—`}),(0,d.jsx)(`td`,{children:e.systemPrompt?`✓`:`—`}),(0,d.jsx)(`td`,{children:e.enabled?`✓`:`—`}),(0,d.jsx)(`td`,{children:(0,d.jsx)(`button`,{type:`button`,onClick:()=>void I(e),children:`Delete`})})]},`${e.chatId}:${e.threadId}`))})]})})]}):(0,d.jsx)(a,{label:`Loading Telegram hub…`})}var _={defaultManagerClient:m};export{_ as __test__,g as default};
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,t as o}from"./page-shell-LF7vVVfG.js";import{a as s,o as c,s as l}from"./fields-zkeByFQW.js";var u=e(t(),1),d=n(),f=3457,p=3506;function m(){return{async get(e){let t=await fetch(e);if(!t.ok)throw Error(`GET ${e} → ${t.status}`);return await t.json()},async put(e,t){let n=await fetch(e,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`PUT ${e} → ${n.status}`);return await n.json()},async delete(e){let t=await fetch(e,{method:`DELETE`});if(!t.ok)throw Error(`DELETE ${e} → ${t.status}`);return await t.json()}}}var h=[`hub.enabled`,`hub.token`,`hub.chatId`,`hub.defaultPort`];function g({port:e,client:t,dirty:n,registerSave:g,managerClient:_}){let{state:v}=r(t,`__telegram_hub_unused__`,[e]),[y,b]=(0,u.useState)(null),[x,S]=(0,u.useState)(null),[C,w]=(0,u.useState)(null),[T,E]=(0,u.useState)(!1),[D,O]=(0,u.useState)(``),[k,A]=(0,u.useState)(``),[j,M]=(0,u.useState)(f),N=_||m(),P=(0,u.useCallback)(async()=>{w(null);try{let e=await N.get(`/api/dashboard/telegram-hub`);b(e.config),S(e.runtime||null),E(e.config.enabled),A(e.config.chatId),M(e.config.defaultPort),O(``)}catch(e){w(e instanceof Error?e.message:String(e))}},[N]);(0,u.useEffect)(()=>{P()},[e]),(0,u.useEffect)(()=>()=>{for(let e of h)n.remove(e)},[n]);let F=(0,u.useCallback)(async()=>{let e={enabled:T,chatId:k.trim(),defaultPort:j};D.trim()&&(e.token=D.trim());let t=await N.put(`/api/dashboard/telegram-hub`,e);b(t.config),S(t.runtime||null),O(``);for(let e of h)n.remove(e)},[T,k,j,D,N,n]);(0,u.useEffect)(()=>{if(g)return g(F),()=>g(null)},[g,F]);let I=(0,u.useCallback)(async e=>{try{await N.delete(`/api/dashboard/telegram-hub/routes/${encodeURIComponent(e.chatId)}/${encodeURIComponent(e.threadId)}`)}catch(e){w(e instanceof Error?e.message:String(e))}await P()},[N,P]);return C?(0,d.jsx)(o,{message:C}):y?(0,d.jsxs)(`form`,{className:`settings-page-form settings-form`,onSubmit:e=>{e.preventDefault(),F()},children:[(0,d.jsxs)(i,{title:`Telegram hub`,hint:`One dashboard-owned bot routes Telegram chat topics to instances 3457–3506.`,children:[(0,d.jsx)(s,{id:`hub-enabled`,label:`Enable hub`,value:T,onChange:e=>{E(e),n.set(`hub.enabled`,{value:e,original:y.enabled,valid:!0})}}),(0,d.jsx)(c,{id:`hub-token`,label:`Bot token`,value:D,placeholder:y.hasToken?`•••• (saved)`:`paste bot token`,onChange:e=>{O(e),n.set(`hub.token`,{value:e,original:``,valid:!0})}}),(0,d.jsx)(l,{id:`hub-chat-id`,label:`Hub chat ID`,value:k,placeholder:`823… or -100…`,onChange:e=>{A(e),n.set(`hub.chatId`,{value:e,original:y.chatId,valid:!0})}}),x?(0,d.jsxs)(`p`,{className:`settings-help`,children:[`Runtime: `,x.state,x.chatId?` · ${x.chatId}`:``,x.error?` · ${x.error}`:``]}):null,(0,d.jsxs)(`label`,{className:`settings-field`,htmlFor:`hub-default-port`,children:[(0,d.jsx)(`span`,{className:`settings-field-label`,children:`Default port`}),(0,d.jsx)(`input`,{id:`hub-default-port`,type:`number`,min:f,max:p,value:j,onChange:e=>{let t=Number(e.target.value);M(t),n.set(`hub.defaultPort`,{value:t,original:y.defaultPort,valid:t>=f&&t<=p})}})]})]}),(0,d.jsx)(i,{title:`Topic routes`,hint:`(chatId, threadId) → instance port. Bind in a bot private topic or group topic with /setthread <port>.`,children:y.routes.length===0?(0,d.jsx)(`p`,{className:`settings-empty`,children:`No routes yet.`}):(0,d.jsxs)(`table`,{className:`settings-table`,children:[(0,d.jsx)(`thead`,{children:(0,d.jsxs)(`tr`,{children:[(0,d.jsx)(`th`,{children:`Thread`}),(0,d.jsx)(`th`,{children:`Port`}),(0,d.jsx)(`th`,{children:`Label`}),(0,d.jsx)(`th`,{children:`Model`}),(0,d.jsx)(`th`,{children:`Prompt`}),(0,d.jsx)(`th`,{children:`On`}),(0,d.jsx)(`th`,{})]})}),(0,d.jsx)(`tbody`,{children:y.routes.map(e=>(0,d.jsxs)(`tr`,{children:[(0,d.jsx)(`td`,{children:e.threadId}),(0,d.jsx)(`td`,{children:e.port}),(0,d.jsx)(`td`,{children:e.label||`—`}),(0,d.jsx)(`td`,{children:e.model||`—`}),(0,d.jsx)(`td`,{children:e.systemPrompt?`✓`:`—`}),(0,d.jsx)(`td`,{children:e.enabled?`✓`:`—`}),(0,d.jsx)(`td`,{children:(0,d.jsx)(`button`,{type:`button`,onClick:()=>void I(e),children:`Delete`})})]},`${e.chatId}:${e.threadId}`))})]})})]}):(0,d.jsx)(a,{label:`Loading Telegram hub…`})}var _={defaultManagerClient:m};export{_ as __test__,g as default};
@@ -1,4 +1,4 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{t as r}from"./desktop-bridge-B1whMBS2.js";import{a as i,i as a,r as o}from"./folder-drag-payload-DE3ZS9PZ.js";var s=e(t(),1),c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,u=(e,t)=>{for(var n in t)c(e,n,{get:t[n],enumerable:!0})},d=(e,t,n,r)=>{for(var i=r>1?void 0:r?l(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&c(t,n,i),i},f=(e,t)=>(n,r)=>t(n,r,e),p=`Terminal input`,m={get:()=>p,set:e=>p=e},h=`Too much output to announce, navigate to rows manually to read`,g={get:()=>h,set:e=>h=e};function _(e){return e.replace(/\r?\n/g,`\r`)}function v(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function ee(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()}function te(e,t,n,r){e.stopPropagation(),e.clipboardData&&ne(e.clipboardData.getData(`text/plain`),t,n,r)}function ne(e,t,n,r){e=_(e),e=v(e,n.decPrivateModes.bracketedPasteMode&&r.rawOptions.ignoreBracketedPasteMode!==!0),n.triggerDataEvent(e,!0),t.value=``}function re(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}function ie(e,t,n,r,i){re(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}function y(e){return e>65535?(e-=65536,String.fromCharCode((e>>10)+55296)+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)}function b(e,t=0,n=e.length){let r=``;for(let i=t;i<n;++i){let t=e[i];t>65535?(t-=65536,r+=String.fromCharCode((t>>10)+55296)+String.fromCharCode(t%1024+56320)):r+=String.fromCharCode(t)}return r}var ae=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i=0;if(this._interim){let n=e.charCodeAt(i++);56320<=n&&n<=57343?t[r++]=(this._interim-55296)*1024+n-56320+65536:(t[r++]=this._interim,t[r++]=n),this._interim=0}for(let a=i;a<n;++a){let i=e.charCodeAt(a);if(55296<=i&&i<=56319){if(++a>=n)return this._interim=i,r;let o=e.charCodeAt(a);56320<=o&&o<=57343?t[r++]=(i-55296)*1024+o-56320+65536:(t[r++]=i,t[r++]=o);continue}i!==65279&&(t[r++]=i)}return r}},x=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i,a,o,s,c=0,l=0;if(this.interim[0]){let i=!1,a=this.interim[0];a&=(a&224)==192?31:(a&240)==224?15:7;let o=0,s;for(;(s=this.interim[++o]&63)&&o<4;)a<<=6,a|=s;let c=(this.interim[0]&224)==192?2:(this.interim[0]&240)==224?3:4,u=c-o;for(;l<u;){if(l>=n)return 0;if(s=e[l++],(s&192)!=128){l--,i=!0;break}else this.interim[o++]=s,a<<=6,a|=s&63}i||(c===2?a<128?l--:t[r++]=a:c===3?a<2048||a>=55296&&a<=57343||a===65279||(t[r++]=a):a<65536||a>1114111||(t[r++]=a)),this.interim.fill(0)}let u=n-4,d=l;for(;d<n;){for(;d<u&&!((i=e[d])&128)&&!((a=e[d+1])&128)&&!((o=e[d+2])&128)&&!((s=e[d+3])&128);)t[r++]=i,t[r++]=a,t[r++]=o,t[r++]=s,d+=4;if(i=e[d++],i<128)t[r++]=i;else if((i&224)==192){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(c=(i&31)<<6|a&63,c<128){d--;continue}t[r++]=c}else if((i&240)==224){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(c=(i&15)<<12|(a&63)<<6|o&63,c<2048||c>=55296&&c<=57343||c===65279)continue;t[r++]=c}else if((i&248)==240){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,this.interim[2]=o,r;if(s=e[d++],(s&192)!=128){d--;continue}if(c=(i&7)<<18|(a&63)<<12|(o&63)<<6|s&63,c<65536||c>1114111)continue;t[r++]=c}}return r}},oe=``,se=` `,ce=class e{constructor(){this.fg=0,this.bg=0,this.extended=new S}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)==50331648}isBgRGB(){return(this.bg&50331648)==50331648}isFgPalette(){return(this.fg&50331648)==16777216||(this.fg&50331648)==33554432}isBgPalette(){return(this.bg&50331648)==16777216||(this.bg&50331648)==33554432}isFgDefault(){return(this.fg&50331648)==0}isBgDefault(){return(this.bg&50331648)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==16777216||(this.extended.underlineColor&50331648)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},S=class e{constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new e(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}},C=class e extends ce{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new S,this.combinedData=``}static fromCharData(t){let n=new e;return n.setFromCharData(t),n}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?y(this.content&2097151):``}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let n=e[1].charCodeAt(0);if(55296<=n&&n<=56319){let r=e[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(n-55296)*1024+r-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},le=`di$target`,ue=`di$dependencies`,w=new Map;function de(e){return e[ue]||[]}function T(e){if(w.has(e))return w.get(e);let t=function(e,n,r){if(arguments.length!==3)throw Error(`@IServiceName-decorator can only be used to decorate a parameter`);fe(t,e,r)};return t._id=e,w.set(e,t),t}function fe(e,t,n){t[le]===t?t[ue].push({id:e,index:n}):(t[ue]=[{id:e,index:n}],t[le]=t)}var E=T(`BufferService`),pe=T(`CoreMouseService`),D=T(`CoreService`),me=T(`CharsetService`),he=T(`InstantiationService`),ge=T(`LogService`),O=T(`OptionsService`),_e=T(`OscLinkService`),ve=T(`UnicodeService`),ye=T(`DecorationService`),be=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n){t(void 0);return}let r=[],i=this._optionsService.rawOptions.linkHandler,a=new C,o=n.getTrimmedLength(),s=-1,c=-1,l=!1;for(let t=0;t<o;t++)if(!(c===-1&&!n.hasContent(t))){if(n.loadCell(t,a),a.hasExtendedAttrs()&&a.extended.urlId)if(c===-1){c=t,s=a.extended.urlId;continue}else l=a.extended.urlId!==s;else c!==-1&&(l=!0);if(l||c!==-1&&t===o-1){let n=this._oscLinkService.getLinkData(s)?.uri;if(n){let a={start:{x:c+1,y:e},end:{x:t+ +(!l&&t===o-1),y:e}},s=!1;if(!i?.allowNonHttpProtocols)try{let e=new URL(n);[`http:`,`https:`].includes(e.protocol)||(s=!0)}catch{s=!0}s||r.push({text:n,range:a,activate:(e,t)=>i?i.activate(e,t,a):xe(e,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(c=t,s=a.extended.urlId):(c=-1,s=-1)}}t(r)}};be=d([f(0,E),f(1,O),f(2,_e)],be);function xe(e,t){if(confirm(`Do you want to navigate to ${t}?
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"./desktop-bridge-CvdhnJQo.js";import{a as i,i as a,r as o}from"./folder-drag-payload-Bhln9Mk2.js";var s=e(t(),1),c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,u=(e,t)=>{for(var n in t)c(e,n,{get:t[n],enumerable:!0})},d=(e,t,n,r)=>{for(var i=r>1?void 0:r?l(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&c(t,n,i),i},f=(e,t)=>(n,r)=>t(n,r,e),p=`Terminal input`,m={get:()=>p,set:e=>p=e},h=`Too much output to announce, navigate to rows manually to read`,g={get:()=>h,set:e=>h=e};function _(e){return e.replace(/\r?\n/g,`\r`)}function v(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function ee(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()}function te(e,t,n,r){e.stopPropagation(),e.clipboardData&&ne(e.clipboardData.getData(`text/plain`),t,n,r)}function ne(e,t,n,r){e=_(e),e=v(e,n.decPrivateModes.bracketedPasteMode&&r.rawOptions.ignoreBracketedPasteMode!==!0),n.triggerDataEvent(e,!0),t.value=``}function re(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}function ie(e,t,n,r,i){re(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}function y(e){return e>65535?(e-=65536,String.fromCharCode((e>>10)+55296)+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)}function b(e,t=0,n=e.length){let r=``;for(let i=t;i<n;++i){let t=e[i];t>65535?(t-=65536,r+=String.fromCharCode((t>>10)+55296)+String.fromCharCode(t%1024+56320)):r+=String.fromCharCode(t)}return r}var ae=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i=0;if(this._interim){let n=e.charCodeAt(i++);56320<=n&&n<=57343?t[r++]=(this._interim-55296)*1024+n-56320+65536:(t[r++]=this._interim,t[r++]=n),this._interim=0}for(let a=i;a<n;++a){let i=e.charCodeAt(a);if(55296<=i&&i<=56319){if(++a>=n)return this._interim=i,r;let o=e.charCodeAt(a);56320<=o&&o<=57343?t[r++]=(i-55296)*1024+o-56320+65536:(t[r++]=i,t[r++]=o);continue}i!==65279&&(t[r++]=i)}return r}},x=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i,a,o,s,c=0,l=0;if(this.interim[0]){let i=!1,a=this.interim[0];a&=(a&224)==192?31:(a&240)==224?15:7;let o=0,s;for(;(s=this.interim[++o]&63)&&o<4;)a<<=6,a|=s;let c=(this.interim[0]&224)==192?2:(this.interim[0]&240)==224?3:4,u=c-o;for(;l<u;){if(l>=n)return 0;if(s=e[l++],(s&192)!=128){l--,i=!0;break}else this.interim[o++]=s,a<<=6,a|=s&63}i||(c===2?a<128?l--:t[r++]=a:c===3?a<2048||a>=55296&&a<=57343||a===65279||(t[r++]=a):a<65536||a>1114111||(t[r++]=a)),this.interim.fill(0)}let u=n-4,d=l;for(;d<n;){for(;d<u&&!((i=e[d])&128)&&!((a=e[d+1])&128)&&!((o=e[d+2])&128)&&!((s=e[d+3])&128);)t[r++]=i,t[r++]=a,t[r++]=o,t[r++]=s,d+=4;if(i=e[d++],i<128)t[r++]=i;else if((i&224)==192){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(c=(i&31)<<6|a&63,c<128){d--;continue}t[r++]=c}else if((i&240)==224){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(c=(i&15)<<12|(a&63)<<6|o&63,c<2048||c>=55296&&c<=57343||c===65279)continue;t[r++]=c}else if((i&248)==240){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,this.interim[2]=o,r;if(s=e[d++],(s&192)!=128){d--;continue}if(c=(i&7)<<18|(a&63)<<12|(o&63)<<6|s&63,c<65536||c>1114111)continue;t[r++]=c}}return r}},oe=``,se=` `,ce=class e{constructor(){this.fg=0,this.bg=0,this.extended=new S}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)==50331648}isBgRGB(){return(this.bg&50331648)==50331648}isFgPalette(){return(this.fg&50331648)==16777216||(this.fg&50331648)==33554432}isBgPalette(){return(this.bg&50331648)==16777216||(this.bg&50331648)==33554432}isFgDefault(){return(this.fg&50331648)==0}isBgDefault(){return(this.bg&50331648)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==16777216||(this.extended.underlineColor&50331648)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},S=class e{constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new e(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}},C=class e extends ce{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new S,this.combinedData=``}static fromCharData(t){let n=new e;return n.setFromCharData(t),n}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?y(this.content&2097151):``}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let n=e[1].charCodeAt(0);if(55296<=n&&n<=56319){let r=e[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(n-55296)*1024+r-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},le=`di$target`,ue=`di$dependencies`,w=new Map;function de(e){return e[ue]||[]}function T(e){if(w.has(e))return w.get(e);let t=function(e,n,r){if(arguments.length!==3)throw Error(`@IServiceName-decorator can only be used to decorate a parameter`);fe(t,e,r)};return t._id=e,w.set(e,t),t}function fe(e,t,n){t[le]===t?t[ue].push({id:e,index:n}):(t[ue]=[{id:e,index:n}],t[le]=t)}var E=T(`BufferService`),pe=T(`CoreMouseService`),D=T(`CoreService`),me=T(`CharsetService`),he=T(`InstantiationService`),ge=T(`LogService`),O=T(`OptionsService`),_e=T(`OscLinkService`),ve=T(`UnicodeService`),ye=T(`DecorationService`),be=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n){t(void 0);return}let r=[],i=this._optionsService.rawOptions.linkHandler,a=new C,o=n.getTrimmedLength(),s=-1,c=-1,l=!1;for(let t=0;t<o;t++)if(!(c===-1&&!n.hasContent(t))){if(n.loadCell(t,a),a.hasExtendedAttrs()&&a.extended.urlId)if(c===-1){c=t,s=a.extended.urlId;continue}else l=a.extended.urlId!==s;else c!==-1&&(l=!0);if(l||c!==-1&&t===o-1){let n=this._oscLinkService.getLinkData(s)?.uri;if(n){let a={start:{x:c+1,y:e},end:{x:t+ +(!l&&t===o-1),y:e}},s=!1;if(!i?.allowNonHttpProtocols)try{let e=new URL(n);[`http:`,`https:`].includes(e.protocol)||(s=!0)}catch{s=!0}s||r.push({text:n,range:a,activate:(e,t)=>i?i.activate(e,t,a):xe(e,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(c=t,s=a.extended.urlId):(c=-1,s=-1)}}t(r)}};be=d([f(0,E),f(1,O),f(2,_e)],be);function xe(e,t){if(confirm(`Do you want to navigate to ${t}?
2
2
 
3
3
  WARNING: This link could potentially be dangerous`)){let e=window.open();if(e){try{e.opener=null}catch{}e.location.href=t}else console.warn(`Opening link blocked as opener could not be cleared`)}}var Se=T(`CharSizeService`),Ce=T(`CoreBrowserService`),we=T(`MouseService`),Te=T(`RenderService`),Ee=T(`SelectionService`),De=T(`CharacterJoinerService`),Oe=T(`ThemeService`),ke=T(`LinkProviderService`),Ae=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?Ie.isErrorNoTelemetry(e)?new Ie(e.message+`
4
4
 
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{t as r}from"./settings-client-Di8KLXq_.js";var i=e(t(),1),a=n(),o=[{value:`telegram`,label:`Telegram`},{value:`discord`,label:`Discord`}];function s({original:e,dirty:t,idPrefix:n=`channel`}){let[r,s]=(0,i.useState)(e??`telegram`),c=(0,i.useCallback)(n=>{s(n),t.set(`channel`,{value:n,original:e??`telegram`,valid:!0})},[t,e]);return(0,a.jsxs)(`fieldset`,{className:`settings-field settings-field-active-channel`,"aria-label":`Active inbound channel`,children:[(0,a.jsx)(`legend`,{className:`settings-field-label`,children:`Active inbound channel (chat replies)`}),(0,a.jsx)(`div`,{className:`settings-active-channel-options`,role:`radiogroup`,children:o.map(e=>{let t=`${n}-${e.value}`,i=r===e.value;return(0,a.jsxs)(`label`,{htmlFor:t,className:`settings-radio`,children:[(0,a.jsx)(`input`,{id:t,type:`radio`,name:n,value:e.value,checked:i,onChange:()=>c(e.value)}),(0,a.jsx)(`span`,{children:e.label})]},e.value)})})]})}function c({client:e,label:t,endpoint:n,method:o=`GET`,interpret:s,auto:c=!1}){let[d,f]=(0,i.useState)({kind:`idle`}),p=(0,i.useRef)(null),m=(0,i.useRef)(!0),h=(0,i.useCallback)(async()=>{p.current?.abort();let t=new AbortController;p.current=t,f({kind:`checking`});try{let r=o===`POST`?await e.post(n,{},{signal:t.signal}):await e.get(n,{signal:t.signal});if(!m.current||t.signal.aborted)return;f(s(r))}catch(e){if(!m.current||t.signal.aborted)return;if(e instanceof r&&e.status===404){f({kind:`unknown`,reason:`Probe endpoint not implemented on this instance.`});return}f({kind:`error`,reason:e instanceof Error?e.message:String(e)})}},[e,n,s,o]);return(0,i.useEffect)(()=>(m.current=!0,c&&h(),()=>{m.current=!1,p.current?.abort()}),[c,h]),(0,a.jsxs)(`div`,{className:`settings-health-badge`,role:`status`,"aria-live":`polite`,children:[(0,a.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void h(),disabled:d.kind===`checking`,children:d.kind===`checking`?`Checking…`:`Check ${t}`}),(0,a.jsx)(`span`,{className:`settings-health-pill is-${d.kind}`,children:l(d)}),u(d)?(0,a.jsx)(`span`,{className:`settings-health-detail`,children:u(d)}):null]})}function l(e){switch(e.kind){case`idle`:return`Not checked`;case`checking`:return`Checking`;case`ok`:return`Healthy`;case`degraded`:return`Degraded`;case`unknown`:return`Unknown`;case`error`:return`Error`}}function u(e){return e.kind===`ok`&&e.detail||e.kind===`degraded`?e.detail:e.kind===`unknown`||e.kind===`error`?e.reason:null}function d(e){if(!e||typeof e!=`object`)return{kind:`unknown`,reason:`Empty probe response.`};let t=e;if(t.ok===!0){let e=typeof t.username==`string`?t.username:void 0;return e?{kind:`ok`,detail:`@${e}`}:{kind:`ok`}}return{kind:`error`,reason:typeof t.error==`string`?t.error:`Probe failed.`}}function f(e){if(!e||typeof e!=`object`)return{kind:`unknown`,reason:`Empty health response.`};let t=e,n=t.discord&&typeof t.discord==`object`?t.discord:null;return n?n.ready===!0&&n.degraded!==!0?{kind:`ok`}:n.degraded===!0?{kind:`degraded`,detail:typeof n.degradedReason==`string`?n.degradedReason:`MESSAGE_CONTENT intent missing — slash commands only.`}:n.ready===!1?{kind:`error`,reason:typeof n.error==`string`?n.error:`Bot not connected.`}:{kind:`unknown`,reason:`Discord status indeterminate.`}:{kind:`unknown`,reason:`No discord block in /api/health.`}}function p(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.configured==`boolean`&&typeof t.activeInbound==`boolean`&&typeof t.sendCapable==`boolean`}function m(e){if(!e||typeof e!=`object`)return null;let t=e.channels;if(!t||typeof t!=`object`)return null;let n=t;return n.activeInbound!==`telegram`&&n.activeInbound!==`discord`||!p(n.telegram)||!p(n.discord)?null:{activeInbound:n.activeInbound,telegram:n.telegram,discord:n.discord}}function h(e){let t=[];return t.push(e.configured?`Configured`:`Not configured`),e.sendCapable&&t.push(`Send-capable`),e.activeInbound&&t.push(`Active inbound`),t}function g({client:e,channel:t}){let[n,r]=(0,i.useState)(null),[o,s]=(0,i.useState)(null),c=(0,i.useRef)(!0),l=(0,i.useCallback)(async()=>{try{let t=await e.get(`/api/health`);if(!c.current)return;let n=m(t);r(n),s(n?null:`Channel health unavailable on this instance.`)}catch(e){if(!c.current)return;r(null),s(e instanceof Error?e.message:String(e))}},[e]);(0,i.useEffect)(()=>(c.current=!0,l(),()=>{c.current=!1}),[l]);let u=n?.[t]??null,d=!!(u?.configured&&u.sendCapable&&!u.activeInbound);return(0,a.jsxs)(`div`,{className:`settings-transport-status`,role:`status`,"aria-live":`polite`,children:[o?(0,a.jsx)(`p`,{className:`settings-field-hint`,children:o}):null,u?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`div`,{className:`settings-transport-chips`,children:h(u).map(e=>(0,a.jsx)(`span`,{className:`settings-health-pill is-ok`,children:e},e))}),d?(0,a.jsx)(`p`,{className:`settings-field-hint`,children:`This transport is not receiving inbound messages, but send-only delivery remains available.`}):null]}):null,(0,a.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void l(),children:`Refresh transport status`})]})}export{s as a,d as i,c as n,f as r,g as t};
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"./settings-client-CjbBShxm.js";var i=e(t(),1),a=n(),o=[{value:`telegram`,label:`Telegram`},{value:`discord`,label:`Discord`}];function s({original:e,dirty:t,idPrefix:n=`channel`}){let[r,s]=(0,i.useState)(e??`telegram`),c=(0,i.useCallback)(n=>{s(n),t.set(`channel`,{value:n,original:e??`telegram`,valid:!0})},[t,e]);return(0,a.jsxs)(`fieldset`,{className:`settings-field settings-field-active-channel`,"aria-label":`Active inbound channel`,children:[(0,a.jsx)(`legend`,{className:`settings-field-label`,children:`Active inbound channel (chat replies)`}),(0,a.jsx)(`div`,{className:`settings-active-channel-options`,role:`radiogroup`,children:o.map(e=>{let t=`${n}-${e.value}`,i=r===e.value;return(0,a.jsxs)(`label`,{htmlFor:t,className:`settings-radio`,children:[(0,a.jsx)(`input`,{id:t,type:`radio`,name:n,value:e.value,checked:i,onChange:()=>c(e.value)}),(0,a.jsx)(`span`,{children:e.label})]},e.value)})})]})}function c({client:e,label:t,endpoint:n,method:o=`GET`,interpret:s,auto:c=!1}){let[d,f]=(0,i.useState)({kind:`idle`}),p=(0,i.useRef)(null),m=(0,i.useRef)(!0),h=(0,i.useCallback)(async()=>{p.current?.abort();let t=new AbortController;p.current=t,f({kind:`checking`});try{let r=o===`POST`?await e.post(n,{},{signal:t.signal}):await e.get(n,{signal:t.signal});if(!m.current||t.signal.aborted)return;f(s(r))}catch(e){if(!m.current||t.signal.aborted)return;if(e instanceof r&&e.status===404){f({kind:`unknown`,reason:`Probe endpoint not implemented on this instance.`});return}f({kind:`error`,reason:e instanceof Error?e.message:String(e)})}},[e,n,s,o]);return(0,i.useEffect)(()=>(m.current=!0,c&&h(),()=>{m.current=!1,p.current?.abort()}),[c,h]),(0,a.jsxs)(`div`,{className:`settings-health-badge`,role:`status`,"aria-live":`polite`,children:[(0,a.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void h(),disabled:d.kind===`checking`,children:d.kind===`checking`?`Checking…`:`Check ${t}`}),(0,a.jsx)(`span`,{className:`settings-health-pill is-${d.kind}`,children:l(d)}),u(d)?(0,a.jsx)(`span`,{className:`settings-health-detail`,children:u(d)}):null]})}function l(e){switch(e.kind){case`idle`:return`Not checked`;case`checking`:return`Checking`;case`ok`:return`Healthy`;case`degraded`:return`Degraded`;case`unknown`:return`Unknown`;case`error`:return`Error`}}function u(e){return e.kind===`ok`&&e.detail||e.kind===`degraded`?e.detail:e.kind===`unknown`||e.kind===`error`?e.reason:null}function d(e){if(!e||typeof e!=`object`)return{kind:`unknown`,reason:`Empty probe response.`};let t=e;if(t.ok===!0){let e=typeof t.username==`string`?t.username:void 0;return e?{kind:`ok`,detail:`@${e}`}:{kind:`ok`}}return{kind:`error`,reason:typeof t.error==`string`?t.error:`Probe failed.`}}function f(e){if(!e||typeof e!=`object`)return{kind:`unknown`,reason:`Empty health response.`};let t=e,n=t.discord&&typeof t.discord==`object`?t.discord:null;return n?n.ready===!0&&n.degraded!==!0?{kind:`ok`}:n.degraded===!0?{kind:`degraded`,detail:typeof n.degradedReason==`string`?n.degradedReason:`MESSAGE_CONTENT intent missing — slash commands only.`}:n.ready===!1?{kind:`error`,reason:typeof n.error==`string`?n.error:`Bot not connected.`}:{kind:`unknown`,reason:`Discord status indeterminate.`}:{kind:`unknown`,reason:`No discord block in /api/health.`}}function p(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.configured==`boolean`&&typeof t.activeInbound==`boolean`&&typeof t.sendCapable==`boolean`}function m(e){if(!e||typeof e!=`object`)return null;let t=e.channels;if(!t||typeof t!=`object`)return null;let n=t;return n.activeInbound!==`telegram`&&n.activeInbound!==`discord`||!p(n.telegram)||!p(n.discord)?null:{activeInbound:n.activeInbound,telegram:n.telegram,discord:n.discord}}function h(e){let t=[];return t.push(e.configured?`Configured`:`Not configured`),e.sendCapable&&t.push(`Send-capable`),e.activeInbound&&t.push(`Active inbound`),t}function g({client:e,channel:t}){let[n,r]=(0,i.useState)(null),[o,s]=(0,i.useState)(null),c=(0,i.useRef)(!0),l=(0,i.useCallback)(async()=>{try{let t=await e.get(`/api/health`);if(!c.current)return;let n=m(t);r(n),s(n?null:`Channel health unavailable on this instance.`)}catch(e){if(!c.current)return;r(null),s(e instanceof Error?e.message:String(e))}},[e]);(0,i.useEffect)(()=>(c.current=!0,l(),()=>{c.current=!1}),[l]);let u=n?.[t]??null,d=!!(u?.configured&&u.sendCapable&&!u.activeInbound);return(0,a.jsxs)(`div`,{className:`settings-transport-status`,role:`status`,"aria-live":`polite`,children:[o?(0,a.jsx)(`p`,{className:`settings-field-hint`,children:o}):null,u?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`div`,{className:`settings-transport-chips`,children:h(u).map(e=>(0,a.jsx)(`span`,{className:`settings-health-pill is-ok`,children:e},e))}),d?(0,a.jsx)(`p`,{className:`settings-field-hint`,children:`This transport is not receiving inbound messages, but send-only delivery remains available.`}):null]}):null,(0,a.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void l(),children:`Refresh transport status`})]})}export{s as a,d as i,c as n,f as r,g as t};