cli-jaw 2.1.0 → 2.1.2
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.ja.md +8 -6
- package/README.ko.md +8 -6
- package/README.md +12 -6
- package/README.zh-CN.md +8 -6
- package/dist/bin/cli-jaw.js +5 -1
- package/dist/bin/cli-jaw.js.map +1 -1
- package/dist/bin/commands/browser.js +1 -1
- package/dist/bin/commands/browser.js.map +1 -1
- package/dist/bin/commands/chat.js +98 -58
- package/dist/bin/commands/chat.js.map +1 -1
- package/dist/bin/commands/dispatch.js +130 -5
- package/dist/bin/commands/dispatch.js.map +1 -1
- package/dist/bin/commands/goal.js +18 -6
- package/dist/bin/commands/goal.js.map +1 -1
- package/dist/bin/commands/orchestrate.js.map +1 -1
- package/dist/bin/commands/tui/fullscreen-mode.js +237 -0
- package/dist/bin/commands/tui/fullscreen-mode.js.map +1 -0
- package/dist/bin/commands/tui/input-handler.js +139 -52
- package/dist/bin/commands/tui/input-handler.js.map +1 -1
- package/dist/bin/commands/tui/overlays.js +177 -70
- package/dist/bin/commands/tui/overlays.js.map +1 -1
- package/dist/bin/commands/tui/renderer.js +70 -20
- package/dist/bin/commands/tui/renderer.js.map +1 -1
- package/dist/bin/commands/tui/simple-mode.js +1 -1
- package/dist/bin/commands/tui/simple-mode.js.map +1 -1
- package/dist/bin/commands/tui/tui-io.js +8 -0
- package/dist/bin/commands/tui/tui-io.js.map +1 -0
- package/dist/bin/commands/tui/types.js +9 -0
- package/dist/bin/commands/tui/types.js.map +1 -1
- package/dist/bin/commands/tui/ws-handler.js +115 -23
- package/dist/bin/commands/tui/ws-handler.js.map +1 -1
- package/dist/bin/commands/worker.js +159 -0
- package/dist/bin/commands/worker.js.map +1 -0
- package/dist/bin/postinstall.js +0 -76
- package/dist/bin/postinstall.js.map +1 -1
- package/dist/lib/mcp/format-converters.js +21 -2
- package/dist/lib/mcp/format-converters.js.map +1 -1
- package/dist/lib/mcp/mcp-registry.js +75 -0
- package/dist/lib/mcp/mcp-registry.js.map +1 -0
- package/dist/lib/stt.js +1 -1
- package/dist/lib/stt.js.map +1 -1
- package/dist/scripts/fresh-install-smoke.js +1 -1
- package/dist/scripts/fresh-install-smoke.js.map +1 -1
- package/dist/server.js +27 -6
- package/dist/server.js.map +1 -1
- package/dist/src/agent/args.js +33 -1
- package/dist/src/agent/args.js.map +1 -1
- package/dist/src/agent/claude-e-runtime.js +1 -1
- package/dist/src/agent/claude-e-runtime.js.map +1 -1
- package/dist/src/agent/codex-app-client.js +1 -1
- package/dist/src/agent/error-classifier.js +6 -1
- package/dist/src/agent/error-classifier.js.map +1 -1
- package/dist/src/agent/events/claude.js +1 -0
- package/dist/src/agent/events/claude.js.map +1 -1
- package/dist/src/agent/events/codex.js +0 -44
- package/dist/src/agent/events/codex.js.map +1 -1
- package/dist/src/agent/events/helpers.js +52 -5
- package/dist/src/agent/events/helpers.js.map +1 -1
- package/dist/src/agent/events/opencode.js +6 -2
- package/dist/src/agent/events/opencode.js.map +1 -1
- package/dist/src/agent/events/summary.js +3 -2
- package/dist/src/agent/events/summary.js.map +1 -1
- package/dist/src/agent/events/tool-labels.js +8 -5
- package/dist/src/agent/events/tool-labels.js.map +1 -1
- package/dist/src/agent/kiro-auth.js +213 -0
- package/dist/src/agent/kiro-auth.js.map +1 -0
- package/dist/src/agent/kiro-models.js +79 -0
- package/dist/src/agent/kiro-models.js.map +1 -0
- package/dist/src/agent/kiro-runtime.js +306 -0
- package/dist/src/agent/kiro-runtime.js.map +1 -0
- package/dist/src/agent/lifecycle-handler.js +190 -12
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/memory-flush-controller.js +1 -3
- package/dist/src/agent/memory-flush-controller.js.map +1 -1
- package/dist/src/agent/resume-classifier.js +18 -1
- package/dist/src/agent/resume-classifier.js.map +1 -1
- package/dist/src/agent/session-persistence.js +1 -1
- package/dist/src/agent/session-persistence.js.map +1 -1
- package/dist/src/agent/smoke-detector.js +3 -0
- package/dist/src/agent/smoke-detector.js.map +1 -1
- package/dist/src/agent/spawn/queue.js +10 -4
- package/dist/src/agent/spawn/queue.js.map +1 -1
- package/dist/src/agent/spawn/resume.js +6 -1
- package/dist/src/agent/spawn/resume.js.map +1 -1
- package/dist/src/agent/spawn-env.js +1 -1
- package/dist/src/agent/spawn-env.js.map +1 -1
- package/dist/src/agent/spawn.js +188 -28
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/browser/web-ai/grok-live.js +2 -0
- package/dist/src/browser/web-ai/grok-live.js.map +1 -1
- package/dist/src/cli/claude-models.js +2 -2
- package/dist/src/cli/claude-models.js.map +1 -1
- package/dist/src/cli/commands.js +3 -2
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/handlers-runtime.js +2 -0
- package/dist/src/cli/handlers-runtime.js.map +1 -1
- package/dist/src/cli/handlers-workflows.js +9 -4
- package/dist/src/cli/handlers-workflows.js.map +1 -1
- package/dist/src/cli/handlers.js +47 -7
- package/dist/src/cli/handlers.js.map +1 -1
- package/dist/src/cli/readiness.js +17 -1
- package/dist/src/cli/readiness.js.map +1 -1
- package/dist/src/cli/registry-live.js +17 -0
- package/dist/src/cli/registry-live.js.map +1 -0
- package/dist/src/cli/registry.js +44 -3
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/cli/tui/composer.js +135 -5
- package/dist/src/cli/tui/composer.js.map +1 -1
- package/dist/src/cli/tui/diffview.js +41 -0
- package/dist/src/cli/tui/diffview.js.map +1 -0
- package/dist/src/cli/tui/editor.js +45 -0
- package/dist/src/cli/tui/editor.js.map +1 -0
- package/dist/src/cli/tui/file-mention.js +78 -0
- package/dist/src/cli/tui/file-mention.js.map +1 -0
- package/dist/src/cli/tui/highlight.js +82 -0
- package/dist/src/cli/tui/highlight.js.map +1 -0
- package/dist/src/cli/tui/keymap.js +21 -0
- package/dist/src/cli/tui/keymap.js.map +1 -1
- package/dist/src/cli/tui/markdown.js +124 -0
- package/dist/src/cli/tui/markdown.js.map +1 -0
- package/dist/src/cli/tui/mode.js +26 -0
- package/dist/src/cli/tui/mode.js.map +1 -0
- package/dist/src/cli/tui/overlay.js +121 -98
- package/dist/src/cli/tui/overlay.js.map +1 -1
- package/dist/src/cli/tui/render/frame.js +72 -0
- package/dist/src/cli/tui/render/frame.js.map +1 -0
- package/dist/src/cli/tui/render/layout.js +22 -0
- package/dist/src/cli/tui/render/layout.js.map +1 -0
- package/dist/src/cli/tui/render/mouse.js +25 -0
- package/dist/src/cli/tui/render/mouse.js.map +1 -0
- package/dist/src/cli/tui/render/scheduler.js +37 -0
- package/dist/src/cli/tui/render/scheduler.js.map +1 -0
- package/dist/src/cli/tui/render/viewport.js +82 -0
- package/dist/src/cli/tui/render/viewport.js.map +1 -0
- package/dist/src/cli/tui/renderers.js +37 -0
- package/dist/src/cli/tui/renderers.js.map +1 -1
- package/dist/src/cli/tui/stream.js +48 -0
- package/dist/src/cli/tui/stream.js.map +1 -0
- package/dist/src/cli/tui/text-buffer.js +143 -0
- package/dist/src/cli/tui/text-buffer.js.map +1 -0
- package/dist/src/cli/tui/theme.js +128 -0
- package/dist/src/cli/tui/theme.js.map +1 -0
- package/dist/src/cli/tui/transcript.js +4 -0
- package/dist/src/cli/tui/transcript.js.map +1 -1
- package/dist/src/command-contract/help-renderer.js +1 -1
- package/dist/src/command-contract/help-renderer.js.map +1 -1
- package/dist/src/core/cli-detection.js +14 -0
- package/dist/src/core/cli-detection.js.map +1 -1
- package/dist/src/core/config.js +5 -0
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +7 -0
- package/dist/src/core/db.js.map +1 -1
- package/dist/src/core/employees.js +2 -2
- package/dist/src/core/employees.js.map +1 -1
- package/dist/src/discord/bot.js.map +1 -1
- package/dist/src/discord/discord-file.js +1 -1
- package/dist/src/discord/discord-file.js.map +1 -1
- package/dist/src/discord/send-only-client.js +1 -3
- package/dist/src/discord/send-only-client.js.map +1 -1
- package/dist/src/goal/heartbeat.js +30 -7
- package/dist/src/goal/heartbeat.js.map +1 -1
- package/dist/src/goal/store.js +6 -2
- package/dist/src/goal/store.js.map +1 -1
- package/dist/src/ide/diff.js +37 -0
- package/dist/src/ide/diff.js.map +1 -1
- package/dist/src/manager/launchd-service.js +1 -1
- package/dist/src/manager/launchd-service.js.map +1 -1
- package/dist/src/manager/lifecycle-helpers.js +14 -0
- package/dist/src/manager/lifecycle-helpers.js.map +1 -1
- package/dist/src/manager/lifecycle.js +49 -4
- package/dist/src/manager/lifecycle.js.map +1 -1
- package/dist/src/manager/notes/routes.js +0 -31
- package/dist/src/manager/notes/routes.js.map +1 -1
- package/dist/src/manager/notes/ws.js.map +1 -1
- package/dist/src/manager/registry.js.map +1 -1
- package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
- package/dist/src/manager/scan.js +36 -1
- package/dist/src/manager/scan.js.map +1 -1
- package/dist/src/manager/server.js +21 -2
- package/dist/src/manager/server.js.map +1 -1
- package/dist/src/manager/systemd-service.js +1 -1
- package/dist/src/manager/systemd-service.js.map +1 -1
- package/dist/src/memory/keyword-expand.js +0 -187
- package/dist/src/memory/keyword-expand.js.map +1 -1
- package/dist/src/memory/runtime.js +2 -2
- package/dist/src/memory/runtime.js.map +1 -1
- package/dist/src/memory/shared.js.map +1 -1
- package/dist/src/orchestrator/collect.js +3 -2
- package/dist/src/orchestrator/collect.js.map +1 -1
- package/dist/src/orchestrator/distribute.js +7 -1
- package/dist/src/orchestrator/distribute.js.map +1 -1
- package/dist/src/orchestrator/friction.js +59 -0
- package/dist/src/orchestrator/friction.js.map +1 -0
- package/dist/src/orchestrator/pipeline.js +88 -45
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/sanitize.js +19 -0
- package/dist/src/orchestrator/sanitize.js.map +1 -0
- package/dist/src/orchestrator/seed.js +50 -0
- package/dist/src/orchestrator/seed.js.map +1 -0
- package/dist/src/orchestrator/state-machine.js +206 -74
- package/dist/src/orchestrator/state-machine.js.map +1 -1
- package/dist/src/orchestrator/worker-monitor.js +1 -1
- package/dist/src/orchestrator/worker-monitor.js.map +1 -1
- package/dist/src/orchestrator/worker-progress.js +29 -0
- package/dist/src/orchestrator/worker-progress.js.map +1 -0
- package/dist/src/orchestrator/worker-registry.js +63 -2
- package/dist/src/orchestrator/worker-registry.js.map +1 -1
- package/dist/src/prompt/builder.js +19 -29
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +40 -5
- package/dist/src/prompt/templates/control-system.md +2 -2
- package/dist/src/prompt/templates/employee.md +4 -1
- package/dist/src/prompt/templates/orchestration.md +23 -8
- package/dist/src/routes/employees.js +4 -4
- package/dist/src/routes/employees.js.map +1 -1
- package/dist/src/routes/goal.js +11 -3
- package/dist/src/routes/goal.js.map +1 -1
- package/dist/src/routes/heartbeat.js +1 -1
- package/dist/src/routes/heartbeat.js.map +1 -1
- package/dist/src/routes/i18n.js +1 -1
- package/dist/src/routes/i18n.js.map +1 -1
- package/dist/src/routes/jaw-memory.js +1 -1
- package/dist/src/routes/jaw-memory.js.map +1 -1
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/routes/orchestrate.js +265 -116
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/routes/quota-agy-reverse.js +0 -5
- package/dist/src/routes/quota-agy-reverse.js.map +1 -1
- package/dist/src/routes/quota-kiro-reverse.js +187 -0
- package/dist/src/routes/quota-kiro-reverse.js.map +1 -0
- package/dist/src/routes/settings.js +31 -2
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/skills.js.map +1 -1
- package/dist/src/security/security-audit-log.js.map +1 -1
- package/dist/src/shared/shell-command-display.js +51 -0
- package/dist/src/shared/shell-command-display.js.map +1 -0
- package/dist/src/telegram/bot.js.map +1 -1
- package/dist/src/trace/store.js +32 -0
- package/dist/src/trace/store.js.map +1 -1
- package/dist/src/types/cli-engine.js +1 -0
- package/dist/src/types/cli-engine.js.map +1 -1
- package/dist/src/workflows/employee-boundary.js +7 -7
- package/dist/src/workflows/employee-boundary.js.map +1 -1
- package/dist/src/workflows/handoff.js +16 -16
- package/dist/src/workflows/handoff.js.map +1 -1
- package/dist/src/workflows/scope-sandbox.js +46 -0
- package/dist/src/workflows/scope-sandbox.js.map +1 -0
- package/package.json +1 -1
- package/public/assets/providers/kiro-color.svg +15 -0
- package/public/assets/providers/kiro.svg +14 -0
- package/public/css/modals.css +79 -0
- package/public/css/orc-state.css +21 -2
- package/public/css/sidebar.css +85 -0
- package/public/css/variables.css +2 -2
- package/public/dist/assets/{Agent-CIUGaUVn.js → Agent-DkH7eoHd.js} +1 -1
- package/public/dist/assets/{DocPanel-C1pGgE-S.js → DocPanel-BU16GUlB.js} +1 -1
- package/public/dist/assets/DocPanel-gU-WkgyA.css +1 -0
- package/public/dist/assets/Employees-F0ssNuO-.js +1 -0
- package/public/dist/assets/Heartbeat-C3JS6gkF.js +1 -0
- package/public/dist/assets/Mcp-_Yq4N3Sk.js +4 -0
- package/public/dist/assets/{Memory-BgN8djV4.js → Memory-C-EQubN2.js} +1 -1
- package/public/dist/assets/{ModelProvider-DHQ1Zvw0.js → ModelProvider-BD2KrypI.js} +1 -1
- package/public/dist/assets/agent-meta-B1098B_a.js +1 -0
- package/public/dist/assets/app-ByHYOMZE.js +48 -0
- package/public/dist/assets/app-CYdhP6Vh.css +1 -0
- package/public/dist/assets/constants-s2UJodER.js +1 -0
- package/public/dist/assets/{employees-DZSPGlaH.js → employees-_A-p_bZg.js} +7 -7
- package/public/dist/assets/idb-cache-0LNMskFB.js +1 -0
- package/public/dist/assets/idb-cache-5H89a4l8.js +1 -0
- package/public/dist/assets/{manager-DyrwJLZr.css → manager-B2qEQRxN.css} +1 -1
- package/public/dist/assets/manager-CR9BA-wO.js +12 -0
- package/public/dist/assets/memory-D1RKYvyu.js +1 -0
- package/public/dist/assets/{memory-B4RpXXJ7.js → memory-D9AUn8fG.js} +9 -9
- package/public/dist/assets/{provider-icons-XEfJPGTe.js → provider-icons-CVVK5xUP.js} +35 -6
- package/public/dist/assets/{render-DnylWKO1.js → render-DFBujF8n.js} +4 -4
- package/public/dist/assets/settings-B4ZkeaU-.js +1 -0
- package/public/dist/assets/settings-D9jTceN0.js +151 -0
- package/public/dist/assets/sidebar-DPPRNiTc.js +48 -0
- package/public/dist/assets/skills-8nHJkv-r.js +1 -0
- package/public/dist/assets/{skills-CW7NEhew.js → skills-BDVLIrVT.js} +6 -6
- package/public/dist/assets/{slash-commands-CAydTUgf.js → slash-commands-C5da3q1p.js} +1 -1
- package/public/dist/assets/slash-commands-RJWO8wJZ.js +1 -0
- package/public/dist/assets/{trace-drawer-G-KP3IbQ.js → trace-drawer-5kqBzFMk.js} +1 -1
- package/public/dist/assets/ui-Crnp79bG.js +142 -0
- package/public/dist/assets/ui-HtSKByR3.js +1 -0
- package/public/dist/index.html +113 -86
- package/public/dist/manager/index.html +2 -2
- package/public/index.html +111 -84
- package/public/js/constants.ts +30 -7
- package/public/js/features/chat-search.ts +5 -1
- package/public/js/features/employees.ts +7 -2
- package/public/js/features/idb-cache.ts +4 -0
- package/public/js/features/message-history.ts +55 -7
- package/public/js/features/pending-queue.ts +8 -2
- package/public/js/features/process-block.ts +32 -17
- package/public/js/features/process-log-adapter.ts +11 -2
- package/public/js/features/settings-cli-status-render.ts +163 -0
- package/public/js/features/settings-cli-status.ts +130 -185
- package/public/js/features/settings-core.ts +5 -1
- package/public/js/features/settings-mcp.ts +513 -7
- package/public/js/features/settings.ts +1 -1
- package/public/js/features/tool-ui.ts +18 -4
- package/public/js/features/transport-status-row.ts +3 -0
- package/public/js/main.ts +3 -0
- package/public/js/preview-parent-origin.ts +14 -0
- package/public/js/provider-icons.ts +6 -1
- package/public/js/render/file-links.ts +10 -2
- package/public/js/ui.ts +5 -2
- package/public/js/virtual-scroll.ts +19 -0
- package/public/js/ws.ts +163 -10
- package/public/locales/en.json +8 -2
- package/public/locales/ja.json +8 -2
- package/public/locales/ko.json +8 -2
- package/public/locales/zh.json +8 -2
- package/public/manager/src/App.tsx +13 -70
- package/public/manager/src/InstancePreview.tsx +36 -11
- package/public/manager/src/SidebarRailRouter.tsx +1 -1
- package/public/manager/src/doc-panel/DocPanel.tsx +14 -1
- package/public/manager/src/doc-panel/doc-panel.css +16 -0
- package/public/manager/src/hooks/useInstanceMessageEvents.ts +4 -15
- package/public/manager/src/manager-components.css +1 -1
- package/public/manager/src/manager-polish.css +1 -1
- package/public/manager/src/manager-shortcut-runner.ts +107 -0
- package/public/manager/src/manager-shortcuts.ts +15 -0
- package/public/manager/src/panels/desktop-bridge.ts +2 -0
- package/public/manager/src/settings/SettingsSidebar.tsx +1 -1
- package/public/manager/src/settings/components/sidebar-filter.ts +2 -0
- package/public/manager/src/settings/pages/Mcp.tsx +311 -43
- package/public/manager/src/settings/pages/components/McpServerCard.tsx +89 -55
- package/public/manager/src/settings/pages/components/agent/agent-meta.ts +29 -6
- package/public/manager/src/settings/pages/components/employees-helpers.ts +1 -0
- package/public/manager/src/settings/pages/components/heartbeat-helpers.ts +1 -0
- package/public/manager/src/settings/pages/mcp-helpers.ts +54 -12
- package/public/manager/src/settings/types.ts +1 -0
- package/public/manager/src/types.ts +2 -1
- package/scripts/fresh-install-smoke.ts +1 -1
- package/public/dist/assets/DocPanel-CL1scIfq.css +0 -1
- package/public/dist/assets/Employees-BL9MAzzx.js +0 -1
- package/public/dist/assets/Heartbeat-D64JCg4t.js +0 -1
- package/public/dist/assets/Mcp-wYwJA_61.js +0 -3
- package/public/dist/assets/agent-meta-BhEbjy4P.js +0 -1
- package/public/dist/assets/app-DLDdZ41k.js +0 -48
- package/public/dist/assets/app-RpnKs-sT.css +0 -1
- package/public/dist/assets/constants-ahKI_aEG.js +0 -1
- package/public/dist/assets/idb-cache-BnZfG5FD.js +0 -1
- package/public/dist/assets/idb-cache-CZ3JdK8r.js +0 -1
- package/public/dist/assets/manager-CfyZloIP.js +0 -12
- package/public/dist/assets/memory-C9EVOb_D.js +0 -1
- package/public/dist/assets/settings-DIG_i79X.js +0 -1
- package/public/dist/assets/settings-VCXKhhhz.js +0 -66
- package/public/dist/assets/sidebar-Bi_ktFVw.js +0 -18
- package/public/dist/assets/skills-RjRqvykb.js +0 -1
- package/public/dist/assets/slash-commands-DdXu96Zd.js +0 -1
- package/public/dist/assets/ui-CIQjTLzc.js +0 -1
- package/public/dist/assets/ui-CkHB9Jmo.js +0 -140
|
@@ -9,6 +9,7 @@ import antigravitySvg from '../assets/providers/antigravity-color.svg?raw';
|
|
|
9
9
|
import grokSvg from '../assets/providers/grok-color.svg?raw';
|
|
10
10
|
import copilotSvg from '../assets/providers/copilot-color.svg?raw';
|
|
11
11
|
import cursorSvg from '../assets/providers/cursor-color.svg?raw';
|
|
12
|
+
import kiroSvg from '../assets/providers/kiro-color.svg?raw';
|
|
12
13
|
|
|
13
14
|
// Mono variants for dark/light mode flexibility
|
|
14
15
|
import claudeMonoSvg from '../assets/providers/claude.svg?raw';
|
|
@@ -17,13 +18,14 @@ import antigravityMonoSvg from '../assets/providers/antigravity.svg?raw';
|
|
|
17
18
|
import grokMonoSvg from '../assets/providers/grok.svg?raw';
|
|
18
19
|
import copilotMonoSvg from '../assets/providers/copilot.svg?raw';
|
|
19
20
|
import cursorMonoSvg from '../assets/providers/cursor.svg?raw';
|
|
21
|
+
import kiroMonoSvg from '../assets/providers/kiro.svg?raw';
|
|
20
22
|
|
|
21
23
|
// Service icons (Discord, Telegram)
|
|
22
24
|
import discordSvg from '../assets/providers/discord.svg?raw';
|
|
23
25
|
import telegramSvg from '../assets/providers/telegram.svg?raw';
|
|
24
26
|
import opencodeSvg from '../assets/providers/opencode.svg?raw';
|
|
25
27
|
|
|
26
|
-
export type ProviderSlug = 'ai-e' | 'claude' | 'openai' | 'gemini' | 'antigravity' | 'grok' | 'copilot' | 'cursor' | 'codex' | 'codex-app' | 'opencode' | 'discord' | 'telegram';
|
|
28
|
+
export type ProviderSlug = 'ai-e' | 'claude' | 'openai' | 'gemini' | 'antigravity' | 'grok' | 'copilot' | 'cursor' | 'kiro-code' | 'codex' | 'codex-app' | 'opencode' | 'discord' | 'telegram';
|
|
27
29
|
|
|
28
30
|
interface ProviderIcon {
|
|
29
31
|
color: string;
|
|
@@ -42,6 +44,7 @@ const PROVIDER_ICONS: Record<ProviderSlug, ProviderIcon> = {
|
|
|
42
44
|
grok: { color: grokSvg, mono: grokMonoSvg, label: 'Grok' },
|
|
43
45
|
copilot: { color: copilotSvg, mono: copilotMonoSvg, label: 'Copilot' },
|
|
44
46
|
cursor: { color: cursorSvg, mono: cursorMonoSvg, label: 'Cursor' },
|
|
47
|
+
'kiro-code': { color: kiroSvg, mono: kiroMonoSvg, label: 'Kiro' },
|
|
45
48
|
codex: { color: openaiSvg, mono: openaiSvg, label: 'Codex' },
|
|
46
49
|
'codex-app': { color: openaiColorSvg, mono: openaiSvg, label: 'Codex App' },
|
|
47
50
|
opencode: { color: opencodeSvg, mono: opencodeSvg, label: 'OpenCode' },
|
|
@@ -57,6 +60,7 @@ const PROVIDER_LABEL_ALIASES: Record<string, string> = {
|
|
|
57
60
|
'claude-i': 'Claude E',
|
|
58
61
|
'agy': 'Antigravity',
|
|
59
62
|
cursor: 'Cursor',
|
|
63
|
+
'kiro-code': 'Kiro',
|
|
60
64
|
};
|
|
61
65
|
|
|
62
66
|
function resolveProviderSlug(slug: string): ProviderSlug | null {
|
|
@@ -68,6 +72,7 @@ function resolveProviderSlug(slug: string): ProviderSlug | null {
|
|
|
68
72
|
if (normalized === 'grok' || normalized.startsWith('grok')) return 'grok';
|
|
69
73
|
if (normalized.startsWith('copilot') || normalized === 'githubcopilot') return 'copilot';
|
|
70
74
|
if (normalized === 'cursor' || normalized.startsWith('cursor')) return 'cursor';
|
|
75
|
+
if (normalized === 'kirocode' || normalized === 'kiro') return 'kiro-code';
|
|
71
76
|
if (normalized === 'codexapp' || normalized === 'codexappserver') return 'codex-app';
|
|
72
77
|
if (normalized === 'codex') return 'codex';
|
|
73
78
|
if (normalized === 'opencode') return 'opencode';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// ── File path linkification and click-to-open delegation ──
|
|
2
2
|
import { apiJson } from '../api.js';
|
|
3
|
-
import { postPreviewOpenNotes, previewParentOrigin } from '../preview-parent-origin.js';
|
|
3
|
+
import { postPreviewOpenNotes, postPreviewOpenDoc, previewParentOrigin } from '../preview-parent-origin.js';
|
|
4
4
|
import { normalizeNotesVaultPath } from './notes-vault-path.js';
|
|
5
5
|
|
|
6
6
|
const FILE_PATH_RE_G = /(?:~\/[^\s)`\]"'<>]+|\/(?:Users|home|tmp|var|opt|private)\/[^\s)`\]"'<>]+)/g;
|
|
@@ -88,7 +88,10 @@ function appendFileLink(
|
|
|
88
88
|
if (vaultRel) span.setAttribute('data-vault-rel', vaultRel);
|
|
89
89
|
span.setAttribute('role', 'button');
|
|
90
90
|
span.setAttribute('tabindex', '0');
|
|
91
|
-
|
|
91
|
+
const basename = clean.split('/').pop() || clean;
|
|
92
|
+
const hasExt = /\.\w{1,10}$/.test(basename);
|
|
93
|
+
span.textContent = hasExt ? basename : clean;
|
|
94
|
+
if (hasExt) span.title = clean;
|
|
92
95
|
frag.appendChild(span);
|
|
93
96
|
}
|
|
94
97
|
|
|
@@ -203,6 +206,11 @@ async function handleFilePathClick(path: string, link: HTMLElement): Promise<voi
|
|
|
203
206
|
setTimeout(() => link.classList.remove('opened'), 1500);
|
|
204
207
|
return;
|
|
205
208
|
}
|
|
209
|
+
if (/\.(md|mdx)$/i.test(path) && previewParentOrigin() && postPreviewOpenDoc(path)) {
|
|
210
|
+
link.classList.add('opened');
|
|
211
|
+
setTimeout(() => link.classList.remove('opened'), 1500);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
206
214
|
openLocalPath(path, link);
|
|
207
215
|
}
|
|
208
216
|
|
package/public/js/ui.ts
CHANGED
|
@@ -307,9 +307,11 @@ export function finalizeAgent(text: string, toolLog?: ToolLogEntry[]): void {
|
|
|
307
307
|
}
|
|
308
308
|
state.currentAgentDiv.removeAttribute(ACTIVE_RUN_HYDRATED_ATTR);
|
|
309
309
|
const content = (state.currentAgentDiv as HTMLElement)?.querySelector('.msg-content');
|
|
310
|
-
// Live stream is preview-only; agent_done text stays authoritative.
|
|
310
|
+
// Live stream is preview-only; agent_done text stays authoritative unless stream is longer.
|
|
311
311
|
const streamedText = currentStream ? finalizeStream(currentStream, true) : '';
|
|
312
|
-
const finalText = text
|
|
312
|
+
const finalText = text && streamedText && streamedText.length > text.length
|
|
313
|
+
? streamedText
|
|
314
|
+
: (text || streamedText);
|
|
313
315
|
currentStream = null;
|
|
314
316
|
if (content) content.innerHTML = renderMarkdown(finalText);
|
|
315
317
|
if (hasTools && state.currentAgentDiv && !hadProcessBlock && !hasAgentToolBlock(state.currentAgentDiv)) {
|
|
@@ -359,6 +361,7 @@ export function finalizeAgent(text: string, toolLog?: ToolLogEntry[]): void {
|
|
|
359
361
|
tool_log: durableToolLogJson,
|
|
360
362
|
}, vs.count));
|
|
361
363
|
releaseProcessBlockDetails(div);
|
|
364
|
+
vs.scrollToBottom();
|
|
362
365
|
} else {
|
|
363
366
|
vs.appendLiveItem(div);
|
|
364
367
|
}
|
|
@@ -421,6 +421,25 @@ export class VirtualScroll {
|
|
|
421
421
|
});
|
|
422
422
|
containerObserver.observe(this.container);
|
|
423
423
|
cleanupFns.push(() => containerObserver.disconnect());
|
|
424
|
+
|
|
425
|
+
// ── Content-growth bottom lock ──
|
|
426
|
+
// innerEl height tracks the virtualizer total size (set in render).
|
|
427
|
+
// Lazy markdown / mermaid / images grow it *after* the time-boxed
|
|
428
|
+
// initial settle finishes, drifting the bottom anchor upward with
|
|
429
|
+
// nothing left to re-bottom. Re-bottom when total content height
|
|
430
|
+
// grows — but only while bottom-follow intent still holds, so it
|
|
431
|
+
// releases the moment the user scrolls up (260508 rule preserved).
|
|
432
|
+
let prevTotal = this.virtualizer?.getTotalSize() ?? 0;
|
|
433
|
+
const contentObserver = new ResizeObserver(() => {
|
|
434
|
+
const total = this.virtualizer?.getTotalSize() ?? 0;
|
|
435
|
+
if (total <= prevTotal) { prevTotal = total; return; }
|
|
436
|
+
prevTotal = total;
|
|
437
|
+
if (this.shouldFollowAfterRestore()) {
|
|
438
|
+
this.reconcileBottomAfterLayout('manual', true);
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
contentObserver.observe(this.innerEl);
|
|
442
|
+
cleanupFns.push(() => contentObserver.disconnect());
|
|
424
443
|
}
|
|
425
444
|
|
|
426
445
|
// ── Browser restore reconciliation ──
|
package/public/js/ws.ts
CHANGED
|
@@ -51,6 +51,7 @@ interface WsMessage {
|
|
|
51
51
|
phase?: string;
|
|
52
52
|
phaseLabel?: string;
|
|
53
53
|
pending?: number;
|
|
54
|
+
queued?: Array<{ id: string; prompt: string; source?: string; ts?: number }>;
|
|
54
55
|
path?: string;
|
|
55
56
|
round?: number;
|
|
56
57
|
agentPhases?: { agent?: string; name?: string }[];
|
|
@@ -87,6 +88,16 @@ interface WsMessage {
|
|
|
87
88
|
deferredPending?: number;
|
|
88
89
|
taskAnchor?: string | null;
|
|
89
90
|
resolvedSelection?: ResolvedSelectionState | null;
|
|
91
|
+
buildBudget?: {
|
|
92
|
+
maxWorkerDispatches: number;
|
|
93
|
+
maxSelfHealRetries: number;
|
|
94
|
+
maxVerificationRounds: number;
|
|
95
|
+
spent: {
|
|
96
|
+
workerDispatches: number;
|
|
97
|
+
selfHealRetries: number;
|
|
98
|
+
verificationRounds: number;
|
|
99
|
+
};
|
|
100
|
+
} | null;
|
|
90
101
|
interview?: { known: string[]; unknown: string[]; round: number } | null;
|
|
91
102
|
delaySeconds?: number;
|
|
92
103
|
attempts?: number;
|
|
@@ -124,7 +135,9 @@ async function refreshRuntimeSnapshot(options: { hydrateRun?: boolean } = {}): P
|
|
|
124
135
|
if (options.hydrateRun) hydrateActiveRun(snap.activeRun);
|
|
125
136
|
hydrateGoalState();
|
|
126
137
|
setStatus(snap.runtime.busy ? 'running' : 'idle');
|
|
127
|
-
if (snap.runtime.busy && snap.activeRun?.cli === 'agy'
|
|
138
|
+
if (snap.runtime.busy && (snap.activeRun?.cli === 'agy' || snap.activeRun?.cli === 'kiro-code')) {
|
|
139
|
+
showLiveToolActivity(`${providerLabel(snap.activeRun.cli)} working...`);
|
|
140
|
+
}
|
|
128
141
|
import('./features/employees.js').then(m => {
|
|
129
142
|
if (typeof m.renderEmployees === 'function') m.renderEmployees();
|
|
130
143
|
});
|
|
@@ -254,7 +267,84 @@ function applyOrcContext(ctx: { taskAnchor?: string | null; resolvedSelection?:
|
|
|
254
267
|
renderInterviewPanel(ctx?.interview || null);
|
|
255
268
|
}
|
|
256
269
|
|
|
257
|
-
|
|
270
|
+
let interviewCollapsed: boolean = (() => {
|
|
271
|
+
try { return localStorage.getItem('jaw:interviewCollapsed') === '1'; } catch { return false; }
|
|
272
|
+
})();
|
|
273
|
+
|
|
274
|
+
function setInterviewCollapsed(collapsed: boolean): void {
|
|
275
|
+
interviewCollapsed = collapsed;
|
|
276
|
+
try { localStorage.setItem('jaw:interviewCollapsed', collapsed ? '1' : '0'); } catch { /* storage unavailable */ }
|
|
277
|
+
const panel = document.getElementById('interviewPanel');
|
|
278
|
+
if (!panel) return;
|
|
279
|
+
panel.classList.toggle('collapsed', collapsed);
|
|
280
|
+
const toggle = panel.querySelector('.iv-toggle');
|
|
281
|
+
if (toggle) toggle.setAttribute('aria-expanded', String(!collapsed));
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
interface InterviewEvidenceView {
|
|
285
|
+
fact: string;
|
|
286
|
+
source?: string;
|
|
287
|
+
confidence?: number;
|
|
288
|
+
turnNumber?: number;
|
|
289
|
+
dimension?: string;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
interface DimensionAssessmentView {
|
|
293
|
+
goal: string;
|
|
294
|
+
constraint: string;
|
|
295
|
+
success: string;
|
|
296
|
+
ontology: string;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function renderDimensionBars(assessment: DimensionAssessmentView): string {
|
|
300
|
+
const levelToScore = (l: string) => {
|
|
301
|
+
switch (l) {
|
|
302
|
+
case 'max': return 1.0;
|
|
303
|
+
case 'xhigh': return 0.8;
|
|
304
|
+
case 'high': return 0.6;
|
|
305
|
+
case 'medium': return 0.4;
|
|
306
|
+
default: return 0.2;
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
const levelColor = (l: string) => {
|
|
310
|
+
switch (l) {
|
|
311
|
+
case 'max': return '#2196f3';
|
|
312
|
+
case 'xhigh': return '#4caf50';
|
|
313
|
+
case 'high': return '#8bc34a';
|
|
314
|
+
case 'medium': return '#ff9800';
|
|
315
|
+
default: return '#f44336';
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
const scores = [levelToScore(assessment.goal), levelToScore(assessment.constraint), levelToScore(assessment.success), levelToScore(assessment.ontology)];
|
|
319
|
+
const overall = 1 - (scores.reduce((a, b) => a + b, 0) / scores.length);
|
|
320
|
+
const allMax = Object.values(assessment).every(v => v === 'max');
|
|
321
|
+
const overallLabel = allMax ? '🟢 Ready' : overall <= 0.2 ? '🟢 Ready' : overall <= 0.4 ? '🟡 Almost' : '🔴 Needs work';
|
|
322
|
+
|
|
323
|
+
const bar = (dim: string, level: string) => {
|
|
324
|
+
const score = levelToScore(level);
|
|
325
|
+
const pct = score * 100;
|
|
326
|
+
const color = levelColor(level);
|
|
327
|
+
return `<div style="display:flex;align-items:center;gap:6px;font-size:12px">
|
|
328
|
+
<span style="width:70px;color:var(--text-secondary)">${dim}</span>
|
|
329
|
+
<div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
|
|
330
|
+
<div style="width:${pct}%;height:100%;background:${color};border-radius:3px;transition:width .3s"></div>
|
|
331
|
+
</div>
|
|
332
|
+
<span style="width:60px;text-align:right;font-weight:600;font-size:11px">${score.toFixed(1)} ${level.toUpperCase()}</span>
|
|
333
|
+
</div>`;
|
|
334
|
+
};
|
|
335
|
+
return `<div style="display:flex;flex-direction:column;gap:3px;margin:6px 0">
|
|
336
|
+
<div style="display:flex;justify-content:space-between;font-size:11px;margin-bottom:2px">
|
|
337
|
+
<span style="color:var(--text-secondary)">Ambiguity: ${overall.toFixed(2)}</span>
|
|
338
|
+
<span>${overallLabel}</span>
|
|
339
|
+
</div>
|
|
340
|
+
${bar('Goal', assessment.goal)}
|
|
341
|
+
${bar('Constraint', assessment.constraint)}
|
|
342
|
+
${bar('Success', assessment.success)}
|
|
343
|
+
${bar('Ontology', assessment.ontology)}
|
|
344
|
+
</div>`;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
function renderInterviewPanel(interview: { known: (string | InterviewEvidenceView)[]; unknown: string[]; round: number; assessment?: DimensionAssessmentView } | null): void {
|
|
258
348
|
const panel = document.getElementById('interviewPanel');
|
|
259
349
|
if (!panel) return;
|
|
260
350
|
if (!interview || (!interview.known.length && !interview.unknown.length)) {
|
|
@@ -262,13 +352,68 @@ function renderInterviewPanel(interview: { known: string[]; unknown: string[]; r
|
|
|
262
352
|
return;
|
|
263
353
|
}
|
|
264
354
|
panel.hidden = false;
|
|
265
|
-
|
|
266
|
-
|
|
355
|
+
panel.classList.toggle('collapsed', interviewCollapsed);
|
|
356
|
+
|
|
357
|
+
const sourceIcon = (src?: string) => {
|
|
358
|
+
switch (src) {
|
|
359
|
+
case 'user_statement': return '🟢';
|
|
360
|
+
case 'repo_fact': return '🔵';
|
|
361
|
+
case 'inference': return '🟡';
|
|
362
|
+
case 'assumption': return '🟠';
|
|
363
|
+
case 'default': return '⚪';
|
|
364
|
+
default: return '·';
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
const knownHtml = interview.known.map(k => {
|
|
369
|
+
if (typeof k === 'string') return `<li class="iv-known">· ${escapeHtml(k)}</li>`;
|
|
370
|
+
const ev = k as InterviewEvidenceView;
|
|
371
|
+
const icon = sourceIcon(ev.source);
|
|
372
|
+
const dim = ev.dimension ? ` <span class="iv-dim">[${ev.dimension}]</span>` : '';
|
|
373
|
+
return `<li class="iv-known">${icon} ${escapeHtml(ev.fact)}${dim}</li>`;
|
|
374
|
+
}).join('');
|
|
375
|
+
const unknownHtml = interview.unknown.map(u => `<li class="iv-unknown">❓ ${escapeHtml(typeof u === 'string' ? u : JSON.stringify(u))}</li>`).join('');
|
|
267
376
|
panel.innerHTML = `
|
|
268
|
-
<
|
|
269
|
-
|
|
270
|
-
|
|
377
|
+
<button type="button" class="iv-toggle" aria-expanded="${!interviewCollapsed}" aria-controls="interviewBody" title="인터뷰 트래커 접기/펼치기">
|
|
378
|
+
<span class="iv-chevron" aria-hidden="true">▸</span>
|
|
379
|
+
<span class="iv-summary">Interview · <span class="iv-known-count">Known ${interview.known.length}</span> · <span class="iv-unknown-count">Unknown ${interview.unknown.length}</span>${interview.known.filter(k => typeof k === 'object' && k && 'source' in k && (k as InterviewEvidenceView).source === 'assumption').length > 0 ? ` · <span class="iv-assumption-count">⚠️ ${interview.known.filter(k => typeof k === 'object' && k && 'source' in k && (k as InterviewEvidenceView).source === 'assumption').length} assumptions</span>` : ''} · Round ${interview.round}</span>
|
|
380
|
+
</button>
|
|
381
|
+
<div class="iv-body" id="interviewBody">
|
|
382
|
+
${interview.assessment ? renderDimensionBars(interview.assessment) : ''}
|
|
383
|
+
<div class="iv-section"><strong>Known (${interview.known.length})</strong><ul>${knownHtml}</ul></div>
|
|
384
|
+
<div class="iv-section"><strong>Unknown (${interview.unknown.length})</strong><ul>${unknownHtml}</ul></div>
|
|
385
|
+
</div>
|
|
271
386
|
`;
|
|
387
|
+
if (!panel.dataset['toggleBound']) {
|
|
388
|
+
panel.dataset['toggleBound'] = '1';
|
|
389
|
+
panel.addEventListener('click', (e) => {
|
|
390
|
+
if ((e.target as HTMLElement).closest('.iv-toggle')) {
|
|
391
|
+
setInterviewCollapsed(!interviewCollapsed);
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
function renderBudgetPanel(budget: { maxWorkerDispatches: number; maxSelfHealRetries: number; maxVerificationRounds: number; spent: { workerDispatches: number; selfHealRetries: number; verificationRounds: number } } | null, orcState: string): void {
|
|
398
|
+
const panel = document.getElementById('budgetPanel');
|
|
399
|
+
if (!panel) return;
|
|
400
|
+
if (!budget || orcState !== 'B') { panel.hidden = true; return; }
|
|
401
|
+
panel.hidden = false;
|
|
402
|
+
const bar = (label: string, spent: number, max: number) => {
|
|
403
|
+
const pct = max > 0 ? Math.min((spent / max) * 100, 100) : 0;
|
|
404
|
+
const color = pct >= 100 ? '#f44336' : pct >= 66 ? '#ff9800' : '#4caf50';
|
|
405
|
+
return `<div style="display:flex;align-items:center;gap:6px;font-size:12px">
|
|
406
|
+
<span style="width:70px;color:var(--text-secondary)">${label}</span>
|
|
407
|
+
<div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
|
|
408
|
+
<div style="width:${pct}%;height:100%;background:${color};border-radius:3px"></div>
|
|
409
|
+
</div>
|
|
410
|
+
<span style="width:30px;text-align:right;font-size:11px">${spent}/${max}</span>
|
|
411
|
+
</div>`;
|
|
412
|
+
};
|
|
413
|
+
panel.innerHTML = `<div style="font-size:11px;font-weight:600;margin-bottom:4px;color:var(--text-secondary)">Build Budget</div>
|
|
414
|
+
${bar('Workers', budget.spent.workerDispatches, budget.maxWorkerDispatches)}
|
|
415
|
+
${bar('Self-heal', budget.spent.selfHealRetries, budget.maxSelfHealRetries)}
|
|
416
|
+
${bar('Verify', budget.spent.verificationRounds, budget.maxVerificationRounds)}`;
|
|
272
417
|
}
|
|
273
418
|
|
|
274
419
|
async function hydrateGoalState(): Promise<void> {
|
|
@@ -437,10 +582,14 @@ export function connect(): void {
|
|
|
437
582
|
if (msg.type === 'agent_status') {
|
|
438
583
|
if (msg.running !== undefined) {
|
|
439
584
|
setStatus(msg.running ? 'running' : 'idle');
|
|
440
|
-
if (msg.running && msg.cli === 'agy'
|
|
585
|
+
if (msg.running && (msg.cli === 'agy' || msg.cli === 'kiro-code')) {
|
|
586
|
+
showLiveToolActivity(`${providerLabel(msg.cli)} working...`);
|
|
587
|
+
}
|
|
441
588
|
} else {
|
|
442
589
|
setStatus(msg.status || 'idle');
|
|
443
|
-
if (msg.status === 'running' && msg.cli === 'agy'
|
|
590
|
+
if (msg.status === 'running' && (msg.cli === 'agy' || msg.cli === 'kiro-code')) {
|
|
591
|
+
showLiveToolActivity(`${providerLabel(msg.cli)} working...`);
|
|
592
|
+
}
|
|
444
593
|
}
|
|
445
594
|
// Track per-agent phase for badge rendering
|
|
446
595
|
if (msg.agentId && msg.phase) {
|
|
@@ -449,6 +598,9 @@ export function connect(): void {
|
|
|
449
598
|
}
|
|
450
599
|
} else if (msg.type === 'queue_update') {
|
|
451
600
|
updateQueueBadge(msg.pending || 0);
|
|
601
|
+
if (Array.isArray(msg.queued)) {
|
|
602
|
+
renderPendingQueue(msg.queued);
|
|
603
|
+
}
|
|
452
604
|
syncOrchestrateSnapshot('queue_update').catch(() => { /* snapshot not critical — UI recovers on next event */ });
|
|
453
605
|
} else if (msg.type === 'worklog_created') {
|
|
454
606
|
addSystemMsg(`${ICONS.clipboard} Worklog: ${escapeHtml(msg.path || '')}`);
|
|
@@ -485,7 +637,7 @@ export function connect(): void {
|
|
|
485
637
|
status: (msg.status as 'running' | 'done' | 'error') || 'running',
|
|
486
638
|
startTime: Date.now(),
|
|
487
639
|
});
|
|
488
|
-
} else if (msg.type === 'agent_output') {
|
|
640
|
+
} else if (msg.type === 'agent_output' || msg.type === 'agent_chunk') {
|
|
489
641
|
appendAgentText(msg.text || '');
|
|
490
642
|
} else if (msg.type === 'agent_retry') {
|
|
491
643
|
const retryDelay = Number(msg.delay ?? 0);
|
|
@@ -550,6 +702,7 @@ export function connect(): void {
|
|
|
550
702
|
resolvedSelection: msg.resolvedSelection || null,
|
|
551
703
|
interview: msg.interview || null,
|
|
552
704
|
});
|
|
705
|
+
renderBudgetPanel(msg.buildBudget || null, typeof msg.state === 'string' ? msg.state : 'IDLE');
|
|
553
706
|
} else if (msg.type === 'memory_status') {
|
|
554
707
|
import('./features/memory.js').then(m => m.refreshMemorySidebar());
|
|
555
708
|
} else if (msg.type === 'steer_started') {
|
package/public/locales/en.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"cmd.help.desc": "Command list",
|
|
3
3
|
"cmd.status.desc": "Current status",
|
|
4
|
-
"cmd.clear.desc": "Clear
|
|
5
|
-
"cmd.
|
|
4
|
+
"cmd.clear.desc": "Clear conversation / all: reset skills+employees+MCP",
|
|
5
|
+
"cmd.purge.desc": "Purge conversation and memory",
|
|
6
|
+
"cmd.purge.tg_desc": "Purge chat+memory",
|
|
7
|
+
"cmd.reset.desc": "Bootstrap reset (conversation/memory/skills/employees/MCP)",
|
|
6
8
|
"cmd.model.desc": "View/change model",
|
|
7
9
|
"cmd.cli.desc": "View/change active CLI",
|
|
8
10
|
"cmd.fallback.desc": "Set fallback CLI order",
|
|
@@ -89,9 +91,13 @@
|
|
|
89
91
|
"cmd.reset.confirm": "Full reset: MCP, skills, employees, and session will be reset to defaults.\nType /reset confirm to proceed.",
|
|
90
92
|
"cmd.reset.unavailable": "Reset is not supported in this environment.",
|
|
91
93
|
"cmd.reset.done": "Reset complete: {items}",
|
|
94
|
+
"cmd.reset.bootstrapDone": "🔄 Bootstrap reset complete: {items}",
|
|
95
|
+
"cmd.reset.memory": "Memory",
|
|
92
96
|
"cmd.reset.skills": "Skills",
|
|
93
97
|
"cmd.reset.employees": "Employees",
|
|
94
98
|
"cmd.reset.sessions": "Session",
|
|
99
|
+
"cmd.purge.done": "✅ Conversation + memory purged",
|
|
100
|
+
"cmd.clearAll.done": "✅ {items} reset complete",
|
|
95
101
|
"cmd.mcp.syncDone": "MCP sync complete ({count} targets)",
|
|
96
102
|
"cmd.mcp.installDone": "MCP install complete ({count} servers)",
|
|
97
103
|
"cmd.memory.empty": "No memory files.",
|
package/public/locales/ja.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"cmd.help.desc": "コマンド一覧",
|
|
3
3
|
"cmd.status.desc": "現在の状態",
|
|
4
|
-
"cmd.clear.desc": "
|
|
5
|
-
"cmd.
|
|
4
|
+
"cmd.clear.desc": "会話削除 / all: スキル+従業員+MCPリセット",
|
|
5
|
+
"cmd.purge.desc": "会話+メモリ削除",
|
|
6
|
+
"cmd.purge.tg_desc": "会話+メモリ削除",
|
|
7
|
+
"cmd.reset.desc": "ブートストラップ初期化(会話/メモリ/スキル/従業員/MCP)",
|
|
6
8
|
"cmd.model.desc": "モデルの確認/変更",
|
|
7
9
|
"cmd.cli.desc": "アクティブ CLI の確認/変更",
|
|
8
10
|
"cmd.fallback.desc": "Fallback CLI の順序を設定",
|
|
@@ -89,9 +91,13 @@
|
|
|
89
91
|
"cmd.reset.confirm": "完全リセット: MCP、スキル、従業員、セッションをデフォルトに戻します。\n続行するには /reset confirm と入力してください。",
|
|
90
92
|
"cmd.reset.unavailable": "この環境ではリセットはサポートされていません。",
|
|
91
93
|
"cmd.reset.done": "リセット完了: {items}",
|
|
94
|
+
"cmd.reset.bootstrapDone": "🔄 ブートストラップ初期化完了: {items}",
|
|
95
|
+
"cmd.reset.memory": "メモリ",
|
|
92
96
|
"cmd.reset.skills": "スキル",
|
|
93
97
|
"cmd.reset.employees": "従業員",
|
|
94
98
|
"cmd.reset.sessions": "セッション",
|
|
99
|
+
"cmd.purge.done": "✅ 会話 + メモリ削除完了",
|
|
100
|
+
"cmd.clearAll.done": "✅ {items} リセット完了",
|
|
95
101
|
"cmd.mcp.syncDone": "MCP 同期が完了しました({count} 件)",
|
|
96
102
|
"cmd.mcp.installDone": "MCP インストールが完了しました({count} サーバー)",
|
|
97
103
|
"cmd.memory.empty": "メモリファイルはありません。",
|
package/public/locales/ko.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"cmd.help.desc": "커맨드 목록",
|
|
3
3
|
"cmd.status.desc": "현재 상태",
|
|
4
|
-
"cmd.clear.desc": "
|
|
5
|
-
"cmd.
|
|
4
|
+
"cmd.clear.desc": "대화 삭제 / all: 스킬+직원+MCP 리셋",
|
|
5
|
+
"cmd.purge.desc": "대화 + 메모리 삭제",
|
|
6
|
+
"cmd.purge.tg_desc": "대화+메모리 삭제",
|
|
7
|
+
"cmd.reset.desc": "부트스트랩 초기화 (대화/메모리/스킬/직원/MCP)",
|
|
6
8
|
"cmd.model.desc": "모델 확인/변경",
|
|
7
9
|
"cmd.cli.desc": "활성 CLI 확인/변경",
|
|
8
10
|
"cmd.fallback.desc": "폴백 CLI 순서 설정",
|
|
@@ -89,9 +91,13 @@
|
|
|
89
91
|
"cmd.reset.confirm": "전체 초기화: MCP, 스킬, 직원, 세션을 기본값으로 재설정합니다.\n실행하려면 /reset confirm 을 입력하세요.",
|
|
90
92
|
"cmd.reset.unavailable": "이 환경에서는 초기화가 지원되지 않습니다.",
|
|
91
93
|
"cmd.reset.done": "초기화 완료: {items}",
|
|
94
|
+
"cmd.reset.bootstrapDone": "🔄 부트스트랩 초기화 완료: {items}",
|
|
95
|
+
"cmd.reset.memory": "메모리",
|
|
92
96
|
"cmd.reset.skills": "스킬",
|
|
93
97
|
"cmd.reset.employees": "직원",
|
|
94
98
|
"cmd.reset.sessions": "세션",
|
|
99
|
+
"cmd.purge.done": "✅ 대화 + 메모리 삭제 완료",
|
|
100
|
+
"cmd.clearAll.done": "✅ {items} 리셋 완료",
|
|
95
101
|
"cmd.mcp.syncDone": "MCP sync 완료 ({count} target)",
|
|
96
102
|
"cmd.mcp.installDone": "MCP install 완료 ({count} server)",
|
|
97
103
|
"cmd.memory.empty": "memory 파일이 없습니다.",
|
package/public/locales/zh.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"cmd.help.desc": "命令列表",
|
|
3
3
|
"cmd.status.desc": "当前状态",
|
|
4
|
-
"cmd.clear.desc": "
|
|
5
|
-
"cmd.
|
|
4
|
+
"cmd.clear.desc": "删除对话 / all: 重置技能+员工+MCP",
|
|
5
|
+
"cmd.purge.desc": "删除对话和记忆",
|
|
6
|
+
"cmd.purge.tg_desc": "删除对话+记忆",
|
|
7
|
+
"cmd.reset.desc": "引导重置(对话/记忆/技能/员工/MCP)",
|
|
6
8
|
"cmd.model.desc": "查看/切换模型",
|
|
7
9
|
"cmd.cli.desc": "查看/切换当前 CLI",
|
|
8
10
|
"cmd.fallback.desc": "设置 CLI fallback 顺序",
|
|
@@ -89,9 +91,13 @@
|
|
|
89
91
|
"cmd.reset.confirm": "完全重置:MCP、技能、员工和会话都会恢复默认值。\n输入 /reset confirm 继续。",
|
|
90
92
|
"cmd.reset.unavailable": "当前环境不支持重置。",
|
|
91
93
|
"cmd.reset.done": "重置完成:{items}",
|
|
94
|
+
"cmd.reset.bootstrapDone": "🔄 引导重置完成:{items}",
|
|
95
|
+
"cmd.reset.memory": "记忆",
|
|
92
96
|
"cmd.reset.skills": "技能",
|
|
93
97
|
"cmd.reset.employees": "员工",
|
|
94
98
|
"cmd.reset.sessions": "会话",
|
|
99
|
+
"cmd.purge.done": "✅ 对话 + 记忆已清除",
|
|
100
|
+
"cmd.clearAll.done": "✅ {items} 重置完成",
|
|
95
101
|
"cmd.mcp.syncDone": "MCP 同步完成({count} 个目标)",
|
|
96
102
|
"cmd.mcp.installDone": "MCP 安装完成({count} 个服务器)",
|
|
97
103
|
"cmd.memory.empty": "没有记忆文件。",
|
|
@@ -36,7 +36,7 @@ import { useJawCeoDashboardBridge } from './jaw-ceo/useJawCeoDashboardBridge';
|
|
|
36
36
|
import { actionForShortcutEvent, isManagerShortcutEditableTarget } from './manager-shortcuts';
|
|
37
37
|
import { reconcileActiveProfileFilter } from './profile-filter';
|
|
38
38
|
import type { DashboardDetailTab, DashboardInstance, DashboardInstanceStatus, DashboardLifecycleAction, DashboardNotesAuthoringMode, DashboardNotesGraphSettings, DashboardNotesViewMode, DashboardProfile, DashboardScanResult, DashboardShortcutAction, DashboardSidebarMode } from './types';
|
|
39
|
-
import {
|
|
39
|
+
import { runManagerShortcut as runManagerShortcutAction } from './manager-shortcut-runner';
|
|
40
40
|
import { getDesktop } from './panels/desktop-bridge';
|
|
41
41
|
import type { PanelLayoutState } from './panels/PanelLayoutProvider';
|
|
42
42
|
import { panelLayoutInitialStateFromUi, panelLayoutUiFromState } from './panels/panel-layout-registry-state';
|
|
@@ -355,75 +355,18 @@ export function App() {
|
|
|
355
355
|
}
|
|
356
356
|
|
|
357
357
|
function runManagerShortcut(action: DashboardShortcutAction): void {
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
view.
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
return;
|
|
371
|
-
}
|
|
372
|
-
if (action === 'focusNotes') {
|
|
373
|
-
handleSidebarModeChange('notes');
|
|
374
|
-
view.setDrawerOpen(false);
|
|
375
|
-
return;
|
|
376
|
-
}
|
|
377
|
-
if (action === 'previousInstance') {
|
|
378
|
-
selectRelativeInstance(-1);
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
if (action === 'nextInstance') {
|
|
382
|
-
selectRelativeInstance(1);
|
|
383
|
-
return;
|
|
384
|
-
}
|
|
385
|
-
if (action === 'closeFocusedTab') {
|
|
386
|
-
const active = document.activeElement;
|
|
387
|
-
if (active?.closest('.browser-webview-stack, .browser-tab-strip')) {
|
|
388
|
-
document.dispatchEvent(new CustomEvent('jaw:shortcut-action', { detail: 'closeBrowserTab' }));
|
|
389
|
-
} else if (active?.closest('.terminal-panel, .xterm')) {
|
|
390
|
-
document.dispatchEvent(new CustomEvent('jaw:shortcut-action', { detail: 'closeTerminalTab' }));
|
|
391
|
-
} else if (active?.closest('.bottom-panel')) {
|
|
392
|
-
panelShortcutBus.dispatch('closeActiveBottomTab');
|
|
393
|
-
} else if (active?.closest('.right-panel')) {
|
|
394
|
-
panelShortcutBus.dispatch('toggleRightPanel');
|
|
395
|
-
}
|
|
396
|
-
return;
|
|
397
|
-
}
|
|
398
|
-
if (action === 'switchTab1') { handleTabChange('overview'); return; }
|
|
399
|
-
if (action === 'switchTab2') { handleTabChange('preview'); return; }
|
|
400
|
-
if (action === 'switchTab3') { handleTabChange('logs'); return; }
|
|
401
|
-
if (action === 'switchTab4') { handleTabChange('settings'); return; }
|
|
402
|
-
if (action === 'previousTab' || action === 'nextTab') {
|
|
403
|
-
const tabs: DashboardDetailTab[] = ['overview', 'preview', 'logs', 'settings'];
|
|
404
|
-
const idx = tabs.indexOf(view.activeDetailTab);
|
|
405
|
-
const dir = action === 'nextTab' ? 1 : -1;
|
|
406
|
-
handleTabChange(tabs[(idx + dir + tabs.length) % tabs.length]);
|
|
407
|
-
return;
|
|
408
|
-
}
|
|
409
|
-
if (action === 'browserReload' || action === 'browserHardReload' || action === 'browserFocusUrl' || action === 'browserBack' || action === 'browserForward') {
|
|
410
|
-
const el = document.activeElement;
|
|
411
|
-
if (el?.closest('.browser-webview-stack, .browser-tab-strip, .browser-panel')) {
|
|
412
|
-
document.dispatchEvent(new CustomEvent('jaw:shortcut-action', { detail: action }));
|
|
413
|
-
}
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
if (action === 'terminalClear' || action === 'terminalNewTab') {
|
|
417
|
-
const el = document.activeElement;
|
|
418
|
-
if (el?.closest('.terminal-panel, .xterm')) {
|
|
419
|
-
document.dispatchEvent(new CustomEvent('jaw:shortcut-action', { detail: action }));
|
|
420
|
-
}
|
|
421
|
-
return;
|
|
422
|
-
}
|
|
423
|
-
if (action === 'toggleLeftSidebar') {
|
|
424
|
-
handleSidebarToggle();
|
|
425
|
-
return;
|
|
426
|
-
}
|
|
358
|
+
runManagerShortcutAction(action, {
|
|
359
|
+
selectedInstance,
|
|
360
|
+
filtered,
|
|
361
|
+
activeDetailTab: view.activeDetailTab,
|
|
362
|
+
setDrawerOpen: view.setDrawerOpen,
|
|
363
|
+
handleSidebarModeChange,
|
|
364
|
+
handlePreview,
|
|
365
|
+
selectRelativeInstance,
|
|
366
|
+
handleTabChange,
|
|
367
|
+
setPreviewRefreshKey,
|
|
368
|
+
handleSidebarToggle,
|
|
369
|
+
});
|
|
427
370
|
}
|
|
428
371
|
useEffect(() => {
|
|
429
372
|
if (!view.dashboardShortcutsEnabled) return undefined;
|