cli-jaw 2.17.38 → 2.17.39
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 +40 -1
- package/dist/bin/commands/chat.js +19 -2
- package/dist/bin/commands/chat.js.map +1 -1
- package/dist/bin/commands/dashboard.js +27 -10
- package/dist/bin/commands/dashboard.js.map +1 -1
- package/dist/bin/commands/init.js +10 -1
- package/dist/bin/commands/init.js.map +1 -1
- package/dist/bin/commands/tui/activity-answer-read.js +122 -0
- package/dist/bin/commands/tui/activity-answer-read.js.map +1 -0
- package/dist/bin/commands/tui/activity-fallback.js +40 -0
- package/dist/bin/commands/tui/activity-fallback.js.map +1 -0
- package/dist/bin/commands/tui/activity-handler.js +273 -0
- package/dist/bin/commands/tui/activity-handler.js.map +1 -0
- package/dist/bin/commands/tui/activity-history.js +245 -0
- package/dist/bin/commands/tui/activity-history.js.map +1 -0
- package/dist/bin/commands/tui/activity-http.js +88 -0
- package/dist/bin/commands/tui/activity-http.js.map +1 -0
- package/dist/bin/commands/tui/activity-replay.js +250 -0
- package/dist/bin/commands/tui/activity-replay.js.map +1 -0
- package/dist/bin/commands/tui/api.js +48 -1
- package/dist/bin/commands/tui/api.js.map +1 -1
- package/dist/bin/commands/tui/channel.js +11 -1
- package/dist/bin/commands/tui/channel.js.map +1 -1
- package/dist/bin/commands/tui/fullscreen-mode.js +78 -12
- package/dist/bin/commands/tui/fullscreen-mode.js.map +1 -1
- package/dist/bin/commands/tui/input-handler.js +7 -0
- package/dist/bin/commands/tui/input-handler.js.map +1 -1
- package/dist/bin/commands/tui/overlays.js +6 -3
- package/dist/bin/commands/tui/overlays.js.map +1 -1
- package/dist/bin/commands/tui/renderer.js +27 -15
- package/dist/bin/commands/tui/renderer.js.map +1 -1
- package/dist/bin/commands/tui/types.js.map +1 -1
- package/dist/bin/commands/tui/ws-handler.js +158 -13
- package/dist/bin/commands/tui/ws-handler.js.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/src/agent/claude-runtime-pool.js +386 -0
- package/dist/src/agent/claude-runtime-pool.js.map +1 -0
- package/dist/src/agent/claude-runtime-run.js +366 -0
- package/dist/src/agent/claude-runtime-run.js.map +1 -0
- package/dist/src/agent/codex-app-events.js +3 -1
- package/dist/src/agent/codex-app-events.js.map +1 -1
- package/dist/src/agent/events/claude.js +11 -9
- package/dist/src/agent/events/claude.js.map +1 -1
- package/dist/src/agent/events/codex.js +2 -0
- package/dist/src/agent/events/codex.js.map +1 -1
- package/dist/src/agent/events/cursor.js +49 -21
- package/dist/src/agent/events/cursor.js.map +1 -1
- package/dist/src/agent/events/grok.js +33 -5
- package/dist/src/agent/events/grok.js.map +1 -1
- package/dist/src/agent/events/helpers.js +9 -0
- package/dist/src/agent/events/helpers.js.map +1 -1
- package/dist/src/agent/events/index.js +13 -1
- package/dist/src/agent/events/index.js.map +1 -1
- package/dist/src/agent/events/opencode.js +65 -1
- package/dist/src/agent/events/opencode.js.map +1 -1
- package/dist/src/agent/lifecycle-handler.js +185 -62
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/merge-tool-log.js +77 -0
- package/dist/src/agent/merge-tool-log.js.map +1 -0
- package/dist/src/agent/native-runtime-run.js +235 -0
- package/dist/src/agent/native-runtime-run.js.map +1 -0
- package/dist/src/agent/pi-runtime.js +468 -101
- package/dist/src/agent/pi-runtime.js.map +1 -1
- package/dist/src/agent/prompt-context.js +88 -2
- package/dist/src/agent/prompt-context.js.map +1 -1
- package/dist/src/agent/runtime/acp/callbacks.js +223 -0
- package/dist/src/agent/runtime/acp/callbacks.js.map +1 -0
- package/dist/src/agent/runtime/acp/config.js +182 -0
- package/dist/src/agent/runtime/acp/config.js.map +1 -0
- package/dist/src/agent/runtime/acp/connection.js +254 -0
- package/dist/src/agent/runtime/acp/connection.js.map +1 -0
- package/dist/src/agent/runtime/acp/content.js +63 -0
- package/dist/src/agent/runtime/acp/content.js.map +1 -0
- package/dist/src/agent/runtime/acp/cursor-session.js +92 -0
- package/dist/src/agent/runtime/acp/cursor-session.js.map +1 -0
- package/dist/src/agent/runtime/acp/grok-control.js +3 -0
- package/dist/src/agent/runtime/acp/grok-control.js.map +1 -0
- package/dist/src/agent/runtime/acp/grok-events.js +28 -0
- package/dist/src/agent/runtime/acp/grok-events.js.map +1 -0
- package/dist/src/agent/runtime/acp/grok-options.js +63 -0
- package/dist/src/agent/runtime/acp/grok-options.js.map +1 -0
- package/dist/src/agent/runtime/acp/grok-session.js +118 -0
- package/dist/src/agent/runtime/acp/grok-session.js.map +1 -0
- package/dist/src/agent/runtime/acp/notification-queue.js +107 -0
- package/dist/src/agent/runtime/acp/notification-queue.js.map +1 -0
- package/dist/src/agent/runtime/acp/permissions.js +133 -0
- package/dist/src/agent/runtime/acp/permissions.js.map +1 -0
- package/dist/src/agent/runtime/acp/projection.js +162 -0
- package/dist/src/agent/runtime/acp/projection.js.map +1 -0
- package/dist/src/agent/runtime/acp/replacement-turn.js +187 -0
- package/dist/src/agent/runtime/acp/replacement-turn.js.map +1 -0
- package/dist/src/agent/runtime/acp/replacement.js +159 -0
- package/dist/src/agent/runtime/acp/replacement.js.map +1 -0
- package/dist/src/agent/runtime/acp/runtime-session.js +245 -0
- package/dist/src/agent/runtime/acp/runtime-session.js.map +1 -0
- package/dist/src/agent/runtime/acp/session.js +426 -0
- package/dist/src/agent/runtime/acp/session.js.map +1 -0
- package/dist/src/agent/runtime/acp/wire.js +46 -0
- package/dist/src/agent/runtime/acp/wire.js.map +1 -0
- package/dist/src/agent/runtime/claude-run-controls.js +41 -0
- package/dist/src/agent/runtime/claude-run-controls.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-children.js +405 -0
- package/dist/src/agent/runtime/claude-sdk-children.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-close.js +43 -0
- package/dist/src/agent/runtime/claude-sdk-close.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-content.js +42 -0
- package/dist/src/agent/runtime/claude-sdk-content.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-events.js +337 -0
- package/dist/src/agent/runtime/claude-sdk-events.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-hooks.js +32 -0
- package/dist/src/agent/runtime/claude-sdk-hooks.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-input.js +58 -0
- package/dist/src/agent/runtime/claude-sdk-input.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-loader.js +21 -0
- package/dist/src/agent/runtime/claude-sdk-loader.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-messages.js +133 -0
- package/dist/src/agent/runtime/claude-sdk-messages.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-metadata.js +40 -0
- package/dist/src/agent/runtime/claude-sdk-metadata.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-options.js +70 -0
- package/dist/src/agent/runtime/claude-sdk-options.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-owners.js +113 -0
- package/dist/src/agent/runtime/claude-sdk-owners.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-permissions.js +283 -0
- package/dist/src/agent/runtime/claude-sdk-permissions.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-process.js +72 -0
- package/dist/src/agent/runtime/claude-sdk-process.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-roots.js +103 -0
- package/dist/src/agent/runtime/claude-sdk-roots.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-session.js +518 -0
- package/dist/src/agent/runtime/claude-sdk-session.js.map +1 -0
- package/dist/src/agent/runtime/codex-projection.js +126 -0
- package/dist/src/agent/runtime/codex-projection.js.map +1 -0
- package/dist/src/agent/runtime/events.js +39 -0
- package/dist/src/agent/runtime/events.js.map +1 -0
- package/dist/src/agent/runtime/grok-main.js +7 -0
- package/dist/src/agent/runtime/grok-main.js.map +1 -0
- package/dist/src/agent/runtime/outcome.js +28 -0
- package/dist/src/agent/runtime/outcome.js.map +1 -0
- package/dist/src/agent/runtime/pi-projection.js +97 -0
- package/dist/src/agent/runtime/pi-projection.js.map +1 -0
- package/dist/src/agent/runtime/pi-raw-trace.js +87 -0
- package/dist/src/agent/runtime/pi-raw-trace.js.map +1 -0
- package/dist/src/agent/runtime/pi-turn.js +159 -0
- package/dist/src/agent/runtime/pi-turn.js.map +1 -0
- package/dist/src/agent/runtime/print-activity.js +47 -0
- package/dist/src/agent/runtime/print-activity.js.map +1 -0
- package/dist/src/agent/runtime/print-projection.js +51 -0
- package/dist/src/agent/runtime/print-projection.js.map +1 -0
- package/dist/src/agent/runtime/projection.js +283 -0
- package/dist/src/agent/runtime/projection.js.map +1 -0
- package/dist/src/agent/runtime/replace-turn.js +36 -0
- package/dist/src/agent/runtime/replace-turn.js.map +1 -0
- package/dist/src/agent/runtime/requests.js +207 -0
- package/dist/src/agent/runtime/requests.js.map +1 -0
- package/dist/src/agent/runtime/selection.js +31 -0
- package/dist/src/agent/runtime/selection.js.map +1 -0
- package/dist/src/agent/runtime/session.js +2 -0
- package/dist/src/agent/runtime/session.js.map +1 -0
- package/dist/src/agent/runtime-pool-contract.js +2 -0
- package/dist/src/agent/runtime-pool-contract.js.map +1 -0
- package/dist/src/agent/runtime-pool.js +317 -9
- package/dist/src/agent/runtime-pool.js.map +1 -1
- package/dist/src/agent/session-persistence.js +10 -2
- package/dist/src/agent/session-persistence.js.map +1 -1
- package/dist/src/agent/spawn.js +990 -143
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/agent/steer-input-guard.js +33 -0
- package/dist/src/agent/steer-input-guard.js.map +1 -0
- package/dist/src/cli/acp-client.js +20 -21
- package/dist/src/cli/acp-client.js.map +1 -1
- package/dist/src/cli/handlers-runtime.js +21 -12
- package/dist/src/cli/handlers-runtime.js.map +1 -1
- package/dist/src/cli/registry.js +2 -0
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/cli/tui/activity-answer.js +97 -0
- package/dist/src/cli/tui/activity-answer.js.map +1 -0
- package/dist/src/cli/tui/activity-history.js +364 -0
- package/dist/src/cli/tui/activity-history.js.map +1 -0
- package/dist/src/cli/tui/activity-linear.js +29 -0
- package/dist/src/cli/tui/activity-linear.js.map +1 -0
- package/dist/src/cli/tui/activity-terminal-text.js +111 -0
- package/dist/src/cli/tui/activity-terminal-text.js.map +1 -0
- package/dist/src/cli/tui/activity.js +95 -0
- package/dist/src/cli/tui/activity.js.map +1 -0
- package/dist/src/cli/tui/cell-width.js +41 -0
- package/dist/src/cli/tui/cell-width.js.map +1 -0
- package/dist/src/cli/tui/events.js +15 -0
- package/dist/src/cli/tui/events.js.map +1 -1
- package/dist/src/cli/tui/keymap.js +2 -0
- package/dist/src/cli/tui/keymap.js.map +1 -1
- package/dist/src/cli/tui/render/composer-box.js +12 -14
- package/dist/src/cli/tui/render/composer-box.js.map +1 -1
- package/dist/src/cli/tui/render/viewport.js +9 -5
- package/dist/src/cli/tui/render/viewport.js.map +1 -1
- package/dist/src/cli/tui/renderers.js +119 -139
- package/dist/src/cli/tui/renderers.js.map +1 -1
- package/dist/src/cli/tui/settings-screen.js +11 -0
- package/dist/src/cli/tui/settings-screen.js.map +1 -1
- package/dist/src/cli/tui/store.js +3 -0
- package/dist/src/cli/tui/store.js.map +1 -1
- package/dist/src/cli/tui/transcript.js +68 -0
- package/dist/src/cli/tui/transcript.js.map +1 -1
- package/dist/src/core/bus.js +8 -0
- package/dist/src/core/bus.js.map +1 -1
- package/dist/src/core/chat-sessions.js +1 -0
- package/dist/src/core/chat-sessions.js.map +1 -1
- package/dist/src/core/compact.js +10 -3
- package/dist/src/core/compact.js.map +1 -1
- package/dist/src/core/config.js +21 -0
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +26 -0
- package/dist/src/core/db.js.map +1 -1
- package/dist/src/core/runtime-settings.js +44 -3
- package/dist/src/core/runtime-settings.js.map +1 -1
- package/dist/src/core/session-ops.js +40 -9
- package/dist/src/core/session-ops.js.map +1 -1
- package/dist/src/core/settings-merge.js +31 -1
- package/dist/src/core/settings-merge.js.map +1 -1
- package/dist/src/core/settings-watch.js +8 -1
- package/dist/src/core/settings-watch.js.map +1 -1
- package/dist/src/discord/bot.js +28 -9
- package/dist/src/discord/bot.js.map +1 -1
- package/dist/src/discord/send-only-client.js +4 -0
- package/dist/src/discord/send-only-client.js.map +1 -1
- package/dist/src/manager/routes/telegram-hub.js +2 -1
- package/dist/src/manager/routes/telegram-hub.js.map +1 -1
- package/dist/src/manager/scan.js +12 -0
- package/dist/src/manager/scan.js.map +1 -1
- package/dist/src/manager/server.js +89 -13
- package/dist/src/manager/server.js.map +1 -1
- package/dist/src/manager/telegram-hub/hub-bot.js +9 -3
- package/dist/src/manager/telegram-hub/hub-bot.js.map +1 -1
- package/dist/src/orchestrator/collect.js +80 -6
- package/dist/src/orchestrator/collect.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +13 -10
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +68 -29
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/request-registry.js +2 -0
- package/dist/src/orchestrator/request-registry.js.map +1 -1
- package/dist/src/orchestrator/scope.js +15 -0
- package/dist/src/orchestrator/scope.js.map +1 -1
- package/dist/src/routes/memory.js +2 -2
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/messages.js +51 -18
- package/dist/src/routes/messages.js.map +1 -1
- package/dist/src/routes/orchestrate.js +29 -17
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/routes/runtime-request-notices.js +23 -0
- package/dist/src/routes/runtime-request-notices.js.map +1 -0
- package/dist/src/routes/runtime-requests.js +43 -0
- package/dist/src/routes/runtime-requests.js.map +1 -0
- package/dist/src/routes/settings.js +7 -1
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/traces.js +93 -6
- package/dist/src/routes/traces.js.map +1 -1
- package/dist/src/shared/activity-read.js +158 -0
- package/dist/src/shared/activity-read.js.map +1 -0
- package/dist/src/shared/activity-replay.js +279 -0
- package/dist/src/shared/activity-replay.js.map +1 -0
- package/dist/src/shared/activity-state.js +144 -0
- package/dist/src/shared/activity-state.js.map +1 -0
- package/dist/src/shared/isolated-qa.js +132 -0
- package/dist/src/shared/isolated-qa.js.map +1 -0
- package/dist/src/shared/presentation.js +21 -0
- package/dist/src/shared/presentation.js.map +1 -0
- package/dist/src/shared/runtime-contract.js +2 -0
- package/dist/src/shared/runtime-contract.js.map +1 -0
- package/dist/src/shared/runtime-event-parse.js +99 -0
- package/dist/src/shared/runtime-event-parse.js.map +1 -0
- package/dist/src/shared/runtime-request-notice.js +9 -0
- package/dist/src/shared/runtime-request-notice.js.map +1 -0
- package/dist/src/shared/tool-log-sanitize.js +11 -5
- package/dist/src/shared/tool-log-sanitize.js.map +1 -1
- package/dist/src/slack/bot.js +20 -7
- package/dist/src/slack/bot.js.map +1 -1
- package/dist/src/slack/send-only-client.js +3 -0
- package/dist/src/slack/send-only-client.js.map +1 -1
- package/dist/src/telegram/bot.js +27 -5
- package/dist/src/telegram/bot.js.map +1 -1
- package/dist/src/telegram/rich-message.js +47 -1
- package/dist/src/telegram/rich-message.js.map +1 -1
- package/dist/src/trace/activity-control.js +87 -0
- package/dist/src/trace/activity-control.js.map +1 -0
- package/dist/src/trace/activity-journal.js +155 -0
- package/dist/src/trace/activity-journal.js.map +1 -0
- package/dist/src/trace/activity-retention.js +55 -0
- package/dist/src/trace/activity-retention.js.map +1 -0
- package/dist/src/trace/runtime-body-codec.js +162 -0
- package/dist/src/trace/runtime-body-codec.js.map +1 -0
- package/dist/src/trace/store.js +65 -22
- package/dist/src/trace/store.js.map +1 -1
- package/package.json +8 -5
- package/public/css/activity.css +211 -0
- package/public/css/chat-search.css +13 -1
- package/public/css/chat.css +10 -0
- package/public/css/native-requests.css +55 -0
- package/public/css/trace-drawer.css +15 -8
- package/public/dist/assets/AdvancedExport-q4DnVxpT.js +1 -0
- package/public/dist/assets/Agent-CI1AfYOA.js +1 -0
- package/public/dist/assets/Browser-D9kwPJfN.js +1 -0
- package/public/dist/assets/BrowserPanel-CVZyvbth.js +3 -0
- package/public/dist/assets/{ChannelEnablementControl-B9KiYDZZ.js → ChannelEnablementControl-BkxeZonM.js} +1 -1
- package/public/dist/assets/ChannelsDiscord-CulKFTiX.js +1 -0
- package/public/dist/assets/ChannelsSlack-D09H8GKC.js +1 -0
- package/public/dist/assets/ChannelsTelegram-yA_NMLfM.js +1 -0
- package/public/dist/assets/CodeCanvas-DUaLWPBe.js +3 -0
- package/public/dist/assets/{DashboardEmbeddingSection-CIOwsVB5.js → DashboardEmbeddingSection-R9vUu9X2.js} +1 -1
- package/public/dist/assets/{DashboardMeta-D6nJsY8n.js → DashboardMeta-BKutQ9Ps.js} +1 -1
- package/public/dist/assets/DesignPanel-CE5jvzt4.js +2 -0
- package/public/dist/assets/{DiffPanel-ZaDoV7qS.js → DiffPanel-D9Cch5FG.js} +2 -2
- package/public/dist/assets/Display-BPYZ295k.js +1 -0
- package/public/dist/assets/DocPanel-DvtFw8AP.js +1 -0
- package/public/dist/assets/{Employees-CR41RcWo.js → Employees-bxErTlcA.js} +1 -1
- package/public/dist/assets/FolderPanel-u2YeiFFr.js +3 -0
- package/public/dist/assets/HealthBadge-CDPKdSXc.js +1 -0
- package/public/dist/assets/{Heartbeat-CD1R95Kv.js → Heartbeat-BCt4mFWz.js} +1 -1
- package/public/dist/assets/{InlineWarn-B3bJfG-Z.js → InlineWarn-DakL-ThS.js} +1 -1
- package/public/dist/assets/MarkdownRenderer-Cc3DeHvm.js +1 -0
- package/public/dist/assets/MarkdownRenderer-DzN66XVb.js +15 -0
- package/public/dist/assets/{Mcp-DSIEQZfH.js → Mcp-Cp1ffHWt.js} +2 -2
- package/public/dist/assets/{Memory-CpZIdE1o.js → Memory-Rq4fHjZv.js} +1 -1
- package/public/dist/assets/MilkdownWysiwygEditor-xObhviw7.js +160 -0
- package/public/dist/assets/ModelProvider-BNDxlWHC.js +1 -0
- package/public/dist/assets/Network-D_OYGb_C.js +1 -0
- package/public/dist/assets/NotesGraphWorkspace-DO9LtVGF.js +1 -0
- package/public/dist/assets/PanelLayoutProvider-BFxal5fZ.js +1 -0
- package/public/dist/assets/Permissions-DZ3ADB4i.js +1 -0
- package/public/dist/assets/Permissions-wj06yuy6.js +1 -0
- package/public/dist/assets/Profile-BQiNETCP.js +1 -0
- package/public/dist/assets/Prompts-DrMb2Kom.js +1 -0
- package/public/dist/assets/{SpeechKeys-CIq4c1iz.js → SpeechKeys-DqMhN-bl.js} +1 -1
- package/public/dist/assets/{TelegramHub-BrCeAZEf.js → TelegramHub-BSZ3xTdS.js} +1 -1
- package/public/dist/assets/TerminalPanel-Dwfd6Mhs.js +16 -0
- package/public/dist/assets/TerminalPanel-muGat3B1.css +1 -0
- package/public/dist/assets/{abnfDiagram-VCTEODGH-DOF68zXc.js → abnfDiagram-VCTEODGH-Bh3YzulT.js} +1 -1
- package/public/dist/assets/api-CLHen33W.js +1 -0
- package/public/dist/assets/api-CUtiCd2-.js +1 -0
- package/public/dist/assets/{apl-CYLd9I-9.js → apl-gfMMiTNf.js} +1 -1
- package/public/dist/assets/app-Dskscukr.css +1 -0
- package/public/dist/assets/app-ckFtOSgc.js +55 -0
- package/public/dist/assets/architecture-7GRP2DOG-Bp3iCG16.js +1 -0
- package/public/dist/assets/architectureDiagram-5GKGNRK7-COhidFYz.js +36 -0
- package/public/dist/assets/asciiarmor-C_eisQCp.js +1 -0
- package/public/dist/assets/{asn1-BlhHp3qx.js → asn1-DCl_8MCW.js} +1 -1
- package/public/dist/assets/{asterisk-Q0-IBwUt.js → asterisk-BEn0Cwpx.js} +1 -1
- package/public/dist/assets/{bgtask-badge-Cu1w7rg2.js → bgtask-badge-BmSGU6nQ.js} +1 -1
- package/public/dist/assets/bgtask-badge-DKpNEyny.js +1 -0
- package/public/dist/assets/{blockDiagram-OSKFZWR5-CRNzDJwU.js → blockDiagram-OSKFZWR5--OxgY2yr.js} +4 -4
- package/public/dist/assets/bounded-api-DdpT93LB.js +1 -0
- package/public/dist/assets/{bounded-set-DXkYOGnQ.js → bounded-set-BELTet1M.js} +1 -1
- package/public/dist/assets/c4Diagram-7LVT6UL2-C0DocmNb.js +38 -0
- package/public/dist/assets/channel-DO94Q0oH.js +1 -0
- package/public/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/public/dist/assets/{chunk-2ZTRR5NV-DF9qGbFc.js → chunk-2ZTRR5NV-BFt7Dm5O.js} +1 -1
- package/public/dist/assets/chunk-3NF5O7KM-FbOqoUnr.js +168 -0
- package/public/dist/assets/{chunk-3Z5EZCMW-D-umBnbE.js → chunk-3Z5EZCMW-udVqggne.js} +1 -1
- package/public/dist/assets/{chunk-4HAMMTFA-BzeIXjef.js → chunk-4HAMMTFA-UBUVs5kk.js} +2 -2
- package/public/dist/assets/{chunk-5V3GS4D5-DB7RMaO_.js → chunk-5V3GS4D5-ecLo0f1p.js} +1 -1
- package/public/dist/assets/{chunk-5VM5RSS4-CEUkek2W.js → chunk-5VM5RSS4-ZNzvKenW.js} +1 -1
- package/public/dist/assets/{chunk-6AZGARVD-qPN7cVYY.js → chunk-6AZGARVD-Cou1D2Ji.js} +1 -1
- package/public/dist/assets/{chunk-6EIED4P4-Bt6lS0r9.js → chunk-6EIED4P4-DeqPLKcQ.js} +1 -1
- package/public/dist/assets/{chunk-6K3QC6MW-BC_6hNGf.js → chunk-6K3QC6MW-Cn9odKk7.js} +1 -1
- package/public/dist/assets/{chunk-6TQVIW2G-NQr1OdRE.js → chunk-6TQVIW2G-IVBzI7O8.js} +1 -1
- package/public/dist/assets/{chunk-747NJXEK-CukETSeX.js → chunk-747NJXEK-Bxgd5wfl.js} +1 -1
- package/public/dist/assets/{chunk-75Z2AOVW-BLiFJXcr.js → chunk-75Z2AOVW-B1-fK2mN.js} +1 -1
- package/public/dist/assets/chunk-CLGD4ZFX-CotBINqH.js +1 -0
- package/public/dist/assets/{chunk-DU6HZSFF-CqT8wcBs.js → chunk-DU6HZSFF-vsD_dO7e.js} +3 -3
- package/public/dist/assets/{chunk-F27PBJKO-Ccrogyxp.js → chunk-F27PBJKO-C3O21Si2.js} +1 -1
- package/public/dist/assets/{chunk-FOHPRMQF--f9XSh-3.js → chunk-FOHPRMQF-CoA4358r.js} +35 -35
- package/public/dist/assets/{chunk-GMAD6QVW-BJLz4nC-.js → chunk-GMAD6QVW-BSVfzVP1.js} +2 -2
- package/public/dist/assets/chunk-GVQU2GXP-CsYaquup.js +1 -0
- package/public/dist/assets/chunk-H2I77ZZE-ytBKuGMS.js +1 -0
- package/public/dist/assets/{chunk-HLEWEB6X-BKWwzzZJ.js → chunk-HLEWEB6X-bHrMh27k.js} +3 -3
- package/public/dist/assets/{chunk-I5DQTOEV-B46sdKHC.js → chunk-I5DQTOEV-BYKVfZyL.js} +1 -1
- package/public/dist/assets/{chunk-ICYGCRZG-CSu4gXtC.js → chunk-ICYGCRZG-hvV-gq8M.js} +1 -1
- package/public/dist/assets/{chunk-IH6LHLGP-B2m3mWfU.js → chunk-IH6LHLGP-DTNFuJiP.js} +1 -1
- package/public/dist/assets/{chunk-JWPE2WC7-D-FE5omP.js → chunk-JWPE2WC7-DVXcaiue.js} +1 -1
- package/public/dist/assets/{chunk-KI3K4JFJ-Bfn6wbch.js → chunk-KI3K4JFJ-B4ZziqcX.js} +1 -1
- package/public/dist/assets/chunk-L3NEJ4N5-DxbPaCWe.js +1 -0
- package/public/dist/assets/{chunk-LNGE3PJU-Dyjtq0ks.js → chunk-LNGE3PJU-5-SxdO55.js} +7 -7
- package/public/dist/assets/chunk-LQGUR6SS-C7emO-i3.js +2 -0
- package/public/dist/assets/chunk-OSK3NFVY-D_HWIC0H.js +10 -0
- package/public/dist/assets/{chunk-OUJLGHUK-DkWSHliq.js → chunk-OUJLGHUK-CTWiVXba.js} +1 -1
- package/public/dist/assets/{chunk-P2QGCYS3-B-9ymCdr.js → chunk-P2QGCYS3-D9LpOEME.js} +1 -1
- package/public/dist/assets/{chunk-POPQ4Y6H-Df0_Odad.js → chunk-POPQ4Y6H-BzSgf7pO.js} +1 -1
- package/public/dist/assets/{chunk-PWAF6VOD-B1cuaLs-.js → chunk-PWAF6VOD-CqSJPGBE.js} +1 -1
- package/public/dist/assets/{chunk-SVP7TREG-DCh4QTp-.js → chunk-SVP7TREG-NOSK04BT.js} +1 -1
- package/public/dist/assets/{chunk-UY3FDG6J--uyeDRt4.js → chunk-UY3FDG6J-BVPsKpVN.js} +1 -1
- package/public/dist/assets/{chunk-X3CZISLH-C1s9nTVF.js → chunk-X3CZISLH-ChyOdCnY.js} +1 -1
- package/public/dist/assets/{chunk-XHIXRSVI-CQtpMKYq.js → chunk-XHIXRSVI-CQipzMEr.js} +1 -1
- package/public/dist/assets/chunk-XXDRQBXY-Uq2wLB4L.js +1 -0
- package/public/dist/assets/{chunk-ZLD2IHE6-DOKyEMMC.js → chunk-ZLD2IHE6-CWSP7frq.js} +3 -3
- package/public/dist/assets/classDiagram-CYGNFDIV-C1ssjdiH.js +1 -0
- package/public/dist/assets/classDiagram-v2-TLXNO2FR-C1ssjdiH.js +1 -0
- package/public/dist/assets/clike-D_6L3tnO.js +1 -0
- package/public/dist/assets/cmake-84nbDH0I.js +1 -0
- package/public/dist/assets/cobol-DHLQUbN7.js +1 -0
- package/public/dist/assets/coffeescript-De_zI4J0.js +1 -0
- package/public/dist/assets/commonlisp-DgAKBe0r.js +1 -0
- package/public/dist/assets/{constants-BfYYzHNr.js → constants-TRkDoXvF.js} +1 -1
- package/public/dist/assets/{copy-text-Dy0kfmb9.js → copy-text-WsUHYigB.js} +1 -1
- package/public/dist/assets/cose-bilkent-JH36ORCC-BqCMCbxR.js +1 -0
- package/public/dist/assets/crystal-Bsdphhtm.js +1 -0
- package/public/dist/assets/css-CnaYoQib.js +1 -0
- package/public/dist/assets/cynefin-OW5HDTMX-57vG-IQU.js +1 -0
- package/public/dist/assets/cynefinDiagram-5FMLGOSQ-UAM-DZmU.js +62 -0
- package/public/dist/assets/cytoscape.esm-Ql0ZPabT.js +321 -0
- package/public/dist/assets/{d-BfHF1VVF.js → d-DWkQyNnU.js} +1 -1
- package/public/dist/assets/dagre-Fg-GCROL.js +1 -0
- package/public/dist/assets/{dagre-OS7QT2EB-c-JkA4ju.js → dagre-OS7QT2EB-CflcJHKB.js} +2 -2
- package/public/dist/assets/{diagram-S7CK7UJ4-CgObZnGW.js → diagram-S7CK7UJ4-Dzl9sLZD.js} +1 -1
- package/public/dist/assets/{diagram-UQ7AKVKN-DTiko3yH.js → diagram-UQ7AKVKN-BhpfQUAt.js} +2 -2
- package/public/dist/assets/{diagram-VSXAHHWV-BtwoQsOH.js → diagram-VSXAHHWV-CnuHIxOm.js} +1 -1
- package/public/dist/assets/{diagram-VX7I27RA-BvFpphqo.js → diagram-VX7I27RA-CQzbjtqd.js} +13 -13
- package/public/dist/assets/{diagram-Z3DM3KII-Zq8iJClC.js → diagram-Z3DM3KII-DR3Ie5C2.js} +1 -1
- package/public/dist/assets/dist--wUCkuiC.js +9 -0
- package/public/dist/assets/dist-B2ugUS7T.js +1 -0
- package/public/dist/assets/dist-B6-H00Bu.js +1 -0
- package/public/dist/assets/{dist-CD7tjeNO.js → dist-B_o5XbiL.js} +1 -1
- package/public/dist/assets/{dist-D8Zky4R1.js → dist-Bn361Kgk.js} +2 -2
- package/public/dist/assets/{dist-BspKh_Zg.js → dist-Box-O1ow.js} +1 -1
- package/public/dist/assets/dist-Bp7q5-Qc.js +39 -0
- package/public/dist/assets/dist-C9i-hLBK.js +1 -0
- package/public/dist/assets/{dist-JnCmAxGR.js → dist-CGUtB2hn.js} +1 -1
- package/public/dist/assets/dist-CHO5CBK1.js +1 -0
- package/public/dist/assets/dist-CJNnOuaA.js +1 -0
- package/public/dist/assets/dist-CPYD5RoF.js +1 -0
- package/public/dist/assets/dist-CW1HDUim.js +1 -0
- package/public/dist/assets/dist-Cbkb9LHa.js +1 -0
- package/public/dist/assets/dist-CcmA2WLJ.js +2 -0
- package/public/dist/assets/dist-ClT6EIJP.js +1 -0
- package/public/dist/assets/dist-D011G-p-.js +13 -0
- package/public/dist/assets/dist-DBX5LjYY.js +6 -0
- package/public/dist/assets/dist-DBpt7gM8.js +1 -0
- package/public/dist/assets/{dist-CgIOBybm.js → dist-DJGc9cyj.js} +1 -1
- package/public/dist/assets/{dist-CTpw6PFT.js → dist-DUl4SBwX.js} +1 -1
- package/public/dist/assets/{dist-DKd_hdkE.js → dist-DWvaIPaS.js} +1 -1
- package/public/dist/assets/{dist-DS7cuuIk.js → dist-Ds6qQDMC.js} +1 -1
- package/public/dist/assets/dist-Dxy8kUAu.js +1 -0
- package/public/dist/assets/{dist-Bg80xGMJ.js → dist-OaQUa3cd.js} +1 -1
- package/public/dist/assets/dist-Ohtnri73.js +11 -0
- package/public/dist/assets/dist-TN2_Nms3.js +2 -0
- package/public/dist/assets/dist-XM8qpb8C.js +1 -0
- package/public/dist/assets/dist-Y0iINzVl.js +1 -0
- package/public/dist/assets/{dist-uSfGXqs6.js → dist-kYfyPZP9.js} +1 -1
- package/public/dist/assets/{dist-D3ShDeDU.js → dist-lsEiXLAb.js} +1 -1
- package/public/dist/assets/{dockerfile-DkX5AHzr.js → dockerfile-DJkHQgkl.js} +1 -1
- package/public/dist/assets/{dylan-BQ0i5j3T.js → dylan-BCDoL_-p.js} +1 -1
- package/public/dist/assets/{ebnfDiagram-PWID7BFC-_fcO3z5G.js → ebnfDiagram-PWID7BFC-D_FcQuZg.js} +1 -1
- package/public/dist/assets/{ecl-oXh4vhiy.js → ecl-BVIeWmwY.js} +1 -1
- package/public/dist/assets/{employees-qLLnQlAv.js → employees-BJRRI3rV.js} +3 -3
- package/public/dist/assets/{erDiagram-2YWLMYGG-YIq0Go-p.js → erDiagram-2YWLMYGG-CLpGDU8-.js} +3 -3
- package/public/dist/assets/{erlang-GRIYhTbY.js → erlang-BV0c4Hdn.js} +1 -1
- package/public/dist/assets/{error-normalize-CLRJh19F.js → error-normalize-UHvG8s92.js} +1 -1
- package/public/dist/assets/esm-Q6VOkDbn.js +4 -0
- package/public/dist/assets/eventmodeling-NTZA5JFV-Dz1yjNT-.js +1 -0
- package/public/dist/assets/{factor-Xro2mWdw.js → factor-LKH5gN8L.js} +1 -1
- package/public/dist/assets/fields-CSdFjOgg.js +1 -0
- package/public/dist/assets/flowDiagram-T62WH6J4-jooH4x9e.js +1 -0
- package/public/dist/assets/forth-D6RzAl64.js +1 -0
- package/public/dist/assets/ganttDiagram-EL5Y4UJY-B9_NJDV6.js +292 -0
- package/public/dist/assets/gitGraph-4MIJSDKK-NIO2XoGv.js +1 -0
- package/public/dist/assets/{gitGraphDiagram-WWUBYQGX-Bg3OM_0S.js → gitGraphDiagram-WWUBYQGX-BO0vc7Qh.js} +4 -4
- package/public/dist/assets/graphlib-CGJNr7IJ.js +1 -0
- package/public/dist/assets/groovy-CUpZ7dEl.js +1 -0
- package/public/dist/assets/{haxe-BrZpr4Ca.js → haxe-DjVOVvNP.js} +1 -1
- package/public/dist/assets/idb-cache-BRpjf_a8.js +1 -0
- package/public/dist/assets/idb-cache-CFBnPfHz.js +1 -0
- package/public/dist/assets/iframe-renderer-BngLCbh9.js +1 -0
- package/public/dist/assets/iframe-renderer-CFD7rXuQ.js +142 -0
- package/public/dist/assets/info-A6RAGUB7-yRMwEr76.js +1 -0
- package/public/dist/assets/{infoDiagram-FKFFQAWI-Dbi9pIPw.js → infoDiagram-FKFFQAWI-BM2g31_p.js} +1 -1
- package/public/dist/assets/{ishikawaDiagram-5VMMS53U-C1FUP-sO.js → ishikawaDiagram-5VMMS53U-BZvjesKs.js} +2 -2
- package/public/dist/assets/javascript-B9I2pbsP.js +1 -0
- package/public/dist/assets/javascript-DctB8BJo.js +1 -0
- package/public/dist/assets/{journeyDiagram-EYS64GPL-CaEEa3uT.js → journeyDiagram-EYS64GPL-CqtePaqZ.js} +3 -3
- package/public/dist/assets/{jsx-runtime-CYoNlHAD.js → jsx-runtime-CkEUZM6i.js} +1 -1
- package/public/dist/assets/{kanban-definition-UXKFOSKX-DQjqFxtj.js → kanban-definition-UXKFOSKX-ChZA_T7a.js} +5 -5
- package/public/dist/assets/katex-DL-Py6bk.js +1 -0
- package/public/dist/assets/{lua-CxVmDfKg.js → lua-zbJo2mq3.js} +1 -1
- package/public/dist/assets/manager-Bfy42VgJ.css +1 -0
- package/public/dist/assets/manager-CTX6I1Jk.js +13 -0
- package/public/dist/assets/memory-BXcwokaP.js +1 -0
- package/public/dist/assets/{memory-I_6c8skr.js → memory-D2wwkOUi.js} +10 -10
- package/public/dist/assets/mermaid-loader-Beqble_i.js +1 -0
- package/public/dist/assets/{mermaid-parser.core-CBiGpWk6.js → mermaid-parser.core-J035_CYr.js} +1 -1
- package/public/dist/assets/{mermaid-preprocess-4oGDpf1X.js → mermaid-preprocess-D8xe5R2A.js} +1 -1
- package/public/dist/assets/mermaid.core-D1YZrgc_.js +11 -0
- package/public/dist/assets/mermaid.core-DSXunyto.js +1 -0
- package/public/dist/assets/message-history-C2JH-y2v.js +1 -0
- package/public/dist/assets/message-history-CYp7fqXy.js +4 -0
- package/public/dist/assets/{mindmap-definition-THT77NOG-CXOyjall.js → mindmap-definition-THT77NOG-C4c47DPO.js} +3 -3
- package/public/dist/assets/{mumps-BdPrWvs5.js → mumps-BSzj6Xyz.js} +1 -1
- package/public/dist/assets/{nginx-C7cLiM4x.js → nginx-8H7HVH4w.js} +1 -1
- package/public/dist/assets/{notes-graph-settings-Cl4lMj-A.js → notes-graph-settings-BUoTzvqs.js} +1 -1
- package/public/dist/assets/{nsis-iX94j4T9.js → nsis-CfSuhXs5.js} +1 -1
- package/public/dist/assets/{ntriples-DLMpvgb1.js → ntriples-B9h1VB_g.js} +1 -1
- package/public/dist/assets/packet-AYTQ26CC-BreuCLNh.js +1 -0
- package/public/dist/assets/{page-shell-DZ1lls_P.js → page-shell-Bs0RBRoD.js} +1 -1
- package/public/dist/assets/{pegDiagram-XKGWAZYB-DVD3P7WU.js → pegDiagram-XKGWAZYB-BHiELbRn.js} +1 -1
- package/public/dist/assets/perl-BkSkiI9m.js +1 -0
- package/public/dist/assets/pi-settings-B7e38HJP.js +1 -0
- package/public/dist/assets/{pi-settings-DEuKgvIj.js → pi-settings-BmvRWRpc.js} +1 -1
- package/public/dist/assets/pie-WAS4IAKB-Co3_rQ80.js +1 -0
- package/public/dist/assets/{pieDiagram-E7YTZNPT-DEH6UJP4.js → pieDiagram-E7YTZNPT-BEKTktaH.js} +2 -2
- package/public/dist/assets/{powershell-Dfw2t4-B.js → powershell-BcIto6Sf.js} +1 -1
- package/public/dist/assets/preload-helper-CfbQpVni.js +1 -0
- package/public/dist/assets/presentation-DWHWElFr.js +1 -0
- package/public/dist/assets/presentation-preference-BYEPPRPg.js +1 -0
- package/public/dist/assets/presentation-preference-D9u6LD07.js +1 -0
- package/public/dist/assets/{pug-C8nPBT90.js → pug-CqqUmdG7.js} +1 -1
- package/public/dist/assets/puppet-BZyAS7I4.js +1 -0
- package/public/dist/assets/python-B_1Jd8HM.js +1 -0
- package/public/dist/assets/{quadrantDiagram-AXDQQJYC-CAbCNOON.js → quadrantDiagram-AXDQQJYC-CeJGAkDA.js} +2 -2
- package/public/dist/assets/r-CxDmU1I4.js +1 -0
- package/public/dist/assets/radar-RG4KPBEZ-C2cOxc85.js +1 -0
- package/public/dist/assets/railroad-74A4TZTK-BZ4umY4g.js +1 -0
- package/public/dist/assets/railroad-abnf-HS5TGJTU-DxbXiuYs.js +1 -0
- package/public/dist/assets/railroad-ebnf-LZEXJU2U-Bthp2_-B.js +1 -0
- package/public/dist/assets/railroad-peg-WCYAUIDC-YcQ4ouxQ.js +1 -0
- package/public/dist/assets/{railroadDiagram-O6MQD6OU-CEs81LrU.js → railroadDiagram-O6MQD6OU-CsT34rgN.js} +1 -1
- package/public/dist/assets/{render-Cc0Y43E3.js → render-DRweFDYR.js} +13 -13
- package/public/dist/assets/{requirementDiagram-IS5BZ75X-DsPApdKv.js → requirementDiagram-IS5BZ75X-4PwTKQWK.js} +2 -2
- package/public/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/public/dist/assets/{rough.esm-DQG0wzX4.js → rough.esm-Dy-Kn_BL.js} +1 -1
- package/public/dist/assets/ruby-BjXV7-Qa.js +1 -0
- package/public/dist/assets/{sankeyDiagram-P5KCCOFB-Im52Eou9.js → sankeyDiagram-P5KCCOFB-BykRKMDj.js} +2 -2
- package/public/dist/assets/scheme-D9qYN0V5.js +1 -0
- package/public/dist/assets/sequenceDiagram-WJ2MYXX4-Dyj787ok.js +162 -0
- package/public/dist/assets/settings-2diaN51W.js +1 -0
- package/public/dist/assets/{settings-DpjZSu2J.js → settings-DuqNWkxS.js} +3 -3
- package/public/dist/assets/settings-client-CSHmzyxv.js +1 -0
- package/public/dist/assets/settings-core-CIPKFBNN.js +162 -0
- package/public/dist/assets/settings-core-DiYr5EbU.js +1 -0
- package/public/dist/assets/{shell-BBoIO9l0.js → shell-DwuoZtxw.js} +1 -1
- package/public/dist/assets/sidebar-DumxhgAD.js +49 -0
- package/public/dist/assets/{sieve-8oEe6gDx.js → sieve-tLWDfEkZ.js} +1 -1
- package/public/dist/assets/{simple-mode-BNw0K2rL.js → simple-mode-DXiLM1-G.js} +1 -1
- package/public/dist/assets/{sizeCapture-INFHLROL-D9Rpk-aA.js → sizeCapture-INFHLROL-B0uUizjq.js} +1 -1
- package/public/dist/assets/skills-CCXE-bXK.js +1 -0
- package/public/dist/assets/skills-D3AfzYbP.js +12 -0
- package/public/dist/assets/slash-commands-Cn9AWqF6.js +1 -0
- package/public/dist/assets/slash-commands-DCHYDCYa.js +20 -0
- package/public/dist/assets/solr-B78wSQJQ.js +1 -0
- package/public/dist/assets/sql-DuQMFDvy.js +1 -0
- package/public/dist/assets/state-Dl-xxPoS.js +1 -0
- package/public/dist/assets/{stateDiagram-XQSTLZYL-B5CxGVqv.js → stateDiagram-XQSTLZYL-6p5Yrm8S.js} +1 -1
- package/public/dist/assets/stateDiagram-v2-IH3M54BS-DfXrMbZg.js +1 -0
- package/public/dist/assets/{stex-32iK7T_9.js → stex-DNzd62Q_.js} +1 -1
- package/public/dist/assets/{stylus-C689wDNM.js → stylus-BOVgKnng.js} +1 -1
- package/public/dist/assets/swimlanes-V6O3JKXN-Pyw_hrrE.js +1 -0
- package/public/dist/assets/swimlanesDiagram-JKAHXJPX-R-OHp34K.js +8 -0
- package/public/dist/assets/textile-C4jVoHG1.js +1 -0
- package/public/dist/assets/tiki-AK6FwT8q.js +1 -0
- package/public/dist/assets/timeline-definition-24CTP7MA-V_LwIXs0.js +120 -0
- package/public/dist/assets/toml-BPTmHmyx.js +1 -0
- package/public/dist/assets/trace-drawer-B05Fa2ja.js +20 -0
- package/public/dist/assets/treeView-Q6P3EWNA-CDjnLfDO.js +1 -0
- package/public/dist/assets/treemap-WGGIJYW6-CbGUwvA1.js +1 -0
- package/public/dist/assets/{ttcn-CPOduycD.js → ttcn-PPSTk1ow.js} +1 -1
- package/public/dist/assets/{ttcn-cfg-DmA__-R_.js → ttcn-cfg-2b4Gb5sE.js} +1 -1
- package/public/dist/assets/turtle-Cx3rYX2g.js +1 -0
- package/public/dist/assets/ui-BO9pdl-p.js +1 -0
- package/public/dist/assets/ui-CCXcKDL5.js +2 -0
- package/public/dist/assets/vendor-render-Cmfl_oW8.js +383 -0
- package/public/dist/assets/vendor-render-DSSkXCir.css +1 -0
- package/public/dist/assets/vendor-utils-C1xaEGmb.js +1 -0
- package/public/dist/assets/{vennDiagram-4TSXK5OY-fVndHq7T.js → vennDiagram-4TSXK5OY-ZagiHlwi.js} +3 -3
- package/public/dist/assets/{verilog-DMw8DKoT.js → verilog-CjI9Y6RI.js} +1 -1
- package/public/dist/assets/vhdl-kS471soi.js +1 -0
- package/public/dist/assets/wardley-WFR3VGLG-Cj73o4Iq.js +1 -0
- package/public/dist/assets/{wardleyDiagram-VM6X3IG4-CXIfS7ZF.js → wardleyDiagram-VM6X3IG4-BBAHdIq-.js} +35 -35
- package/public/dist/assets/wiki-link-resolver-CbJATnBn.js +22 -0
- package/public/dist/assets/wiki-link-suggestions-BcEfThgf.js +2 -0
- package/public/dist/assets/{xquery-CYbd_YmJ.js → xquery-BKJx4mf9.js} +1 -1
- package/public/dist/assets/{xychartDiagram-S5SC5T6Z-CqC-Uvuc.js → xychartDiagram-S5SC5T6Z-C43SenTd.js} +4 -4
- package/public/dist/assets/z80-Co3PbHdE.js +1 -0
- package/public/dist/index.html +4 -4
- package/public/dist/manager/index.html +3 -3
- package/public/index.html +3 -1
- package/public/js/api.ts +2 -2
- package/public/js/bounded-api.ts +49 -0
- package/public/js/features/activity-discovery.ts +142 -0
- package/public/js/features/activity-history.ts +334 -0
- package/public/js/features/activity-http.ts +17 -0
- package/public/js/features/activity-live.ts +330 -0
- package/public/js/features/activity-view.ts +218 -0
- package/public/js/features/chat-messages.ts +13 -4
- package/public/js/features/idb-cache.ts +37 -3
- package/public/js/features/message-history.ts +144 -16
- package/public/js/features/message-item-html.ts +7 -3
- package/public/js/features/native-request-bridge.ts +133 -0
- package/public/js/features/native-requests.ts +337 -0
- package/public/js/features/presentation-preference.ts +52 -0
- package/public/js/features/process-block.ts +35 -1
- package/public/js/features/process-log-adapter.ts +11 -1
- package/public/js/features/settings-core.ts +20 -1
- package/public/js/features/settings-types.ts +5 -1
- package/public/js/features/trace-drawer.ts +145 -43
- package/public/js/features/ui-status.ts +5 -0
- package/public/js/state.ts +3 -0
- package/public/js/ui.ts +41 -8
- package/public/js/virtual-scroll.ts +66 -4
- package/public/js/ws.ts +324 -29
- package/public/manager/src/settings/fields/SelectField.tsx +7 -5
- package/public/manager/src/settings/pages/Agent.tsx +3 -2
- package/public/manager/src/settings/pages/Display.tsx +100 -19
- package/public/manager/src/settings/pages/ModelProvider.tsx +133 -45
- package/public/manager/src/settings/pages/Permissions.tsx +18 -10
- package/public/manager/src/settings/pages/components/PerCliRow.tsx +42 -6
- package/public/manager/src/settings/pages/components/PiProfileDialog.tsx +59 -6
- package/public/manager/src/settings/pages/components/agent/PermissionQuickSection.tsx +9 -6
- package/public/manager/src/settings/pages/components/agent/agent-meta.ts +3 -0
- package/public/manager/src/settings/pages/components/runtime-transport-field.tsx +68 -0
- package/public/manager/src/settings-controls.css +43 -0
- package/public/manager/src/settings-shell.css +21 -1
- package/scripts/bundle-sidecar.sh +282 -37
- package/scripts/check-sidecar-smoke.mjs +250 -137
- package/scripts/sidecar-smoke-probe.mjs +171 -0
- package/public/dist/assets/AdvancedExport-tXydxVAh.js +0 -1
- package/public/dist/assets/Agent-CHaTUS7c.js +0 -1
- package/public/dist/assets/Browser-Dm5J1gXP.js +0 -1
- package/public/dist/assets/BrowserPanel-0b3deLGR.js +0 -3
- package/public/dist/assets/ChannelsDiscord-D6jmfyHe.js +0 -1
- package/public/dist/assets/ChannelsSlack-BcykASIN.js +0 -1
- package/public/dist/assets/ChannelsTelegram-XkNtVi8o.js +0 -1
- package/public/dist/assets/CodeCanvas-D-JH2Ikl.js +0 -3
- package/public/dist/assets/DesignPanel-SuUOoyQN.js +0 -2
- package/public/dist/assets/Display-B25HqCMH.js +0 -1
- package/public/dist/assets/DocPanel-qiqo6365.js +0 -1
- package/public/dist/assets/FolderPanel-BkggPdTP.js +0 -3
- package/public/dist/assets/HealthBadge-D7BQ-LHD.js +0 -1
- package/public/dist/assets/MarkdownRenderer-DZ-hWmCB.js +0 -15
- package/public/dist/assets/MarkdownRenderer-uwE0Wam5.js +0 -1
- package/public/dist/assets/MilkdownWysiwygEditor-DanGAZL5.js +0 -160
- package/public/dist/assets/ModelProvider-tL42E5dy.js +0 -1
- package/public/dist/assets/Network-ByNu-VCZ.js +0 -1
- package/public/dist/assets/NotesGraphWorkspace-Be6ctzYE.js +0 -1
- package/public/dist/assets/PanelLayoutProvider-B9fYsunp.js +0 -1
- package/public/dist/assets/Permissions-B-74b-nO.js +0 -1
- package/public/dist/assets/Permissions-x_6_kLC1.js +0 -1
- package/public/dist/assets/Profile-Bf9-QN2Y.js +0 -1
- package/public/dist/assets/Prompts-DGDw56NQ.js +0 -1
- package/public/dist/assets/TerminalPanel-DdE69MNo.css +0 -1
- package/public/dist/assets/TerminalPanel-gXH7bTXQ.js +0 -36
- package/public/dist/assets/api-DNnX8m0u.js +0 -1
- package/public/dist/assets/api-tVoG39dL.js +0 -1
- package/public/dist/assets/app-CXraFyoA.js +0 -55
- package/public/dist/assets/app-DuyLYRC6.css +0 -1
- package/public/dist/assets/architecture-7GRP2DOG-DxLizWvy.js +0 -1
- package/public/dist/assets/architectureDiagram-5GKGNRK7-BpxFEoT5.js +0 -36
- package/public/dist/assets/asciiarmor-7YwhfGDq.js +0 -1
- package/public/dist/assets/bgtask-badge-BjyAbBio.js +0 -1
- package/public/dist/assets/c4Diagram-7LVT6UL2-Bg0DdRYW.js +0 -38
- package/public/dist/assets/channel-BjgXjYj8.js +0 -1
- package/public/dist/assets/chunk-2Q5K7J3B-BClkI2P5.js +0 -1
- package/public/dist/assets/chunk-3NF5O7KM-DXOprKA_.js +0 -168
- package/public/dist/assets/chunk-CLGD4ZFX-B5zkZ8n6.js +0 -1
- package/public/dist/assets/chunk-GVQU2GXP-BlVn1fMW.js +0 -1
- package/public/dist/assets/chunk-H2I77ZZE-BXf4_vA2.js +0 -1
- package/public/dist/assets/chunk-L3NEJ4N5-FGXu31jw.js +0 -1
- package/public/dist/assets/chunk-LQGUR6SS-qUTD5FMI.js +0 -2
- package/public/dist/assets/chunk-OSK3NFVY-CrXjNywV.js +0 -10
- package/public/dist/assets/chunk-XXDRQBXY-DEwmqeYc.js +0 -1
- package/public/dist/assets/classDiagram-CYGNFDIV-hbaxbeYd.js +0 -1
- package/public/dist/assets/classDiagram-v2-TLXNO2FR-_OfX3b6Y.js +0 -1
- package/public/dist/assets/clike-BcV5UqGE.js +0 -1
- package/public/dist/assets/cmake-DhPsEu0W.js +0 -1
- package/public/dist/assets/cobol-BEekiT-v.js +0 -1
- package/public/dist/assets/coffeescript-Bgk4ZVWF.js +0 -1
- package/public/dist/assets/commonlisp-Dw4PRJwx.js +0 -1
- package/public/dist/assets/cose-bilkent-JH36ORCC-HnUYAhwC.js +0 -1
- package/public/dist/assets/crystal-CJ-iCD_G.js +0 -1
- package/public/dist/assets/css-BDUaiSMY.js +0 -1
- package/public/dist/assets/cynefin-OW5HDTMX-VXYSLvft.js +0 -1
- package/public/dist/assets/cynefinDiagram-5FMLGOSQ-D0dmg5fA.js +0 -62
- package/public/dist/assets/cytoscape.esm-CS3SmpXd.js +0 -321
- package/public/dist/assets/dagre-DDTOgfwg.js +0 -1
- package/public/dist/assets/dist-BCCaGGDY.js +0 -1
- package/public/dist/assets/dist-BPE4W9iX.js +0 -6
- package/public/dist/assets/dist-BQMBTYXL.js +0 -1
- package/public/dist/assets/dist-BaPGPaX4.js +0 -1
- package/public/dist/assets/dist-CBnlLSQZ.js +0 -1
- package/public/dist/assets/dist-CINTuhik.js +0 -2
- package/public/dist/assets/dist-CX7KjpF3.js +0 -39
- package/public/dist/assets/dist-CczLsP0o.js +0 -9
- package/public/dist/assets/dist-CdfDDy4r.js +0 -1
- package/public/dist/assets/dist-Cl_pRobr.js +0 -1
- package/public/dist/assets/dist-CruwQXwE.js +0 -1
- package/public/dist/assets/dist-CvE8Qa9r.js +0 -2
- package/public/dist/assets/dist-Cy3mcP1e.js +0 -1
- package/public/dist/assets/dist-CzCFEnHw.js +0 -1
- package/public/dist/assets/dist-D2h9T4I9.js +0 -13
- package/public/dist/assets/dist-DLOg6n0b.js +0 -1
- package/public/dist/assets/dist-DW0I56_o.js +0 -1
- package/public/dist/assets/dist-TombgBki.js +0 -11
- package/public/dist/assets/dist-hBRIxDzG.js +0 -1
- package/public/dist/assets/dist-z5Z70wW8.js +0 -1
- package/public/dist/assets/esm-CT1xxdH5.js +0 -4
- package/public/dist/assets/eventmodeling-NTZA5JFV-Csqcv5T_.js +0 -1
- package/public/dist/assets/fields-E1L8aEhU.js +0 -1
- package/public/dist/assets/flowDiagram-T62WH6J4-Del9dfOW.js +0 -1
- package/public/dist/assets/forth-DNnBFTm6.js +0 -1
- package/public/dist/assets/ganttDiagram-EL5Y4UJY-CezfIvti.js +0 -292
- package/public/dist/assets/gitGraph-4MIJSDKK-D_1mlgPm.js +0 -1
- package/public/dist/assets/graphlib-Cjg_soTo.js +0 -1
- package/public/dist/assets/groovy-Cm4gdIYU.js +0 -1
- package/public/dist/assets/idb-cache-B5PX63p7.js +0 -1
- package/public/dist/assets/idb-cache-lOntwU3S.js +0 -1
- package/public/dist/assets/iframe-renderer-BLP8Army.js +0 -1
- package/public/dist/assets/iframe-renderer-vuNrU6aI.js +0 -142
- package/public/dist/assets/info-A6RAGUB7-ce7F80NR.js +0 -1
- package/public/dist/assets/javascript-DD7UxIxH.js +0 -1
- package/public/dist/assets/javascript-DZFdG8BN.js +0 -1
- package/public/dist/assets/katex-BoGadFcG.js +0 -1
- package/public/dist/assets/manager-BspQvGAC.js +0 -13
- package/public/dist/assets/manager-Cmu0aKPb.css +0 -1
- package/public/dist/assets/memory-CRji7xpO.js +0 -1
- package/public/dist/assets/mermaid-loader-BcReSszT.js +0 -1
- package/public/dist/assets/mermaid.core-BJIXJ0Ir.js +0 -11
- package/public/dist/assets/mermaid.core-J6tiqiVK.js +0 -1
- package/public/dist/assets/message-history-C1ThtA4i.js +0 -1
- package/public/dist/assets/message-history-CXg12lcd.js +0 -1
- package/public/dist/assets/packet-AYTQ26CC-86oNpyWh.js +0 -1
- package/public/dist/assets/perl-DfpfXWOH.js +0 -1
- package/public/dist/assets/pi-settings-5HVg1sXJ.js +0 -1
- package/public/dist/assets/pie-WAS4IAKB-CMzmzfvT.js +0 -1
- package/public/dist/assets/preload-helper-DFYRRz9w.js +0 -1
- package/public/dist/assets/puppet-DnsvBfcg.js +0 -1
- package/public/dist/assets/python-mfoZJSDM.js +0 -1
- package/public/dist/assets/r-FO7GgXB8.js +0 -1
- package/public/dist/assets/radar-RG4KPBEZ-CsDBxCx4.js +0 -1
- package/public/dist/assets/railroad-74A4TZTK-B6s85Oul.js +0 -1
- package/public/dist/assets/railroad-abnf-HS5TGJTU-jnABoAnr.js +0 -1
- package/public/dist/assets/railroad-ebnf-LZEXJU2U-C_VWXbk9.js +0 -1
- package/public/dist/assets/railroad-peg-WCYAUIDC-y3jeoP_s.js +0 -1
- package/public/dist/assets/rolldown-runtime-XQCOJYun.js +0 -1
- package/public/dist/assets/ruby-Cg1fwXaw.js +0 -1
- package/public/dist/assets/scheme-DGFmPoR2.js +0 -1
- package/public/dist/assets/sequenceDiagram-WJ2MYXX4-BChOR6yh.js +0 -162
- package/public/dist/assets/settings-B2Ix6Y7k.js +0 -1
- package/public/dist/assets/settings-client-D9KY2Ufl.js +0 -1
- package/public/dist/assets/settings-core-Bkb0BoYY.js +0 -1
- package/public/dist/assets/settings-core-DWYQIIoe.js +0 -162
- package/public/dist/assets/sidebar-C8WKweCz.js +0 -49
- package/public/dist/assets/skills-QWf6vRIB.js +0 -12
- package/public/dist/assets/skills-bEGqvmiQ.js +0 -1
- package/public/dist/assets/slash-commands-BbA0Y1up.js +0 -1
- package/public/dist/assets/slash-commands-qD6yScsx.js +0 -20
- package/public/dist/assets/solr-BwGyzi2H.js +0 -1
- package/public/dist/assets/sql-B6Phvk1R.js +0 -1
- package/public/dist/assets/state-DxpgDKMO.js +0 -1
- package/public/dist/assets/stateDiagram-v2-IH3M54BS-BmdRqxzy.js +0 -1
- package/public/dist/assets/swimlanes-V6O3JKXN-Ckem4dQh.js +0 -1
- package/public/dist/assets/swimlanesDiagram-JKAHXJPX-DW_0PiOk.js +0 -8
- package/public/dist/assets/textile-xOWO1SH7.js +0 -1
- package/public/dist/assets/tiki-OG7n6UAo.js +0 -1
- package/public/dist/assets/timeline-definition-24CTP7MA-CJRsjFnd.js +0 -120
- package/public/dist/assets/toml-DkxT-aUR.js +0 -1
- package/public/dist/assets/trace-drawer-Ct8sP4j-.js +0 -15
- package/public/dist/assets/treeView-Q6P3EWNA-ChnMvz2a.js +0 -1
- package/public/dist/assets/treemap-WGGIJYW6-DZJ4jE42.js +0 -1
- package/public/dist/assets/turtle-CEzrJHdY.js +0 -1
- package/public/dist/assets/ui-BZxyyJUk.js +0 -1
- package/public/dist/assets/ui-xoW9x-Pz.js +0 -2
- package/public/dist/assets/vendor-render-BpGO1zp3.js +0 -383
- package/public/dist/assets/vendor-render-kIxHrxDV.css +0 -1
- package/public/dist/assets/vendor-utils-BUFU5ypz.js +0 -1
- package/public/dist/assets/vhdl-M4wLPuJt.js +0 -1
- package/public/dist/assets/wardley-WFR3VGLG-CGM_JiX0.js +0 -1
- package/public/dist/assets/wiki-link-resolver-BGpGBLMp.js +0 -22
- package/public/dist/assets/wiki-link-suggestions-cvpqJp6c.js +0 -2
- package/public/dist/assets/z80-nGsPT_fm.js +0 -1
- /package/public/dist/assets/{agent-meta-KPnVam9G.js → agent-meta-WqLP4HPi.js} +0 -0
- /package/public/dist/assets/{api-FOqKQ9fm.js → api-B9RiiOMM.js} +0 -0
- /package/public/dist/assets/{brainfuck-CM8jf4Gu.js → brainfuck-D5EjA2JK.js} +0 -0
- /package/public/dist/assets/{chunk-Y2CYZVJY-DlLjK0OJ.js → chunk-Y2CYZVJY-DsF7k-Jl.js} +0 -0
- /package/public/dist/assets/{clojure-XHu9GAjV.js → clojure-BflJGmDX.js} +0 -0
- /package/public/dist/assets/{cypher-CJ05ZgAu.js → cypher-p9eYesGn.js} +0 -0
- /package/public/dist/assets/{desktop-bridge-DtydAvqu.js → desktop-bridge-DbRfkg8l.js} +0 -0
- /package/public/dist/assets/{diff-BVcHwfdB.js → diff-ChtP43wD.js} +0 -0
- /package/public/dist/assets/{dtd-Bg0TgBY9.js → dtd-DTF72YNO.js} +0 -0
- /package/public/dist/assets/{ebnf-QSFUkOiT.js → ebnf-D4c0_ac3.js} +0 -0
- /package/public/dist/assets/{eiffel-S15DDWzw.js → eiffel-BEjRio4Q.js} +0 -0
- /package/public/dist/assets/{elm-B746ZFPi.js → elm-Cshzl8qu.js} +0 -0
- /package/public/dist/assets/{fcl-DjQMeb0v.js → fcl-ClOhbFR7.js} +0 -0
- /package/public/dist/assets/{folder-drag-payload-CJ0dxhZa.js → folder-drag-payload-BhV9yzhH.js} +0 -0
- /package/public/dist/assets/{fortran-yg6K9z9n.js → fortran-Bt6PBEDR.js} +0 -0
- /package/public/dist/assets/{gas-fbsH19hy.js → gas-BHEdbvp9.js} +0 -0
- /package/public/dist/assets/{gherkin-BCy9haeT.js → gherkin-oBAE_ms0.js} +0 -0
- /package/public/dist/assets/{haskell-Dq28dVw2.js → haskell-BRsoo5mP.js} +0 -0
- /package/public/dist/assets/{http-B3zr0y0o.js → http-CLVgA2GD.js} +0 -0
- /package/public/dist/assets/{idl-C9CL9hdG.js → idl-BUZw3wgd.js} +0 -0
- /package/public/dist/assets/{julia-CjwfSXBk.js → julia-CQfgDRfP.js} +0 -0
- /package/public/dist/assets/{livescript-vRjI6jFU.js → livescript-BXxG0Yva.js} +0 -0
- /package/public/dist/assets/{locale-DC-ZsWOf.js → locale-B9w_kUtW.js} +0 -0
- /package/public/dist/assets/{mathematica-DJZPFt8k.js → mathematica-u8YMmbU0.js} +0 -0
- /package/public/dist/assets/{mbox-CxBBnlIA.js → mbox-BEMVcqjs.js} +0 -0
- /package/public/dist/assets/{mirc-CBWc0vcU.js → mirc-C9zpzAZU.js} +0 -0
- /package/public/dist/assets/{mllike-DYddHpeS.js → mllike-B45xgp2S.js} +0 -0
- /package/public/dist/assets/{modelica-B94rrYMn.js → modelica-CqHI_q-D.js} +0 -0
- /package/public/dist/assets/{mscgen-D0PO0iPT.js → mscgen-qgSLujhx.js} +0 -0
- /package/public/dist/assets/{octave-DeJPElAr.js → octave-D2Q8cUp1.js} +0 -0
- /package/public/dist/assets/{oz-4dtXWqwe.js → oz-BwTct_5T.js} +0 -0
- /package/public/dist/assets/{pascal-TdeXcL-o.js → pascal-Dp_KdFgX.js} +0 -0
- /package/public/dist/assets/{path-utils-QbjARuCC.js → path-utils-B6vBr0DD.js} +0 -0
- /package/public/dist/assets/{pig-xQ4essgV.js → pig-AF4Hwhju.js} +0 -0
- /package/public/dist/assets/{properties-CrJLOvU2.js → properties-C357ku5U.js} +0 -0
- /package/public/dist/assets/{protobuf-BYv78GYU.js → protobuf-D1ij_kNL.js} +0 -0
- /package/public/dist/assets/{provider-icons-CXA2mnPO.js → provider-icons-Det0fC-4.js} +0 -0
- /package/public/dist/assets/{q-BrTIu4PU.js → q-B9NhS7L_.js} +0 -0
- /package/public/dist/assets/{rpm-D8Wbdep5.js → rpm-gpDK5sbt.js} +0 -0
- /package/public/dist/assets/{sas-Ch1GEx-n.js → sas-C2OyD2Y6.js} +0 -0
- /package/public/dist/assets/{settings-types-DPhhM-cj.js → settings-types-B09BmpYe.js} +0 -0
- /package/public/dist/assets/{smalltalk-ChbxX23N.js → smalltalk-BLp5-jwC.js} +0 -0
- /package/public/dist/assets/{sparql-D9wgprRx.js → sparql-Dz-mlCAC.js} +0 -0
- /package/public/dist/assets/{spreadsheet-BySehl32.js → spreadsheet-CTIncYxj.js} +0 -0
- /package/public/dist/assets/{swift-DZwxTp-L.js → swift-DKB6_1j6.js} +0 -0
- /package/public/dist/assets/{tcl-BSOjIY_8.js → tcl-BGfruO1u.js} +0 -0
- /package/public/dist/assets/{tiddlywiki-B8jhOxrf.js → tiddlywiki-VlUiK86J.js} +0 -0
- /package/public/dist/assets/{troff-vE5gOX7Y.js → troff-C2dAgh7P.js} +0 -0
- /package/public/dist/assets/{vb-Cii5IQTv.js → vb-BthdM_4N.js} +0 -0
- /package/public/dist/assets/{vbscript-DcZWGZ_S.js → vbscript-D9f6rSsU.js} +0 -0
- /package/public/dist/assets/{velocity-BEag7EnK.js → velocity-CqftRsjg.js} +0 -0
- /package/public/dist/assets/{vendor-icons-Begb5v1n.js → vendor-icons-CNcMX6Ac.js} +0 -0
- /package/public/dist/assets/{w3c-keyname-hgmz1BF7.js → w3c-keyname-BOAvb0qz.js} +0 -0
- /package/public/dist/assets/{webidl-CjehKbx5.js → webidl-D5jiJvOU.js} +0 -0
- /package/public/dist/assets/{yacas-ClBNsli2.js → yacas-CXXgtw0p.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { requestBoundedJson } from '../bounded-api.js';
|
|
2
2
|
import { providerLabel } from '../provider-icons.js';
|
|
3
3
|
import { escapeHtml } from '../render.js';
|
|
4
4
|
|
|
@@ -14,21 +14,40 @@ interface TraceEventDetail extends TraceEventListItem { runId: string; raw: stri
|
|
|
14
14
|
interface TraceEventsPage { total: number; events: TraceEventListItem[]; }
|
|
15
15
|
|
|
16
16
|
const PAGE_SIZE = 80;
|
|
17
|
+
const MAX_READ_BYTES = 16 * 1024 * 1024;
|
|
17
18
|
let currentRunId = '';
|
|
18
|
-
let
|
|
19
|
+
let pageOffset = 0;
|
|
20
|
+
let pageLength = 0;
|
|
21
|
+
let pageLoaded = false;
|
|
22
|
+
let failedOffset: number | null = null;
|
|
19
23
|
let totalCount = 0;
|
|
20
24
|
let loading = false;
|
|
21
25
|
let openRequestId = 0;
|
|
22
26
|
let selectedSeq: number | null = null;
|
|
27
|
+
let traceSession: string | null = null;
|
|
28
|
+
let traceController: AbortController | null = null;
|
|
29
|
+
let detailController: AbortController | null = null;
|
|
30
|
+
let returnFocus: HTMLElement | null = null;
|
|
23
31
|
|
|
24
32
|
function eventTypeOf(event: TraceEventListItem): string { return event.eventType || event.event_type || 'event'; }
|
|
25
33
|
function isCurrentRequest(requestId: number, runId = currentRunId): boolean {
|
|
26
34
|
return requestId === openRequestId && runId === currentRunId;
|
|
27
35
|
}
|
|
28
36
|
|
|
29
|
-
function
|
|
30
|
-
if (!
|
|
31
|
-
return
|
|
37
|
+
function tracePath(path: string): string {
|
|
38
|
+
if (!traceSession) return path;
|
|
39
|
+
return path + (path.includes('?') ? '&' : '?') + new URLSearchParams({session:traceSession});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async function readTrace<T>(path: string, signal: AbortSignal): Promise<T> {
|
|
43
|
+
const response = await requestBoundedJson(path, { method: 'GET' }, signal, MAX_READ_BYTES);
|
|
44
|
+
// Preserve the existing API wrapper's envelope/bare-response compatibility.
|
|
45
|
+
if (response && typeof response === 'object' && 'ok' in response) {
|
|
46
|
+
if (response.ok !== true || !('data' in response)) throw new Error('trace_unavailable');
|
|
47
|
+
return response.data as T;
|
|
48
|
+
}
|
|
49
|
+
if (!response || typeof response !== 'object') throw new Error('trace_unavailable');
|
|
50
|
+
return response as T;
|
|
32
51
|
}
|
|
33
52
|
|
|
34
53
|
function ensureDrawer(): HTMLElement {
|
|
@@ -47,7 +66,12 @@ function ensureDrawer(): HTMLElement {
|
|
|
47
66
|
<div class="trace-event-list" id="traceEventList"></div>
|
|
48
67
|
<pre class="trace-event-raw" id="traceEventRaw">Select an event.</pre>
|
|
49
68
|
</section>
|
|
50
|
-
<footer class="trace-drawer-footer"
|
|
69
|
+
<footer class="trace-drawer-footer">
|
|
70
|
+
<button class="trace-page-button trace-page-previous" type="button" disabled>Previous</button>
|
|
71
|
+
<span class="trace-page-status" role="status" aria-live="polite"></span>
|
|
72
|
+
<button class="trace-page-button trace-page-retry" type="button" hidden>Retry</button>
|
|
73
|
+
<button class="trace-page-button trace-load-more" type="button" disabled>Next</button>
|
|
74
|
+
</footer>
|
|
51
75
|
</aside>`;
|
|
52
76
|
document.body.appendChild(overlay);
|
|
53
77
|
overlay.addEventListener('click', event => {
|
|
@@ -62,10 +86,24 @@ function ensureDrawer(): HTMLElement {
|
|
|
62
86
|
markSelectedRow(selectedSeq);
|
|
63
87
|
void loadEventDetail(runId, seq, openRequestId);
|
|
64
88
|
}
|
|
65
|
-
|
|
89
|
+
const pager = target.closest<HTMLButtonElement>('.trace-page-button');
|
|
90
|
+
if (!pager || pager.disabled || loading) return;
|
|
91
|
+
const offset = pager.classList.contains('trace-page-retry') ? failedOffset
|
|
92
|
+
: pager.classList.contains('trace-page-previous') ? Math.max(0, pageOffset - PAGE_SIZE)
|
|
93
|
+
: pageOffset + pageLength;
|
|
94
|
+
if (offset !== null) void loadPage(openRequestId, currentRunId, offset, pager);
|
|
66
95
|
});
|
|
67
96
|
document.addEventListener('keydown', event => {
|
|
68
97
|
if (event.key === 'Escape' && overlay?.classList.contains('open')) closeTraceDrawer();
|
|
98
|
+
if (event.key !== 'Tab' || !overlay?.classList.contains('open')) return;
|
|
99
|
+
const controls = [...overlay.querySelectorAll<HTMLElement>('button:not([disabled]), a[href], input:not([disabled]), textarea:not([disabled]), [tabindex="0"]')]
|
|
100
|
+
.filter(node => !node.closest('[hidden]') && node.getClientRects().length > 0);
|
|
101
|
+
const first=controls[0], last=controls[controls.length-1];
|
|
102
|
+
if (!first || !last) return;
|
|
103
|
+
const active=document.activeElement;
|
|
104
|
+
if (!overlay.contains(active) || (event.shiftKey && active===first) || (!event.shiftKey && active===last)) {
|
|
105
|
+
event.preventDefault();(event.shiftKey?last:first).focus({preventScroll:true});
|
|
106
|
+
}
|
|
69
107
|
});
|
|
70
108
|
return overlay;
|
|
71
109
|
}
|
|
@@ -74,7 +112,16 @@ function setRaw(text: string): void {
|
|
|
74
112
|
const raw = document.getElementById('traceEventRaw');
|
|
75
113
|
if (raw) raw.textContent = text;
|
|
76
114
|
}
|
|
77
|
-
function closeTraceDrawer(): void {
|
|
115
|
+
export function closeTraceDrawer(): void {
|
|
116
|
+
if (!document.getElementById('traceDrawerOverlay')?.classList.contains('open')) return;
|
|
117
|
+
++openRequestId;
|
|
118
|
+
traceController?.abort(); traceController = null;
|
|
119
|
+
detailController?.abort(); detailController = null;
|
|
120
|
+
loading = false;
|
|
121
|
+
document.getElementById('traceDrawerOverlay')?.classList.remove('open');
|
|
122
|
+
if (returnFocus?.isConnected) returnFocus.focus({preventScroll:true});
|
|
123
|
+
returnFocus = null;
|
|
124
|
+
}
|
|
78
125
|
|
|
79
126
|
function renderSummary(summary: TraceSummary): void {
|
|
80
127
|
const title = document.getElementById('traceDrawerTitle');
|
|
@@ -114,65 +161,120 @@ function renderEventRows(events: TraceEventListItem[], runId: string): void {
|
|
|
114
161
|
<span class="trace-event-type">${escapeHtml(eventTypeOf(event))}</span><span class="trace-event-preview">${escapeHtml(event.preview || '')}</span>
|
|
115
162
|
</button>`;
|
|
116
163
|
}).join('');
|
|
117
|
-
list.
|
|
164
|
+
list.innerHTML = html;
|
|
118
165
|
markSelectedRow(selectedSeq);
|
|
119
166
|
}
|
|
120
167
|
|
|
121
|
-
|
|
122
|
-
|
|
168
|
+
function updatePager(message?: string): void {
|
|
169
|
+
const previous = document.querySelector<HTMLButtonElement>('.trace-page-previous');
|
|
170
|
+
const next = document.querySelector<HTMLButtonElement>('.trace-load-more');
|
|
171
|
+
const retry = document.querySelector<HTMLButtonElement>('.trace-page-retry');
|
|
172
|
+
if (previous) previous.disabled = !pageLoaded || pageOffset === 0;
|
|
173
|
+
if (next) next.disabled = !pageLoaded || pageLength === 0 || pageOffset + pageLength >= totalCount;
|
|
174
|
+
if (retry) retry.hidden = failedOffset === null;
|
|
175
|
+
// Keep focus on the clicked button during a read; the click handler is singleflight.
|
|
176
|
+
for (const button of [previous, next, retry]) button?.setAttribute('aria-disabled', String(loading || button.disabled));
|
|
177
|
+
const status = document.querySelector('.trace-page-status');
|
|
178
|
+
if (status) status.textContent = message ?? (pageLength
|
|
179
|
+
? `Events ${pageOffset + 1}–${pageOffset + pageLength} of ${totalCount}` : 'No retained events.');
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function restorePageFocus(initiator: HTMLButtonElement | undefined, focused: Element | null): void {
|
|
183
|
+
// Capture focus before replacement/disable: browsers may blur a disabled button.
|
|
184
|
+
const lostControl = initiator && focused === initiator && (initiator.disabled || initiator.hidden);
|
|
185
|
+
if (!lostControl && (!focused || focused.isConnected)) return;
|
|
186
|
+
const target = document.querySelector<HTMLElement>('.trace-load-more:not([disabled])')
|
|
187
|
+
?? document.querySelector<HTMLElement>('.trace-page-previous:not([disabled])')
|
|
188
|
+
?? document.querySelector<HTMLElement>('.trace-drawer-close');
|
|
189
|
+
target?.focus({ preventScroll: true });
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
async function loadPage(requestId: number, runId: string, offset: number, initiator?: HTMLButtonElement): Promise<void> {
|
|
193
|
+
if (!runId || loading || !traceController || !isCurrentRequest(requestId, runId)) return;
|
|
123
194
|
loading = true;
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (!
|
|
195
|
+
updatePager('Loading trace events...');
|
|
196
|
+
try {
|
|
197
|
+
const page = await readTrace<TraceEventsPage>(tracePath(`/api/traces/${encodeURIComponent(runId)}/events?offset=${offset}&limit=${PAGE_SIZE}`), traceController.signal);
|
|
198
|
+
if (!isCurrentRequest(requestId, runId)) return;
|
|
199
|
+
if (!page || !Number.isSafeInteger(page.total) || page.total < 0 || !Array.isArray(page.events)
|
|
200
|
+
|| page.events.length > PAGE_SIZE || page.events.some(event => !event || !Number.isSafeInteger(event.seq)
|
|
201
|
+
|| event.seq < 1 || typeof event.source !== 'string')) throw new Error('invalid_trace_page');
|
|
202
|
+
const focused = document.activeElement;
|
|
203
|
+
// Commit navigation only after a successful bounded read. Selection/detail is independent.
|
|
204
|
+
renderEventRows(page.events, runId);
|
|
205
|
+
totalCount = page.total;
|
|
206
|
+
pageOffset = offset; pageLength = page.events.length; pageLoaded = true; failedOffset = null;
|
|
207
|
+
loading = false; updatePager(); restorePageFocus(initiator, focused);
|
|
208
|
+
} catch {
|
|
209
|
+
if (!isCurrentRequest(requestId, runId)) return;
|
|
210
|
+
loading = false; failedOffset = offset;
|
|
211
|
+
updatePager('Trace events could not be loaded. Retry this page.');
|
|
129
212
|
return;
|
|
130
213
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
214
|
+
if (selectedSeq === null && pageLength > 0) {
|
|
215
|
+
const first = document.querySelector<HTMLElement>('#traceEventList .trace-event-row');
|
|
216
|
+
selectedSeq = Number(first?.dataset['seq']);
|
|
217
|
+
markSelectedRow(selectedSeq);
|
|
218
|
+
await loadEventDetail(runId, selectedSeq, requestId);
|
|
219
|
+
} else if (selectedSeq === null) setRaw('No retained events.');
|
|
136
220
|
}
|
|
137
221
|
|
|
138
222
|
async function loadEventDetail(runId: string, seq: number, requestId = openRequestId): Promise<void> {
|
|
139
223
|
if (!runId || !Number.isInteger(seq) || seq < 1) return;
|
|
140
|
-
if (!isCurrentRequest(requestId, runId)) return;
|
|
224
|
+
if (!isCurrentRequest(requestId, runId) || !traceController) return;
|
|
225
|
+
detailController?.abort();
|
|
226
|
+
const controller = new AbortController(); detailController = controller;
|
|
227
|
+
const signal = AbortSignal.any([traceController.signal, controller.signal]);
|
|
141
228
|
setRaw('Loading event...');
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
229
|
+
try {
|
|
230
|
+
const detail = await readTrace<TraceEventDetail>(tracePath(`/api/traces/${encodeURIComponent(runId)}/events/${seq}`), signal);
|
|
231
|
+
if (!isCurrentRequest(requestId, runId) || selectedSeq !== seq || signal.aborted) return;
|
|
232
|
+
if (!detail || detail.runId !== runId || detail.seq !== seq || typeof detail.raw !== 'string') throw new Error('invalid_trace_detail');
|
|
233
|
+
setRaw(detail.raw || '(empty trace event)');
|
|
234
|
+
} catch {
|
|
235
|
+
if (isCurrentRequest(requestId, runId) && selectedSeq === seq && !signal.aborted)
|
|
236
|
+
setRaw('Trace event could not be loaded. Select the event to retry.');
|
|
237
|
+
} finally { if (detailController === controller) detailController = null; }
|
|
145
238
|
}
|
|
146
239
|
|
|
147
|
-
export async function openTraceDrawer(runId: string, seq?: number): Promise<void> {
|
|
240
|
+
export async function openTraceDrawer(runId: string, seq?: number, sessionId: string | null = null): Promise<void> {
|
|
148
241
|
const overlay = ensureDrawer();
|
|
149
242
|
const requestId = ++openRequestId;
|
|
150
|
-
|
|
243
|
+
// Sequence is a sparse trace identity, not an ordinal in the retained row list.
|
|
244
|
+
traceController?.abort(); traceController = new AbortController();
|
|
245
|
+
detailController?.abort(); detailController = null;
|
|
246
|
+
traceSession = sessionId;
|
|
247
|
+
if (!overlay.contains(document.activeElement)) {
|
|
248
|
+
returnFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
249
|
+
}
|
|
151
250
|
currentRunId = runId;
|
|
152
|
-
|
|
251
|
+
pageOffset = 0; pageLength = 0; pageLoaded = false; failedOffset = null;
|
|
153
252
|
totalCount = 0;
|
|
154
253
|
loading = false;
|
|
155
254
|
selectedSeq = seq && Number.isInteger(seq) && seq > 0 ? seq : null;
|
|
156
255
|
const list = document.getElementById('traceEventList');
|
|
157
256
|
if (list) list.innerHTML = '';
|
|
257
|
+
document.getElementById('traceDrawerMeta')?.replaceChildren();
|
|
258
|
+
const title = document.getElementById('traceDrawerTitle');
|
|
259
|
+
if (title) title.textContent = 'Trace';
|
|
260
|
+
updatePager('Loading trace...');
|
|
158
261
|
setRaw('Loading trace...');
|
|
159
262
|
overlay.classList.add('open');
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
263
|
+
overlay.querySelector<HTMLElement>('.trace-drawer-close')?.focus({preventScroll:true});
|
|
264
|
+
try {
|
|
265
|
+
const summary = await readTrace<TraceSummary>(tracePath(`/api/traces/${encodeURIComponent(runId)}`), traceController.signal);
|
|
266
|
+
if (!isCurrentRequest(requestId, runId)) return;
|
|
267
|
+
if (!summary || summary.id !== runId) throw new Error('invalid_trace_summary');
|
|
268
|
+
renderSummary(summary);
|
|
269
|
+
totalCount = summary.eventCount || 0;
|
|
270
|
+
} catch {
|
|
271
|
+
if (isCurrentRequest(requestId, runId)) {
|
|
272
|
+
setRaw('Trace is unavailable or internal-only.'); updatePager('Trace is unavailable.');
|
|
273
|
+
}
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
165
276
|
if (selectedSeq) {
|
|
166
277
|
void loadEventDetail(runId, selectedSeq, requestId);
|
|
167
278
|
}
|
|
168
|
-
await
|
|
169
|
-
if (!selectedSeq && totalCount > 0) {
|
|
170
|
-
const firstRow = document.querySelector<HTMLElement>('.trace-event-row');
|
|
171
|
-
const firstSeq = Number(firstRow?.dataset['seq'] || 0);
|
|
172
|
-
if (firstSeq > 0) {
|
|
173
|
-
selectedSeq = firstSeq;
|
|
174
|
-
markSelectedRow(selectedSeq);
|
|
175
|
-
await loadEventDetail(runId, firstSeq, requestId);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
279
|
+
await loadPage(requestId, runId, 0);
|
|
178
280
|
}
|
|
@@ -10,6 +10,11 @@ export function setStatus(s: string): void {
|
|
|
10
10
|
const btn = document.getElementById('btnSend');
|
|
11
11
|
const label = document.getElementById('typingIndicator')?.querySelector('.label') as HTMLElement | null;
|
|
12
12
|
state.agentBusy = s === 'running' || s === 'steering';
|
|
13
|
+
if (btn) {
|
|
14
|
+
btn.setAttribute('aria-label', state.agentBusy ? t('btn.stop') : 'Send message');
|
|
15
|
+
if (state.agentBusy) btn.setAttribute('data-i18n-aria', 'btn.stop');
|
|
16
|
+
else btn.removeAttribute('data-i18n-aria');
|
|
17
|
+
}
|
|
13
18
|
document.getElementById('typingIndicator')?.classList.toggle('active', state.agentBusy);
|
|
14
19
|
if (s === 'running') {
|
|
15
20
|
if (badge) { badge.className = 'status-badge status-running'; badge.textContent = 'running'; }
|
package/public/js/state.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// Object reference ensures mutations are seen across modules.
|
|
4
4
|
|
|
5
5
|
import type { ProcessBlockState } from './features/process-block.js';
|
|
6
|
+
import type { ActivityIdentity } from '../../src/shared/presentation.js';
|
|
6
7
|
|
|
7
8
|
export type HeartbeatSchedule =
|
|
8
9
|
| {
|
|
@@ -59,6 +60,7 @@ export interface ActiveGoalState {
|
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
export interface AppState {
|
|
63
|
+
activityIdentity: ActivityIdentity | null;
|
|
62
64
|
agentBusy: boolean;
|
|
63
65
|
orcState: OrcStateName;
|
|
64
66
|
employees: unknown[];
|
|
@@ -82,6 +84,7 @@ export interface AppState {
|
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
export const state: AppState = {
|
|
87
|
+
activityIdentity: null,
|
|
85
88
|
agentBusy: false,
|
|
86
89
|
employees: [],
|
|
87
90
|
allSkills: [],
|
package/public/js/ui.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { state } from './state.js';
|
|
2
2
|
import { renderMarkdown, escapeHtml, stripOrchestration, linkifyFilePaths } from './render.js';
|
|
3
|
-
import { renderMermaidBlocks } from './render.js';
|
|
3
|
+
import { renderMermaidBlocks, releaseMermaidNodes } from './render.js';
|
|
4
4
|
import { generateId } from './uuid.js';
|
|
5
5
|
import { getAppName } from './features/appname.js';
|
|
6
6
|
import { getAgentAvatarMarkup, getUserAvatarMarkup } from './features/avatar.js';
|
|
@@ -15,7 +15,7 @@ import { renderLiveToolActivity, cleanupToolElements, type ToolLogEntry } from '
|
|
|
15
15
|
import { initMessageActions } from './features/message-actions.js';
|
|
16
16
|
import { addSystemMsg, addMessage, removeSkeleton } from './features/chat-messages.js';
|
|
17
17
|
import { buildLazyVirtualMessageItem } from './features/message-item-html.js';
|
|
18
|
-
import { loadMessages } from './features/message-history.js';
|
|
18
|
+
import { loadMessages, registerVirtualScrollCallbacks, ensureActivityVirtualCallbacks } from './features/message-history.js';
|
|
19
19
|
import { isChatNearBottom, reconcileChatBottomAfterLayout, showChatRestoreIndicator, hideChatRestoreIndicator, hideChatRestoreIndicatorAfterSettle, reconcileChatBottomAfterRestore, scrollToBottom, ensureScrollTracking, canFollowAfterRestore, markFollowingBottom } from './features/chat-scroll.js';
|
|
20
20
|
import { currentProcessBlockFromDom, hasAgentToolBlock, normalizeAgentToolBlocks, removeAgentToolBlocks, serializeProcessStepsForToolLog } from './features/process-block-dom.js';
|
|
21
21
|
import { mergeExplicitAndLiveToolLogs, normalizeMessageToolLog, parseToolLog, sanitizedToolLogEntries, sanitizedToolLogJson, sanitizedToolLogJsonFromEntries, toProcessSteps, type ActiveRunSnapshot, type MessageItem, type QueuedOverlayItem } from './features/process-log-adapter.js';
|
|
@@ -429,7 +429,22 @@ function clearMermaidTransientState(root: HTMLElement): void {
|
|
|
429
429
|
});
|
|
430
430
|
}
|
|
431
431
|
|
|
432
|
-
|
|
432
|
+
/** Correct an already-owned message without replaying final lifecycle effects. */
|
|
433
|
+
export function replaceAgentAnswer(message: HTMLElement, text: string): void {
|
|
434
|
+
const content = message.querySelector<HTMLElement>('.msg-content');
|
|
435
|
+
if (!content) return;
|
|
436
|
+
const raw = stripOrchestration(text);
|
|
437
|
+
if (content.getAttribute('data-raw') === raw && (raw || content.childNodes.length === 0)) return;
|
|
438
|
+
releaseMermaidNodes(content);
|
|
439
|
+
content.innerHTML = raw ? renderMarkdown(text) : '';
|
|
440
|
+
content.setAttribute('data-raw', raw);
|
|
441
|
+
content.classList.remove('lazy-pending');
|
|
442
|
+
activateWidgets(content);
|
|
443
|
+
void renderMermaidBlocks(content, { immediate: true });
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
export function finalizeAgent(text: string | null, toolLog?: ToolLogEntry[], runtimeFinality?: 'present' | 'absent', traceRunId?: string, cacheScope?: string, cacheSessionId?: string): void {
|
|
447
|
+
const nativeFinal = runtimeFinality === 'present' || runtimeFinality === 'absent';
|
|
433
448
|
// Guard: prevent double-render when both agent_done + orchestrate_done fire
|
|
434
449
|
const now = Date.now();
|
|
435
450
|
if (!state.currentAgentDiv && now - lastFinalizeTs < 500) return;
|
|
@@ -455,17 +470,27 @@ export function finalizeAgent(text: string, toolLog?: ToolLogEntry[]): void {
|
|
|
455
470
|
state.currentProcessBlock = null;
|
|
456
471
|
}
|
|
457
472
|
const hasTools = durableToolLog.length > 0;
|
|
458
|
-
if (text || hasTools) {
|
|
473
|
+
if (text || hasTools || nativeFinal) {
|
|
459
474
|
if (!state.currentAgentDiv || !state.currentAgentDiv.isConnected) {
|
|
460
475
|
state.currentAgentDiv = addMessage('agent', '');
|
|
461
476
|
}
|
|
477
|
+
// Exact current-run recovery preserves the original row even when its
|
|
478
|
+
// journal has no Activity model and the first saved-answer read succeeds.
|
|
479
|
+
const preserveActivityHost = !!(state.currentAgentDiv.dataset['activityKey']
|
|
480
|
+
|| state.currentAgentDiv.dataset['activityAnswerPending']
|
|
481
|
+
|| traceRunId && cacheSessionId && state.currentAgentDiv.dataset['traceRunId'] === traceRunId
|
|
482
|
+
&& state.currentAgentDiv.dataset['messageSessionId'] === cacheSessionId);
|
|
483
|
+
if (traceRunId) state.currentAgentDiv.dataset['traceRunId'] = traceRunId;
|
|
484
|
+
delete state.currentAgentDiv.dataset['activityRecovering'];
|
|
462
485
|
state.currentAgentDiv.removeAttribute(ACTIVE_RUN_HYDRATED_ATTR);
|
|
463
486
|
const content = (state.currentAgentDiv as HTMLElement)?.querySelector('.msg-content');
|
|
464
487
|
// Live stream is preview-only; agent_done text is always authoritative.
|
|
465
488
|
const streamedText = currentStream ? finalizeStream(currentStream, true) : '';
|
|
466
|
-
const finalText = text || streamedText;
|
|
489
|
+
const finalText = nativeFinal ? text ?? '' : text || streamedText;
|
|
467
490
|
currentStream = null;
|
|
468
|
-
|
|
491
|
+
// Empty Markdown renders a "dispatching" placeholder; native empty is a
|
|
492
|
+
// terminal result, not a loading state.
|
|
493
|
+
if (content) content.innerHTML = nativeFinal && !finalText ? '' : renderMarkdown(finalText);
|
|
469
494
|
if (hasTools && state.currentAgentDiv && !hadProcessBlock && !hasAgentToolBlock(state.currentAgentDiv)) {
|
|
470
495
|
const contentEl = state.currentAgentDiv.querySelector('.msg-content') as HTMLElement | null;
|
|
471
496
|
if (contentEl) {
|
|
@@ -504,29 +529,37 @@ export function finalizeAgent(text: string, toolLog?: ToolLogEntry[]): void {
|
|
|
504
529
|
else if (encoded) pending.dataset['diagramHtml'] = encoded;
|
|
505
530
|
widget.replaceWith(pending);
|
|
506
531
|
});
|
|
507
|
-
if (durableToolLogJson) {
|
|
532
|
+
if (durableToolLogJson && !preserveActivityHost) {
|
|
533
|
+
// A first/cleared chat can activate VS from an already-rendered
|
|
534
|
+
// user row without the history loader's lazy callback.
|
|
535
|
+
if (!vs.onLazyRender) registerVirtualScrollCallbacks(vs);
|
|
508
536
|
vs.appendItem(buildLazyVirtualMessageItem({
|
|
509
537
|
role: 'assistant',
|
|
510
538
|
content: finalText,
|
|
511
539
|
cli: null,
|
|
512
540
|
tool_log: durableToolLogJson,
|
|
541
|
+
trace_run_id: div.dataset['traceRunId'] ?? null,
|
|
513
542
|
}, vs.count));
|
|
514
543
|
releaseProcessBlockDetails(div);
|
|
515
544
|
vs.scrollToBottom();
|
|
516
545
|
} else {
|
|
517
546
|
div.dataset['turnIndex'] = String(vs.count);
|
|
518
547
|
if (!div.dataset['messageId']) div.dataset['messageId'] = generateId();
|
|
548
|
+
if (preserveActivityHost) ensureActivityVirtualCallbacks(vs);
|
|
519
549
|
vs.appendLiveItem(div);
|
|
520
550
|
}
|
|
521
551
|
div.remove();
|
|
522
552
|
}
|
|
523
553
|
|
|
524
554
|
// Cache agent response for offline (use finalText to capture stream-only responses)
|
|
525
|
-
if (finalText) upsertMessage({
|
|
555
|
+
if (finalText || (traceRunId && preserveActivityHost)) upsertMessage({
|
|
526
556
|
role: 'assistant',
|
|
527
557
|
content: finalText,
|
|
528
558
|
tool_log: durableToolLogJson,
|
|
559
|
+
trace_run_id: state.currentAgentDiv?.dataset['traceRunId'] ?? null,
|
|
529
560
|
timestamp: Date.now(),
|
|
561
|
+
...(cacheScope === undefined ? {} : { scope: cacheScope }),
|
|
562
|
+
...(cacheSessionId === undefined ? {} : { session_id: cacheSessionId }),
|
|
530
563
|
}).catch(() => {});
|
|
531
564
|
}
|
|
532
565
|
currentStream = null;
|
|
@@ -28,6 +28,7 @@ export type RestoreReason =
|
|
|
28
28
|
|
|
29
29
|
export interface VirtualItem {
|
|
30
30
|
id: string;
|
|
31
|
+
messageId?: string;
|
|
31
32
|
html: string;
|
|
32
33
|
height: number; // used as estimateSize hint; tanstack measures real heights
|
|
33
34
|
rehydratesProcessDetails?: boolean;
|
|
@@ -35,6 +36,10 @@ export interface VirtualItem {
|
|
|
35
36
|
|
|
36
37
|
export type LazyRenderCallback = (targets: HTMLElement[]) => void;
|
|
37
38
|
export type RestoreFollowPredicate = () => boolean;
|
|
39
|
+
export interface VirtualLifecycleHooks {
|
|
40
|
+
postRender(root: HTMLElement): void;
|
|
41
|
+
recycle(element: HTMLElement): void;
|
|
42
|
+
}
|
|
38
43
|
type MeasurableVirtualElement = Pick<HTMLElement, 'getBoundingClientRect'>;
|
|
39
44
|
interface ScrollAnchor {
|
|
40
45
|
el: HTMLElement;
|
|
@@ -82,6 +87,23 @@ export class VirtualScroll {
|
|
|
82
87
|
|
|
83
88
|
onLazyRender: LazyRenderCallback | null = null;
|
|
84
89
|
onPostRender: ((viewport: HTMLElement) => void) | null = null;
|
|
90
|
+
onRecycle: ((element: HTMLElement) => void) | null = null;
|
|
91
|
+
private lifecycleHooks = new Set<VirtualLifecycleHooks>();
|
|
92
|
+
|
|
93
|
+
/** Add a stable owner's hooks without replacing caller-owned callbacks. */
|
|
94
|
+
addLifecycleHooks(hooks: VirtualLifecycleHooks): void {
|
|
95
|
+
this.lifecycleHooks.add(hooks);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private postRender(root: HTMLElement): void {
|
|
99
|
+
this.onPostRender?.(root);
|
|
100
|
+
for (const hooks of this.lifecycleHooks) hooks.postRender(root);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
private recycle(element: HTMLElement): void {
|
|
104
|
+
this.onRecycle?.(element);
|
|
105
|
+
for (const hooks of this.lifecycleHooks) hooks.recycle(element);
|
|
106
|
+
}
|
|
85
107
|
|
|
86
108
|
constructor(containerId: string) {
|
|
87
109
|
this.container = document.getElementById(containerId)!;
|
|
@@ -212,15 +234,37 @@ export class VirtualScroll {
|
|
|
212
234
|
releaseMermaidNodes(div);
|
|
213
235
|
const html = div.outerHTML;
|
|
214
236
|
const id = generateId();
|
|
215
|
-
|
|
237
|
+
const messageId = div.dataset['messageId'];
|
|
238
|
+
this.items.push({ id, ...(messageId ? { messageId } : {}), html, height: EST_HEIGHT });
|
|
216
239
|
if (this.virtualizer) {
|
|
217
240
|
this.virtualizer.setOptions({
|
|
218
241
|
...this.virtualizer.options,
|
|
219
242
|
count: this.items.length,
|
|
220
243
|
});
|
|
244
|
+
// Promotion must mount even if neither viewport nor scroll offset changed.
|
|
245
|
+
this.renderItems();
|
|
221
246
|
}
|
|
222
247
|
}
|
|
223
248
|
|
|
249
|
+
/** Reconcile one uniquely identified row, including an offscreen retained row. */
|
|
250
|
+
reconcileMessage(messageId: string, update: (message: HTMLElement) => void): boolean {
|
|
251
|
+
const index = this.items.findIndex(item => item.messageId === messageId);
|
|
252
|
+
if (index < 0 || this.items.some((item, i) => i !== index && item.messageId === messageId)) return false;
|
|
253
|
+
const item = this.items[index]!;
|
|
254
|
+
const mounted = this.mounted.get(index);
|
|
255
|
+
const wrapper = this.container.ownerDocument.createElement('div');
|
|
256
|
+
if (!mounted) wrapper.innerHTML = item.html;
|
|
257
|
+
const message = mounted ?? wrapper.firstElementChild as HTMLElement | null;
|
|
258
|
+
if (!message || message.dataset['messageId'] !== messageId) return false;
|
|
259
|
+
update(message);
|
|
260
|
+
item.html = message.outerHTML;
|
|
261
|
+
if (mounted && this.virtualizer) {
|
|
262
|
+
syncMeasuredItemHeight(this.items, index, mounted);
|
|
263
|
+
this.virtualizer.measureElement(mounted);
|
|
264
|
+
}
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
|
|
224
268
|
updateItemHtml(idx: number, html: string): void {
|
|
225
269
|
if (this.items[idx]) {
|
|
226
270
|
this.items[idx].html = html;
|
|
@@ -376,6 +420,7 @@ export class VirtualScroll {
|
|
|
376
420
|
if (!this._active) return;
|
|
377
421
|
this.deactivate();
|
|
378
422
|
this.container.innerHTML = this.items.map(it => it.html).join('');
|
|
423
|
+
this.postRender(this.container);
|
|
379
424
|
this.items = [];
|
|
380
425
|
}
|
|
381
426
|
|
|
@@ -385,6 +430,8 @@ export class VirtualScroll {
|
|
|
385
430
|
this.itemGap = 0;
|
|
386
431
|
this.onLazyRender = null;
|
|
387
432
|
this.onPostRender = null;
|
|
433
|
+
this.onRecycle = null;
|
|
434
|
+
this.lifecycleHooks.clear();
|
|
388
435
|
}
|
|
389
436
|
|
|
390
437
|
// ── Activation / Deactivation ──
|
|
@@ -557,6 +604,7 @@ export class VirtualScroll {
|
|
|
557
604
|
this.virtualizer = null;
|
|
558
605
|
this._active = false;
|
|
559
606
|
for (const el of this.mounted.values()) {
|
|
607
|
+
this.recycle(el);
|
|
560
608
|
releaseMermaidNodes(el);
|
|
561
609
|
releaseProcessBlockDetails(el);
|
|
562
610
|
}
|
|
@@ -584,6 +632,7 @@ export class VirtualScroll {
|
|
|
584
632
|
|
|
585
633
|
for (const [idx, el] of this.mounted) {
|
|
586
634
|
if (!wantedSet.has(idx)) {
|
|
635
|
+
this.recycle(el);
|
|
587
636
|
releaseMermaidNodes(el);
|
|
588
637
|
const item = this.items[idx];
|
|
589
638
|
if (item?.rehydratesProcessDetails) releaseProcessBlockDetails(el);
|
|
@@ -613,6 +662,21 @@ export class VirtualScroll {
|
|
|
613
662
|
el.style.transform = `translateY(${vItem.start}px)`;
|
|
614
663
|
}
|
|
615
664
|
|
|
665
|
+
// Absolute positioning does not determine reading or keyboard order.
|
|
666
|
+
// Put new older rows before retained rows without replacing their hosts.
|
|
667
|
+
const focused = this.innerEl.contains(document.activeElement)
|
|
668
|
+
? document.activeElement as HTMLElement : null;
|
|
669
|
+
let cursor = this.innerEl.firstElementChild;
|
|
670
|
+
for (const vItem of virtualItems) {
|
|
671
|
+
const el = this.mounted.get(vItem.index);
|
|
672
|
+
if (!el) continue;
|
|
673
|
+
if (el !== cursor) this.innerEl.insertBefore(el, cursor);
|
|
674
|
+
cursor = el.nextElementSibling;
|
|
675
|
+
}
|
|
676
|
+
if (focused?.isConnected && document.activeElement !== focused) {
|
|
677
|
+
focused.focus({ preventScroll: true });
|
|
678
|
+
}
|
|
679
|
+
|
|
616
680
|
// Lazy render before measuring; markdown/code/math change heights.
|
|
617
681
|
if (this.onLazyRender) {
|
|
618
682
|
const lazyTargets = this.innerEl.querySelectorAll<HTMLElement>('.lazy-pending');
|
|
@@ -621,9 +685,7 @@ export class VirtualScroll {
|
|
|
621
685
|
}
|
|
622
686
|
}
|
|
623
687
|
|
|
624
|
-
|
|
625
|
-
this.onPostRender(this.innerEl);
|
|
626
|
-
}
|
|
688
|
+
this.postRender(this.innerEl);
|
|
627
689
|
|
|
628
690
|
// Newly mounted elements now have their final rendered content.
|
|
629
691
|
for (const el of newlyMounted) {
|