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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCallback, useEffect, useState, type ReactNode, Suspense } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useRef, useState, type ReactNode, Suspense } from 'react';
|
|
2
2
|
import { ActivityDock } from './components/ActivityDock';
|
|
3
3
|
import { InstanceDrawer } from './components/InstanceDrawer';
|
|
4
4
|
import { InstanceNavigator } from './components/InstanceNavigator';
|
|
@@ -12,7 +12,7 @@ import { BottomPanel, type BottomPanelRenderControls } from './panels/BottomPane
|
|
|
12
12
|
import { usePanelLayout } from './panels/PanelLayoutProvider';
|
|
13
13
|
import { currentManagerSurface } from './panels/panel-capabilities';
|
|
14
14
|
import { getDesktop } from './panels/desktop-bridge';
|
|
15
|
-
import type {
|
|
15
|
+
import type { RightSidebarTabKind, RightSidebarOpenTab, BottomPanelTab } from './panels/types';
|
|
16
16
|
import type { FolderPanelSessionState } from './folder-panel/folder-panel-session';
|
|
17
17
|
import type { WorkbenchRepoRootMode } from './workbench/workbench-resource-types';
|
|
18
18
|
|
|
@@ -21,7 +21,9 @@ const DiffPanel = lazy(() => import('./diff-panel/DiffPanel').then(m => ({ defau
|
|
|
21
21
|
const FolderPanel = lazy(() => import('./folder-panel/FolderPanel').then(m => ({ default: m.FolderPanel })));
|
|
22
22
|
const DocPanel = lazy(() => import('./doc-panel/DocPanel').then(m => ({ default: m.DocPanel })));
|
|
23
23
|
const BrowserPanel = lazy(() => import('./browser-panel/BrowserPanel').then(m => ({ default: m.BrowserPanel })));
|
|
24
|
-
|
|
24
|
+
const DesignPanel = lazy(() => import('./design-panel/DesignPanel').then(m => ({ default: m.DesignPanel })));
|
|
25
|
+
import { FileFolderSplitPanel } from './panels/FileFolderSplitPanel';
|
|
26
|
+
import { InstancePreview, type PreviewInsertTextRequest, type PreviewInsertTextResult } from './InstancePreview';
|
|
25
27
|
import { DashboardSettingsSidebar, type DashboardSettingsSection } from './dashboard-settings/DashboardSettingsSidebar';
|
|
26
28
|
import { DashboardSettingsWorkspace } from './dashboard-settings/DashboardSettingsWorkspace';
|
|
27
29
|
import { NotesSidebar, type NotesSidebarMode } from './notes/NotesSidebar';
|
|
@@ -34,6 +36,7 @@ import { DashboardScheduleWorkspace } from './dashboard-schedule/DashboardSchedu
|
|
|
34
36
|
import { DashboardRemindersSidebar, type RemindersView } from './dashboard-reminders/DashboardRemindersSidebar';
|
|
35
37
|
import { DashboardRemindersWorkspace } from './dashboard-reminders/DashboardRemindersWorkspace';
|
|
36
38
|
import { useRemindersFeed } from './dashboard-reminders/useRemindersFeed';
|
|
39
|
+
import { useEmbeddedBrowserTargetSync } from './browser-panel/use-embedded-target-sync';
|
|
37
40
|
import {
|
|
38
41
|
describeDroppedPathsEvent,
|
|
39
42
|
firstDirectory,
|
|
@@ -65,7 +68,6 @@ import type { JawCeoVoiceController } from './jaw-ceo/useJawCeoVoice';
|
|
|
65
68
|
import { ModeSwitch } from './code/ModeSwitch';
|
|
66
69
|
const CodeCanvas = lazy(() => import('./code/CodeCanvas').then(m => ({ default: m.CodeCanvas })));
|
|
67
70
|
import './code/code.css';
|
|
68
|
-
import { useWorkbenchResourceState } from './workbench/useWorkbenchResourceState';
|
|
69
71
|
|
|
70
72
|
type WorkspaceSurfaceProps = {
|
|
71
73
|
active: boolean;
|
|
@@ -170,107 +172,162 @@ type Props = {
|
|
|
170
172
|
workingDir: string;
|
|
171
173
|
};
|
|
172
174
|
|
|
175
|
+
type RightPanelRenderContext = {
|
|
176
|
+
/** Active module tab id (keep-alive bodies need to know visibility). */
|
|
177
|
+
activeTabId: string | null;
|
|
178
|
+
/** Selected instance's primary projectDir (Design OD-2 snapshot source). */
|
|
179
|
+
primaryProjectDir: string | null;
|
|
180
|
+
/** Fallback Files root for tabs that have no root of their own yet. */
|
|
181
|
+
fallbackFolderRootPath: string | null;
|
|
182
|
+
/** The Files tab whose state feeds the singleton Diff panel (active or first). */
|
|
183
|
+
diffFilesTab: RightSidebarOpenTab | null;
|
|
184
|
+
gitRefreshVersion: number;
|
|
185
|
+
onOpenFileGlobal: (path: string) => void;
|
|
186
|
+
onTabPreviewFile: (tabId: string, path: string) => void;
|
|
187
|
+
onTabRootChange: (tabId: string, path: string | null) => void;
|
|
188
|
+
onTabRepoRootChange: (tabId: string, path: string | null, mode?: WorkbenchRepoRootMode) => void;
|
|
189
|
+
onFollowInstanceRepoRoot: (tabId: string | null, path: string | null) => void;
|
|
190
|
+
onBrowserPageState: (tabId: string, state: { url: string; title: string }) => void;
|
|
191
|
+
onOpenBrowserWindow: (url: string) => void;
|
|
192
|
+
onInsertCommentIntoPreview: (port: number, text: string) => Promise<PreviewInsertTextResult>;
|
|
193
|
+
onGitRefresh: () => void;
|
|
194
|
+
selectedInstance: DashboardInstance | null;
|
|
195
|
+
dashboardSettingsUi: DashboardRegistryUi;
|
|
196
|
+
onDashboardSettingsPatch: (patch: Partial<DashboardRegistryUi>) => void;
|
|
197
|
+
notesModel: NotesModelState;
|
|
198
|
+
folderSessions: Record<string, FolderPanelSessionState | null>;
|
|
199
|
+
onFolderSessionChange: (tabId: string, state: FolderPanelSessionState) => void;
|
|
200
|
+
};
|
|
201
|
+
|
|
173
202
|
function renderRightPanelContent(
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
repoRootPath: string | null,
|
|
178
|
-
repoRootMode: WorkbenchRepoRootMode,
|
|
179
|
-
gitRefreshVersion: number,
|
|
180
|
-
onPreviewFile: (path: string) => void,
|
|
181
|
-
onFolderRootChange: (path: string | null) => void,
|
|
182
|
-
onRepoRootChange: (path: string | null, mode?: WorkbenchRepoRootMode) => void,
|
|
183
|
-
onFollowInstanceRepoRoot: (path: string | null) => void,
|
|
184
|
-
onGitRefresh: () => void,
|
|
185
|
-
selectedInstance: DashboardInstance | null,
|
|
186
|
-
dashboardSettingsUi: DashboardRegistryUi,
|
|
187
|
-
onDashboardSettingsPatch: (patch: Partial<DashboardRegistryUi>) => void,
|
|
188
|
-
notesModel: NotesModelState,
|
|
189
|
-
jawCeoPanel: ReactNode,
|
|
190
|
-
folderPanelSession: FolderPanelSessionState | null,
|
|
191
|
-
onFolderPanelSessionChange: (state: FolderPanelSessionState) => void,
|
|
203
|
+
kind: RightSidebarTabKind,
|
|
204
|
+
tab: RightSidebarOpenTab,
|
|
205
|
+
ctx: RightPanelRenderContext,
|
|
192
206
|
): ReactNode {
|
|
193
207
|
const fallback = <div style={{ padding: '12px', color: 'var(--text-dim)', fontSize: '12px' }}>Loading...</div>;
|
|
194
|
-
switch (
|
|
195
|
-
case 'diff':
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
208
|
+
switch (kind) {
|
|
209
|
+
case 'diff': {
|
|
210
|
+
const refTab = ctx.diffFilesTab;
|
|
211
|
+
const files = refTab?.files ?? {};
|
|
212
|
+
return <Suspense fallback={fallback}><DiffPanel
|
|
213
|
+
selectedInstance={ctx.selectedInstance}
|
|
214
|
+
settings={ctx.dashboardSettingsUi}
|
|
215
|
+
folderRootPath={files.folderRootPath ?? ctx.fallbackFolderRootPath}
|
|
216
|
+
repoRootPath={files.repoRootPath ?? null}
|
|
217
|
+
repoRootMode={files.repoRootMode ?? 'instance'}
|
|
218
|
+
selectedFilePath={files.activeFilePath ?? null}
|
|
219
|
+
onRepoRootChange={(path, mode) => { if (refTab) ctx.onTabRepoRootChange(refTab.id, path, mode); }}
|
|
220
|
+
onFollowInstanceRepoRoot={path => ctx.onFollowInstanceRepoRoot(refTab?.id ?? null, path)}
|
|
221
|
+
onPreviewFile={ctx.onOpenFileGlobal}
|
|
222
|
+
onGitRefresh={ctx.onGitRefresh}
|
|
223
|
+
onSettingsPatch={ctx.onDashboardSettingsPatch}
|
|
224
|
+
/></Suspense>;
|
|
225
|
+
}
|
|
226
|
+
case 'files': {
|
|
227
|
+
const files = tab.files ?? {};
|
|
228
|
+
const folderRoot = files.folderRootPath ?? ctx.fallbackFolderRootPath;
|
|
229
|
+
const repoRootMode = files.repoRootMode ?? 'instance';
|
|
230
|
+
return <FileFolderSplitPanel
|
|
231
|
+
filePane={<Suspense fallback={fallback}><DocPanel filePath={files.activeFilePath ?? undefined} onOpenLocalFile={path => ctx.onTabPreviewFile(tab.id, path)} /></Suspense>}
|
|
232
|
+
folderPane={<Suspense fallback={fallback}><FolderPanel selectedFilePath={files.activeFilePath ?? null} externalRootPath={folderRoot} repoRootPath={repoRootMode === 'instance' ? files.repoRootPath ?? null : null} gitRefreshVersion={ctx.gitRefreshVersion} notesTree={ctx.notesModel.tree} notesRoot={ctx.notesModel.notesRoot} onRootChange={path => ctx.onTabRootChange(tab.id, path)} onRepoRootChange={path => ctx.onTabRepoRootChange(tab.id, path)} onGitRefresh={ctx.onGitRefresh} onPreviewFile={path => ctx.onTabPreviewFile(tab.id, path)} sessionState={ctx.folderSessions[tab.id] ?? null} onSessionStateChange={state => ctx.onFolderSessionChange(tab.id, state)} /></Suspense>}
|
|
233
|
+
/>;
|
|
234
|
+
}
|
|
235
|
+
case 'browser': return <Suspense fallback={fallback}><BrowserPanel
|
|
236
|
+
singlePage
|
|
237
|
+
initialUrl={tab.browser?.url}
|
|
238
|
+
isActivePanel={tab.id === ctx.activeTabId}
|
|
239
|
+
moduleTabId={tab.id}
|
|
240
|
+
selectedInstancePort={ctx.selectedInstance?.port ?? null}
|
|
241
|
+
onInsertCommentIntoPreview={ctx.onInsertCommentIntoPreview}
|
|
242
|
+
onPageStateChange={state => ctx.onBrowserPageState(tab.id, state)}
|
|
243
|
+
onOpenNewWindow={ctx.onOpenBrowserWindow}
|
|
244
|
+
/></Suspense>;
|
|
245
|
+
case 'design': return <Suspense fallback={fallback}><DesignPanel
|
|
246
|
+
tab={tab}
|
|
247
|
+
primaryProjectDir={ctx.primaryProjectDir}
|
|
248
|
+
selectedInstancePort={ctx.selectedInstance?.port ?? null}
|
|
249
|
+
onOpenInBrowser={ctx.onOpenBrowserWindow}
|
|
207
250
|
/></Suspense>;
|
|
208
|
-
case 'folder': return <Suspense fallback={fallback}><FolderPanel selectedFilePath={previewFilePath} externalRootPath={folderRootPath} repoRootPath={repoRootMode === 'instance' ? repoRootPath : null} gitRefreshVersion={gitRefreshVersion} notesTree={notesModel.tree} notesRoot={notesModel.notesRoot} onRootChange={onFolderRootChange} onRepoRootChange={onRepoRootChange} onGitRefresh={onGitRefresh} onPreviewFile={onPreviewFile} sessionState={folderPanelSession} onSessionStateChange={onFolderPanelSessionChange} /></Suspense>;
|
|
209
|
-
case 'doc': return <Suspense fallback={fallback}><DocPanel filePath={previewFilePath ?? undefined} onOpenLocalFile={onPreviewFile} /></Suspense>;
|
|
210
|
-
case 'browser': return <Suspense fallback={fallback}><BrowserPanel /></Suspense>;
|
|
211
|
-
case 'ceo': return jawCeoPanel;
|
|
212
251
|
default: return null;
|
|
213
252
|
}
|
|
214
253
|
}
|
|
215
254
|
|
|
216
|
-
function renderBottomTabContent(tab: BottomPanelTab, controls: BottomPanelRenderControls): ReactNode {
|
|
255
|
+
function renderBottomTabContent(tab: BottomPanelTab, controls: BottomPanelRenderControls, selectedInstancePort: number | null, onInsertCommentIntoPreview: (port: number, text: string) => Promise<PreviewInsertTextResult>): ReactNode {
|
|
217
256
|
const fallback = <div style={{ padding: '12px', color: 'var(--text-dim)', fontSize: '12px' }}>Loading...</div>;
|
|
218
257
|
switch (tab) {
|
|
219
258
|
case 'terminal': return <Suspense fallback={fallback}><TerminalPanel onCollapse={controls.onCollapse} onEmptySessions={controls.onCloseTab} /></Suspense>;
|
|
220
|
-
case 'browser': return <Suspense fallback={fallback}><BrowserPanel onCollapse={controls.onCollapse} /></Suspense>;
|
|
259
|
+
case 'browser': return <Suspense fallback={fallback}><BrowserPanel onCollapse={controls.onCollapse} selectedInstancePort={selectedInstancePort} onInsertCommentIntoPreview={onInsertCommentIntoPreview} /></Suspense>;
|
|
221
260
|
default: return null;
|
|
222
261
|
}
|
|
223
262
|
}
|
|
224
263
|
|
|
225
264
|
export function SidebarRailRouter(props: Props) {
|
|
226
265
|
const panelLayout = usePanelLayout();
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
bumpGitRefresh,
|
|
239
|
-
} = workbenchResource;
|
|
240
|
-
const [folderPanelSession, setFolderPanelSession] = useState<FolderPanelSessionState | null>(null);
|
|
266
|
+
// Per-Files-tab resource state lives in the tab metadata (020 §5 Option B).
|
|
267
|
+
// The registry's rightFolderRootPath remains the fallback root for tabs
|
|
268
|
+
// that have not picked their own root yet.
|
|
269
|
+
const fallbackFolderRootPath = props.dashboardSettingsUi.rightFolderRootPath;
|
|
270
|
+
const openTabs = panelLayout.state.rightPanel.tabs.openTabs;
|
|
271
|
+
const activeTabId = panelLayout.state.rightPanel.tabs.activeTabId;
|
|
272
|
+
const activeTab = openTabs.find(t => t.id === activeTabId) ?? null;
|
|
273
|
+
const targetFilesTab = activeTab?.kind === 'files' ? activeTab : (openTabs.find(t => t.kind === 'files') ?? null);
|
|
274
|
+
const [gitRefreshVersion, setGitRefreshVersion] = useState(0);
|
|
275
|
+
const bumpGitRefresh = useCallback(() => setGitRefreshVersion(version => version + 1), []);
|
|
276
|
+
const [folderSessions, setFolderSessions] = useState<Record<string, FolderPanelSessionState | null>>({});
|
|
241
277
|
const [, setRecentDroppedPaths] = useState<ElectronDroppedPathsEvent | null>(null);
|
|
242
278
|
const [dropNotice, setDropNotice] = useState<string | null>(null);
|
|
243
279
|
const [remindersView, setRemindersView] = useState<RemindersView>('matrix');
|
|
244
280
|
const remindersFeed = useRemindersFeed({ active: props.sidebarMode === 'reminders' });
|
|
245
281
|
const isElectron = currentManagerSurface() === 'electron';
|
|
246
282
|
const desktopPanelsAvailable = isElectron;
|
|
283
|
+
const [previewInsertTextRequest, setPreviewInsertTextRequest] = useState<PreviewInsertTextRequest | null>(null);
|
|
284
|
+
const previewInsertSeqRef = useRef(0);
|
|
285
|
+
const previewInsertResolversRef = useRef(new Map<string, (result: PreviewInsertTextResult) => void>());
|
|
286
|
+
// 030 v2/v3: keep the server registry in sync, deliver shares to the
|
|
287
|
+
// selected instance's runtime-context, and relay screenshot commands.
|
|
288
|
+
useEmbeddedBrowserTargetSync(isElectron, props.selectedInstance?.port ?? null);
|
|
247
289
|
const rightPanelOpen = desktopPanelsAvailable && panelLayout.effectiveRightOpen;
|
|
248
|
-
const
|
|
249
|
-
|| panelLayout.state.rightPanel.bottomMode === 'ceo';
|
|
250
|
-
const codeWorkingDir = rightFolderRootPath || props.workingDir || '';
|
|
290
|
+
const codeWorkingDir = targetFilesTab?.files?.folderRootPath || fallbackFolderRootPath || props.workingDir || '';
|
|
251
291
|
|
|
252
|
-
|
|
253
|
-
if (
|
|
254
|
-
|
|
292
|
+
const handleInsertCommentIntoPreview = useCallback((port: number, text: string): Promise<PreviewInsertTextResult> => {
|
|
293
|
+
if (props.selectedInstance?.port !== port) {
|
|
294
|
+
return Promise.resolve({ ok: false, error: 'selected instance changed before preview insert' });
|
|
255
295
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
if (
|
|
260
|
-
|
|
261
|
-
props.onJawCeoOpenChange?.(false);
|
|
296
|
+
if (!props.previewEnabled) {
|
|
297
|
+
return Promise.resolve({ ok: false, error: 'Preview is off. Turn it on before inserting a browser comment.' });
|
|
298
|
+
}
|
|
299
|
+
if (props.sidebarMode !== 'instances' || props.viewMode !== 'jaw' || props.activeDetailTab !== 'preview') {
|
|
300
|
+
return Promise.resolve({ ok: false, error: 'Open the selected instance Preview tab before inserting a browser comment.' });
|
|
262
301
|
}
|
|
263
|
-
|
|
302
|
+
const id = `browser-comment-${Date.now()}-${++previewInsertSeqRef.current}`;
|
|
303
|
+
setPreviewInsertTextRequest({ id, port, text });
|
|
304
|
+
return new Promise(resolve => {
|
|
305
|
+
const timer = window.setTimeout(() => {
|
|
306
|
+
previewInsertResolversRef.current.delete(id);
|
|
307
|
+
setPreviewInsertTextRequest(current => current?.id === id ? null : current);
|
|
308
|
+
resolve({ ok: false, error: 'preview insert timed out; reopen the selected instance Preview tab and try again' });
|
|
309
|
+
}, 1400);
|
|
310
|
+
previewInsertResolversRef.current.set(id, result => {
|
|
311
|
+
window.clearTimeout(timer);
|
|
312
|
+
resolve(result);
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
}, [props.activeDetailTab, props.previewEnabled, props.selectedInstance?.port, props.sidebarMode, props.viewMode]);
|
|
264
316
|
|
|
265
|
-
const
|
|
317
|
+
const handlePreviewInsertTextResult = useCallback((id: string, result: PreviewInsertTextResult): void => {
|
|
318
|
+
const resolve = previewInsertResolversRef.current.get(id);
|
|
319
|
+
if (!resolve) return;
|
|
320
|
+
previewInsertResolversRef.current.delete(id);
|
|
321
|
+
setPreviewInsertTextRequest(current => current?.id === id ? null : current);
|
|
322
|
+
resolve(result);
|
|
323
|
+
}, []);
|
|
324
|
+
|
|
325
|
+
// CEO: handled through right sidebar tab system now. CEO is hidden in v1,
|
|
326
|
+
// but we keep the overlay console for non-Electron surfaces.
|
|
327
|
+
const ceoConsoleOpen = !isElectron && props.jawCeoOpen;
|
|
266
328
|
const handleCloseCeo = useCallback(() => {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
panelLayout.dispatch({ type: 'CLOSE_RIGHT_SUB', slot });
|
|
270
|
-
} else {
|
|
271
|
-
props.onJawCeoOpenChange?.(false);
|
|
272
|
-
}
|
|
273
|
-
}, [rightPanelCeoActive, panelLayout, props.onJawCeoOpenChange]);
|
|
329
|
+
props.onJawCeoOpenChange?.(false);
|
|
330
|
+
}, [props.onJawCeoOpenChange]);
|
|
274
331
|
|
|
275
332
|
const jawCeoPanel = (ceoConsoleOpen && props.jawCeo && props.jawCeoVoice) ? (
|
|
276
333
|
<JawCeoConsole
|
|
@@ -289,35 +346,59 @@ export function SidebarRailRouter(props: Props) {
|
|
|
289
346
|
&& props.notesSelectedNote
|
|
290
347
|
&& !props.notesSelectedNote.tags?.includes(props.notesModel.tagFilter),
|
|
291
348
|
);
|
|
349
|
+
// External file open: focus/create a Files tab and assign the file to it.
|
|
292
350
|
function handleRightPreviewFile(path: string): void {
|
|
293
351
|
const previewPath = expandDesktopHomePath(path.trim());
|
|
294
352
|
if (!previewPath) return;
|
|
295
|
-
|
|
296
|
-
panelLayout.dispatch({ type: 'OPEN_RIGHT_PANEL', mode: 'doc', slot: 'bottom' });
|
|
353
|
+
panelLayout.dispatch({ type: 'OPEN_FILE_IN_FILES_TAB', path: previewPath });
|
|
297
354
|
}
|
|
298
355
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
current?.rootPath === props.dashboardSettingsUi.rightFolderRootPath
|
|
306
|
-
? current
|
|
307
|
-
: null
|
|
308
|
-
));
|
|
309
|
-
}, [props.dashboardSettingsUi.rightFolderRootPath, rightFolderRootPath, setFolderRootPath, setRepoRootPath]);
|
|
356
|
+
// Per-tab callbacks bound to a specific Files module tab.
|
|
357
|
+
const handleTabPreviewFile = useCallback((tabId: string, path: string): void => {
|
|
358
|
+
const previewPath = expandDesktopHomePath(path.trim());
|
|
359
|
+
if (!previewPath) return;
|
|
360
|
+
panelLayout.dispatch({ type: 'SET_FILES_TAB_FILE', tabId, path: previewPath });
|
|
361
|
+
}, [panelLayout]);
|
|
310
362
|
|
|
311
|
-
const
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
setRepoRootPath(null);
|
|
363
|
+
const handleTabRootChange = useCallback((tabId: string, path: string | null): void => {
|
|
364
|
+
setFolderSessions(current => (current[tabId] ? { ...current, [tabId]: null } : current));
|
|
365
|
+
panelLayout.dispatch({ type: 'SET_FILES_TAB_ROOT', tabId, path });
|
|
315
366
|
props.onDashboardSettingsPatch({ rightFolderRootPath: path });
|
|
316
|
-
}, [props.onDashboardSettingsPatch
|
|
367
|
+
}, [panelLayout, props.onDashboardSettingsPatch]);
|
|
368
|
+
|
|
369
|
+
const handleTabRepoRootChange = useCallback((tabId: string, path: string | null, mode: WorkbenchRepoRootMode = 'instance'): void => {
|
|
370
|
+
panelLayout.dispatch({ type: 'SET_FILES_TAB_REPO_ROOT', tabId, path, mode });
|
|
371
|
+
}, [panelLayout]);
|
|
372
|
+
|
|
373
|
+
const handleFollowInstanceRepoRoot = useCallback((tabId: string | null, path: string | null): void => {
|
|
374
|
+
if (!tabId) return;
|
|
375
|
+
// Explicit follow-instance reset clears a manual pin.
|
|
376
|
+
panelLayout.dispatch({ type: 'SET_FILES_TAB_REPO_ROOT', tabId, path, mode: 'follow-instance' });
|
|
377
|
+
}, [panelLayout]);
|
|
378
|
+
|
|
379
|
+
const handleFolderSessionChange = useCallback((tabId: string, state: FolderPanelSessionState): void => {
|
|
380
|
+
setFolderSessions(current => ({ ...current, [tabId]: state }));
|
|
381
|
+
}, []);
|
|
317
382
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
383
|
+
// Browser module page state: the module tab owns its page url/title.
|
|
384
|
+
const handleBrowserPageState = useCallback((tabId: string, state: { url: string; title: string }): void => {
|
|
385
|
+
panelLayout.dispatch({ type: 'SET_BROWSER_TAB_STATE', tabId, url: state.url, title: state.title });
|
|
386
|
+
}, [panelLayout]);
|
|
387
|
+
|
|
388
|
+
// "Open in new tab" from an embedded page creates a new Browser module tab.
|
|
389
|
+
const handleOpenBrowserWindow = useCallback((url: string): void => {
|
|
390
|
+
panelLayout.dispatch({ type: 'OPEN_BROWSER_MODULE_TAB', url });
|
|
391
|
+
}, [panelLayout]);
|
|
392
|
+
|
|
393
|
+
// Code workspace root change: update the target Files tab root (without
|
|
394
|
+
// forcing the sidebar open) and keep the registry fallback in sync.
|
|
395
|
+
const targetFilesTabId = targetFilesTab?.id ?? null;
|
|
396
|
+
const handleCodeWorkingDirChange = useCallback((path: string | null): void => {
|
|
397
|
+
if (targetFilesTabId) {
|
|
398
|
+
panelLayout.dispatch({ type: 'SET_FILES_TAB_ROOT', tabId: targetFilesTabId, path });
|
|
399
|
+
}
|
|
400
|
+
props.onDashboardSettingsPatch({ rightFolderRootPath: path });
|
|
401
|
+
}, [panelLayout, props.onDashboardSettingsPatch, targetFilesTabId]);
|
|
321
402
|
|
|
322
403
|
const handleDroppedPaths = useCallback((event: ElectronDroppedPathsEvent): void => {
|
|
323
404
|
setRecentDroppedPaths(event);
|
|
@@ -325,13 +406,13 @@ export function SidebarRailRouter(props: Props) {
|
|
|
325
406
|
if (event.source === 'preview') return;
|
|
326
407
|
const directory = firstDirectory(event.entries);
|
|
327
408
|
if (directory) {
|
|
328
|
-
|
|
329
|
-
|
|
409
|
+
panelLayout.dispatch({ type: 'OPEN_FOLDER_IN_FILES_TAB', path: directory.path });
|
|
410
|
+
props.onDashboardSettingsPatch({ rightFolderRootPath: directory.path });
|
|
330
411
|
return;
|
|
331
412
|
}
|
|
332
413
|
const file = firstFile(event.entries);
|
|
333
414
|
if (file) handleRightPreviewFile(file.path);
|
|
334
|
-
}, [panelLayout,
|
|
415
|
+
}, [panelLayout, props.onDashboardSettingsPatch]);
|
|
335
416
|
|
|
336
417
|
const electronDrop = useElectronDroppedPaths({ onDroppedPaths: handleDroppedPaths });
|
|
337
418
|
|
|
@@ -341,26 +422,9 @@ export function SidebarRailRouter(props: Props) {
|
|
|
341
422
|
const primaryProjectDir = props.selectedInstance?.projectDirs?.[0]?.trim() || null;
|
|
342
423
|
const handleLoadPrimaryProjectDir = useCallback((): void => {
|
|
343
424
|
if (!primaryProjectDir) return;
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
panelLayout.dispatch({ type: 'OPEN_RIGHT_PANEL', mode: 'folder', slot: 'top' });
|
|
348
|
-
}
|
|
349
|
-
}, [panelLayout, primaryProjectDir, updateRightFolderRoot]);
|
|
350
|
-
const renderRightHeaderAction = useCallback((mode: RightPanelMode): ReactNode => {
|
|
351
|
-
if (mode !== 'folder') return null;
|
|
352
|
-
return (
|
|
353
|
-
<button
|
|
354
|
-
type="button"
|
|
355
|
-
className="right-sub-action right-sub-load-folder"
|
|
356
|
-
disabled={!primaryProjectDir || rightFolderRootPath === primaryProjectDir}
|
|
357
|
-
title={primaryProjectDir ? `Load ${primaryProjectDir}` : 'No project folder'}
|
|
358
|
-
onClick={handleLoadPrimaryProjectDir}
|
|
359
|
-
>
|
|
360
|
-
불러오기
|
|
361
|
-
</button>
|
|
362
|
-
);
|
|
363
|
-
}, [handleLoadPrimaryProjectDir, primaryProjectDir, rightFolderRootPath]);
|
|
425
|
+
panelLayout.dispatch({ type: 'OPEN_FOLDER_IN_FILES_TAB', path: primaryProjectDir });
|
|
426
|
+
props.onDashboardSettingsPatch({ rightFolderRootPath: primaryProjectDir });
|
|
427
|
+
}, [panelLayout, primaryProjectDir, props.onDashboardSettingsPatch]);
|
|
364
428
|
|
|
365
429
|
return (
|
|
366
430
|
<NotesCommandProvider>
|
|
@@ -374,10 +438,31 @@ export function SidebarRailRouter(props: Props) {
|
|
|
374
438
|
onCloseDrawer={props.onCloseDrawer}
|
|
375
439
|
rightPanelOpen={rightPanelOpen}
|
|
376
440
|
rightPanelWidth={panelLayout.state.rightPanel.width}
|
|
377
|
-
rightPanelContent={rightPanelOpen ? <RightSidebar
|
|
441
|
+
rightPanelContent={rightPanelOpen ? <RightSidebar onLoadProjectFolder={handleLoadPrimaryProjectDir} loadProjectFolderDisabled={!primaryProjectDir || (targetFilesTab?.files?.folderRootPath ?? fallbackFolderRootPath) === primaryProjectDir} renderPanel={(kind, tab) => renderRightPanelContent(kind, tab, {
|
|
442
|
+
activeTabId,
|
|
443
|
+
primaryProjectDir,
|
|
444
|
+
fallbackFolderRootPath,
|
|
445
|
+
diffFilesTab: targetFilesTab,
|
|
446
|
+
gitRefreshVersion,
|
|
447
|
+
onOpenFileGlobal: handleRightPreviewFile,
|
|
448
|
+
onTabPreviewFile: handleTabPreviewFile,
|
|
449
|
+
onTabRootChange: handleTabRootChange,
|
|
450
|
+
onTabRepoRootChange: handleTabRepoRootChange,
|
|
451
|
+
onFollowInstanceRepoRoot: handleFollowInstanceRepoRoot,
|
|
452
|
+
onBrowserPageState: handleBrowserPageState,
|
|
453
|
+
onOpenBrowserWindow: handleOpenBrowserWindow,
|
|
454
|
+
onInsertCommentIntoPreview: handleInsertCommentIntoPreview,
|
|
455
|
+
onGitRefresh: bumpGitRefresh,
|
|
456
|
+
selectedInstance: props.selectedInstance,
|
|
457
|
+
dashboardSettingsUi: props.dashboardSettingsUi,
|
|
458
|
+
onDashboardSettingsPatch: props.onDashboardSettingsPatch,
|
|
459
|
+
notesModel: props.notesModel,
|
|
460
|
+
folderSessions,
|
|
461
|
+
onFolderSessionChange: handleFolderSessionChange,
|
|
462
|
+
})} /> : undefined}
|
|
378
463
|
bottomPanelOpen={bottomPanelOpen}
|
|
379
464
|
bottomPanelHeight={panelLayout.state.bottomPanel.height}
|
|
380
|
-
bottomPanelContent={panelLayout.state.bottomPanel.tabs.length > 0 ? <BottomPanel renderTab={renderBottomTabContent} /> : undefined}
|
|
465
|
+
bottomPanelContent={panelLayout.state.bottomPanel.tabs.length > 0 ? <BottomPanel renderTab={(tab, controls) => renderBottomTabContent(tab, controls, props.selectedInstance?.port ?? null, handleInsertCommentIntoPreview)} /> : undefined}
|
|
381
466
|
navigator={(
|
|
382
467
|
<>
|
|
383
468
|
<SidebarRail
|
|
@@ -433,13 +518,13 @@ export function SidebarRailRouter(props: Props) {
|
|
|
433
518
|
<div className="workspace-surface-layer">
|
|
434
519
|
<WorkspaceSurface active={props.sidebarMode === 'instances' && props.viewMode === 'jaw'}>
|
|
435
520
|
<Workbench mode={props.activeDetailTab} onModeChange={props.onDetailTabChange} header={props.workbenchHeader} modeActions={props.jawCeoWorkbenchButton} overview={props.detailContent('overview')} preview={(
|
|
436
|
-
<InstancePreview instance={props.selectedInstance} data={props.data} enabled={props.previewEnabled} active={props.sidebarMode === 'instances' && props.activeDetailTab === 'preview'} refreshKey={props.previewRefreshKey} theme={props.previewTheme} {...(props.onOpenNotesFromPreview ? { onOpenNotesFromPreview: props.onOpenNotesFromPreview } : {})} onOpenDocFromPreview={handleRightPreviewFile} onPreviewDroppedFiles={handlePreviewDroppedFiles} docPanelCapable={desktopPanelsAvailable} />
|
|
521
|
+
<InstancePreview instance={props.selectedInstance} data={props.data} enabled={props.previewEnabled} active={props.sidebarMode === 'instances' && props.activeDetailTab === 'preview'} refreshKey={props.previewRefreshKey} theme={props.previewTheme} {...(props.onOpenNotesFromPreview ? { onOpenNotesFromPreview: props.onOpenNotesFromPreview } : {})} onOpenDocFromPreview={handleRightPreviewFile} onPreviewDroppedFiles={handlePreviewDroppedFiles} docPanelCapable={desktopPanelsAvailable} previewInsertTextRequest={previewInsertTextRequest} onPreviewInsertTextResult={handlePreviewInsertTextResult} />
|
|
437
522
|
)} logs={props.detailContent('logs')} settings={props.detailContent('settings')} />
|
|
438
523
|
</WorkspaceSurface>
|
|
439
524
|
{props.viewMode === 'code' && props.sidebarMode === 'instances' ? (
|
|
440
525
|
<WorkspaceSurface active>
|
|
441
526
|
<Suspense fallback={<div style={{ padding: '24px', color: 'var(--text-dim)', fontSize: '13px' }}>Loading Code workspace...</div>}>
|
|
442
|
-
<CodeCanvas port={props.port} workingDir={codeWorkingDir} onWorkingDirChange={
|
|
527
|
+
<CodeCanvas port={props.port} workingDir={codeWorkingDir} onWorkingDirChange={handleCodeWorkingDirChange} onOpenLocalFile={handleRightPreviewFile} />
|
|
443
528
|
</Suspense>
|
|
444
529
|
</WorkspaceSurface>
|
|
445
530
|
) : null}
|