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.
- package/README.md +5 -4
- package/dist/bin/cli-jaw.js +9 -1
- package/dist/bin/cli-jaw.js.map +1 -1
- package/dist/bin/commands/chat.js +9 -1
- package/dist/bin/commands/chat.js.map +1 -1
- package/dist/bin/commands/design.js +172 -0
- package/dist/bin/commands/design.js.map +1 -0
- package/dist/bin/commands/dispatch-helpers.js +28 -0
- package/dist/bin/commands/dispatch-helpers.js.map +1 -1
- package/dist/bin/commands/dispatch.js +133 -31
- package/dist/bin/commands/dispatch.js.map +1 -1
- package/dist/bin/commands/doctor.js +1 -1
- package/dist/bin/commands/doctor.js.map +1 -1
- package/dist/bin/commands/init.js +1 -1
- package/dist/bin/commands/init.js.map +1 -1
- package/dist/bin/commands/map.js +53 -0
- package/dist/bin/commands/map.js.map +1 -0
- package/dist/bin/commands/mcp.js +1 -1
- package/dist/bin/commands/mcp.js.map +1 -1
- package/dist/bin/commands/skill.js +64 -3
- package/dist/bin/commands/skill.js.map +1 -1
- package/dist/bin/commands/status.js +1 -1
- package/dist/bin/commands/status.js.map +1 -1
- package/dist/bin/commands/tui/channel.js +20 -4
- package/dist/bin/commands/tui/channel.js.map +1 -1
- package/dist/bin/commands/tui/fullscreen-mode.js +17 -9
- package/dist/bin/commands/tui/fullscreen-mode.js.map +1 -1
- package/dist/bin/commands/tui/input-handler.js +30 -22
- package/dist/bin/commands/tui/input-handler.js.map +1 -1
- package/dist/bin/commands/tui/overlays.js +36 -8
- package/dist/bin/commands/tui/overlays.js.map +1 -1
- package/dist/bin/commands/tui/queue-command.js +71 -0
- package/dist/bin/commands/tui/queue-command.js.map +1 -0
- package/dist/bin/commands/tui/renderer.js +1 -0
- package/dist/bin/commands/tui/renderer.js.map +1 -1
- package/dist/bin/commands/tui/simple-mode.js +39 -1
- package/dist/bin/commands/tui/simple-mode.js.map +1 -1
- package/dist/bin/commands/tui/slash-command-runner.js +92 -4
- package/dist/bin/commands/tui/slash-command-runner.js.map +1 -1
- package/dist/bin/commands/tui/types.js +6 -4
- package/dist/bin/commands/tui/types.js.map +1 -1
- package/dist/bin/commands/tui/ws-handler.js +78 -9
- package/dist/bin/commands/tui/ws-handler.js.map +1 -1
- package/dist/bin/commands/worker.js +1 -3
- package/dist/bin/commands/worker.js.map +1 -1
- package/dist/bin/postinstall.js +3 -3
- package/dist/bin/postinstall.js.map +1 -1
- package/dist/server.js +7 -2
- package/dist/server.js.map +1 -1
- package/dist/src/agent/args.js +3 -0
- package/dist/src/agent/args.js.map +1 -1
- package/dist/src/agent/lifecycle-handler.js +20 -0
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/spawn.js +24 -2
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/bgtask/notifier.js +2 -1
- package/dist/src/bgtask/notifier.js.map +1 -1
- package/dist/src/bgtask/recover.js +8 -7
- package/dist/src/bgtask/recover.js.map +1 -1
- package/dist/src/bgtask/registry.js +2 -1
- package/dist/src/bgtask/registry.js.map +1 -1
- package/dist/src/bgtask/runner.js +3 -2
- package/dist/src/bgtask/runner.js.map +1 -1
- package/dist/src/browser/vision.js +3 -1
- package/dist/src/browser/vision.js.map +1 -1
- package/dist/src/browser/web-ai/tab-lease-store.js +1 -3
- package/dist/src/browser/web-ai/tab-lease-store.js.map +1 -1
- package/dist/src/cli/commands.js +26 -4
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/handlers-runtime.js +7 -1
- package/dist/src/cli/handlers-runtime.js.map +1 -1
- package/dist/src/cli/handlers.js +1 -1
- package/dist/src/cli/handlers.js.map +1 -1
- package/dist/src/cli/tui/jawcode-bridge.js +13 -14
- package/dist/src/cli/tui/jawcode-bridge.js.map +1 -1
- package/dist/src/cli/tui/markdown.js +1 -1
- package/dist/src/cli/tui/markdown.js.map +1 -1
- package/dist/src/cli/tui/overlay.js +65 -10
- package/dist/src/cli/tui/overlay.js.map +1 -1
- package/dist/src/cli/tui/render/frame.js +109 -103
- package/dist/src/cli/tui/render/frame.js.map +1 -1
- package/dist/src/cli/tui/transcript.js +31 -9
- package/dist/src/cli/tui/transcript.js.map +1 -1
- package/dist/src/core/bus.js +2 -0
- package/dist/src/core/bus.js.map +1 -1
- package/dist/src/core/chat-sessions.js +2 -0
- package/dist/src/core/chat-sessions.js.map +1 -1
- package/dist/src/core/codex-config.js +2 -1
- package/dist/src/core/codex-config.js.map +1 -1
- package/dist/src/core/config.js +6 -3
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/event-bus.js +1 -1
- package/dist/src/core/event-bus.js.map +1 -1
- package/dist/src/core/logger.js +9 -1
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/main-session.js +2 -1
- package/dist/src/core/main-session.js.map +1 -1
- package/dist/src/core/runtime-settings.js +2 -1
- package/dist/src/core/runtime-settings.js.map +1 -1
- package/dist/src/core/session-ops.js +1 -1
- package/dist/src/core/session-ops.js.map +1 -1
- package/dist/src/core/widget-watcher.js +113 -0
- package/dist/src/core/widget-watcher.js.map +1 -0
- package/dist/src/discord/bot.js +42 -31
- package/dist/src/discord/bot.js.map +1 -1
- package/dist/src/discord/channel-types.js +16 -0
- package/dist/src/discord/channel-types.js.map +1 -1
- package/dist/src/discord/commands.js +8 -6
- package/dist/src/discord/commands.js.map +1 -1
- package/dist/src/discord/discord-file.js +4 -2
- package/dist/src/discord/discord-file.js.map +1 -1
- package/dist/src/discord/forwarder.js +10 -6
- package/dist/src/discord/forwarder.js.map +1 -1
- package/dist/src/ide/diff.js +1 -1
- package/dist/src/ide/diff.js.map +1 -1
- package/dist/src/manager/dashboard-service.js +5 -5
- package/dist/src/manager/dashboard-service.js.map +1 -1
- package/dist/src/manager/design/path-guards.js +86 -0
- package/dist/src/manager/design/path-guards.js.map +1 -0
- package/dist/src/manager/design/schema.js +54 -0
- package/dist/src/manager/design/schema.js.map +1 -0
- package/dist/src/manager/design/snapshots.js +62 -0
- package/dist/src/manager/design/snapshots.js.map +1 -0
- package/dist/src/manager/design/store.js +269 -0
- package/dist/src/manager/design/store.js.map +1 -0
- package/dist/src/manager/design/watcher.js +49 -0
- package/dist/src/manager/design/watcher.js.map +1 -0
- package/dist/src/manager/memory/embedding/vec-store.js +1 -1
- package/dist/src/manager/memory/embedding/vec-store.js.map +1 -1
- package/dist/src/manager/registry.js +84 -0
- package/dist/src/manager/registry.js.map +1 -1
- package/dist/src/manager/routes/dashboard-design.js +234 -0
- package/dist/src/manager/routes/dashboard-design.js.map +1 -0
- package/dist/src/manager/routes/dashboard-memory.js +1 -1
- package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
- package/dist/src/manager/routes/embedded-browser.js +497 -0
- package/dist/src/manager/routes/embedded-browser.js.map +1 -0
- package/dist/src/manager/routes/telegram-hub.js +4 -3
- package/dist/src/manager/routes/telegram-hub.js.map +1 -1
- package/dist/src/manager/server.js +17 -2
- package/dist/src/manager/server.js.map +1 -1
- package/dist/src/manager/telegram-hub/hub-bot.js +127 -7
- package/dist/src/manager/telegram-hub/hub-bot.js.map +1 -1
- package/dist/src/memory/heartbeat.js +15 -14
- package/dist/src/memory/heartbeat.js.map +1 -1
- package/dist/src/memory/identity.js +3 -2
- package/dist/src/memory/identity.js.map +1 -1
- package/dist/src/memory/memory.js +3 -2
- package/dist/src/memory/memory.js.map +1 -1
- package/dist/src/memory/reflect.js +2 -1
- package/dist/src/memory/reflect.js.map +1 -1
- package/dist/src/memory/runtime.js +3 -2
- package/dist/src/memory/runtime.js.map +1 -1
- package/dist/src/memory/shared.js +4 -3
- package/dist/src/memory/shared.js.map +1 -1
- package/dist/src/memory/worklog.js +3 -2
- package/dist/src/memory/worklog.js.map +1 -1
- package/dist/src/messaging/runtime.js +4 -3
- package/dist/src/messaging/runtime.js.map +1 -1
- package/dist/src/messaging/send.js +1 -1
- package/dist/src/messaging/send.js.map +1 -1
- package/dist/src/orchestrator/attestation.js +33 -0
- package/dist/src/orchestrator/attestation.js.map +1 -1
- package/dist/src/orchestrator/collect.js +9 -4
- package/dist/src/orchestrator/collect.js.map +1 -1
- package/dist/src/orchestrator/distribute.js +0 -142
- package/dist/src/orchestrator/distribute.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +3 -3
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +19 -1
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/state-machine.js +93 -16
- package/dist/src/orchestrator/state-machine.js.map +1 -1
- package/dist/src/orchestrator/worker-replay-notice.js +31 -11
- package/dist/src/orchestrator/worker-replay-notice.js.map +1 -1
- package/dist/src/prompt/builder.js +20 -20
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/context-hooks.js +2 -1
- package/dist/src/prompt/context-hooks.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +69 -45
- package/dist/src/prompt/templates/employee.md +3 -2
- package/dist/src/prompt/templates/orchestration.md +13 -15
- package/dist/src/prompt/templates/skills.md +1 -0
- package/dist/src/routes/avatar.js +4 -3
- package/dist/src/routes/avatar.js.map +1 -1
- package/dist/src/routes/bgtask.js +2 -1
- package/dist/src/routes/bgtask.js.map +1 -1
- package/dist/src/routes/browser.js +2 -1
- package/dist/src/routes/browser.js.map +1 -1
- package/dist/src/routes/command.js +32 -2
- package/dist/src/routes/command.js.map +1 -1
- package/dist/src/routes/messaging.js +6 -5
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/routes/orchestrate.js +144 -29
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/routes/quota.js +217 -33
- package/dist/src/routes/quota.js.map +1 -1
- package/dist/src/routes/settings.js +3 -2
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/static.js +37 -2
- package/dist/src/routes/static.js.map +1 -1
- package/dist/src/telegram/bot.js +123 -67
- package/dist/src/telegram/bot.js.map +1 -1
- package/dist/src/telegram/elicitation-buttons.js +71 -0
- package/dist/src/telegram/elicitation-buttons.js.map +1 -0
- package/dist/src/telegram/fetch-body.js +11 -0
- package/dist/src/telegram/fetch-body.js.map +1 -0
- package/dist/src/telegram/forwarder.js +3 -5
- package/dist/src/telegram/forwarder.js.map +1 -1
- package/dist/src/telegram/rich-message.js +85 -11
- package/dist/src/telegram/rich-message.js.map +1 -1
- package/dist/src/telegram/status-update-buffer.js +15 -0
- package/dist/src/telegram/status-update-buffer.js.map +1 -0
- package/dist/src/telegram/telegram-file.js +5 -4
- package/dist/src/telegram/telegram-file.js.map +1 -1
- package/dist/src/telegram/voice.js +5 -4
- package/dist/src/telegram/voice.js.map +1 -1
- package/dist/src/workflows/planaudit.js +2 -1
- package/dist/src/workflows/planaudit.js.map +1 -1
- package/dist/src/workflows/repo-map/index.js +157 -0
- package/dist/src/workflows/repo-map/index.js.map +1 -0
- package/dist/src/workflows/scope-sandbox.js +1 -0
- package/dist/src/workflows/scope-sandbox.js.map +1 -1
- package/package.json +5 -2
- package/public/css/chat.css +17 -1
- package/public/css/orc-state.css +2 -1
- package/public/css/variables.css +0 -1
- package/public/dist/assets/{AdvancedExport-qa01DKDO.js → AdvancedExport-DsDpqXoH.js} +1 -1
- package/public/dist/assets/{Agent-CHCXjXSN.js → Agent-CrLn42Jb.js} +1 -1
- package/public/dist/assets/{Browser-Df4B5cnl.js → Browser-B52Bdaeu.js} +1 -1
- package/public/dist/assets/BrowserPanel-Bh3JpkZO.js +3 -0
- package/public/dist/assets/BrowserPanel-DpntR8EJ.css +1 -0
- package/public/dist/assets/{ChannelsDiscord-BqPckWSY.js → ChannelsDiscord-Bt1_rtNC.js} +1 -1
- package/public/dist/assets/{ChannelsTelegram-B9Feggy7.js → ChannelsTelegram-BLV0m1oq.js} +1 -1
- package/public/dist/assets/{CodeCanvas-BzhNLZVF.js → CodeCanvas-COgs1P6U.js} +2 -2
- package/public/dist/assets/{DashboardEmbeddingSection-CocnWvOE.js → DashboardEmbeddingSection-DMgHZQnn.js} +1 -1
- package/public/dist/assets/{DashboardMeta-C9BshDiw.js → DashboardMeta-B7CVqXcU.js} +1 -1
- package/public/dist/assets/DesignPanel-3XpGjuEW.css +1 -0
- package/public/dist/assets/DesignPanel-BGMPhZSx.js +2 -0
- package/public/dist/assets/{DiffPanel-DsFwEFjd.js → DiffPanel-B_ljObDk.js} +1 -1
- package/public/dist/assets/{Display-D_r_BwdJ.js → Display-BF-rACK6.js} +1 -1
- package/public/dist/assets/{DocPanel-6Z_RELzd.js → DocPanel-DtYwv3n3.js} +1 -1
- package/public/dist/assets/{Employees-DL3R3z7K.js → Employees-D3hnciP0.js} +1 -1
- package/public/dist/assets/{FolderPanel-DdlzWAuK.js → FolderPanel-DbPhzzvi.js} +3 -3
- package/public/dist/assets/{Heartbeat-BblY8Z4a.js → Heartbeat-Dk-_TtKV.js} +1 -1
- package/public/dist/assets/{InlineWarn-DrqqH39Y.js → InlineWarn-DDzeHxQw.js} +1 -1
- package/public/dist/assets/{MarkdownRenderer-Cl0oEICj.js → MarkdownRenderer-CHacL2M_.js} +2 -2
- package/public/dist/assets/MarkdownRenderer-DyrB9FbZ.js +1 -0
- package/public/dist/assets/{Mcp-CP6h9IQP.js → Mcp-SfytKWGX.js} +1 -1
- package/public/dist/assets/{Memory-BWcfxzCz.js → Memory-BOicOlcn.js} +1 -1
- package/public/dist/assets/{MilkdownWysiwygEditor-B-j0IUe6.js → MilkdownWysiwygEditor-BNoLGbFC.js} +1 -1
- package/public/dist/assets/{ModelProvider-D4LBX7K2.js → ModelProvider-DQ2AA0gJ.js} +1 -1
- package/public/dist/assets/{Network-TkeE8ldB.js → Network-DISUhige.js} +1 -1
- package/public/dist/assets/{NotesGraphWorkspace-B55jfeiE.js → NotesGraphWorkspace-Dm1xUFl8.js} +1 -1
- package/public/dist/assets/PanelLayoutProvider-XpTo-i_s.js +1 -0
- package/public/dist/assets/{Permissions-Dc5xnPMu.js → Permissions-CnKt44dN.js} +1 -1
- package/public/dist/assets/Permissions-DNT0TxYL.js +1 -0
- package/public/dist/assets/{Profile-Bacunq6W.js → Profile-B8yBO3Ju.js} +1 -1
- package/public/dist/assets/{Prompts-D36Mj9HS.js → Prompts-5lNQ5qOm.js} +1 -1
- package/public/dist/assets/{SpeechKeys-Dda4Dt6M.js → SpeechKeys-BepaIHBa.js} +1 -1
- package/public/dist/assets/{TelegramHub-CuJoPPib.js → TelegramHub--DNjRAwW.js} +1 -1
- package/public/dist/assets/{TerminalPanel-DSCJeGjp.js → TerminalPanel-DQovYfwz.js} +1 -1
- package/public/dist/assets/{TransportStatusChips-C5QcQVCy.js → TransportStatusChips-Bld0yXi7.js} +1 -1
- package/public/dist/assets/app-BJVZZqTm.js +55 -0
- package/public/dist/assets/app-CvNmD8jx.css +1 -0
- package/public/dist/assets/architecture-7EHR7CIX-D-6Nx315.js +1 -0
- package/public/dist/assets/{architectureDiagram-3BPJPVTR-C4lVLx8A.js → architectureDiagram-3BPJPVTR-q8idz3H3.js} +1 -1
- package/public/dist/assets/{bgtask-badge-b7pj_Dbh.js → bgtask-badge-Bz8_kUKd.js} +1 -1
- package/public/dist/assets/bgtask-badge-iOk9R0RF.js +1 -0
- package/public/dist/assets/{blockDiagram-GPEHLZMM-BHjdqDcb.js → blockDiagram-GPEHLZMM-DGB0dsia.js} +1 -1
- package/public/dist/assets/{c4Diagram-AAUBKEIU-B1QuN7gf.js → c4Diagram-AAUBKEIU-ChP5YfVt.js} +1 -1
- package/public/dist/assets/channel-ByNDsZsH.js +1 -0
- package/public/dist/assets/{chunk-2J33WTMH-D1olIwij.js → chunk-2J33WTMH-D3OPoEHg.js} +1 -1
- package/public/dist/assets/{chunk-3OPIFGDE-Cf7991q8.js → chunk-3OPIFGDE-CULJ8ZHF.js} +1 -1
- package/public/dist/assets/{chunk-4BX2VUAB-zmO3Vjrm.js → chunk-4BX2VUAB-DGgktZYr.js} +1 -1
- package/public/dist/assets/{chunk-4EGX6M5U-B-uS9w6F.js → chunk-4EGX6M5U-BD3v8KR4.js} +1 -1
- package/public/dist/assets/chunk-55IACEB6-CQFLXxVc.js +1 -0
- package/public/dist/assets/{chunk-5DO6E6H7-AkI69lqb.js → chunk-5DO6E6H7-B-FbGqHn.js} +1 -1
- package/public/dist/assets/{chunk-5ZQYHXKU-C3d9OOmT.js → chunk-5ZQYHXKU-DVpWOoGS.js} +1 -1
- package/public/dist/assets/{chunk-727SXJPM-BOt5gU_h.js → chunk-727SXJPM-CZjR7q6H.js} +1 -1
- package/public/dist/assets/{chunk-AQP2D5EJ-CrRyjYkJ.js → chunk-AQP2D5EJ-BlGjnlsV.js} +1 -1
- package/public/dist/assets/{chunk-BR22UD5L-DR9GxWFk.js → chunk-BR22UD5L-MK8KuB9X.js} +1 -1
- package/public/dist/assets/{chunk-BSJP7CBP-B24w6Ihw.js → chunk-BSJP7CBP-ypXC4wBv.js} +1 -1
- package/public/dist/assets/{chunk-CSCIHK7Q-BPBO8B3q.js → chunk-CSCIHK7Q-CmvetykJ.js} +1 -1
- package/public/dist/assets/{chunk-FHYWG6QK-CXhRbK1g.js → chunk-FHYWG6QK-Do5csWDm.js} +1 -1
- package/public/dist/assets/{chunk-FMBD7UC4-tu50fn_l.js → chunk-FMBD7UC4-BXpT25MP.js} +1 -1
- package/public/dist/assets/{chunk-KSCS5N6A-CnJg0Z_l.js → chunk-KSCS5N6A-DtlfLqto.js} +1 -1
- package/public/dist/assets/{chunk-L5ZTLDWV-B3Ak80dW.js → chunk-L5ZTLDWV-Czv9NkHn.js} +1 -1
- package/public/dist/assets/{chunk-LZXEDZCA-C3fVGX8q.js → chunk-LZXEDZCA-vD7oFdiq.js} +1 -1
- package/public/dist/assets/{chunk-MPE355IW-iQbf4K4s.js → chunk-MPE355IW-2ei0PVn0.js} +1 -1
- package/public/dist/assets/{chunk-MZUSXYTE-BEKROhpC.js → chunk-MZUSXYTE-JO_qTk4K.js} +1 -1
- package/public/dist/assets/{chunk-N66VUXT2-DUtPpNne.js → chunk-N66VUXT2-BXL-FniY.js} +1 -1
- package/public/dist/assets/{chunk-ND2GUHAM-DW2SkbNq.js → chunk-ND2GUHAM-B9SIO-4a.js} +1 -1
- package/public/dist/assets/{chunk-NZK2D7GU-SJvHIVX3.js → chunk-NZK2D7GU-CqOo06-Z.js} +1 -1
- package/public/dist/assets/{chunk-O5CBEL6O-D_hkyy5c.js → chunk-O5CBEL6O-BWbe_grt.js} +1 -1
- package/public/dist/assets/{chunk-PUPMXCY4-DcRmz6F2.js → chunk-PUPMXCY4-aFTMGBaR.js} +1 -1
- package/public/dist/assets/chunk-QZHKN3VN-Becu19mF.js +1 -0
- package/public/dist/assets/{chunk-UIBZB4QT-CFemVDOF.js → chunk-UIBZB4QT-S8EH0jZR.js} +1 -1
- package/public/dist/assets/{chunk-WCWK7LTN-B6ske8a4.js → chunk-WCWK7LTN-EgrNk7Dj.js} +1 -1
- package/public/dist/assets/chunk-WU5MYG2G-CkoHFn0F.js +1 -0
- package/public/dist/assets/{chunk-XPW4576I-elhPZgkY.js → chunk-XPW4576I-8oydVjY6.js} +1 -1
- package/public/dist/assets/classDiagram-4FO5ZUOK-DVGoKviY.js +1 -0
- package/public/dist/assets/classDiagram-v2-Q7XG4LA2-BIZeptY-.js +1 -0
- package/public/dist/assets/{copy-text-BKruhU_y.js → copy-text-BDs2wKjA.js} +1 -1
- package/public/dist/assets/{cose-bilkent-S5V4N54A-B-gwVajW.js → cose-bilkent-S5V4N54A-PNmvcq_6.js} +1 -1
- package/public/dist/assets/{dagre-BM42HDAG-C9BDjgRM.js → dagre-BM42HDAG-BP_m3uo9.js} +1 -1
- package/public/dist/assets/{dagre-HAOs7bVl.js → dagre-Ct2n78X9.js} +1 -1
- package/public/dist/assets/{diagram-2AECGRRQ-CvEawheC.js → diagram-2AECGRRQ-DhgfR-ol.js} +1 -1
- package/public/dist/assets/{diagram-5GNKFQAL-Da4DwByP.js → diagram-5GNKFQAL-BRLvmdeK.js} +1 -1
- package/public/dist/assets/{diagram-KO2AKTUF-Cnhf5Czo.js → diagram-KO2AKTUF-Co3C18-Q.js} +1 -1
- package/public/dist/assets/{diagram-LMA3HP47-CMusMTT2.js → diagram-LMA3HP47-3SwoWQij.js} +1 -1
- package/public/dist/assets/{diagram-OG6HWLK6-D5nQR5rT.js → diagram-OG6HWLK6-bjEryAd3.js} +1 -1
- package/public/dist/assets/{dist-jZTs_0Zg.js → dist-B6T-R4xY.js} +1 -1
- package/public/dist/assets/{dist-woWoxWmX.js → dist-B8V2LYzt.js} +1 -1
- package/public/dist/assets/{dist-DL8oabBM.js → dist-BDPUxeoi.js} +1 -1
- package/public/dist/assets/{dist-Dpn3ujr3.js → dist-BMC_dTfR.js} +1 -1
- package/public/dist/assets/{dist-C4WouNM7.js → dist-BSf40pae.js} +1 -1
- package/public/dist/assets/{dist-CPOW-jfg.js → dist-BlMOeJym.js} +1 -1
- package/public/dist/assets/dist-BmXnOAlo.js +1 -0
- package/public/dist/assets/{dist-C_6E126b.js → dist-BqzMcuh8.js} +1 -1
- package/public/dist/assets/{dist-CHB0SFvU.js → dist-BvQlb9-o.js} +1 -1
- package/public/dist/assets/{dist-BvgkNZ7r.js → dist-C7pD0dEn.js} +1 -1
- package/public/dist/assets/{dist-DvlZh9GF.js → dist-CC2vK_6S.js} +1 -1
- package/public/dist/assets/{dist-wdt8RQwr.js → dist-CFU9RsAu.js} +1 -1
- package/public/dist/assets/{dist-Y5dy_sSf.js → dist-CS1XLdz3.js} +1 -1
- package/public/dist/assets/{dist-CiaEUSjf.js → dist-CjzfPsGt.js} +1 -1
- package/public/dist/assets/{dist-DlqIM5Y-.js → dist-CvzAXxlb.js} +1 -1
- package/public/dist/assets/{dist-CLMpv9qF.js → dist-D8SW_REQ.js} +1 -1
- package/public/dist/assets/dist-DLY5I6dK.js +1 -0
- package/public/dist/assets/{dist-DfOlJSUk.js → dist-DMZVNaIe.js} +1 -1
- package/public/dist/assets/{dist-BSwjNBYz.js → dist-DN-hkAIC.js} +1 -1
- package/public/dist/assets/dist-DPHcMCqI.js +1 -0
- package/public/dist/assets/{dist-DQR4gW5j.js → dist-DStWZVZ0.js} +1 -1
- package/public/dist/assets/{dist-BpbqDhsq.js → dist-DTcoHNXr.js} +1 -1
- package/public/dist/assets/{dist-DRKfpxOd.js → dist-DdJuxxG7.js} +1 -1
- package/public/dist/assets/{dist-KuP6Gt4m.js → dist-DhgwoIqj.js} +1 -1
- package/public/dist/assets/{dist-nbzW6Sn7.js → dist-DmjSXJAP.js} +1 -1
- package/public/dist/assets/{dist-8hLkyg-D.js → dist-cBBDKBli.js} +1 -1
- package/public/dist/assets/{dist-CKTQ2eXH.js → dist-ph7PUr0c.js} +1 -1
- package/public/dist/assets/{dist-DGJG2rr2.js → dist-qUky5WRy.js} +1 -1
- package/public/dist/assets/{dist-CYw9JGM_.js → dist-w2YzIhc5.js} +1 -1
- package/public/dist/assets/dist-xHOEvyuU.js +1 -0
- package/public/dist/assets/{dockerfile-Bq20q5i6.js → dockerfile-C0jniLkw.js} +1 -1
- package/public/dist/assets/{employees-DbgFV33i.js → employees-BYebrTfH.js} +1 -1
- package/public/dist/assets/{erDiagram-TEJ5UH35-BnsX5Dzt.js → erDiagram-TEJ5UH35-DQBxHU1q.js} +1 -1
- package/public/dist/assets/{error-normalize-DLzj47d_.js → error-normalize-BzeO0SXE.js} +1 -1
- package/public/dist/assets/eventmodeling-FCH6USID-BB1OVDLb.js +1 -0
- package/public/dist/assets/{factor-BfAVKjvH.js → factor-nzjoQ9cK.js} +1 -1
- package/public/dist/assets/{fields-MeoSVgIK.js → fields-zkeByFQW.js} +1 -1
- package/public/dist/assets/{flowDiagram-I6XJVG4X-BSy1p30u.js → flowDiagram-I6XJVG4X-BN90fCt5.js} +1 -1
- package/public/dist/assets/{ganttDiagram-6RSMTGT7-BILWylat.js → ganttDiagram-6RSMTGT7-B-JAlIhh.js} +1 -1
- package/public/dist/assets/gitGraph-WXDBUCRP-DAWTa5Fn.js +1 -0
- package/public/dist/assets/{gitGraphDiagram-PVQCEYII-BaRlZZ_k.js → gitGraphDiagram-PVQCEYII-CLL2G5U-.js} +1 -1
- package/public/dist/assets/{graphlib-DdtRn62K.js → graphlib-B6dRm8vZ.js} +1 -1
- package/public/dist/assets/idb-cache-ZH6lOebk.js +1 -0
- package/public/dist/assets/iframe-renderer-Clu9EYLW.js +1 -0
- package/public/dist/assets/iframe-renderer-DACMLTYf.js +142 -0
- package/public/dist/assets/info-J43DQDTF-C530y5-j.js +1 -0
- package/public/dist/assets/{infoDiagram-5YYISTIA-BElvxLr3.js → infoDiagram-5YYISTIA-CftYDPfc.js} +1 -1
- package/public/dist/assets/{ishikawaDiagram-YF4QCWOH-DPQZsd5R.js → ishikawaDiagram-YF4QCWOH-BVa5AJbz.js} +1 -1
- package/public/dist/assets/javascript-DbM-pSY-.js +1 -0
- package/public/dist/assets/{journeyDiagram-JHISSGLW-BJZNR2qA.js → journeyDiagram-JHISSGLW-BeUKm6ME.js} +1 -1
- package/public/dist/assets/{kanban-definition-UN3LZRKU-OQLDtH0g.js → kanban-definition-UN3LZRKU-K5DYNY4p.js} +1 -1
- package/public/dist/assets/{manager-rHNwUB4e.css → manager-C4eNDNFt.css} +1 -1
- package/public/dist/assets/manager-pcvo6od1.js +13 -0
- package/public/dist/assets/{memory-QobGT0Kv.js → memory-DLD5Xpk8.js} +1 -1
- package/public/dist/assets/memory-oWWwCkg5.js +1 -0
- package/public/dist/assets/mermaid-loader-Bd9rYyxD.js +1 -0
- package/public/dist/assets/{mermaid-parser.core-D1KUUauv.js → mermaid-parser.core-Cz70RgAa.js} +1 -1
- package/public/dist/assets/mermaid-preprocess-0hqEN7sn.js +5 -0
- package/public/dist/assets/{mermaid.core-R6dUFqZC.js → mermaid.core-Dj5GOPe1.js} +2 -2
- package/public/dist/assets/mermaid.core-TSG49mwm.js +1 -0
- package/public/dist/assets/message-history-C6D4juRe.js +1 -0
- package/public/dist/assets/message-history-DdIshS4Q.js +1 -0
- package/public/dist/assets/{mindmap-definition-RKZ34NQL-B8WJHpYI.js → mindmap-definition-RKZ34NQL-PsH0E_3e.js} +1 -1
- package/public/dist/assets/{nsis-CIoRNUaw.js → nsis-BI3I3OhH.js} +1 -1
- package/public/dist/assets/packet-YPE3B663-BHcxn4sy.js +1 -0
- package/public/dist/assets/{page-shell-BeAyKBJW.js → page-shell-LF7vVVfG.js} +1 -1
- package/public/dist/assets/pi-settings-CBUGDAuT.js +1 -0
- package/public/dist/assets/pie-LRSECV5Y-DjigSia_.js +1 -0
- package/public/dist/assets/{pieDiagram-4H26LBE5-BuBruIcx.js → pieDiagram-4H26LBE5-Dtwtlr0z.js} +1 -1
- package/public/dist/assets/{pug-Cb8OCun5.js → pug-DHfNwv1w.js} +1 -1
- package/public/dist/assets/{quadrantDiagram-W4KKPZXB-B6rzGZvr.js → quadrantDiagram-W4KKPZXB-CAFUbaV6.js} +1 -1
- package/public/dist/assets/radar-GUYGQ44K-DPCrmsHJ.js +1 -0
- package/public/dist/assets/{react-dom-CZtrmbYs.js → react-dom-AWKMTIe7.js} +1 -1
- package/public/dist/assets/render-E2PXsTyS.js +122 -0
- package/public/dist/assets/{requirementDiagram-4Y6WPE33-Cvj5JknB.js → requirementDiagram-4Y6WPE33-CvBM4AjK.js} +1 -1
- package/public/dist/assets/{sankeyDiagram-5OEKKPKP-DNGNYR7j.js → sankeyDiagram-5OEKKPKP-cordQgRs.js} +1 -1
- package/public/dist/assets/{sequenceDiagram-3UESZ5HK-DuUAH96Z.js → sequenceDiagram-3UESZ5HK-DDAqRdga.js} +1 -1
- package/public/dist/assets/{settings-D70uFh8l.js → settings-DYIfnpYq.js} +1 -1
- package/public/dist/assets/settings-core-BURhLoX3.js +1 -0
- package/public/dist/assets/{settings-core-B2lw2bgO.js → settings-core-DRYE_5Wb.js} +1 -1
- package/public/dist/assets/settings-yyDc7X3c.js +1 -0
- package/public/dist/assets/{sidebar-BqWm2XWP.js → sidebar-Cn-KLQ0U.js} +3 -3
- package/public/dist/assets/{skills-CdNOfXlk.js → skills-Brt3opa5.js} +1 -1
- package/public/dist/assets/skills-KHfKUuAJ.js +1 -0
- package/public/dist/assets/{slash-commands-4Ntm5N7h.js → slash-commands-jMNf0b43.js} +1 -1
- package/public/dist/assets/slash-commands-nb096e6A.js +1 -0
- package/public/dist/assets/{stateDiagram-AJRCARHV-DGZNs20Q.js → stateDiagram-AJRCARHV-DUaoSRgZ.js} +1 -1
- package/public/dist/assets/stateDiagram-v2-BHNVJYJU-BAesfdhr.js +1 -0
- package/public/dist/assets/{timeline-definition-PNZ67QCA-yDl1yISI.js → timeline-definition-PNZ67QCA-D85QNy9b.js} +1 -1
- package/public/dist/assets/{trace-drawer-DqAwwHHQ.js → trace-drawer-Dv5cDGLR.js} +1 -1
- package/public/dist/assets/treeView-BLDUP644-DmufUMul.js +1 -0
- package/public/dist/assets/treemap-LRROVOQU-Cg48uw_D.js +1 -0
- package/public/dist/assets/ui-BeyzLs7f.js +2 -0
- package/public/dist/assets/ui-DabvyDGc.js +1 -0
- package/public/dist/assets/{vennDiagram-CIIHVFJN-C0TNoBYO.js → vennDiagram-CIIHVFJN-CQSILdx8.js} +1 -1
- package/public/dist/assets/wardley-L42UT6IY-QZOEXU7f.js +1 -0
- package/public/dist/assets/{wardleyDiagram-YWT4CUSO-C6cJR4Ib.js → wardleyDiagram-YWT4CUSO-BZEVMlJ4.js} +1 -1
- package/public/dist/assets/{wiki-link-suggestions-BMHWTE4_.js → wiki-link-suggestions-DZQc78gj.js} +1 -1
- package/public/dist/assets/{xychartDiagram-2RQKCTM6-DqEqpcox.js → xychartDiagram-2RQKCTM6-C8573Tgs.js} +1 -1
- package/public/dist/index.html +2 -2
- package/public/dist/manager/index.html +2 -2
- package/public/js/diagram/iframe-renderer.ts +197 -49
- package/public/js/diagram/widget-validator.ts +17 -3
- package/public/js/features/chat-messages.ts +5 -1
- package/public/js/features/chat-scroll.ts +10 -5
- package/public/js/features/chat.ts +9 -1
- package/public/js/features/elicitation.ts +1 -5
- package/public/js/features/message-item-html.ts +3 -1
- package/public/js/features/process-block.ts +46 -3
- package/public/js/features/settings-mcp.ts +1 -1
- package/public/js/locale.ts +2 -2
- package/public/js/main.ts +15 -4
- package/public/js/preview-parent-origin.ts +73 -9
- package/public/js/render/chart-json.ts +2 -5
- package/public/js/render/compose-block.ts +2 -5
- package/public/js/render/dataframe.ts +2 -5
- package/public/js/render/diff-viewer.ts +2 -5
- package/public/js/render/link-preview.ts +1 -5
- package/public/js/render/markdown.ts +22 -0
- package/public/js/render/post-render.ts +7 -3
- package/public/js/render/sanitize.ts +6 -0
- package/public/js/render/search-results.ts +2 -5
- package/public/js/streaming-render.ts +12 -1
- package/public/js/ui.ts +6 -3
- package/public/js/ws.ts +39 -25
- package/public/locales/en.json +2 -1
- package/public/locales/ja.json +2 -1
- package/public/locales/ko.json +2 -1
- package/public/locales/zh.json +2 -1
- package/public/manager/src/InstancePreview.tsx +35 -0
- package/public/manager/src/SidebarRailRouter.tsx +209 -124
- package/public/manager/src/browser-panel/BrowserPanel.tsx +714 -17
- package/public/manager/src/browser-panel/browser-panel.css +305 -0
- package/public/manager/src/browser-panel/use-embedded-target-sync.ts +182 -0
- package/public/manager/src/components/DesktopPanelControls.tsx +1 -1
- package/public/manager/src/design-panel/DesignPageSelector.tsx +27 -0
- package/public/manager/src/design-panel/DesignPanel.tsx +265 -0
- package/public/manager/src/design-panel/DesignViewport.tsx +34 -0
- package/public/manager/src/design-panel/design-api.ts +106 -0
- package/public/manager/src/design-panel/design-panel.css +137 -0
- package/public/manager/src/design-panel/design-types.ts +43 -0
- package/public/manager/src/folder-panel/FolderPanel.tsx +15 -1
- package/public/manager/src/jaw-ceo/JawCeoWorkbenchButton.tsx +10 -5
- package/public/manager/src/jaw-ceo/jaw-ceo.css +8 -0
- package/public/manager/src/jaw-ceo/useJawCeoDashboardBridge.tsx +2 -1
- package/public/manager/src/panels/FileFolderSplitPanel.tsx +97 -0
- package/public/manager/src/panels/PanelErrorBoundary.tsx +44 -0
- package/public/manager/src/panels/PanelLayoutProvider.tsx +569 -86
- package/public/manager/src/panels/RightSidebar.tsx +389 -134
- package/public/manager/src/panels/desktop-bridge.ts +88 -0
- package/public/manager/src/panels/panel-layout-registry-state.ts +252 -10
- package/public/manager/src/panels/panels.css +479 -0
- package/public/manager/src/panels/right-sidebar-tab-display.ts +36 -0
- package/public/manager/src/panels/types.ts +79 -4
- package/public/manager/src/types.ts +11 -0
- package/scripts/bundle-sidecar.sh +3 -0
- package/scripts/check-strict-baseline.mjs +26 -2
- package/scripts/docs/check-docs.mts +87 -0
- package/scripts/docs/extract-commands.mts +215 -0
- package/scripts/docs/extract-routes.mts +350 -0
- package/scripts/release-gates.mjs +32 -0
- package/public/dist/assets/BrowserPanel-CV_bbQpM.css +0 -1
- package/public/dist/assets/BrowserPanel-Ua0Xck6V.js +0 -1
- package/public/dist/assets/MarkdownRenderer-BivJ4hJm.js +0 -1
- package/public/dist/assets/Permissions-CddCEaJl.js +0 -1
- package/public/dist/assets/app-BPsa7jSJ.css +0 -1
- package/public/dist/assets/app-DszWzakT.js +0 -55
- package/public/dist/assets/architecture-7EHR7CIX-GJhmD5MC.js +0 -1
- package/public/dist/assets/bgtask-badge-DZEQ5fMl.js +0 -1
- package/public/dist/assets/channel-Sut8CY6m.js +0 -1
- package/public/dist/assets/chunk-55IACEB6-C3KMx7HH.js +0 -1
- package/public/dist/assets/chunk-QZHKN3VN-C7Qk10ab.js +0 -1
- package/public/dist/assets/chunk-WU5MYG2G-BpCiJpUL.js +0 -1
- package/public/dist/assets/classDiagram-4FO5ZUOK-BVeAlcVw.js +0 -1
- package/public/dist/assets/classDiagram-v2-Q7XG4LA2-mvRsJL7t.js +0 -1
- package/public/dist/assets/dist-BQ6IjZAx.js +0 -1
- package/public/dist/assets/dist-CB1yXHdY.js +0 -1
- package/public/dist/assets/dist-El7lM3OZ.js +0 -1
- package/public/dist/assets/dist-ZXqltO6b.js +0 -1
- package/public/dist/assets/eventmodeling-FCH6USID-BASBZB6y.js +0 -1
- package/public/dist/assets/gitGraph-WXDBUCRP-C6UAXKTO.js +0 -1
- package/public/dist/assets/idb-cache-DQM-odDV.js +0 -1
- package/public/dist/assets/info-J43DQDTF-DZvaZ8fx.js +0 -1
- package/public/dist/assets/javascript-ocJZALE4.js +0 -1
- package/public/dist/assets/manager-CdNOlCyS.js +0 -13
- package/public/dist/assets/memory-BT-rs3ag.js +0 -1
- package/public/dist/assets/mermaid-loader-BMIvbrMb.js +0 -1
- package/public/dist/assets/mermaid-preprocess-CqOBWYEb.js +0 -5
- package/public/dist/assets/mermaid.core-CE6des8A.js +0 -1
- package/public/dist/assets/message-history-BY1UNJAO.js +0 -1
- package/public/dist/assets/message-history-BmP5JKio.js +0 -142
- package/public/dist/assets/packet-YPE3B663-Br_gfHDJ.js +0 -1
- package/public/dist/assets/pi-settings-BVYmGHWD.js +0 -1
- package/public/dist/assets/pie-LRSECV5Y-CPSw09Lc.js +0 -1
- package/public/dist/assets/radar-GUYGQ44K-D5jGe4n0.js +0 -1
- package/public/dist/assets/render-C3r-9_-J.js +0 -119
- package/public/dist/assets/settings-CJm8ZSJs.js +0 -1
- package/public/dist/assets/settings-core-gdS0lo1b.js +0 -1
- package/public/dist/assets/skills-DG_CbTEf.js +0 -1
- package/public/dist/assets/slash-commands-B9kOEhJ_.js +0 -1
- package/public/dist/assets/stateDiagram-v2-BHNVJYJU-D2I0t9Bo.js +0 -1
- package/public/dist/assets/treeView-BLDUP644-i3ZwrLGf.js +0 -1
- package/public/dist/assets/treemap-LRROVOQU-CJRBfbOx.js +0 -1
- package/public/dist/assets/ui-Anw2S64o.js +0 -1
- package/public/dist/assets/ui-DsK6r0Xv.js +0 -2
- package/public/dist/assets/wardley-L42UT6IY-B1NLyOET.js +0 -1
- /package/public/dist/assets/{agent-meta-FyI15KAa.js → agent-meta-tiPlp7OI.js} +0 -0
- /package/public/dist/assets/{api-DvCd2Uff.js → api-C9dOxby7.js} +0 -0
- /package/public/dist/assets/{apl-CUNx2Nxr.js → apl-2tE96F_Y.js} +0 -0
- /package/public/dist/assets/{asciiarmor-B9JjJqLb.js → asciiarmor-ynSKiC17.js} +0 -0
- /package/public/dist/assets/{asn1-NstwUq_r.js → asn1-CfqO1VY8.js} +0 -0
- /package/public/dist/assets/{asterisk-Box6GWx7.js → asterisk-DSiRJoqT.js} +0 -0
- /package/public/dist/assets/{brainfuck-DAD60u2v.js → brainfuck-DTcanv-8.js} +0 -0
- /package/public/dist/assets/{chunk-AGHRB4JF-BeNb9aN4.js → chunk-AGHRB4JF-BXLzSehp.js} +0 -0
- /package/public/dist/assets/{chunk-NNHCCRGN-hPUSf84G.js → chunk-NNHCCRGN-D69GtSOc.js} +0 -0
- /package/public/dist/assets/{clike-B-3e4_rA.js → clike-qn72CMAj.js} +0 -0
- /package/public/dist/assets/{clojure-DpNVclFl.js → clojure-m8yDiYVc.js} +0 -0
- /package/public/dist/assets/{cmake-DzNe63Ys.js → cmake-4AHAWHiF.js} +0 -0
- /package/public/dist/assets/{cobol-CoytNvhw.js → cobol-CxxJP5eX.js} +0 -0
- /package/public/dist/assets/{coffeescript-Cq3xHp7h.js → coffeescript-BAB3zi48.js} +0 -0
- /package/public/dist/assets/{commonlisp-CVjsh9SW.js → commonlisp-BPbWuAds.js} +0 -0
- /package/public/dist/assets/{constants-EMUBd5RQ.js → constants-DzwdndBj.js} +0 -0
- /package/public/dist/assets/{crystal-BlIILE-v.js → crystal-CGuSsWYR.js} +0 -0
- /package/public/dist/assets/{css-D1TAh_-V.js → css-DszbR74r.js} +0 -0
- /package/public/dist/assets/{cypher-ZntLuJzU.js → cypher-GUnmv522.js} +0 -0
- /package/public/dist/assets/{cytoscape.esm-89N3cqwG.js → cytoscape.esm-D_XyYSBG.js} +0 -0
- /package/public/dist/assets/{d-CzwXOQ5h.js → d-Cfm0cznj.js} +0 -0
- /package/public/dist/assets/{desktop-bridge-B1whMBS2.js → desktop-bridge-CvdhnJQo.js} +0 -0
- /package/public/dist/assets/{diff-DI7-Ikca.js → diff-C6rPA7NX.js} +0 -0
- /package/public/dist/assets/{dist-B51C28kc.js → dist-AgQwqBLq.js} +0 -0
- /package/public/dist/assets/{dtd-7UKQtPWR.js → dtd-Dxh5tS6M.js} +0 -0
- /package/public/dist/assets/{dylan-CM1mkXYp.js → dylan-BdIVFR1j.js} +0 -0
- /package/public/dist/assets/{ebnf-Llv_5uW5.js → ebnf-iU-8xYFu.js} +0 -0
- /package/public/dist/assets/{ecl-uqtp9saI.js → ecl-DjbzOHI6.js} +0 -0
- /package/public/dist/assets/{eiffel-BqzGlVPY.js → eiffel-B2ID8LZ3.js} +0 -0
- /package/public/dist/assets/{elm-bajSbBYX.js → elm-B6vPcfMj.js} +0 -0
- /package/public/dist/assets/{erlang-B5uEM5Ke.js → erlang-nDQwRdZV.js} +0 -0
- /package/public/dist/assets/{esm-3SgqVBY5.js → esm-CT1xxdH5.js} +0 -0
- /package/public/dist/assets/{fcl-BcH_K33Z.js → fcl-Bf86o55I.js} +0 -0
- /package/public/dist/assets/{folder-drag-payload-DE3ZS9PZ.js → folder-drag-payload-Bhln9Mk2.js} +0 -0
- /package/public/dist/assets/{forth-DpLesGXt.js → forth-CeQJji0n.js} +0 -0
- /package/public/dist/assets/{fortran--G-GJVGI.js → fortran-Dm_CqDsH.js} +0 -0
- /package/public/dist/assets/{gas-DpoQvniR.js → gas-e3EfgE3p.js} +0 -0
- /package/public/dist/assets/{gherkin-Dr59UACG.js → gherkin-Dn_7tSzg.js} +0 -0
- /package/public/dist/assets/{groovy-Cn2K6Dx3.js → groovy-LaKuGRkK.js} +0 -0
- /package/public/dist/assets/{haskell-B7lFmXEG.js → haskell-D9nNX9Mr.js} +0 -0
- /package/public/dist/assets/{haxe-BHWvyysr.js → haxe-Rp176QXJ.js} +0 -0
- /package/public/dist/assets/{http-DBZ5ODWR.js → http-BOeYLbuM.js} +0 -0
- /package/public/dist/assets/{idb-cache-DTKWSF12.js → idb-cache-BzzftUET.js} +0 -0
- /package/public/dist/assets/{idl-D6JLbJZt.js → idl-DHv3vdme.js} +0 -0
- /package/public/dist/assets/{javascript-CMsRa3Ah.js → javascript-Dk2fbl1a.js} +0 -0
- /package/public/dist/assets/{jsx-runtime-B3ZGMGGg.js → jsx-runtime-gFMgZ0TQ.js} +0 -0
- /package/public/dist/assets/{julia-BgEiFqoe.js → julia-D7CKCk5I.js} +0 -0
- /package/public/dist/assets/{livescript-Bl00ljSh.js → livescript-gRbr9rhj.js} +0 -0
- /package/public/dist/assets/{locale-GY3-GGWm.js → locale-DC-ZsWOf.js} +0 -0
- /package/public/dist/assets/{lua-C7XaZlrp.js → lua-CgZ_7bxf.js} +0 -0
- /package/public/dist/assets/{mathematica-8EcxUjYb.js → mathematica-B6bTyoab.js} +0 -0
- /package/public/dist/assets/{mbox-rZy25Spd.js → mbox-C8oQj1cJ.js} +0 -0
- /package/public/dist/assets/{mirc-BUmwqSCT.js → mirc-v6L6kZuh.js} +0 -0
- /package/public/dist/assets/{mllike-BqDqEdQF.js → mllike-CWu4RdWO.js} +0 -0
- /package/public/dist/assets/{modelica-MhacK6Xw.js → modelica-B3NBpX1d.js} +0 -0
- /package/public/dist/assets/{mscgen-B_VJszPL.js → mscgen-C8u7qRYw.js} +0 -0
- /package/public/dist/assets/{mumps-CEdRH9V2.js → mumps-DHjVG4PS.js} +0 -0
- /package/public/dist/assets/{nginx-CnXgGeyP.js → nginx-BMt87X3t.js} +0 -0
- /package/public/dist/assets/{notes-graph-settings-BaqO8hYl.js → notes-graph-settings-BgNrT_58.js} +0 -0
- /package/public/dist/assets/{ntriples-CyZcmI8c.js → ntriples-C8U-Jud2.js} +0 -0
- /package/public/dist/assets/{octave-DGH2kDhB.js → octave-Bq37AoFm.js} +0 -0
- /package/public/dist/assets/{oz-DUSpf7eX.js → oz-D6HxSRn3.js} +0 -0
- /package/public/dist/assets/{pascal-BYIqfrcG.js → pascal-BBqiAVg6.js} +0 -0
- /package/public/dist/assets/{path-utils-DX1HplvB.js → path-utils-LsJeDCKF.js} +0 -0
- /package/public/dist/assets/{perl-C7iNkbFR.js → perl-sHANlXjx.js} +0 -0
- /package/public/dist/assets/{pi-settings-D6opgoo4.js → pi-settings-Dh5lgb87.js} +0 -0
- /package/public/dist/assets/{pig-CR5p2dpV.js → pig-Cufgew--.js} +0 -0
- /package/public/dist/assets/{powershell-UK-_nKBG.js → powershell--Q4mDip6.js} +0 -0
- /package/public/dist/assets/{properties-CJAqwakm.js → properties-DoVpJ-kT.js} +0 -0
- /package/public/dist/assets/{protobuf-D3Vrac9j.js → protobuf-B5OiV2Zv.js} +0 -0
- /package/public/dist/assets/{provider-icons-BXm8sy5x.js → provider-icons-stsNmQKx.js} +0 -0
- /package/public/dist/assets/{puppet-DxgW6kGv.js → puppet-Ce_CFfqW.js} +0 -0
- /package/public/dist/assets/{python-C_ebQp0Y.js → python-pK7Wt6QH.js} +0 -0
- /package/public/dist/assets/{q-IMCDaQ03.js → q-Dd3Ltku0.js} +0 -0
- /package/public/dist/assets/{r-BXdh3mvZ.js → r-CsX__2f0.js} +0 -0
- /package/public/dist/assets/{rough.esm-BJMyUbab.js → rough.esm--LLpAgPj.js} +0 -0
- /package/public/dist/assets/{rpm-DA-4RGFa.js → rpm-D78AjDAl.js} +0 -0
- /package/public/dist/assets/{ruby-Bl1KGNRx.js → ruby-D_-KI498.js} +0 -0
- /package/public/dist/assets/{sas-vK1DtUVf.js → sas-D-GUPiy4.js} +0 -0
- /package/public/dist/assets/{scheme-DiOFQmiy.js → scheme-DF9WwQDv.js} +0 -0
- /package/public/dist/assets/{settings-client-Di8KLXq_.js → settings-client-CjbBShxm.js} +0 -0
- /package/public/dist/assets/{shell-DlO-WCDP.js → shell-BTUwbV-w.js} +0 -0
- /package/public/dist/assets/{sieve-CbtkgRpt.js → sieve--Z-EbGZo.js} +0 -0
- /package/public/dist/assets/{simple-mode-BlwHYanN.js → simple-mode-BUow4bpn.js} +0 -0
- /package/public/dist/assets/{smalltalk-BvKYa3AC.js → smalltalk-C2YIwVx3.js} +0 -0
- /package/public/dist/assets/{solr-BR4fru6p.js → solr-CYVq4fbf.js} +0 -0
- /package/public/dist/assets/{sparql-DXGln-02.js → sparql-Ccd4fsFv.js} +0 -0
- /package/public/dist/assets/{spreadsheet-vehQVAxe.js → spreadsheet-DW0WgMrS.js} +0 -0
- /package/public/dist/assets/{sql-DqGFyXDS.js → sql-C71Zp6qn.js} +0 -0
- /package/public/dist/assets/{stex-BMDhbycI.js → stex-CKuX0g_6.js} +0 -0
- /package/public/dist/assets/{stylus-KnS0CroG.js → stylus-CBH8s0NO.js} +0 -0
- /package/public/dist/assets/{swift-DgdcCI7r.js → swift-CfZoxKRA.js} +0 -0
- /package/public/dist/assets/{tcl-BdAMpvp9.js → tcl-D5MGbeQu.js} +0 -0
- /package/public/dist/assets/{textile-BHP2MzNo.js → textile-DJ3U30FW.js} +0 -0
- /package/public/dist/assets/{tiddlywiki-DXpY2p61.js → tiddlywiki-_fe1dHUq.js} +0 -0
- /package/public/dist/assets/{tiki-rmXXYsbl.js → tiki-Dd1udTrQ.js} +0 -0
- /package/public/dist/assets/{toml-C5KR4pi6.js → toml-xpw8pqjz.js} +0 -0
- /package/public/dist/assets/{troff-CCKOxFhE.js → troff-CgWiec8m.js} +0 -0
- /package/public/dist/assets/{ttcn-DbUUkNp1.js → ttcn-CSwmFrer.js} +0 -0
- /package/public/dist/assets/{ttcn-cfg-DXcL9aHC.js → ttcn-cfg-B5HVIC6z.js} +0 -0
- /package/public/dist/assets/{turtle-C8XIIixq.js → turtle-Cl_SuWQk.js} +0 -0
- /package/public/dist/assets/{vb-6dJ8H6C5.js → vb-BT131bSf.js} +0 -0
- /package/public/dist/assets/{vbscript-DIhYyfyM.js → vbscript-D6S8_XkU.js} +0 -0
- /package/public/dist/assets/{velocity-D4VFCVF7.js → velocity-9HkI645n.js} +0 -0
- /package/public/dist/assets/{vendor-utils-BgdgpA_R.js → vendor-utils-DJY0EWnQ.js} +0 -0
- /package/public/dist/assets/{verilog-CMPJNboz.js → verilog-BzMguKeI.js} +0 -0
- /package/public/dist/assets/{vhdl-CnU0dAe0.js → vhdl-bHScWzT1.js} +0 -0
- /package/public/dist/assets/{w3c-keyname-_Vjqp3zl.js → w3c-keyname-a_sRwNLm.js} +0 -0
- /package/public/dist/assets/{webidl-DrscPGMb.js → webidl-CbgaVHNS.js} +0 -0
- /package/public/dist/assets/{wiki-link-resolver-C197VhRP.js → wiki-link-resolver-BfNXN9px.js} +0 -0
- /package/public/dist/assets/{xquery-B8_nl088.js → xquery-DWZPmAiC.js} +0 -0
- /package/public/dist/assets/{yacas-BCnk2qQq.js → yacas-CEdW4z4K.js} +0 -0
- /package/public/dist/assets/{z80-CG_mQV7a.js → z80-CMH3qxNg.js} +0 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, relative, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import ts from 'typescript';
|
|
5
|
+
|
|
6
|
+
const HTTP_METHODS = ['get', 'post', 'put', 'delete', 'patch'] as const;
|
|
7
|
+
const METHOD_ORDER = new Map(HTTP_METHODS.map((method, index) => [method.toUpperCase(), index]));
|
|
8
|
+
const DYNAMIC_PATH = '<dynamic>';
|
|
9
|
+
|
|
10
|
+
export type RouteMethod = Uppercase<(typeof HTTP_METHODS)[number]>;
|
|
11
|
+
|
|
12
|
+
export type RouteEntry = {
|
|
13
|
+
method: RouteMethod;
|
|
14
|
+
path: string;
|
|
15
|
+
file: string;
|
|
16
|
+
line: number;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type RoutesSection = {
|
|
20
|
+
routes: RouteEntry[];
|
|
21
|
+
total: number;
|
|
22
|
+
apiTotal: number;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type ManagerRoutesSection = Omit<RoutesSection, 'apiTotal'>;
|
|
26
|
+
|
|
27
|
+
export type RoutesInventory = {
|
|
28
|
+
core: RoutesSection;
|
|
29
|
+
manager: ManagerRoutesSection;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
type RouteCall = RouteEntry & {
|
|
33
|
+
target: 'app' | 'router';
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
type MountCall = {
|
|
37
|
+
prefix: string;
|
|
38
|
+
factoryName: string;
|
|
39
|
+
file: string;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
type RegistrarCall = {
|
|
43
|
+
name: string;
|
|
44
|
+
file: string;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
type SourceInfo = {
|
|
48
|
+
sourceFile: ts.SourceFile;
|
|
49
|
+
imports: Map<string, string>;
|
|
50
|
+
routeCalls: RouteCall[];
|
|
51
|
+
mounts: MountCall[];
|
|
52
|
+
registrars: RegistrarCall[];
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
type CollectOptions = {
|
|
56
|
+
entryFiles: string[];
|
|
57
|
+
includeFiles: string[];
|
|
58
|
+
includeAppFromResolvedRegistrars: boolean;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
62
|
+
|
|
63
|
+
function toRepoPath(file: string): string {
|
|
64
|
+
return relative(repoRoot, file).replaceAll('\\', '/');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function lineOf(sourceFile: ts.SourceFile, node: ts.Node): number {
|
|
68
|
+
return sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function routeMethodName(name: string): RouteMethod | null {
|
|
72
|
+
const lower = name.toLowerCase();
|
|
73
|
+
return HTTP_METHODS.includes(lower as (typeof HTTP_METHODS)[number])
|
|
74
|
+
? lower.toUpperCase() as RouteMethod
|
|
75
|
+
: null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function pathLiteral(node: ts.Expression | undefined): string {
|
|
79
|
+
if (!node) return DYNAMIC_PATH;
|
|
80
|
+
if (ts.isStringLiteralLike(node)) return node.text.split('?')[0] || '/';
|
|
81
|
+
return DYNAMIC_PATH;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function joinRoutePath(prefix: string, routePath: string): string {
|
|
85
|
+
if (prefix === DYNAMIC_PATH || routePath === DYNAMIC_PATH) return DYNAMIC_PATH;
|
|
86
|
+
const cleanPrefix = prefix === '/' ? '' : prefix.replace(/\/+$/, '');
|
|
87
|
+
const cleanRoute = routePath === '/' ? '' : routePath.startsWith('/') ? routePath : `/${routePath}`;
|
|
88
|
+
return `${cleanPrefix}${cleanRoute}` || '/';
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function resolveImportPath(fromFile: string, specifier: string): string | null {
|
|
92
|
+
if (!specifier.startsWith('.')) return null;
|
|
93
|
+
const base = resolve(dirname(fromFile), specifier);
|
|
94
|
+
const candidates = [
|
|
95
|
+
base,
|
|
96
|
+
base.replace(/\.js$/, '.ts'),
|
|
97
|
+
`${base}.ts`,
|
|
98
|
+
join(base, 'index.ts'),
|
|
99
|
+
];
|
|
100
|
+
return candidates.find(candidate => existsSync(candidate) && statSync(candidate).isFile()) ?? null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function collectTsFiles(dir: string): string[] {
|
|
104
|
+
if (!existsSync(dir)) return [];
|
|
105
|
+
const files: string[] = [];
|
|
106
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
107
|
+
const full = join(dir, entry.name);
|
|
108
|
+
if (entry.isDirectory()) {
|
|
109
|
+
files.push(...collectTsFiles(full));
|
|
110
|
+
} else if (entry.isFile() && entry.name.endsWith('.ts')) {
|
|
111
|
+
files.push(full);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return files.sort();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function createSourceInfo(file: string): SourceInfo {
|
|
118
|
+
const sourceText = readFileSync(file, 'utf8');
|
|
119
|
+
const sourceFile = ts.createSourceFile(file, sourceText, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
120
|
+
const imports = new Map<string, string>();
|
|
121
|
+
const routeCalls: RouteCall[] = [];
|
|
122
|
+
const mounts: MountCall[] = [];
|
|
123
|
+
const registrars: RegistrarCall[] = [];
|
|
124
|
+
|
|
125
|
+
function visit(node: ts.Node): void {
|
|
126
|
+
if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {
|
|
127
|
+
const resolved = resolveImportPath(file, node.moduleSpecifier.text);
|
|
128
|
+
const clause = node.importClause;
|
|
129
|
+
if (resolved && clause) {
|
|
130
|
+
if (clause.name) imports.set(clause.name.text, resolved);
|
|
131
|
+
const namedBindings = clause.namedBindings;
|
|
132
|
+
if (namedBindings && ts.isNamedImports(namedBindings)) {
|
|
133
|
+
for (const element of namedBindings.elements) {
|
|
134
|
+
imports.set(element.name.text, resolved);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (ts.isCallExpression(node)) {
|
|
141
|
+
collectCall(node);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
ts.forEachChild(node, visit);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function collectCall(node: ts.CallExpression): void {
|
|
148
|
+
const expression = node.expression;
|
|
149
|
+
if (ts.isPropertyAccessExpression(expression)) {
|
|
150
|
+
const method = routeMethodName(expression.name.text);
|
|
151
|
+
if (method) {
|
|
152
|
+
const target = routeTarget(expression.expression);
|
|
153
|
+
if (target) {
|
|
154
|
+
routeCalls.push({
|
|
155
|
+
method,
|
|
156
|
+
path: pathLiteral(node.arguments[0]),
|
|
157
|
+
file: toRepoPath(file),
|
|
158
|
+
line: lineOf(sourceFile, node),
|
|
159
|
+
target,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (expression.name.text === 'use' && node.arguments.length >= 2) {
|
|
166
|
+
const prefix = pathLiteral(node.arguments[0]);
|
|
167
|
+
const factoryName = findFactoryName([...node.arguments].slice(1));
|
|
168
|
+
if (factoryName) mounts.push({ prefix, factoryName, file });
|
|
169
|
+
}
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (ts.isIdentifier(expression) && /^register[A-Z].*Routes$/.test(expression.text)) {
|
|
174
|
+
registrars.push({ name: expression.text, file });
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
visit(sourceFile);
|
|
179
|
+
return { sourceFile, imports, routeCalls, mounts, registrars };
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function routeTarget(expression: ts.Expression): 'app' | 'router' | null {
|
|
183
|
+
if (ts.isIdentifier(expression)) {
|
|
184
|
+
if (expression.text === 'app') return 'app';
|
|
185
|
+
if (expression.text === 'router') return 'router';
|
|
186
|
+
}
|
|
187
|
+
if (ts.isPropertyAccessExpression(expression) && expression.name.text === 'router') {
|
|
188
|
+
return 'router';
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function findFactoryName(args: ts.Expression[]): string | null {
|
|
194
|
+
for (const arg of args) {
|
|
195
|
+
if (ts.isCallExpression(arg) && ts.isIdentifier(arg.expression)) return arg.expression.text;
|
|
196
|
+
}
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function buildSourceCache(files: string[]): Map<string, SourceInfo> {
|
|
201
|
+
const cache = new Map<string, SourceInfo>();
|
|
202
|
+
for (const file of files) {
|
|
203
|
+
cache.set(file, createSourceInfo(file));
|
|
204
|
+
}
|
|
205
|
+
return cache;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function getSourceInfo(cache: Map<string, SourceInfo>, file: string): SourceInfo {
|
|
209
|
+
let info = cache.get(file);
|
|
210
|
+
if (!info) {
|
|
211
|
+
info = createSourceInfo(file);
|
|
212
|
+
cache.set(file, info);
|
|
213
|
+
}
|
|
214
|
+
return info;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function collectRoutes(options: CollectOptions): RouteEntry[] {
|
|
218
|
+
const cache = buildSourceCache([...new Set([...options.entryFiles, ...options.includeFiles])]);
|
|
219
|
+
const routes: RouteEntry[] = [];
|
|
220
|
+
const processedRegistrarFiles = new Set<string>();
|
|
221
|
+
const processedMounts = new Set<string>();
|
|
222
|
+
|
|
223
|
+
for (const file of options.includeFiles) {
|
|
224
|
+
const info = getSourceInfo(cache, file);
|
|
225
|
+
routes.push(...info.routeCalls.filter(route => route.target === 'app').map(stripTarget));
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const processRegistrarFile = (file: string): void => {
|
|
229
|
+
if (processedRegistrarFiles.has(file)) return;
|
|
230
|
+
processedRegistrarFiles.add(file);
|
|
231
|
+
const info = getSourceInfo(cache, file);
|
|
232
|
+
if (options.includeAppFromResolvedRegistrars) {
|
|
233
|
+
routes.push(...info.routeCalls.filter(route => route.target === 'app').map(stripTarget));
|
|
234
|
+
}
|
|
235
|
+
processMounts(info);
|
|
236
|
+
for (const registrar of info.registrars) {
|
|
237
|
+
const targetFile = info.imports.get(registrar.name);
|
|
238
|
+
if (targetFile) processRegistrarFile(targetFile);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
const processMounts = (info: SourceInfo): void => {
|
|
243
|
+
for (const mount of info.mounts) {
|
|
244
|
+
const targetFile = info.imports.get(mount.factoryName) ?? mount.file;
|
|
245
|
+
const key = `${mount.file}:${mount.prefix}:${mount.factoryName}:${targetFile}`;
|
|
246
|
+
if (processedMounts.has(key)) continue;
|
|
247
|
+
processedMounts.add(key);
|
|
248
|
+
const targetInfo = getSourceInfo(cache, targetFile);
|
|
249
|
+
routes.push(...targetInfo.routeCalls
|
|
250
|
+
.filter(route => route.target === 'router')
|
|
251
|
+
.map(route => ({
|
|
252
|
+
method: route.method,
|
|
253
|
+
path: joinRoutePath(mount.prefix, route.path),
|
|
254
|
+
file: route.file,
|
|
255
|
+
line: route.line,
|
|
256
|
+
})));
|
|
257
|
+
processMounts(targetInfo);
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
for (const file of options.entryFiles) {
|
|
262
|
+
const info = getSourceInfo(cache, file);
|
|
263
|
+
routes.push(...info.routeCalls.filter(route => route.target === 'app').map(stripTarget));
|
|
264
|
+
processMounts(info);
|
|
265
|
+
for (const registrar of info.registrars) {
|
|
266
|
+
const targetFile = info.imports.get(registrar.name);
|
|
267
|
+
if (targetFile) processRegistrarFile(targetFile);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
return sortRoutes(dedupeRoutes(routes));
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function stripTarget(route: RouteCall): RouteEntry {
|
|
275
|
+
return {
|
|
276
|
+
method: route.method,
|
|
277
|
+
path: route.path,
|
|
278
|
+
file: route.file,
|
|
279
|
+
line: route.line,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function routeKey(route: RouteEntry): string {
|
|
284
|
+
return `${route.method} ${route.path}`;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
function dedupeRoutes(routes: RouteEntry[]): RouteEntry[] {
|
|
288
|
+
const byEndpoint = new Map<string, RouteEntry>();
|
|
289
|
+
for (const route of routes) {
|
|
290
|
+
const key = routeKey(route);
|
|
291
|
+
const existing = byEndpoint.get(key);
|
|
292
|
+
if (!existing || compareRoutes(route, existing) < 0) {
|
|
293
|
+
byEndpoint.set(key, route);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return [...byEndpoint.values()];
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function sortRoutes(routes: RouteEntry[]): RouteEntry[] {
|
|
300
|
+
return [...routes].sort(compareRoutes);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
function compareRoutes(a: RouteEntry, b: RouteEntry): number {
|
|
304
|
+
return a.path.localeCompare(b.path)
|
|
305
|
+
|| ((METHOD_ORDER.get(a.method) ?? 99) - (METHOD_ORDER.get(b.method) ?? 99))
|
|
306
|
+
|| a.method.localeCompare(b.method)
|
|
307
|
+
|| a.file.localeCompare(b.file)
|
|
308
|
+
|| a.line - b.line;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
function section(routes: RouteEntry[]): RoutesSection {
|
|
312
|
+
return {
|
|
313
|
+
routes,
|
|
314
|
+
total: routes.length,
|
|
315
|
+
// Legacy structure/check-doc-drift.sh calls every handler except GET /
|
|
316
|
+
// an API endpoint, including /media/:filename. Preserve that parity.
|
|
317
|
+
apiTotal: routes.filter(route => !(route.method === 'GET' && route.path === '/')).length,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function managerSection(routes: RouteEntry[]): ManagerRoutesSection {
|
|
322
|
+
return {
|
|
323
|
+
routes,
|
|
324
|
+
total: routes.length,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export async function extractRoutes(): Promise<RoutesInventory> {
|
|
329
|
+
const coreRoutesDir = join(repoRoot, 'src', 'routes');
|
|
330
|
+
const managerRoutesDir = join(repoRoot, 'src', 'manager', 'routes');
|
|
331
|
+
const coreRoutes = collectRoutes({
|
|
332
|
+
entryFiles: [join(repoRoot, 'server.ts')],
|
|
333
|
+
includeFiles: collectTsFiles(coreRoutesDir),
|
|
334
|
+
includeAppFromResolvedRegistrars: true,
|
|
335
|
+
});
|
|
336
|
+
const managerRoutes = collectRoutes({
|
|
337
|
+
entryFiles: [join(repoRoot, 'src', 'manager', 'server.ts')],
|
|
338
|
+
includeFiles: collectTsFiles(managerRoutesDir),
|
|
339
|
+
includeAppFromResolvedRegistrars: true,
|
|
340
|
+
});
|
|
341
|
+
return {
|
|
342
|
+
core: section(coreRoutes),
|
|
343
|
+
manager: managerSection(managerRoutes),
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
348
|
+
const inventory = await extractRoutes();
|
|
349
|
+
console.log(JSON.stringify(inventory, null, 2));
|
|
350
|
+
}
|
|
@@ -362,6 +362,38 @@ const GATES = {
|
|
|
362
362
|
}
|
|
363
363
|
},
|
|
364
364
|
},
|
|
365
|
+
'doc-drift': {
|
|
366
|
+
description: 'structure docs match live inventory (docs:check TS extractors + legacy bash checks)',
|
|
367
|
+
check() {
|
|
368
|
+
// CI runners produce platform-dependent file/line inventories
|
|
369
|
+
// (no public/dist, different tracked-file set) that this gate
|
|
370
|
+
// cannot reconcile; it stays a local/pre-release discipline gate.
|
|
371
|
+
if (process.env.CI) {
|
|
372
|
+
return { ok: true, detail: 'skipped on CI (local/pre-release gate only)' };
|
|
373
|
+
}
|
|
374
|
+
const steps = [
|
|
375
|
+
{ name: 'docs:check', cmd: 'npm', args: ['run', 'docs:check', '--silent'], timeout: 120_000 },
|
|
376
|
+
{ name: 'check-doc-drift.sh', cmd: 'bash', args: ['structure/check-doc-drift.sh'], timeout: 120_000 },
|
|
377
|
+
];
|
|
378
|
+
for (const s of steps) {
|
|
379
|
+
const r = run(s.cmd, s.args, { timeout: s.timeout });
|
|
380
|
+
if (r.status !== 0) {
|
|
381
|
+
return { ok: false, detail: `${s.name} failed:\n${(r.stdout || r.stderr || '').slice(-1500)}` };
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return { ok: true, detail: 'docs:check + check-doc-drift.sh clean' };
|
|
385
|
+
},
|
|
386
|
+
},
|
|
387
|
+
'strict-baseline': {
|
|
388
|
+
description: 'any-count ratchet: live counts must not exceed docs/migration/strict-baseline.md',
|
|
389
|
+
check() {
|
|
390
|
+
const r = run('node', ['scripts/check-strict-baseline.mjs'], { timeout: 120_000 });
|
|
391
|
+
if (r.status !== 0) {
|
|
392
|
+
return { ok: false, detail: `strict baseline regressed:\n${(r.stdout || r.stderr || '').slice(-1200)}` };
|
|
393
|
+
}
|
|
394
|
+
return { ok: true, detail: 'live any/debt/allow counts within frozen baseline' };
|
|
395
|
+
},
|
|
396
|
+
},
|
|
365
397
|
};
|
|
366
398
|
|
|
367
399
|
function printResult(name, result) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.browser-panel{flex-direction:column;min-width:0;height:100%;min-height:0;display:flex;overflow:hidden}.browser-unavailable{color:var(--text-dim);justify-content:center;align-items:center;font-size:12px;display:flex}.browser-tab-strip{border-bottom:1px solid var(--border-subtle);background:var(--bg-panel);flex-shrink:0;align-items:center;gap:3px;min-width:0;min-height:32px;padding:4px 6px 0;display:flex;overflow-x:auto}.browser-tab-item{background:0 0;border:1px solid #0000;border-radius:5px 5px 0 0;flex:0 128px;align-items:center;min-width:72px;max-width:150px;min-height:28px;display:inline-flex}.browser-tab-item.is-active{border-color:var(--border-subtle);border-bottom-color:var(--bg-panel);background:var(--canvas-deep)}.browser-tab{all:unset;cursor:pointer;min-width:0;color:var(--text-dim);flex:auto;padding:4px 4px 4px 7px;font-size:11px}.browser-tab-item.is-active .browser-tab{color:var(--text-base)}.browser-tab-title{text-overflow:ellipsis;white-space:nowrap;min-width:0;display:block;overflow:hidden}.browser-tab-close,.browser-tab-add,.browser-collapse-button{all:unset;box-sizing:border-box;cursor:pointer;width:24px;height:24px;color:var(--text-dim);border-radius:4px;flex:none;justify-content:center;align-items:center;font-size:14px;line-height:1;display:inline-flex}.browser-tab-close:hover,.browser-tab-close:focus-visible,.browser-tab-add:hover,.browser-tab-add:focus-visible,.browser-collapse-button:hover,.browser-collapse-button:focus-visible{color:var(--text-base);background:var(--bg-hover)}.browser-tab-add{border:1px solid var(--border-subtle);background:var(--bg-raised);margin-left:1px}.browser-collapse-button{background:var(--bg-panel);margin-left:auto;position:sticky;right:0}.browser-toolbar{border-bottom:1px solid var(--border-subtle);background:var(--bg-panel);flex-shrink:0;align-items:center;gap:4px;min-width:0;padding:4px 8px;display:flex}.browser-nav-btn{all:unset;cursor:pointer;width:24px;height:24px;color:var(--text-dim);border-radius:3px;justify-content:center;align-items:center;font-size:13px;display:inline-flex}.browser-nav-btn:hover{background:var(--bg-hover);color:var(--text-base)}.browser-nav-btn:disabled{cursor:default;opacity:.38}.browser-nav-btn:disabled:hover{color:var(--text-dim);background:0 0}.browser-url-input{border:1px solid var(--border-subtle);background:var(--canvas-deep);min-width:0;color:var(--text-base);border-radius:4px;outline:none;flex:1;padding:3px 8px;font-size:11px}.browser-url-input:focus{border-color:var(--accent-primary)}.browser-go-btn{all:unset;cursor:pointer;border:1px solid var(--border-subtle);color:var(--text-base);background:var(--bg-raised);border-radius:4px;padding:3px 8px;font-size:11px}.browser-go-btn:hover{background:var(--bg-hover);border-color:var(--border-strong)}.browser-status{border-bottom:1px solid var(--border-subtle);color:var(--text-dim);flex-shrink:0;padding:5px 8px;font-size:11px}.browser-status.is-error{color:var(--status-error);background:color-mix(in srgb, var(--status-error) 10%, transparent)}.browser-webview-stack{background:#fff;flex:1 1 0;min-width:0;min-height:0;display:flex;overflow:hidden}.browser-webview-host{background:#fff;flex:1 1 0;min-width:0;min-height:0;display:none;position:relative;overflow:hidden}.browser-webview-host.is-active{display:block}.browser-webview{contain:strict;background:#fff;border:0;width:100%;min-width:0;height:100%;min-height:0;display:flex;position:absolute;inset:0}.browser-external-surface{min-height:0;color:var(--text-dim);background:var(--canvas-deep);flex-direction:column;flex:auto;justify-content:center;align-items:flex-start;gap:8px;padding:18px;display:flex}.browser-external-title{color:var(--text-base);font-size:13px;font-weight:600}.browser-external-body{max-width:42ch;font-size:11px;line-height:1.45}.browser-external-open{all:unset;box-sizing:border-box;cursor:pointer;border:1px solid var(--border-subtle);color:var(--text-base);background:var(--bg-raised);border-radius:4px;margin-top:2px;padding:5px 9px;font-size:11px}.browser-external-open:hover,.browser-external-open:focus-visible{background:var(--bg-hover);border-color:var(--border-strong)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-B3ZGMGGg.js";import{n as r,t as i}from"./desktop-bridge-B1whMBS2.js";var a=e(t(),1),o=new Set([`localhost`,`127.0.0.1`,`[::1]`,`0.0.0.0`]),s=`https://www.google.com/`,c=`https://www.google.com/search?q=`;function l(e){return/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(e)}function u(e){let t=e.split(/[/?#]/,1)[0]??``;if(t.startsWith(`[`)){let e=t.indexOf(`]`);return e>0?t.slice(1,e).toLowerCase():t.toLowerCase()}return t.split(`:`,1)[0]?.toLowerCase()??``}function d(e){let t=e.split(/[/?#]/,1)[0]??``,n=u(e);return n?n===`localhost`||n===`0.0.0.0`||n===`127.0.0.1`||n===`::1`||n.endsWith(`.local`)||l(n)?!0:/:\d+$/.test(t):!1}function f(e){return/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(e)}function p(e){let t=u(e),n=e.split(/[/?#]/,1)[0]??``;return!t||/\s/.test(n)?!1:t===`localhost`||t===`0.0.0.0`||t===`127.0.0.1`||t===`::1`||t.endsWith(`.local`)||l(t)||/^(\d{1,3}\.){3}\d{1,3}$/.test(t)||n.includes(`:`)&&/:\d+$/.test(n)?!0:t.includes(`.`)}function m(e){let t=e.trim();return t?/^https?:\/\//i.test(t)?t:p(t)?`${d(t)?`http`:`https`}://${t}`:f(t)?t:`${c}${encodeURIComponent(t)}`:null}function h(e){return o.has(e)||e.endsWith(`.local`)||l(e)}var g=n();function _(e,t){try{let n=new URL(e);return n.protocol!==`https:`&&n.protocol!==`http:`?!1:t?!0:!(h(n.hostname)||n.origin===window.location.origin)}catch{return!1}}function v(e,t){try{return new URL(e).href===new URL(t).href}catch{return e===t}}function y(e){try{return new URL(e).hostname.replace(/^www\./,``)||`Browser`}catch{return`Browser`}}function b(){let e=navigator.userAgent.match(/\bChrome\/([0-9.]+)/)?.[1]??`120.0.0.0`,t=navigator.platform.toLowerCase();return`Mozilla/5.0 (${t.includes(`mac`)?`Macintosh; Intel Mac OS X 10_15_7`:t.includes(`win`)?`Windows NT 10.0; Win64; x64`:`X11; Linux x86_64`}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${e} Safari/537.36`}function x(e,t=s){return{id:e,url:t,inputUrl:t,title:y(t),blocked:!1,loading:!1,status:null,error:null,canGoBack:!1,canGoForward:!1}}function S(e={}){let t=r(),n=i()?.identify?.()?.electron===!0,o=(0,a.useRef)(x(`browser-tab-1`)),c=(0,a.useRef)(2),[l,u]=(0,a.useState)(()=>[o.current]),[d,f]=(0,a.useState)(o.current.id),p=(0,a.useRef)(null),h=(0,a.useRef)(null),S=(0,a.useRef)(null),C=(0,a.useRef)(new Map),w=(0,a.useRef)(new Map),T=(0,a.useRef)(new Map),E=(0,a.useRef)(b()),D=l.find(e=>e.id===d)??l[0]??o.current,O=(0,a.useCallback)((e,t)=>{u(n=>n.map(n=>n.id===e?{...n,...t}:n))},[]),k=(0,a.useCallback)(e=>{let n=w.current.get(e);if(n)try{let r={canGoBack:n.canGoBack(),canGoForward:n.canGoForward()},i=n.getURL?.();if(i&&_(i,t)){let t=C.current.get(e);if(t&&!v(i,t)){O(e,r);return}t&&C.current.delete(e),r.url=i,r.title=y(i),h.current!==e&&(r.inputUrl=i)}O(e,r)}catch{}},[t,O]),A=(0,a.useCallback)((e,n)=>{if(!t)return()=>{};let r=()=>{O(e,{loading:!0,error:null})},i=()=>{O(e,{loading:!1}),k(e)},a=n=>{let r=n.url;if(r&&_(r,t)){let t=C.current.get(e);if(t&&!v(r,t)){k(e);return}t&&C.current.delete(e);let n={url:r,title:y(r)};h.current!==e&&(n.inputUrl=r),O(e,n)}k(e)},o=t=>{let n=t.title?.trim();n&&O(e,{title:n})},s=t=>{let n=t;if(n.isMainFrame===!1)return;let r=C.current.get(e),i=n.validatedURL??n.url;r&&i&&!v(i,r)||(C.current.delete(e),O(e,{loading:!1,error:n.errorDescription??`Navigation failed (${n.errorCode??`unknown`})`}),k(e))},c=t=>{let n=t.details?.reason??`gone`;C.current.delete(e),O(e,{loading:!1,error:`Browser tab process ${n}. Reload this tab or open a new tab.`})},l=()=>k(e);return n.addEventListener(`did-start-loading`,r),n.addEventListener(`did-stop-loading`,i),n.addEventListener(`did-navigate`,a),n.addEventListener(`did-navigate-in-page`,a),n.addEventListener(`page-title-updated`,o),n.addEventListener(`did-fail-load`,s),n.addEventListener(`render-process-gone`,c),n.addEventListener(`dom-ready`,l),()=>{n.removeEventListener(`did-start-loading`,r),n.removeEventListener(`did-stop-loading`,i),n.removeEventListener(`did-navigate`,a),n.removeEventListener(`did-navigate-in-page`,a),n.removeEventListener(`page-title-updated`,o),n.removeEventListener(`did-fail-load`,s),n.removeEventListener(`render-process-gone`,c),n.removeEventListener(`dom-ready`,l)}},[t,k,O]),j=(0,a.useCallback)((e,t)=>{if(T.current.get(e)?.(),T.current.delete(e),!t){w.current.delete(e);return}let n=t;w.current.set(e,n),T.current.set(e,A(e,n)),k(e)},[A,k]);(0,a.useEffect)(()=>()=>{for(let e of T.current.values())e();T.current.clear(),w.current.clear()},[]);let M=(0,a.useCallback)(()=>t?`Only http and https URLs are supported.`:`Local, private, and same-origin URLs are blocked.`,[t]),N=(0,a.useCallback)((e,r)=>{let i=m(r);if(i){if(!_(i,t)){C.current.delete(e),O(e,{blocked:!0,inputUrl:r,error:M()});return}C.current.set(e,i),O(e,{blocked:!1,error:null,status:n?null:`Opened in a new browser tab. Embedded browser is only available in the Electron manager window.`,inputUrl:i,url:i,title:y(i)}),n||window.open(i,`_blank`,`noopener,noreferrer`)||O(e,{error:`Popup blocked. Allow popups or copy the URL from the address field.`})}},[M,n,t,O]),P=(0,a.useCallback)((e=s)=>{let n=m(e)??`https://www.google.com/`,r=_(n,t),i=x(`browser-tab-${c.current++}`,r?n:s);r||(i.blocked=!0,i.inputUrl=e,i.error=M()),u(e=>[...e,i]),f(i.id)},[M,t]),F=(0,a.useCallback)(e=>{C.current.delete(e),u(t=>{if(t.length<=1){let e=x(`browser-tab-${c.current++}`);return f(e.id),[e]}let n=t.findIndex(t=>t.id===e),r=t.filter(t=>t.id!==e);return e===d&&f((r[Math.max(0,n-1)]??r[0]).id),r})},[d]),I=(0,a.useCallback)(()=>{let e=S.current?.tabId===D.id?S.current.value:p.current?.value??D.inputUrl;h.current=null,S.current=null,N(D.id,e)},[D.id,D.inputUrl,N]),L=(0,a.useCallback)(()=>{h.current=D.id,S.current={tabId:D.id,value:p.current?.value??D.inputUrl}},[D.id,D.inputUrl]),R=(0,a.useCallback)(()=>{window.setTimeout(()=>{document.activeElement!==p.current&&h.current===D.id&&(h.current=null,k(D.id))},150)},[D.id,k]);return(0,a.useEffect)(()=>{function e(e){let t=e.detail;if(t===`closeBrowserTab`&&d)F(d);else if(t===`browserFocusUrl`)p.current?.focus(),p.current?.select();else if(t===`browserReload`)w.current.get(d)?.reload();else if(t===`browserHardReload`){let e=w.current.get(d);e?.reloadIgnoringCache?e.reloadIgnoringCache():e?.reload()}else if(t===`browserBack`){let e=w.current.get(d);e?.canGoBack()&&e.goBack()}else if(t===`browserForward`){let e=w.current.get(d);e?.canGoForward()&&e.goForward()}}return document.addEventListener(`jaw:shortcut-action`,e),()=>document.removeEventListener(`jaw:shortcut-action`,e)},[d,F]),(0,a.useEffect)(()=>i()?.browser?.onOpenUrl?.(e=>{e.disposition===`current-tab`?N(d,e.url):P(e.url)}),[d,P,N]),(0,g.jsxs)(`div`,{className:`browser-panel`,children:[(0,g.jsxs)(`div`,{className:`browser-tab-strip`,"aria-label":`Browser tabs`,children:[l.map(e=>(0,g.jsxs)(`div`,{className:`browser-tab-item${e.id===D.id?` is-active`:``}`,children:[(0,g.jsx)(`button`,{type:`button`,className:`browser-tab`,"aria-label":`Switch to ${e.title}`,"aria-pressed":e.id===D.id,onClick:()=>f(e.id),title:e.title,children:(0,g.jsx)(`span`,{className:`browser-tab-title`,children:e.loading?`Loading...`:e.title})}),(0,g.jsx)(`button`,{type:`button`,className:`browser-tab-close`,"aria-label":`Close ${e.title}`,title:`Close tab`,onClick:()=>F(e.id),children:`×`})]},e.id)),(0,g.jsx)(`button`,{type:`button`,className:`browser-tab-add`,"aria-label":`New browser tab`,title:`New tab`,onClick:()=>P(),children:`+`}),e.onCollapse&&(0,g.jsx)(`button`,{type:`button`,className:`browser-collapse-button`,"aria-label":`Collapse browser panel`,title:`Collapse browser panel`,onClick:e.onCollapse,children:`▼`})]}),(0,g.jsxs)(`div`,{className:`browser-toolbar`,children:[(0,g.jsx)(`button`,{type:`button`,className:`browser-nav-btn`,"aria-label":`Back`,disabled:!n||!D.canGoBack,onClick:()=>w.current.get(D.id)?.goBack(),children:`‹`}),(0,g.jsx)(`button`,{type:`button`,className:`browser-nav-btn`,"aria-label":`Forward`,disabled:!n||!D.canGoForward,onClick:()=>w.current.get(D.id)?.goForward(),children:`›`}),(0,g.jsx)(`button`,{type:`button`,className:`browser-nav-btn`,"aria-label":`Reload`,disabled:!n,onClick:()=>w.current.get(D.id)?.reload(),children:`↻`}),(0,g.jsx)(`input`,{ref:p,className:`browser-url-input`,type:`text`,value:D.inputUrl,onFocus:L,onBlur:R,onChange:e=>{h.current=D.id,S.current={tabId:D.id,value:e.target.value},O(D.id,{inputUrl:e.target.value})},onKeyDown:e=>{e.key===`Enter`&&I()},"aria-label":`URL`}),(0,g.jsx)(`button`,{type:`button`,className:`browser-go-btn`,onMouseDown:e=>e.preventDefault(),onClick:I,children:n?`Go`:`Open`})]}),(D.blocked||D.error||D.loading||D.status)&&(0,g.jsx)(`div`,{className:`browser-status${D.error?` is-error`:``}`,children:D.error??(D.loading?`Loading...`:D.status??`Blocked`)}),n?(0,g.jsx)(`div`,{className:`browser-webview-stack`,children:(0,g.jsx)(`div`,{className:`browser-webview-host is-active`,children:(0,a.createElement)(`webview`,{ref:e=>j(D.id,e),className:`browser-webview`,src:D.url,partition:`persist:cli-jaw-browser`,useragent:E.current,allowpopups:`true`,webpreferences:`contextIsolation=yes,nodeIntegration=no`})},D.id)}):(0,g.jsxs)(`div`,{className:`browser-external-surface`,children:[(0,g.jsx)(`div`,{className:`browser-external-title`,children:`Web browser launcher`}),(0,g.jsx)(`div`,{className:`browser-external-body`,children:`External URLs open in your browser tab. Local/private targets stay blocked from the Web UI.`}),(0,g.jsx)(`button`,{type:`button`,className:`browser-external-open`,onClick:I,children:`Open current URL`})]})]})}export{S as BrowserPanel};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./MarkdownRenderer-Cl0oEICj.js";export{e as MarkdownRenderer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,i as t,n,o as r,r as i,t as a}from"./Permissions-Dc5xnPMu.js";export{a as default,n as isAllowlistValid,i as isPermissionToken,t as isPermissionsAuto,e as parsePermissionsValue,r as seedAutoAllowlist};
|