cli-jaw 2.1.1 → 2.1.3
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 +18 -11
- package/README.zh-CN.md +8 -6
- package/dist/bin/cli-jaw.js +19 -3
- 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-search.js +71 -0
- package/dist/bin/commands/chat-search.js.map +1 -0
- 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 +66 -9
- package/dist/bin/commands/goal.js.map +1 -1
- package/dist/bin/commands/history.js +61 -0
- package/dist/bin/commands/history.js.map +1 -0
- package/dist/bin/commands/lock.js +104 -0
- package/dist/bin/commands/lock.js.map +1 -0
- package/dist/bin/commands/memory.js +23 -2
- package/dist/bin/commands/memory.js.map +1 -1
- package/dist/bin/commands/orchestrate.js.map +1 -1
- package/dist/bin/commands/project.js +4 -1
- package/dist/bin/commands/project.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 -2
- 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/lib/upload.js +7 -0
- package/dist/lib/upload.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 +151 -22
- package/dist/server.js.map +1 -1
- package/dist/src/agent/agy-runtime.js +1 -0
- package/dist/src/agent/agy-runtime.js.map +1 -1
- package/dist/src/agent/agy-transcript-watcher.js +78 -0
- package/dist/src/agent/agy-transcript-watcher.js.map +1 -0
- package/dist/src/agent/agy-transcript.js +158 -0
- package/dist/src/agent/agy-transcript.js.map +1 -0
- package/dist/src/agent/args.js +51 -5
- 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 +2 -2
- package/dist/src/agent/codex-app-client.js.map +1 -1
- package/dist/src/agent/cursor-runtime.js +1 -0
- package/dist/src/agent/cursor-runtime.js.map +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 +314 -0
- package/dist/src/agent/kiro-runtime.js.map +1 -0
- package/dist/src/agent/lifecycle-handler.js +208 -23
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/memory-flush-controller.js +3 -4
- 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 +2 -2
- 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 +11 -5
- 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 +231 -43
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/agent/watchdog.js +1 -1
- package/dist/src/agent/watchdog.js.map +1 -1
- package/dist/src/browser/actions.js +0 -8
- package/dist/src/browser/actions.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/browser-escalation.js +5 -29
- package/dist/src/browser/adaptive-fetch/browser-escalation.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/browser-runtime.js +5 -14
- package/dist/src/browser/adaptive-fetch/browser-runtime.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/browser-session.js +14 -28
- package/dist/src/browser/adaptive-fetch/browser-session.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/challenge-detector.js +4 -26
- package/dist/src/browser/adaptive-fetch/challenge-detector.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/content-scorer.js +5 -29
- package/dist/src/browser/adaptive-fetch/content-scorer.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js +0 -64
- package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/fetcher.js +4 -19
- package/dist/src/browser/adaptive-fetch/fetcher.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/human-loop.js +0 -26
- package/dist/src/browser/adaptive-fetch/human-loop.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/index.js +74 -145
- package/dist/src/browser/adaptive-fetch/index.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/metadata.js +1 -41
- package/dist/src/browser/adaptive-fetch/metadata.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/output.js +1 -18
- package/dist/src/browser/adaptive-fetch/output.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/reader-adapters.js +43 -75
- package/dist/src/browser/adaptive-fetch/reader-adapters.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/safety.js +5 -48
- package/dist/src/browser/adaptive-fetch/safety.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/third-party-readers.js +0 -11
- package/dist/src/browser/adaptive-fetch/third-party-readers.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/trace.js +3 -18
- package/dist/src/browser/adaptive-fetch/trace.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/transforms.js +0 -23
- package/dist/src/browser/adaptive-fetch/transforms.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/types.js +3 -0
- package/dist/src/browser/adaptive-fetch/types.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/validators.js +0 -17
- package/dist/src/browser/adaptive-fetch/validators.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/waf-profiles.js +0 -10
- package/dist/src/browser/adaptive-fetch/waf-profiles.js.map +1 -1
- package/dist/src/browser/connection.js +1 -1
- package/dist/src/browser/connection.js.map +1 -1
- package/dist/src/browser/web-ai/chatgpt-response.js +0 -1
- package/dist/src/browser/web-ai/chatgpt-response.js.map +1 -1
- package/dist/src/browser/web-ai/chatgpt.js +0 -33
- package/dist/src/browser/web-ai/chatgpt.js.map +1 -1
- package/dist/src/browser/web-ai/diagnostics.js +0 -16
- package/dist/src/browser/web-ai/diagnostics.js.map +1 -1
- package/dist/src/browser/web-ai/doctor.js.map +1 -1
- package/dist/src/browser/web-ai/errors.js +1 -1
- package/dist/src/browser/web-ai/errors.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/command-context.js.map +1 -1
- package/dist/src/cli/commands.js +16 -4
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/compact.js +2 -1
- package/dist/src/cli/compact.js.map +1 -1
- package/dist/src/cli/handlers/session-handlers.js +34 -0
- package/dist/src/cli/handlers/session-handlers.js.map +1 -0
- package/dist/src/cli/handlers-project.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 +85 -17
- package/dist/src/cli/handlers-workflows.js.map +1 -1
- package/dist/src/cli/handlers.js +84 -43
- 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 +51 -10
- 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/chat-sessions.js +63 -0
- package/dist/src/core/chat-sessions.js.map +1 -0
- package/dist/src/core/cli-detection.js +14 -0
- package/dist/src/core/cli-detection.js.map +1 -1
- package/dist/src/core/compact.js +43 -11
- package/dist/src/core/compact.js.map +1 -1
- package/dist/src/core/config.js +14 -1
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +52 -12
- 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/core/main-session.js +3 -2
- package/dist/src/core/main-session.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 +113 -7
- package/dist/src/goal/heartbeat.js.map +1 -1
- package/dist/src/goal/store.js +44 -5
- 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-store.js.map +1 -1
- package/dist/src/manager/lifecycle.js +94 -5
- 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/preview-link-policy.js +11 -4
- package/dist/src/manager/preview-link-policy.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 +42 -7
- package/dist/src/manager/server.js.map +1 -1
- package/dist/src/manager/shutdown.js +8 -3
- package/dist/src/manager/shutdown.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/indexing.js +49 -1
- package/dist/src/memory/indexing.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 +3 -2
- package/dist/src/memory/runtime.js.map +1 -1
- package/dist/src/memory/shared.js.map +1 -1
- package/dist/src/messaging/send.js +66 -7
- package/dist/src/messaging/send.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 +9 -3
- 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/gateway.js +4 -4
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +89 -45
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/sanitize.js +69 -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 +215 -76
- 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 +190 -115
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +124 -61
- package/dist/src/prompt/templates/control-system.md +2 -2
- package/dist/src/prompt/templates/employee.md +41 -56
- package/dist/src/prompt/templates/orchestration.md +23 -8
- package/dist/src/prompt/templates/skills.md +6 -0
- package/dist/src/routes/browser.js +3 -3
- package/dist/src/routes/browser.js.map +1 -1
- package/dist/src/routes/employees.js +4 -4
- package/dist/src/routes/employees.js.map +1 -1
- package/dist/src/routes/goal.js +48 -4
- 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 +8 -3
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/routes/orchestrate.js +267 -117
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/routes/quota-agy-reverse.js +6 -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/quota.js +68 -6
- package/dist/src/routes/quota.js.map +1 -1
- package/dist/src/routes/settings.js +37 -8
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/skills.js.map +1 -1
- package/dist/src/security/path-guards.js +0 -3
- package/dist/src/security/path-guards.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 +58 -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/chat.css +27 -0
- package/public/css/modals.css +79 -0
- package/public/css/orc-state.css +10 -6
- package/public/css/sidebar.css +85 -0
- package/public/css/variables.css +6 -2
- package/public/dist/assets/{Agent-CIUGaUVn.js → Agent-DBKNQ6tp.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/{FolderPanel-DSkanaGN.js → FolderPanel-DT0fU8f2.js} +1 -1
- package/public/dist/assets/Heartbeat-fsuLzY9c.js +1 -0
- package/public/dist/assets/Mcp-_Yq4N3Sk.js +4 -0
- package/public/dist/assets/{Memory-BgN8djV4.js → Memory-CRR8kotI.js} +1 -1
- package/public/dist/assets/{ModelProvider-DHQ1Zvw0.js → ModelProvider-DQgISbKw.js} +1 -1
- package/public/dist/assets/agent-meta-C4mauPL5.js +1 -0
- package/public/dist/assets/app-0OQhPpTG.css +1 -0
- package/public/dist/assets/app-CSqIyg9A.js +55 -0
- package/public/dist/assets/constants-BHMkzpN_.js +1 -0
- package/public/dist/assets/{employees-DiNLzEXS.js → employees-CZdWHH-r.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-CGTQ5EIm.js +12 -0
- package/public/dist/assets/manager-UBunDqMH.css +1 -0
- package/public/dist/assets/{memory-B_nn0A4v.js → memory-B3QSmj_e.js} +9 -9
- package/public/dist/assets/memory-DOBqiuPc.js +1 -0
- package/public/dist/assets/{provider-icons-XEfJPGTe.js → provider-icons-Crv6yvlG.js} +35 -6
- package/public/dist/assets/render-J11oxfnl.js +28 -0
- package/public/dist/assets/settings-BV_2Bh0_.js +1 -0
- package/public/dist/assets/settings-m_cim0ov.js +151 -0
- package/public/dist/assets/sidebar-ZBXdBgF7.js +49 -0
- package/public/dist/assets/{skills-COa4iSwL.js → skills-CjaBmIPV.js} +6 -6
- package/public/dist/assets/skills-Xm3fl1zr.js +1 -0
- package/public/dist/assets/{slash-commands-C_ePvrPi.js → slash-commands-71jc07Wf.js} +1 -1
- package/public/dist/assets/slash-commands-BO6ssnAz.js +1 -0
- package/public/dist/assets/{trace-drawer-CY4z_Ie8.js → trace-drawer-Czvf2P2o.js} +1 -1
- package/public/dist/assets/ui-CverZJnd.js +1 -0
- package/public/dist/assets/ui-qKxy-4p9.js +142 -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 +34 -11
- package/public/js/features/chat-messages.ts +13 -2
- package/public/js/features/chat-search.ts +5 -1
- package/public/js/features/chat.ts +86 -44
- package/public/js/features/employees.ts +7 -2
- package/public/js/features/idb-cache.ts +4 -0
- package/public/js/features/media-lightbox.ts +40 -0
- package/public/js/features/message-history.ts +55 -7
- package/public/js/features/pending-queue.ts +28 -4
- 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 +161 -0
- package/public/js/features/settings-cli-status.ts +136 -187
- package/public/js/features/settings-core.ts +5 -1
- package/public/js/features/settings-mcp.ts +513 -7
- package/public/js/features/settings-types.ts +1 -0
- 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/features/ui-status.ts +5 -1
- package/public/js/main.ts +5 -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/render/markdown.ts +16 -0
- package/public/js/ui.ts +8 -1
- package/public/js/virtual-scroll.ts +19 -0
- package/public/js/ws.ts +151 -15
- package/public/locales/en.json +9 -2
- package/public/locales/ja.json +9 -2
- package/public/locales/ko.json +9 -2
- package/public/locales/zh.json +9 -2
- package/public/manager/src/App.tsx +13 -70
- package/public/manager/src/InstancePreview.tsx +56 -11
- package/public/manager/src/SidebarRailRouter.tsx +32 -4
- package/public/manager/src/components/InstanceRow.tsx +0 -1
- package/public/manager/src/components/WorkbenchHeader.tsx +17 -7
- 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/folder-panel/FolderPanel.tsx +13 -2
- package/public/manager/src/hooks/useElectronDroppedPaths.ts +89 -0
- package/public/manager/src/hooks/useInstanceMessageEvents.ts +4 -15
- package/public/manager/src/manager-components.css +35 -1
- package/public/manager/src/manager-polish.css +11 -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 +13 -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 +32 -9
- 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/scripts/smoke/agy-transcript-tail-smoke.mjs +89 -0
- 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-2Rz848bQ.js +0 -48
- package/public/dist/assets/app-BW-Xz2p6.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/manager-DyrwJLZr.css +0 -1
- package/public/dist/assets/memory-CCjNFWmO.js +0 -1
- package/public/dist/assets/render-CgDEBoCX.js +0 -28
- package/public/dist/assets/settings-CY_6tGuS.js +0 -1
- package/public/dist/assets/settings-DWW4GzNc.js +0 -66
- package/public/dist/assets/sidebar-DQKE5IA1.js +0 -23
- package/public/dist/assets/skills-DYTlqoke.js +0 -1
- package/public/dist/assets/slash-commands-D7CU5oso.js +0 -1
- package/public/dist/assets/ui-Car1OUvV.js +0 -1
- package/public/dist/assets/ui-DK_9ndj0.js +0 -140
- /package/public/dist/assets/{locale-DT1WRaeJ.js → locale-BHMJIzyw.js} +0 -0
package/public/js/main.ts
CHANGED
|
@@ -51,6 +51,7 @@ import {
|
|
|
51
51
|
onPerCliAiEProviderChange, saveActiveCliSettings, savePerCli, openPromptModal,
|
|
52
52
|
onFlushCliChange, loadFlushAgentSidebar,
|
|
53
53
|
closePromptModal, savePromptFromModal, syncMcpServers, installMcpGlobal,
|
|
54
|
+
openMcpModal, initMcpModal,
|
|
54
55
|
loadCliStatus, scheduleCliStatusRefresh, setCliStatusInterval,
|
|
55
56
|
initCliStatusToggle, initCliStatusPreviewHooks, isCliStatusExpanded, expandCliStatus, isEmbeddedPreviewFrame,
|
|
56
57
|
setTelegram, setForwardAll, setTelegramMentionOnly, saveTelegramSettings,
|
|
@@ -89,6 +90,7 @@ import { initPendingQueue } from './features/pending-queue.js';
|
|
|
89
90
|
import { initAttentionBadge } from './features/attention-badge.js';
|
|
90
91
|
import { initHelpDialog } from './features/help-dialog.js';
|
|
91
92
|
import { initChatSearch, toggleChatSearch, closeChatSearch } from './features/chat-search.js';
|
|
93
|
+
import { initMediaLightbox } from './features/media-lightbox.js';
|
|
92
94
|
|
|
93
95
|
function isLocalPreviewOrigin(origin: string): boolean {
|
|
94
96
|
if (origin === window.location.origin) return true;
|
|
@@ -367,8 +369,10 @@ function bindPerCliControlEvents(): void {
|
|
|
367
369
|
}
|
|
368
370
|
|
|
369
371
|
// MCP
|
|
372
|
+
document.querySelector('[data-action="openMcpModal"]')?.addEventListener('click', openMcpModal);
|
|
370
373
|
document.querySelector('[data-action="syncMcp"]')?.addEventListener('click', syncMcpServers);
|
|
371
374
|
document.querySelector('[data-action="installMcp"]')?.addEventListener('click', installMcpGlobal);
|
|
375
|
+
initMcpModal();
|
|
372
376
|
document.querySelector('[data-action="refreshCli"]')?.addEventListener('click', () => {
|
|
373
377
|
if (!isCliStatusExpanded()) expandCliStatus();
|
|
374
378
|
else loadCliStatus(true);
|
|
@@ -516,6 +520,7 @@ async function bootstrap(): Promise<void> {
|
|
|
516
520
|
bindPerCliControlEvents();
|
|
517
521
|
initHelpDialog();
|
|
518
522
|
initChatSearch();
|
|
523
|
+
initMediaLightbox();
|
|
519
524
|
document.getElementById('chatSearchTrigger')?.addEventListener('click', toggleChatSearch);
|
|
520
525
|
initAttentionBadge();
|
|
521
526
|
connect();
|
|
@@ -36,3 +36,17 @@ export function postPreviewOpenNotes(path: string): boolean {
|
|
|
36
36
|
window.parent.postMessage({ type: 'jaw-preview-open-notes', path }, targetOrigin);
|
|
37
37
|
return true;
|
|
38
38
|
}
|
|
39
|
+
|
|
40
|
+
export function postPreviewOpenDoc(absolutePath: string): boolean {
|
|
41
|
+
const targetOrigin = previewParentOrigin();
|
|
42
|
+
if (!targetOrigin || !absolutePath.trim()) return false;
|
|
43
|
+
window.parent.postMessage({ type: 'jaw-preview-open-doc', path: absolutePath }, targetOrigin);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function postPreviewInvalidate(topics: string[], reason: string): boolean {
|
|
48
|
+
const targetOrigin = previewParentOrigin();
|
|
49
|
+
if (!targetOrigin || topics.length === 0) return false;
|
|
50
|
+
window.parent.postMessage({ type: 'dashboard.invalidate', topics, reason }, targetOrigin);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
@@ -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
|
|
|
@@ -10,6 +10,7 @@ import { unshieldSvgBlocks } from './svg-actions.js';
|
|
|
10
10
|
import { highlightCode, ensureHighlightLanguages } from './highlight.js';
|
|
11
11
|
import { schedulePostRender } from './post-render.js';
|
|
12
12
|
import { ensureRenderDelegations } from './delegations.js';
|
|
13
|
+
import { API_BASE } from '../api.js';
|
|
13
14
|
|
|
14
15
|
// ── marked.js configuration (ES module — always available) ──
|
|
15
16
|
let markedReady = false;
|
|
@@ -46,6 +47,21 @@ function ensureMarked(): boolean {
|
|
|
46
47
|
return `<div class="code-block"><div class="code-header"><span class="code-lang">${langDisplay}</span><button class="code-copy-btn" type="button" aria-label="${escapeHtml(copyLabel)}">${escapeHtml(copyLabel)}</button></div><pre><code class="hljs${lang ? ` language-${escapeHtml(lang)}` : ''}">${highlighted}</code></pre></div>`;
|
|
47
48
|
};
|
|
48
49
|
|
|
50
|
+
// Inline media: rewrite absolute paths to /media/ URL, detect video
|
|
51
|
+
renderer.image = function ({ href, title, text }: { href: string; title?: string | null; text: string }) {
|
|
52
|
+
if (!href) return '';
|
|
53
|
+
const src = (href.startsWith('/') || href.includes('/uploads/'))
|
|
54
|
+
? `${API_BASE}/media/${encodeURIComponent(href.split('/').pop()!)}`
|
|
55
|
+
: escapeHtml(href);
|
|
56
|
+
const alt = escapeHtml(text || '');
|
|
57
|
+
const titleAttr = title ? ` title="${escapeHtml(title)}"` : '';
|
|
58
|
+
const ext = (src.split('.').pop() || '').toLowerCase().split('?')[0] || '';
|
|
59
|
+
if (['mp4', 'webm', 'mov', 'ogg'].includes(ext)) {
|
|
60
|
+
return `<video src="${src}" controls class="chat-inline-video" preload="metadata"${titleAttr}></video>`;
|
|
61
|
+
}
|
|
62
|
+
return `<img src="${src}" alt="${alt}" class="chat-inline-img" loading="lazy"${titleAttr} />`;
|
|
63
|
+
};
|
|
64
|
+
|
|
49
65
|
renderer.link = function ({ href, title, text }: { href: string; title?: string | null; text: string }) {
|
|
50
66
|
const safeHref = escapeHtml(href || '');
|
|
51
67
|
const titleAttr = title ? ` title="${escapeHtml(title)}"` : '';
|
package/public/js/ui.ts
CHANGED
|
@@ -76,6 +76,12 @@ export function cleanupToolActivity(): void {
|
|
|
76
76
|
currentStream = null;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
+
/** Timestamp of last steer — used to suppress late agent_done after steer. */
|
|
80
|
+
let lastSteerTs = 0;
|
|
81
|
+
export function markSteered(): void { lastSteerTs = Date.now(); }
|
|
82
|
+
export function clearSteer(): void { lastSteerTs = 0; }
|
|
83
|
+
export function isRecentSteer(): boolean { return Date.now() - lastSteerTs < 8000; }
|
|
84
|
+
|
|
79
85
|
export function showLiveToolActivity(label: string): void {
|
|
80
86
|
removeSkeleton();
|
|
81
87
|
if (!state.currentAgentDiv || !state.currentAgentDiv.isConnected) {
|
|
@@ -307,7 +313,7 @@ export function finalizeAgent(text: string, toolLog?: ToolLogEntry[]): void {
|
|
|
307
313
|
}
|
|
308
314
|
state.currentAgentDiv.removeAttribute(ACTIVE_RUN_HYDRATED_ATTR);
|
|
309
315
|
const content = (state.currentAgentDiv as HTMLElement)?.querySelector('.msg-content');
|
|
310
|
-
// Live stream is preview-only; agent_done text
|
|
316
|
+
// Live stream is preview-only; agent_done text is always authoritative.
|
|
311
317
|
const streamedText = currentStream ? finalizeStream(currentStream, true) : '';
|
|
312
318
|
const finalText = text || streamedText;
|
|
313
319
|
currentStream = null;
|
|
@@ -359,6 +365,7 @@ export function finalizeAgent(text: string, toolLog?: ToolLogEntry[]): void {
|
|
|
359
365
|
tool_log: durableToolLogJson,
|
|
360
366
|
}, vs.count));
|
|
361
367
|
releaseProcessBlockDetails(div);
|
|
368
|
+
vs.scrollToBottom();
|
|
362
369
|
} else {
|
|
363
370
|
vs.appendLiveItem(div);
|
|
364
371
|
}
|
|
@@ -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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ── WebSocket Connection ──
|
|
2
2
|
import { state } from './state.js';
|
|
3
3
|
import { API_BASE } from './api.js';
|
|
4
|
-
import { setStatus, updateQueueBadge, addSystemMsg, appendAgentText, finalizeAgent, addMessage, showProcessStep, cleanupToolActivity,
|
|
4
|
+
import { setStatus, updateQueueBadge, addSystemMsg, appendAgentText, finalizeAgent, addMessage, showProcessStep, cleanupToolActivity, applyQueuedOverlay, hydrateActiveRun, reconcileChatBottomAfterRestore, showChatRestoreIndicator, markSteered, clearSteer, isRecentSteer } from './ui.js';
|
|
5
5
|
import { renderPendingQueue } from './features/pending-queue.js';
|
|
6
6
|
import { t, getLang } from './features/i18n.js';
|
|
7
7
|
import { getVirtualScroll } from './virtual-scroll.js';
|
|
@@ -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;
|
|
@@ -96,6 +107,8 @@ interface WsMessage {
|
|
|
96
107
|
exitCode?: number;
|
|
97
108
|
error?: string;
|
|
98
109
|
message?: string;
|
|
110
|
+
steered?: boolean;
|
|
111
|
+
steerWaitMs?: number;
|
|
99
112
|
}
|
|
100
113
|
|
|
101
114
|
// Agent phase state (populated by agent_status events from orchestrator)
|
|
@@ -123,8 +136,11 @@ async function refreshRuntimeSnapshot(options: { hydrateRun?: boolean } = {}): P
|
|
|
123
136
|
renderPendingQueue(snap.queued || []);
|
|
124
137
|
if (options.hydrateRun) hydrateActiveRun(snap.activeRun);
|
|
125
138
|
hydrateGoalState();
|
|
126
|
-
|
|
127
|
-
|
|
139
|
+
if (snap.runtime.busy) {
|
|
140
|
+
setStatus('running');
|
|
141
|
+
} else if (!isRecentSteer()) {
|
|
142
|
+
setStatus('idle');
|
|
143
|
+
}
|
|
128
144
|
import('./features/employees.js').then(m => {
|
|
129
145
|
if (typeof m.renderEmployees === 'function') m.renderEmployees();
|
|
130
146
|
});
|
|
@@ -268,7 +284,70 @@ function setInterviewCollapsed(collapsed: boolean): void {
|
|
|
268
284
|
if (toggle) toggle.setAttribute('aria-expanded', String(!collapsed));
|
|
269
285
|
}
|
|
270
286
|
|
|
271
|
-
|
|
287
|
+
interface InterviewEvidenceView {
|
|
288
|
+
fact: string;
|
|
289
|
+
source?: string;
|
|
290
|
+
confidence?: number;
|
|
291
|
+
turnNumber?: number;
|
|
292
|
+
dimension?: string;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
interface DimensionAssessmentView {
|
|
296
|
+
goal: string;
|
|
297
|
+
constraint: string;
|
|
298
|
+
success: string;
|
|
299
|
+
ontology: string;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function renderDimensionBars(assessment: DimensionAssessmentView): string {
|
|
303
|
+
const levelToScore = (l: string) => {
|
|
304
|
+
switch (l) {
|
|
305
|
+
case 'max': return 1.0;
|
|
306
|
+
case 'xhigh': return 0.8;
|
|
307
|
+
case 'high': return 0.6;
|
|
308
|
+
case 'medium': return 0.4;
|
|
309
|
+
default: return 0.2;
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
const levelColor = (l: string) => {
|
|
313
|
+
switch (l) {
|
|
314
|
+
case 'max': return '#2196f3';
|
|
315
|
+
case 'xhigh': return '#4caf50';
|
|
316
|
+
case 'high': return '#8bc34a';
|
|
317
|
+
case 'medium': return '#ff9800';
|
|
318
|
+
default: return '#f44336';
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
const scores = [levelToScore(assessment.goal), levelToScore(assessment.constraint), levelToScore(assessment.success), levelToScore(assessment.ontology)];
|
|
322
|
+
const overall = 1 - (scores.reduce((a, b) => a + b, 0) / scores.length);
|
|
323
|
+
const allMax = Object.values(assessment).every(v => v === 'max');
|
|
324
|
+
const overallLabel = allMax ? '🟢 Ready' : overall <= 0.2 ? '🟢 Ready' : overall <= 0.4 ? '🟡 Almost' : '🔴 Needs work';
|
|
325
|
+
|
|
326
|
+
const bar = (dim: string, level: string) => {
|
|
327
|
+
const score = levelToScore(level);
|
|
328
|
+
const pct = score * 100;
|
|
329
|
+
const color = levelColor(level);
|
|
330
|
+
return `<div style="display:flex;align-items:center;gap:6px;font-size:12px">
|
|
331
|
+
<span style="width:70px;color:var(--text-secondary)">${dim}</span>
|
|
332
|
+
<div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
|
|
333
|
+
<div style="width:${pct}%;height:100%;background:${color};border-radius:3px;transition:width .3s"></div>
|
|
334
|
+
</div>
|
|
335
|
+
<span style="width:60px;text-align:right;font-weight:600;font-size:11px">${score.toFixed(1)} ${level.toUpperCase()}</span>
|
|
336
|
+
</div>`;
|
|
337
|
+
};
|
|
338
|
+
return `<div style="display:flex;flex-direction:column;gap:3px;margin:6px 0">
|
|
339
|
+
<div style="display:flex;justify-content:space-between;font-size:11px;margin-bottom:2px">
|
|
340
|
+
<span style="color:var(--text-secondary)">Ambiguity: ${overall.toFixed(2)}</span>
|
|
341
|
+
<span>${overallLabel}</span>
|
|
342
|
+
</div>
|
|
343
|
+
${bar('Goal', assessment.goal)}
|
|
344
|
+
${bar('Constraint', assessment.constraint)}
|
|
345
|
+
${bar('Success', assessment.success)}
|
|
346
|
+
${bar('Ontology', assessment.ontology)}
|
|
347
|
+
</div>`;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
function renderInterviewPanel(interview: { known: (string | InterviewEvidenceView)[]; unknown: string[]; round: number; assessment?: DimensionAssessmentView } | null): void {
|
|
272
351
|
const panel = document.getElementById('interviewPanel');
|
|
273
352
|
if (!panel) return;
|
|
274
353
|
if (!interview || (!interview.known.length && !interview.unknown.length)) {
|
|
@@ -277,16 +356,35 @@ function renderInterviewPanel(interview: { known: string[]; unknown: string[]; r
|
|
|
277
356
|
}
|
|
278
357
|
panel.hidden = false;
|
|
279
358
|
panel.classList.toggle('collapsed', interviewCollapsed);
|
|
280
|
-
|
|
281
|
-
const
|
|
359
|
+
|
|
360
|
+
const sourceIcon = (src?: string) => {
|
|
361
|
+
switch (src) {
|
|
362
|
+
case 'user_statement': return '🟢';
|
|
363
|
+
case 'repo_fact': return '🔵';
|
|
364
|
+
case 'inference': return '🟡';
|
|
365
|
+
case 'assumption': return '🟠';
|
|
366
|
+
case 'default': return '⚪';
|
|
367
|
+
default: return '·';
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
const knownHtml = interview.known.map(k => {
|
|
372
|
+
if (typeof k === 'string') return `<li class="iv-known">· ${escapeHtml(k)}</li>`;
|
|
373
|
+
const ev = k as InterviewEvidenceView;
|
|
374
|
+
const icon = sourceIcon(ev.source);
|
|
375
|
+
const dim = ev.dimension ? ` <span class="iv-dim">[${ev.dimension}]</span>` : '';
|
|
376
|
+
return `<li class="iv-known">${icon} ${escapeHtml(ev.fact)}${dim}</li>`;
|
|
377
|
+
}).join('');
|
|
378
|
+
const unknownHtml = interview.unknown.map(u => `<li class="iv-unknown">❓ ${escapeHtml(typeof u === 'string' ? u : JSON.stringify(u))}</li>`).join('');
|
|
282
379
|
panel.innerHTML = `
|
|
283
380
|
<button type="button" class="iv-toggle" aria-expanded="${!interviewCollapsed}" aria-controls="interviewBody" title="인터뷰 트래커 접기/펼치기">
|
|
284
381
|
<span class="iv-chevron" aria-hidden="true">▸</span>
|
|
285
|
-
<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> · Round ${interview.round}</span>
|
|
382
|
+
<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>
|
|
286
383
|
</button>
|
|
287
384
|
<div class="iv-body" id="interviewBody">
|
|
288
|
-
|
|
289
|
-
<div class="iv-section"><strong>
|
|
385
|
+
${interview.assessment ? `<div class="iv-section iv-section-ambiguity">${renderDimensionBars(interview.assessment)}</div>` : ''}
|
|
386
|
+
<div class="iv-section iv-section-known"><strong>Known (${interview.known.length})</strong><ul>${knownHtml}</ul></div>
|
|
387
|
+
<div class="iv-section iv-section-unknown"><strong>Unknown (${interview.unknown.length})</strong><ul>${unknownHtml}</ul></div>
|
|
290
388
|
</div>
|
|
291
389
|
`;
|
|
292
390
|
if (!panel.dataset['toggleBound']) {
|
|
@@ -299,6 +397,28 @@ function renderInterviewPanel(interview: { known: string[]; unknown: string[]; r
|
|
|
299
397
|
}
|
|
300
398
|
}
|
|
301
399
|
|
|
400
|
+
function renderBudgetPanel(budget: { maxWorkerDispatches: number; maxSelfHealRetries: number; maxVerificationRounds: number; spent: { workerDispatches: number; selfHealRetries: number; verificationRounds: number } } | null, orcState: string): void {
|
|
401
|
+
const panel = document.getElementById('budgetPanel');
|
|
402
|
+
if (!panel) return;
|
|
403
|
+
if (!budget || orcState !== 'B') { panel.hidden = true; return; }
|
|
404
|
+
panel.hidden = false;
|
|
405
|
+
const bar = (label: string, spent: number, max: number) => {
|
|
406
|
+
const pct = max > 0 ? Math.min((spent / max) * 100, 100) : 0;
|
|
407
|
+
const color = pct >= 100 ? '#f44336' : pct >= 66 ? '#ff9800' : '#4caf50';
|
|
408
|
+
return `<div style="display:flex;align-items:center;gap:6px;font-size:12px">
|
|
409
|
+
<span style="width:70px;color:var(--text-secondary)">${label}</span>
|
|
410
|
+
<div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
|
|
411
|
+
<div style="width:${pct}%;height:100%;background:${color};border-radius:3px"></div>
|
|
412
|
+
</div>
|
|
413
|
+
<span style="width:30px;text-align:right;font-size:11px">${spent}/${max}</span>
|
|
414
|
+
</div>`;
|
|
415
|
+
};
|
|
416
|
+
panel.innerHTML = `<div style="font-size:11px;font-weight:600;margin-bottom:4px;color:var(--text-secondary)">Build Budget</div>
|
|
417
|
+
${bar('Workers', budget.spent.workerDispatches, budget.maxWorkerDispatches)}
|
|
418
|
+
${bar('Self-heal', budget.spent.selfHealRetries, budget.maxSelfHealRetries)}
|
|
419
|
+
${bar('Verify', budget.spent.verificationRounds, budget.maxVerificationRounds)}`;
|
|
420
|
+
}
|
|
421
|
+
|
|
302
422
|
async function hydrateGoalState(): Promise<void> {
|
|
303
423
|
try {
|
|
304
424
|
const res = await fetch(`${API_BASE}/api/goal`);
|
|
@@ -463,12 +583,12 @@ export function connect(): void {
|
|
|
463
583
|
return;
|
|
464
584
|
}
|
|
465
585
|
if (msg.type === 'agent_status') {
|
|
586
|
+
if (!msg.running && isRecentSteer()) return;
|
|
587
|
+
if (msg.running && isRecentSteer()) clearSteer();
|
|
466
588
|
if (msg.running !== undefined) {
|
|
467
589
|
setStatus(msg.running ? 'running' : 'idle');
|
|
468
|
-
if (msg.running && msg.cli === 'agy') showLiveToolActivity(`${providerLabel(msg.cli)} working...`);
|
|
469
590
|
} else {
|
|
470
591
|
setStatus(msg.status || 'idle');
|
|
471
|
-
if (msg.status === 'running' && msg.cli === 'agy') showLiveToolActivity(`${providerLabel(msg.cli)} working...`);
|
|
472
592
|
}
|
|
473
593
|
// Track per-agent phase for badge rendering
|
|
474
594
|
if (msg.agentId && msg.phase) {
|
|
@@ -477,6 +597,9 @@ export function connect(): void {
|
|
|
477
597
|
}
|
|
478
598
|
} else if (msg.type === 'queue_update') {
|
|
479
599
|
updateQueueBadge(msg.pending || 0);
|
|
600
|
+
if (Array.isArray(msg.queued)) {
|
|
601
|
+
renderPendingQueue(msg.queued);
|
|
602
|
+
}
|
|
480
603
|
syncOrchestrateSnapshot('queue_update').catch(() => { /* snapshot not critical — UI recovers on next event */ });
|
|
481
604
|
} else if (msg.type === 'worklog_created') {
|
|
482
605
|
addSystemMsg(`${ICONS.clipboard} Worklog: ${escapeHtml(msg.path || '')}`);
|
|
@@ -493,6 +616,7 @@ export function connect(): void {
|
|
|
493
616
|
addSystemMsg(t('ws.roundRetry', { round: msg.round || 0 }));
|
|
494
617
|
}
|
|
495
618
|
} else if (msg.type === 'agent_tool') {
|
|
619
|
+
if (isRecentSteer()) return;
|
|
496
620
|
const stepType = msg.toolType === 'thinking' ? 'thinking'
|
|
497
621
|
: msg.toolType === 'search' ? 'search'
|
|
498
622
|
: msg.toolType === 'subagent' ? 'subagent' : 'tool';
|
|
@@ -513,7 +637,8 @@ export function connect(): void {
|
|
|
513
637
|
status: (msg.status as 'running' | 'done' | 'error') || 'running',
|
|
514
638
|
startTime: Date.now(),
|
|
515
639
|
});
|
|
516
|
-
} else if (msg.type === 'agent_output') {
|
|
640
|
+
} else if (msg.type === 'agent_output' || msg.type === 'agent_chunk') {
|
|
641
|
+
if (isRecentSteer()) return;
|
|
517
642
|
appendAgentText(msg.text || '');
|
|
518
643
|
} else if (msg.type === 'agent_retry') {
|
|
519
644
|
const retryDelay = Number(msg.delay ?? 0);
|
|
@@ -543,8 +668,13 @@ export function connect(): void {
|
|
|
543
668
|
const evt = msg.event;
|
|
544
669
|
if (evt) applyWorkflowEvent(evt);
|
|
545
670
|
} else if (msg.type === 'agent_done') {
|
|
546
|
-
|
|
547
|
-
|
|
671
|
+
if (msg.steered || isRecentSteer()) {
|
|
672
|
+
// Suppress agent_done from steered (killed) process.
|
|
673
|
+
// Server sets steered:true; isRecentSteer is fallback for edge cases.
|
|
674
|
+
} else {
|
|
675
|
+
finalizeAgent(msg.text || '', msg.toolLog);
|
|
676
|
+
notifyUnreadResponse();
|
|
677
|
+
}
|
|
548
678
|
} else if (msg.type === 'orchestrate_done') {
|
|
549
679
|
finalizeAgent(msg.text || '');
|
|
550
680
|
notifyUnreadResponse();
|
|
@@ -578,10 +708,13 @@ export function connect(): void {
|
|
|
578
708
|
resolvedSelection: msg.resolvedSelection || null,
|
|
579
709
|
interview: msg.interview || null,
|
|
580
710
|
});
|
|
711
|
+
renderBudgetPanel(msg.buildBudget || null, typeof msg.state === 'string' ? msg.state : 'IDLE');
|
|
581
712
|
} else if (msg.type === 'memory_status') {
|
|
582
713
|
import('./features/memory.js').then(m => m.refreshMemorySidebar());
|
|
583
714
|
} else if (msg.type === 'steer_started') {
|
|
584
|
-
|
|
715
|
+
markSteered();
|
|
716
|
+
finalizeAgent('');
|
|
717
|
+
setStatus('steering');
|
|
585
718
|
} else if (msg.type === 'new_message' && (msg.source === 'telegram' || msg.source === 'discord' || msg.fromQueue === true)) {
|
|
586
719
|
addMessage(msg.role === 'assistant' ? 'agent' : (msg.role || 'user'), msg.content || '', msg.cli);
|
|
587
720
|
} else if (msg.type === 'system_notice') {
|
|
@@ -600,6 +733,9 @@ export function connect(): void {
|
|
|
600
733
|
addSystemMsg(`⚠️ Goal continuation failed: ${escapeHtml(msg.error || '')}`, 'tool-activity');
|
|
601
734
|
} else if (msg.type === 'settings_change') {
|
|
602
735
|
syncOrchestrateSnapshot('settings_change').catch(() => {});
|
|
736
|
+
} else if (msg.type === 'session_switched' || msg.type === 'session_created') {
|
|
737
|
+
// Reload messages for the new active session
|
|
738
|
+
window.location.reload();
|
|
603
739
|
}
|
|
604
740
|
};
|
|
605
741
|
state.ws.onopen = () => {
|
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.",
|
|
@@ -261,6 +267,7 @@
|
|
|
261
267
|
"btn.attach": "Attach file",
|
|
262
268
|
"input.placeholder": "Type a message...",
|
|
263
269
|
"queue.pendingTitle": "Pending",
|
|
270
|
+
"queue.copy": "Copy prompt",
|
|
264
271
|
"queue.delete": "Remove",
|
|
265
272
|
"queue.steer": "Run now (steer)",
|
|
266
273
|
"queue.cancelArm": "Click again to cancel",
|
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": "メモリファイルはありません。",
|
|
@@ -250,6 +256,7 @@
|
|
|
250
256
|
"btn.attach": "ファイルを添付",
|
|
251
257
|
"input.placeholder": "メッセージを入力...",
|
|
252
258
|
"queue.pendingTitle": "待機中",
|
|
259
|
+
"queue.copy": "コピー",
|
|
253
260
|
"queue.delete": "削除",
|
|
254
261
|
"queue.steer": "今すぐ実行(steer)",
|
|
255
262
|
"queue.cancelArm": "もう一度クリックしてキャンセル",
|
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 파일이 없습니다.",
|
|
@@ -261,6 +267,7 @@
|
|
|
261
267
|
"btn.attach": "파일 첨부",
|
|
262
268
|
"input.placeholder": "메시지 입력...",
|
|
263
269
|
"queue.pendingTitle": "대기 중",
|
|
270
|
+
"queue.copy": "복사",
|
|
264
271
|
"queue.delete": "삭제",
|
|
265
272
|
"queue.steer": "지금 실행 (steer)",
|
|
266
273
|
"queue.cancelArm": "취소 (3초 안에 한 번 더 누르면 취소)",
|
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": "没有记忆文件。",
|
|
@@ -250,6 +256,7 @@
|
|
|
250
256
|
"btn.attach": "附加文件",
|
|
251
257
|
"input.placeholder": "输入消息...",
|
|
252
258
|
"queue.pendingTitle": "待处理",
|
|
259
|
+
"queue.copy": "复制",
|
|
253
260
|
"queue.delete": "移除",
|
|
254
261
|
"queue.steer": "立即运行(steer)",
|
|
255
262
|
"queue.cancelArm": "再次点击取消",
|