cli-jaw 2.0.5 → 2.0.6
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 +229 -315
- package/README.ko.md +248 -315
- package/README.md +103 -186
- package/README.zh-CN.md +282 -296
- package/dist/bin/commands/browser-web-ai.js +4 -2
- package/dist/bin/commands/browser-web-ai.js.map +1 -1
- package/dist/bin/commands/browser.js +76 -0
- package/dist/bin/commands/browser.js.map +1 -1
- package/dist/bin/commands/doctor.js +122 -4
- package/dist/bin/commands/doctor.js.map +1 -1
- package/dist/bin/commands/skill.js +5 -3
- package/dist/bin/commands/skill.js.map +1 -1
- package/dist/bin/postinstall.js +507 -89
- package/dist/bin/postinstall.js.map +1 -1
- package/dist/lib/mcp/format-converters.js +32 -4
- package/dist/lib/mcp/format-converters.js.map +1 -1
- package/dist/lib/mcp/mcp-install.js +5 -0
- package/dist/lib/mcp/mcp-install.js.map +1 -1
- package/dist/lib/mcp/skills-distribution.js +52 -53
- package/dist/lib/mcp/skills-distribution.js.map +1 -1
- package/dist/lib/mcp/skills-reset.js +29 -16
- package/dist/lib/mcp/skills-reset.js.map +1 -1
- package/dist/lib/mcp/skills-utils.js +64 -2
- package/dist/lib/mcp/skills-utils.js.map +1 -1
- package/dist/lib/mcp/unified-config.js +7 -3
- package/dist/lib/mcp/unified-config.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 +44 -4
- package/dist/server.js.map +1 -1
- package/dist/src/agent/args.js +148 -1
- package/dist/src/agent/args.js.map +1 -1
- package/dist/src/agent/claude-e-runtime.js +42 -0
- package/dist/src/agent/claude-e-runtime.js.map +1 -0
- package/dist/src/agent/claude-i-runtime.js +42 -0
- package/dist/src/agent/claude-i-runtime.js.map +1 -0
- package/dist/src/agent/cli-helpers.js +9 -0
- package/dist/src/agent/cli-helpers.js.map +1 -0
- package/dist/src/agent/codex-app-client.js +240 -0
- package/dist/src/agent/codex-app-client.js.map +1 -0
- package/dist/src/agent/codex-app-events.js +268 -0
- package/dist/src/agent/codex-app-events.js.map +1 -0
- package/dist/src/agent/error-classifier.js +8 -2
- package/dist/src/agent/error-classifier.js.map +1 -1
- package/dist/src/agent/events/acp.js +200 -0
- package/dist/src/agent/events/acp.js.map +1 -0
- package/dist/src/agent/events/claude.js +200 -0
- package/dist/src/agent/events/claude.js.map +1 -0
- package/dist/src/agent/events/codex.js +118 -0
- package/dist/src/agent/events/codex.js.map +1 -0
- package/dist/src/agent/events/gemini.js +100 -0
- package/dist/src/agent/events/gemini.js.map +1 -0
- package/dist/src/agent/events/grok.js +298 -0
- package/dist/src/agent/events/grok.js.map +1 -0
- package/dist/src/agent/events/helpers.js +237 -0
- package/dist/src/agent/events/helpers.js.map +1 -0
- package/dist/src/agent/events/index.js +315 -0
- package/dist/src/agent/events/index.js.map +1 -0
- package/dist/src/agent/events/opencode.js +171 -0
- package/dist/src/agent/events/opencode.js.map +1 -0
- package/dist/src/agent/events/summary.js +128 -0
- package/dist/src/agent/events/summary.js.map +1 -0
- package/dist/src/agent/events/tool-labels.js +299 -0
- package/dist/src/agent/events/tool-labels.js.map +1 -0
- package/dist/src/agent/events/types.js +3 -0
- package/dist/src/agent/events/types.js.map +1 -0
- package/dist/src/agent/events.js +2 -1487
- package/dist/src/agent/events.js.map +1 -1
- package/dist/src/agent/grok-trace-backfill.js +153 -0
- package/dist/src/agent/grok-trace-backfill.js.map +1 -0
- package/dist/src/agent/lifecycle-handler.js +60 -16
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/live-run-state.js +1 -1
- package/dist/src/agent/live-run-state.js.map +1 -1
- package/dist/src/agent/memory-flush-controller.js +26 -0
- package/dist/src/agent/memory-flush-controller.js.map +1 -1
- package/dist/src/agent/resume-classifier.js +9 -0
- package/dist/src/agent/resume-classifier.js.map +1 -1
- package/dist/src/agent/session-persistence.js +7 -2
- package/dist/src/agent/session-persistence.js.map +1 -1
- package/dist/src/agent/spawn/process-kill.js +29 -0
- package/dist/src/agent/spawn/process-kill.js.map +1 -0
- package/dist/src/agent/spawn/queue.js +273 -0
- package/dist/src/agent/spawn/queue.js.map +1 -0
- package/dist/src/agent/spawn/resume.js +56 -0
- package/dist/src/agent/spawn/resume.js.map +1 -0
- package/dist/src/agent/spawn.js +435 -371
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/agent/watchdog.js +5 -1
- package/dist/src/agent/watchdog.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/browser-escalation.js +177 -0
- package/dist/src/browser/adaptive-fetch/browser-escalation.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/browser-runtime.js +38 -0
- package/dist/src/browser/adaptive-fetch/browser-runtime.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/browser-session.js +97 -0
- package/dist/src/browser/adaptive-fetch/browser-session.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/challenge-detector.js +88 -0
- package/dist/src/browser/adaptive-fetch/challenge-detector.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/content-scorer.js +145 -0
- package/dist/src/browser/adaptive-fetch/content-scorer.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js +382 -0
- package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/fetcher.js +105 -0
- package/dist/src/browser/adaptive-fetch/fetcher.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/human-loop.js +101 -0
- package/dist/src/browser/adaptive-fetch/human-loop.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/index.js +586 -0
- package/dist/src/browser/adaptive-fetch/index.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/metadata.js +169 -0
- package/dist/src/browser/adaptive-fetch/metadata.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/output.js +71 -0
- package/dist/src/browser/adaptive-fetch/output.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/reader-adapters.js +135 -0
- package/dist/src/browser/adaptive-fetch/reader-adapters.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/safety.js +296 -0
- package/dist/src/browser/adaptive-fetch/safety.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/third-party-readers.js +43 -0
- package/dist/src/browser/adaptive-fetch/third-party-readers.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/trace.js +61 -0
- package/dist/src/browser/adaptive-fetch/trace.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/transforms.js +81 -0
- package/dist/src/browser/adaptive-fetch/transforms.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/validators.js +108 -0
- package/dist/src/browser/adaptive-fetch/validators.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/waf-profiles.js +135 -0
- package/dist/src/browser/adaptive-fetch/waf-profiles.js.map +1 -0
- package/dist/src/browser/index.js +1 -0
- package/dist/src/browser/index.js.map +1 -1
- package/dist/src/browser/web-ai/gemini-model.js +42 -15
- package/dist/src/browser/web-ai/gemini-model.js.map +1 -1
- package/dist/src/cli/claude-models.js +1 -1
- package/dist/src/cli/claude-models.js.map +1 -1
- package/dist/src/cli/compact.js +2 -0
- package/dist/src/cli/compact.js.map +1 -1
- package/dist/src/cli/handlers-completions.js +3 -0
- package/dist/src/cli/handlers-completions.js.map +1 -1
- package/dist/src/cli/handlers-runtime.js +5 -2
- package/dist/src/cli/handlers-runtime.js.map +1 -1
- package/dist/src/cli/readiness.js +43 -1
- package/dist/src/cli/readiness.js.map +1 -1
- package/dist/src/cli/registry.js +58 -0
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/core/browser-open.js +4 -1
- package/dist/src/core/browser-open.js.map +1 -1
- package/dist/src/core/claude-install.js +4 -0
- package/dist/src/core/claude-install.js.map +1 -1
- package/dist/src/core/cli-detect.js +61 -13
- package/dist/src/core/cli-detect.js.map +1 -1
- package/dist/src/core/compact.js +295 -63
- package/dist/src/core/compact.js.map +1 -1
- package/dist/src/core/config.js +151 -11
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +10 -1
- package/dist/src/core/db.js.map +1 -1
- package/dist/src/core/employees.js +1 -1
- package/dist/src/core/employees.js.map +1 -1
- package/dist/src/core/logger.js +28 -9
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/runtime-settings.js +32 -5
- package/dist/src/core/runtime-settings.js.map +1 -1
- package/dist/src/manager/memory/embedding/state-machine.js +2 -1
- package/dist/src/manager/memory/embedding/state-machine.js.map +1 -1
- package/dist/src/manager/memory/embedding/sync.js +52 -33
- package/dist/src/manager/memory/embedding/sync.js.map +1 -1
- package/dist/src/manager/memory/embedding/vec-store.js +10 -10
- package/dist/src/manager/memory/embedding/vec-store.js.map +1 -1
- package/dist/src/manager/routes/dashboard-memory.js +43 -16
- package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
- package/dist/src/manager/server.js +11 -0
- package/dist/src/manager/server.js.map +1 -1
- package/dist/src/memory/indexing.js +6 -1
- package/dist/src/memory/indexing.js.map +1 -1
- package/dist/src/orchestrator/distribute.js +5 -4
- package/dist/src/orchestrator/distribute.js.map +1 -1
- package/dist/src/prompt/builder.js +12 -1
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/runtime-context.js +69 -0
- package/dist/src/prompt/runtime-context.js.map +1 -0
- package/dist/src/routes/browser.js +33 -0
- package/dist/src/routes/browser.js.map +1 -1
- package/dist/src/routes/employees.js +1 -1
- package/dist/src/routes/employees.js.map +1 -1
- package/dist/src/routes/memory.js +1 -1
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/orchestrate.js +37 -10
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/routes/quota.js +91 -1
- package/dist/src/routes/quota.js.map +1 -1
- package/dist/src/routes/runtime-context.js +43 -0
- package/dist/src/routes/runtime-context.js.map +1 -0
- package/dist/src/routes/security-audit.js +14 -0
- package/dist/src/routes/security-audit.js.map +1 -0
- package/dist/src/routes/settings.js +8 -1
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/security/security-audit-log.js +99 -0
- package/dist/src/security/security-audit-log.js.map +1 -0
- package/dist/src/telegram/bot.js +4 -2
- package/dist/src/telegram/bot.js.map +1 -1
- package/dist/src/types/cli-engine.js +4 -0
- package/dist/src/types/cli-engine.js.map +1 -1
- package/dist/src/types/cli-events.js +1 -1
- package/dist/src/types/cli-events.js.map +1 -1
- package/package.json +9 -3
- package/public/assets/providers/antigravity-color.svg +1 -0
- package/public/assets/providers/antigravity.svg +1 -0
- package/public/assets/providers/copilot-color.svg +1 -1
- package/public/assets/providers/copilot.svg +1 -1
- package/public/assets/providers/grok-color.svg +1 -0
- package/public/assets/providers/grok.svg +1 -0
- package/public/css/chat-search.css +168 -0
- package/public/css/chat.css +43 -1
- package/public/css/modals.css +41 -0
- package/public/dist/assets/{AdvancedExport-BAdZUC-6.js → AdvancedExport-CBvz4_IZ.js} +1 -1
- package/public/dist/assets/Agent-DlUqCMXJ.js +1 -0
- package/public/dist/assets/{Browser-BsdxDVgM.js → Browser-66BpLQck.js} +1 -1
- package/public/dist/assets/{ChannelsDiscord-Dg_jto6l.js → ChannelsDiscord-BifT2Dum.js} +1 -1
- package/public/dist/assets/{ChannelsTelegram-DGyZfJGS.js → ChannelsTelegram-CK6tYQ8k.js} +1 -1
- package/public/dist/assets/DashboardEmbeddingSection-6F8zSSja.js +2 -0
- package/public/dist/assets/{DashboardMeta-CAH9ONTb.js → DashboardMeta-Cc03HT5R.js} +1 -1
- package/public/dist/assets/{Display-DM_yvyKL.js → Display-arOjcMQZ.js} +1 -1
- package/public/dist/assets/Employees-YbW-mI67.js +1 -0
- package/public/dist/assets/{HealthBadge-Dtr-dDnw.js → HealthBadge-DEPFkcA0.js} +1 -1
- package/public/dist/assets/Heartbeat-CW4eIhtJ.js +1 -0
- package/public/dist/assets/{InlineWarn-E64UaKFh.js → InlineWarn-DoJS7AgM.js} +1 -1
- package/public/dist/assets/{Mcp-Dlp2X7X7.js → Mcp-ZQ6ARQb6.js} +1 -1
- package/public/dist/assets/Memory-BAUWJMqc.js +1 -0
- package/public/dist/assets/{MilkdownWysiwygEditor-Ctww8i0L.js → MilkdownWysiwygEditor-IAqFtXvM.js} +1 -1
- package/public/dist/assets/ModelProvider-DUtmFh0J.js +1 -0
- package/public/dist/assets/{Network-Df1R2YcQ.js → Network-B_4E82zQ.js} +1 -1
- package/public/dist/assets/{Permissions-BKJ5K6EL.js → Permissions-BkADXjQ4.js} +1 -1
- package/public/dist/assets/{Permissions-CcWZoOVP.js → Permissions-DvUCB8wA.js} +1 -1
- package/public/dist/assets/{Profile-DZ7xf1WZ.js → Profile-BcnTCSYM.js} +1 -1
- package/public/dist/assets/{Prompts-Bh5DYt8e.js → Prompts-CUs_RoRE.js} +1 -1
- package/public/dist/assets/{SpeechKeys-CQwtVxOP.js → SpeechKeys-qxc-ROWN.js} +1 -1
- package/public/dist/assets/agent-meta-Du8y6mSM.js +1 -0
- package/public/dist/assets/app-CGqTcIeF.js +39 -0
- package/public/dist/assets/app-Dpk6cE6C.css +1 -0
- package/public/dist/assets/architecture-7EHR7CIX-wVaUQezY.js +1 -0
- package/public/dist/assets/architectureDiagram-3BPJPVTR-kYIVzmWe.js +36 -0
- package/public/dist/assets/blockDiagram-GPEHLZMM-B204CPhe.js +132 -0
- package/public/dist/assets/{c4Diagram-AHTNJAMY-Bp2QLC-s.js → c4Diagram-AAUBKEIU-DAv6TAjg.js} +6 -6
- package/public/dist/assets/channel-CCQujL1n.js +1 -0
- package/public/dist/assets/{chunk-EDXVE4YY-COudQKkJ.js → chunk-2J33WTMH-xiPJWKcl.js} +1 -1
- package/public/dist/assets/chunk-3OPIFGDE-DOAvk9x8.js +62 -0
- package/public/dist/assets/{chunk-4BX2VUAB-Cm3KqBkS.js → chunk-4BX2VUAB-6lTRwyT0.js} +1 -1
- package/public/dist/assets/chunk-4EGX6M5U-DXtAEgX6.js +1 -0
- package/public/dist/assets/chunk-55IACEB6-Dx2JkQLw.js +1 -0
- package/public/dist/assets/chunk-5DO6E6H7-DDcMHB95.js +1 -0
- package/public/dist/assets/chunk-5ZQYHXKU-Bd-RFO5i.js +2 -0
- package/public/dist/assets/chunk-727SXJPM-BrsRzj8z.js +206 -0
- package/public/dist/assets/{chunk-AGHRB4JF-DIMn8T3_.js → chunk-AGHRB4JF-CYdXVA2-.js} +1 -1
- package/public/dist/assets/chunk-AQP2D5EJ-Di6Gstk-.js +231 -0
- package/public/dist/assets/{chunk-LIHQZDEY-Xw9ZX8of.js → chunk-BR22UD5L-CVuYkAd1.js} +1 -1
- package/public/dist/assets/{chunk-BSJP7CBP-DnSYKjii.js → chunk-BSJP7CBP-B47GpxcW.js} +1 -1
- package/public/dist/assets/chunk-CSCIHK7Q-CAE1p4Em.js +123 -0
- package/public/dist/assets/chunk-FHYWG6QK-CxZt-yZZ.js +1 -0
- package/public/dist/assets/{chunk-FMBD7UC4-6yXYicjw.js → chunk-FMBD7UC4-CwqBlx0l.js} +1 -1
- package/public/dist/assets/chunk-KSCS5N6A-D9a4ZkOy.js +10 -0
- package/public/dist/assets/{chunk-ZZ45TVLE-D5oxCC1O.js → chunk-L5ZTLDWV-D208QbfC.js} +1 -1
- package/public/dist/assets/{chunk-336JU56O-CAt5aBOe.js → chunk-LZXEDZCA-CE2KFduj.js} +1 -1
- package/public/dist/assets/chunk-MPE355IW-Bp4qAOUf.js +1 -0
- package/public/dist/assets/chunk-MZUSXYTE-DAU-v-0c.js +1 -0
- package/public/dist/assets/chunk-N66VUXT2-CpPz1L5u.js +1 -0
- package/public/dist/assets/chunk-ND2GUHAM-zZ7h1CPf.js +1 -0
- package/public/dist/assets/chunk-NNHCCRGN-BaiX9a5F.js +159 -0
- package/public/dist/assets/{chunk-X2U36JSP-CoMFMVNF.js → chunk-NZK2D7GU-CTqFQ8K5.js} +1 -1
- package/public/dist/assets/chunk-O5CBEL6O-BTuvXKFi.js +11 -0
- package/public/dist/assets/chunk-PUPMXCY4-ppZvktf-.js +1 -0
- package/public/dist/assets/chunk-QZHKN3VN-CBAtPPT7.js +1 -0
- package/public/dist/assets/chunk-UIBZB4QT-rJZEVBX0.js +1 -0
- package/public/dist/assets/chunk-WCWK7LTN-CGvUyB8h.js +1 -0
- package/public/dist/assets/chunk-WU5MYG2G-C3fKlSvP.js +1 -0
- package/public/dist/assets/{chunk-XPW4576I-CmAz5C-j.js → chunk-XPW4576I-BaQfzRci.js} +1 -1
- package/public/dist/assets/classDiagram-4FO5ZUOK-Cb-qL5u3.js +1 -0
- package/public/dist/assets/classDiagram-v2-Q7XG4LA2-BPhGdj15.js +1 -0
- package/public/dist/assets/constants-BxG09J6S.js +1 -0
- package/public/dist/assets/cose-bilkent-S5V4N54A-D1zmarou.js +1 -0
- package/public/dist/assets/dagre-BM42HDAG-BVkBttzA.js +4 -0
- package/public/dist/assets/dagre-DnoxfNXr.js +1 -0
- package/public/dist/assets/diagram-2AECGRRQ-Bs32KPnT.js +43 -0
- package/public/dist/assets/{diagram-5BDNPKRD-Cl4PzCD0.js → diagram-5GNKFQAL-YDYgPOQj.js} +2 -2
- package/public/dist/assets/diagram-KO2AKTUF-1tIdFl26.js +3 -0
- package/public/dist/assets/{diagram-TYMM5635-B_Xoa1Gp.js → diagram-LMA3HP47-B1y15kav.js} +1 -1
- package/public/dist/assets/diagram-OG6HWLK6-C25j1jGg.js +24 -0
- package/public/dist/assets/{dist-C9LWf2uC.js → dist-0v1UKkQ3.js} +1 -1
- package/public/dist/assets/dist-BMi_buEb.js +1 -0
- package/public/dist/assets/{dist-B6G8pbap.js → dist-BQNQk-1M.js} +1 -1
- package/public/dist/assets/{dist-CCKktDoF.js → dist-BVpa_e6W.js} +1 -1
- package/public/dist/assets/dist-BkrbW_LS.js +1 -0
- package/public/dist/assets/{dist-CkMC2PPt.js → dist-C1VqWrYZ.js} +1 -1
- package/public/dist/assets/{dist-BA7sRne4.js → dist-C3vh7d65.js} +1 -1
- package/public/dist/assets/{dist-BhzKO6nt2.js → dist-CE4s7vg82.js} +1 -1
- package/public/dist/assets/{dist-BDMNMdPF.js → dist-CjPin7Mr.js} +1 -1
- package/public/dist/assets/{dist-W7IGn2ug.js → dist-Ck6PnIlo.js} +1 -1
- package/public/dist/assets/{dist-B1rKu9eP.js → dist-CnIrGAPx.js} +1 -1
- package/public/dist/assets/{dist-CEDX2HGI.js → dist-Cv8S3FhF.js} +1 -1
- package/public/dist/assets/{dist-55MYVjjj.js → dist-D0PYXGt2.js} +1 -1
- package/public/dist/assets/{dist-C0sOT_UM.js → dist-D5GUqT-6.js} +1 -1
- package/public/dist/assets/{dist-C5S-Rbvc.js → dist-D66X8iAn.js} +1 -1
- package/public/dist/assets/dist-D815C1Fv.js +1 -0
- package/public/dist/assets/{dist-Ch6JG5jE.js → dist-DDDFJ8jG.js} +1 -1
- package/public/dist/assets/{dist-2oDfqE98.js → dist-DHQI31dn.js} +1 -1
- package/public/dist/assets/{dist-BTp_Oy_x.js → dist-DTQW91xt.js} +1 -1
- package/public/dist/assets/{dist-BuaQLcgQ.js → dist-Dm7RAaUo.js} +1 -1
- package/public/dist/assets/{dist-BJyDhGpS.js → dist-DrIWh2fi.js} +1 -1
- package/public/dist/assets/{dist-BGzHP3f8.js → dist-DzT7frM2.js} +1 -1
- package/public/dist/assets/{dist-wdLr2dSH.js → dist-Qs7HHNCC.js} +1 -1
- package/public/dist/assets/{dist-BjqyutOM.js → dist-Rs_Khtjb.js} +1 -1
- package/public/dist/assets/{dist-DdhWu7OM.js → dist-fJAyK82z.js} +1 -1
- package/public/dist/assets/{dist-G7QUHtDS.js → dist-jcptfm_T.js} +1 -1
- package/public/dist/assets/dist-sOV2kBhQ.js +1 -0
- package/public/dist/assets/{dist-BoG5I6U5.js → dist-vQskrHxt.js} +1 -1
- package/public/dist/assets/{dockerfile-CrC2HXHP.js → dockerfile-DAfh5qoE.js} +1 -1
- package/public/dist/assets/{employees-CIkIyvtL.js → employees-DRmX2RDd.js} +2 -2
- package/public/dist/assets/{erDiagram-SMLLAGMA-BvtqhMsS.js → erDiagram-TEJ5UH35-CRvCbztR.js} +6 -6
- package/public/dist/assets/{error-normalize-CkhPeQYx.js → error-normalize-CNbPE4lO.js} +1 -1
- package/public/dist/assets/eventmodeling-FCH6USID-Cq0nylxO.js +1 -0
- package/public/dist/assets/{factor-1CttFx2G.js → factor-BpoYJieo.js} +1 -1
- package/public/dist/assets/fields-DUawAHWZ.js +1 -0
- package/public/dist/assets/flowDiagram-I6XJVG4X-CzvVnib_.js +162 -0
- package/public/dist/assets/ganttDiagram-6RSMTGT7-BbUYP6iv.js +292 -0
- package/public/dist/assets/gitGraph-WXDBUCRP-DDq6-3D3.js +1 -0
- package/public/dist/assets/gitGraphDiagram-PVQCEYII-CbKdM7nW.js +106 -0
- package/public/dist/assets/graphlib-BLOO0H5r.js +1 -0
- package/public/dist/assets/info-J43DQDTF-OUnqwpUV.js +1 -0
- package/public/dist/assets/infoDiagram-5YYISTIA-BrZmg1At.js +2 -0
- package/public/dist/assets/{ishikawaDiagram-UXIWVN3A-DZW-Nqsf.js → ishikawaDiagram-YF4QCWOH-BDWXqJi5.js} +2 -2
- package/public/dist/assets/javascript-CZjRNq5R.js +1 -0
- package/public/dist/assets/{journeyDiagram-VCZTEJTY-ByVRJxVF.js → journeyDiagram-JHISSGLW-CPFRd_M3.js} +6 -6
- package/public/dist/assets/{jsx-runtime-BjL7qHh8.js → jsx-runtime-BZmCptaP.js} +1 -1
- package/public/dist/assets/{kanban-definition-6JOO6SKY-xwN0YCW2.js → kanban-definition-UN3LZRKU-BcQbBplS.js} +10 -10
- package/public/dist/assets/katex-CF5bGce6.js +1 -0
- package/public/dist/assets/manager-B5OmizBL.css +1 -0
- package/public/dist/assets/manager-Cs3eMBcx.js +25 -0
- package/public/dist/assets/{memory-CnBc2_Va.js → memory-BA-ki3gn.js} +1 -1
- package/public/dist/assets/memory-DLQbyBA3.js +1 -0
- package/public/dist/assets/mermaid-loader-BVPsKrpr.js +1 -0
- package/public/dist/assets/mermaid-parser.core-C62NUJRb.js +3 -0
- package/public/dist/assets/mermaid.core-ArqR5iFa.js +9 -0
- package/public/dist/assets/mermaid.core-BAwu4U2Y.js +1 -0
- package/public/dist/assets/{mindmap-definition-QFDTVHPH-Chqgsh1N.js → mindmap-definition-RKZ34NQL-C35cGkNU.js} +29 -29
- package/public/dist/assets/{nsis-_CjIiUyF.js → nsis-Ch4QINLN.js} +1 -1
- package/public/dist/assets/packet-YPE3B663-Bb9hBQ06.js +1 -0
- package/public/dist/assets/{page-shell-CTxVDJ8Y.js → page-shell-CVAobxbP.js} +1 -1
- package/public/dist/assets/pie-LRSECV5Y-CNRQnRNZ.js +1 -0
- package/public/dist/assets/pieDiagram-4H26LBE5-B8C_hoqJ.js +30 -0
- package/public/dist/assets/provider-icons-dxT69zGg.js +8 -0
- package/public/dist/assets/{pug-CbR8lCtK.js → pug-CXYqmmpP.js} +1 -1
- package/public/dist/assets/quadrantDiagram-W4KKPZXB-BEPrine5.js +7 -0
- package/public/dist/assets/radar-GUYGQ44K-BxngU2v0.js +1 -0
- package/public/dist/assets/{render-lpTpN1El.js → render-C7_e0J_X.js} +3 -3
- package/public/dist/assets/{requirementDiagram-MS252O5E-wnPtv0LG.js → requirementDiagram-4Y6WPE33-ClDDon9c.js} +4 -4
- package/public/dist/assets/rolldown-runtime-XQCOJYun.js +1 -0
- package/public/dist/assets/sankeyDiagram-5OEKKPKP-Bjs3OE-1.js +40 -0
- package/public/dist/assets/sequenceDiagram-3UESZ5HK-BM8IAaEe.js +162 -0
- package/public/dist/assets/settings-DjyKdqev.js +1 -0
- package/public/dist/assets/settings-pUJzyeX2.js +42 -0
- package/public/dist/assets/{sidebar-Cwt0FxQl.js → sidebar-CO9Qjj6v.js} +2 -2
- package/public/dist/assets/skills-CX3qJ77s.js +1 -0
- package/public/dist/assets/{skills-DDmTyywh.js → skills-Dq7fD8I3.js} +1 -1
- package/public/dist/assets/{slash-commands-D5y5AVvS.js → slash-commands-DRsKtuGT.js} +1 -1
- package/public/dist/assets/slash-commands-UbS8w9ij.js +1 -0
- package/public/dist/assets/stateDiagram-AJRCARHV-BvNABuXE.js +1 -0
- package/public/dist/assets/stateDiagram-v2-BHNVJYJU-CCIo81qy.js +1 -0
- package/public/dist/assets/{timeline-definition-GMOUNBTQ-DUz1-iOx.js → timeline-definition-PNZ67QCA-CIvTvac3.js} +8 -8
- package/public/dist/assets/trace-drawer-DDFdU07_.js +15 -0
- package/public/dist/assets/treeView-BLDUP644-cXRzPGzz.js +1 -0
- package/public/dist/assets/treemap-LRROVOQU-BsZE5HPE.js +1 -0
- package/public/dist/assets/ui-CeBmBBZM.js +140 -0
- package/public/dist/assets/ui-TMXjvH0r.js +1 -0
- package/public/dist/assets/{vendor-render-DEStnpJ8.js → vendor-render-DCb9B75Q.js} +38 -37
- package/public/dist/assets/vendor-utils-BnxL60_-.js +1 -0
- package/public/dist/assets/vennDiagram-CIIHVFJN-C5cbS2KC.js +34 -0
- package/public/dist/assets/wardley-L42UT6IY-D_qm0cZD.js +1 -0
- package/public/dist/assets/{wardleyDiagram-NUSXRM2D-CLAhOzap.js → wardleyDiagram-YWT4CUSO-BsRBBGFP.js} +61 -3
- package/public/dist/assets/{wiki-link-suggestions-LQuYT22G.js → wiki-link-suggestions-BHwNQXT_.js} +2 -2
- package/public/dist/assets/{xychartDiagram-5P7HB3ND-DLnY9i8z.js → xychartDiagram-2RQKCTM6-B6rqui6F.js} +6 -6
- package/public/dist/index.html +102 -3
- package/public/dist/manager/index.html +2 -2
- package/public/index.html +101 -1
- package/public/js/constants.ts +72 -0
- package/public/js/diagram/iframe-renderer.ts +7 -0
- package/public/js/features/chat-scroll.ts +31 -0
- package/public/js/features/chat-search.ts +223 -0
- package/public/js/features/help-content.ts +20 -2
- package/public/js/features/help-dialog.ts +38 -2
- package/public/js/features/pending-queue.ts +6 -0
- package/public/js/features/process-block.ts +20 -0
- package/public/js/features/settings-channel.ts +3 -1
- package/public/js/features/settings-cli-status.ts +24 -3
- package/public/js/features/settings-core.ts +134 -21
- package/public/js/features/settings-types.ts +12 -1
- package/public/js/features/settings.ts +1 -1
- package/public/js/features/trace-drawer.ts +2 -1
- package/public/js/features/voice-recorder.ts +222 -42
- package/public/js/main.ts +58 -4
- package/public/js/provider-icons.ts +46 -27
- package/public/js/render/markdown.ts +6 -0
- package/public/js/ui.ts +33 -7
- package/public/js/ws.ts +5 -1
- package/public/locales/en.json +31 -7
- package/public/locales/ja.json +31 -7
- package/public/locales/ko.json +31 -7
- package/public/locales/zh.json +31 -7
- package/public/manager/src/App.tsx +19 -55
- package/public/manager/src/InstancePreview.tsx +46 -1
- package/public/manager/src/components/InstanceDetailPanel.tsx +7 -2
- package/public/manager/src/components/InstanceLogsPanel.tsx +138 -0
- package/public/manager/src/dashboard-settings/DashboardEmbeddingSection.tsx +37 -7
- package/public/manager/src/jaw-ceo/useJawCeoDashboardBridge.tsx +1 -0
- package/public/manager/src/manager-components.css +76 -0
- package/public/manager/src/preview.ts +26 -3
- package/public/manager/src/settings/fields/SelectField.tsx +51 -17
- package/public/manager/src/settings/pages/Agent.tsx +37 -2
- package/public/manager/src/settings/pages/Heartbeat.tsx +3 -2
- package/public/manager/src/settings/pages/Memory.tsx +3 -2
- package/public/manager/src/settings/pages/components/EmployeeRow.tsx +8 -4
- package/public/manager/src/settings/pages/components/PerCliRow.tsx +31 -5
- package/public/manager/src/settings/pages/components/agent/FlushAgentSection.tsx +4 -2
- package/public/manager/src/settings/pages/components/agent/RuntimeEmployeeRow.tsx +1 -1
- package/public/manager/src/settings/pages/components/agent/RuntimeHeader.tsx +23 -1
- package/public/manager/src/settings/pages/components/agent/agent-meta.ts +49 -0
- package/public/manager/src/settings/pages/components/employees-helpers.ts +6 -1
- package/public/manager/src/settings/pages/components/heartbeat-helpers.ts +11 -1
- package/public/manager/src/settings-controls.css +25 -0
- package/public/manager/src/usePreviewShortcutMessages.ts +30 -0
- package/public/manager/src/usePreviewSttLifecycle.ts +31 -0
- package/scripts/fresh-install-smoke.ts +1 -1
- package/scripts/install-officecli.ps1 +33 -5
- package/scripts/install-officecli.sh +52 -8
- package/scripts/install-wsl.sh +96 -24
- package/scripts/install.sh +82 -11
- package/scripts/postinstall-guard.cjs +57 -30
- package/public/dist/assets/Agent-DNpehKB2.js +0 -1
- package/public/dist/assets/DashboardEmbeddingSection-BYdGgqg7.js +0 -2
- package/public/dist/assets/Employees-CuYuTy0R.js +0 -1
- package/public/dist/assets/Heartbeat-C-vq02MW.js +0 -1
- package/public/dist/assets/Memory-BPKWJDXK.js +0 -1
- package/public/dist/assets/ModelProvider-Bd6vGkXT.js +0 -1
- package/public/dist/assets/agent-meta-C1pQzExf.js +0 -1
- package/public/dist/assets/app-BxsIleo0.js +0 -32
- package/public/dist/assets/app-CB9n5A77.css +0 -1
- package/public/dist/assets/architecture-YZFGNWBL-BRI-0IaU.js +0 -1
- package/public/dist/assets/architectureDiagram-Q4EWVU46-z0JCgZrJ.js +0 -36
- package/public/dist/assets/blockDiagram-DXYQGD6D-KaOz3aFS.js +0 -132
- package/public/dist/assets/channel-jLopKIgm.js +0 -1
- package/public/dist/assets/chunk-2KRD3SAO-C8hJZPJu.js +0 -1
- package/public/dist/assets/chunk-426QAEUC-atJRhvKN.js +0 -1
- package/public/dist/assets/chunk-4TB4RGXK-BD7UhIN8.js +0 -206
- package/public/dist/assets/chunk-55IACEB6-CAWcPDdr.js +0 -1
- package/public/dist/assets/chunk-5FUZZQ4R-Cg1pzs6p.js +0 -62
- package/public/dist/assets/chunk-5PVQY5BW-otv3HwE_.js +0 -2
- package/public/dist/assets/chunk-67CJDMHE-AU2iOKLT.js +0 -1
- package/public/dist/assets/chunk-7N4EOEYR-BTIS4jBw.js +0 -1
- package/public/dist/assets/chunk-AA7GKIK3-c9UUJO_T.js +0 -1
- package/public/dist/assets/chunk-CIAEETIT-Dwbln6rM.js +0 -1
- package/public/dist/assets/chunk-ENJZ2VHE-PT_jAckw.js +0 -10
- package/public/dist/assets/chunk-FOC6F5B3-BqDmFFeg.js +0 -1
- package/public/dist/assets/chunk-ICPOFSXX-P6V6jqiT.js +0 -122
- package/public/dist/assets/chunk-K5T4RW27-C42sOmZR.js +0 -27
- package/public/dist/assets/chunk-KGLVRYIC-K-BVa8b2.js +0 -1
- package/public/dist/assets/chunk-ORNJ4GCN-CEXU6WaD.js +0 -1
- package/public/dist/assets/chunk-OYMX7WX6-DmJG2z1S.js +0 -231
- package/public/dist/assets/chunk-QZHKN3VN-BkVLii_3.js +0 -1
- package/public/dist/assets/chunk-U2HBQHQK-Ny6UwUgK.js +0 -11
- package/public/dist/assets/chunk-YZCP3GAM-c7FYtZME.js +0 -1
- package/public/dist/assets/classDiagram-6PBFFD2Q-BgOyAynm.js +0 -1
- package/public/dist/assets/classDiagram-v2-HSJHXN6E-5gBdoVH9.js +0 -1
- package/public/dist/assets/constants-4A2GptQT.js +0 -1
- package/public/dist/assets/cose-bilkent-S5V4N54A-CvH6qY_r.js +0 -1
- package/public/dist/assets/dagre--20B2-ZQ.js +0 -1
- package/public/dist/assets/dagre-KV5264BT-CQ0wo0ma.js +0 -4
- package/public/dist/assets/diagram-G4DWMVQ6-_aP6kMTh.js +0 -24
- package/public/dist/assets/diagram-MMDJMWI5-J1l6Q0JG.js +0 -43
- package/public/dist/assets/dist-B1p80u1b.js +0 -1
- package/public/dist/assets/dist-BKyzWv22.js +0 -1
- package/public/dist/assets/dist-CxJpXP6s.js +0 -1
- package/public/dist/assets/dist-DNLFuTrS.js +0 -1
- package/public/dist/assets/fields-BISouxp2.js +0 -1
- package/public/dist/assets/flowDiagram-DWJPFMVM-C_F0rqqT.js +0 -162
- package/public/dist/assets/ganttDiagram-T4ZO3ILL-B5S8EZRg.js +0 -292
- package/public/dist/assets/gitGraph-7Q5UKJZL-DTTW6pxr.js +0 -1
- package/public/dist/assets/gitGraphDiagram-UUTBAWPF-DMGzYJeb.js +0 -106
- package/public/dist/assets/graphlib-CZk_Ii16.js +0 -1
- package/public/dist/assets/info-OMHHGYJF-BU-iuaSm.js +0 -1
- package/public/dist/assets/infoDiagram-42DDH7IO-dzSaYFFK.js +0 -2
- package/public/dist/assets/javascript-BhB45e0W.js +0 -1
- package/public/dist/assets/katex-DamPUmTE.js +0 -1
- package/public/dist/assets/manager-B84u-pcn.js +0 -25
- package/public/dist/assets/manager-DMg_sTEP.css +0 -1
- package/public/dist/assets/memory-BV62wlsG.js +0 -1
- package/public/dist/assets/mermaid-loader-DxFGz4EE.js +0 -1
- package/public/dist/assets/mermaid-parser.core-CMIZ0my_.js +0 -3
- package/public/dist/assets/mermaid.core-CicVBD9l.js +0 -1
- package/public/dist/assets/mermaid.core-Dj6viEzN.js +0 -11
- package/public/dist/assets/packet-4T2RLAQJ-DzmBsAf0.js +0 -1
- package/public/dist/assets/pie-ZZUOXDRM-DyG1KzTn.js +0 -1
- package/public/dist/assets/pieDiagram-DEJITSTG-DJLiSymi.js +0 -30
- package/public/dist/assets/quadrantDiagram-34T5L4WZ-qcnWmcRr.js +0 -7
- package/public/dist/assets/radar-PYXPWWZC-CEBZARUu.js +0 -1
- package/public/dist/assets/rolldown-runtime-DE9SaGGd.js +0 -1
- package/public/dist/assets/sankeyDiagram-XADWPNL6-Bn3pUd_K.js +0 -10
- package/public/dist/assets/sequenceDiagram-FGHM5R23-DfxcHSdj.js +0 -157
- package/public/dist/assets/settings-CfAXLa8a.js +0 -1
- package/public/dist/assets/settings-FWgmcubl.js +0 -40
- package/public/dist/assets/skills-D-qUVJ-e.js +0 -1
- package/public/dist/assets/slash-commands-BfI19vIz.js +0 -1
- package/public/dist/assets/stateDiagram-FHFEXIEX-CiR7P2OG.js +0 -1
- package/public/dist/assets/stateDiagram-v2-QKLJ7IA2-BaWWpysK.js +0 -1
- package/public/dist/assets/trace-drawer-DVF5F1df.js +0 -15
- package/public/dist/assets/treeView-SZITEDCU-D5-TP7Qp.js +0 -1
- package/public/dist/assets/treemap-W4RFUUIX-BQhm_ZSp.js +0 -1
- package/public/dist/assets/ui-BJXY16Dk.js +0 -140
- package/public/dist/assets/ui-BXm3OPPh.js +0 -1
- package/public/dist/assets/vendor-utils-IVTPs69f.js +0 -68
- package/public/dist/assets/vennDiagram-DHZGUBPP-CYu7SDdG.js +0 -34
- package/public/dist/assets/wardley-RL74JXVD-CpnBMRe0.js +0 -1
- package/public/manager/src/settings/pages/Embedding.tsx +0 -382
- /package/public/dist/assets/{apl-HYRstREL.js → apl-CieDeb7B.js} +0 -0
- /package/public/dist/assets/{asciiarmor-BDXCrhAK.js → asciiarmor-BRTyulZY.js} +0 -0
- /package/public/dist/assets/{asn1-CnSBhb0M.js → asn1-DoNAtQ5o.js} +0 -0
- /package/public/dist/assets/{asterisk-AqV7rnIi.js → asterisk-CR7oKPxi.js} +0 -0
- /package/public/dist/assets/{brainfuck-Dv46-iL9.js → brainfuck-abzPcrOz.js} +0 -0
- /package/public/dist/assets/{clike-GRffz5hY.js → clike-B71Zq38G.js} +0 -0
- /package/public/dist/assets/{clojure-DzgT_fqE.js → clojure-Zm0UzHPq.js} +0 -0
- /package/public/dist/assets/{cmake-Co1237r5.js → cmake-D3UNdg6L.js} +0 -0
- /package/public/dist/assets/{cobol-rUaLketb.js → cobol-4fYvwQR0.js} +0 -0
- /package/public/dist/assets/{coffeescript-DQyfHE86.js → coffeescript-Ct6bZdRU.js} +0 -0
- /package/public/dist/assets/{commonlisp-Buue1PGW.js → commonlisp-CrgXVPcd.js} +0 -0
- /package/public/dist/assets/{crystal-BMWO0kOJ.js → crystal-bGOl67VM.js} +0 -0
- /package/public/dist/assets/{css-DaxibPo5.js → css-B_EV3Xq2.js} +0 -0
- /package/public/dist/assets/{cypher-CmpGfiBR.js → cypher-DXDlHTYf.js} +0 -0
- /package/public/dist/assets/{cytoscape.esm-zT8GwLFm.js → cytoscape.esm-BK7ao2Ti.js} +0 -0
- /package/public/dist/assets/{d-qmdtoIzU.js → d-RL5ynsiz.js} +0 -0
- /package/public/dist/assets/{diff-B40m6u1h.js → diff-B5McBGjz.js} +0 -0
- /package/public/dist/assets/{dtd-569ynYVj.js → dtd-l3sK4p_C.js} +0 -0
- /package/public/dist/assets/{dylan-Dxolp30i.js → dylan-WjJGY-rW.js} +0 -0
- /package/public/dist/assets/{ebnf-BZiX9Iq3.js → ebnf-BGY79HOS.js} +0 -0
- /package/public/dist/assets/{ecl-B8F1Q0oZ.js → ecl-BKh7OE1d.js} +0 -0
- /package/public/dist/assets/{eiffel-Bv8Kvgh1.js → eiffel-Bzvlg3oK.js} +0 -0
- /package/public/dist/assets/{elm-QWXQaIis.js → elm-5_BqNmKu.js} +0 -0
- /package/public/dist/assets/{erlang-CuDGzTGm.js → erlang-BdVwz8I8.js} +0 -0
- /package/public/dist/assets/{fcl-BiFeqtHf.js → fcl-B9cnfODD.js} +0 -0
- /package/public/dist/assets/{forth-R7Uc2VcL.js → forth-wZbbnGzb.js} +0 -0
- /package/public/dist/assets/{fortran-kDRG6BzW.js → fortran-BAJZrRfU.js} +0 -0
- /package/public/dist/assets/{gas-CyRkuC5T.js → gas-D60ZhBat.js} +0 -0
- /package/public/dist/assets/{gherkin-BE0p00ey.js → gherkin-B8tKjAAi.js} +0 -0
- /package/public/dist/assets/{groovy-B_Sh3D1t.js → groovy-BAG9eJUD.js} +0 -0
- /package/public/dist/assets/{haskell-DWXgCy4o.js → haskell-Cj4TmWbg.js} +0 -0
- /package/public/dist/assets/{haxe-xGxZ54Hv.js → haxe-8chnvz-o.js} +0 -0
- /package/public/dist/assets/{http-CKv9cSBA.js → http-DDYeO71z.js} +0 -0
- /package/public/dist/assets/{idl-DmlI3XzS.js → idl-D1hY-Gp_.js} +0 -0
- /package/public/dist/assets/{javascript-j6r5uf_k.js → javascript-Sh0ZUMP2.js} +0 -0
- /package/public/dist/assets/{julia-CQSp9Qa0.js → julia-BibioBF2.js} +0 -0
- /package/public/dist/assets/{livescript-CqvtVTlb.js → livescript-CSZrB6F4.js} +0 -0
- /package/public/dist/assets/{lua-DazQKUZ0.js → lua-BvTlo5w3.js} +0 -0
- /package/public/dist/assets/{mathematica-DqhJVCs9.js → mathematica-Bexv8BWZ.js} +0 -0
- /package/public/dist/assets/{mbox-Dsyo1_UL.js → mbox-BAhbA8z2.js} +0 -0
- /package/public/dist/assets/{mirc-D7ThhoF-.js → mirc-BzT5Kh4S.js} +0 -0
- /package/public/dist/assets/{mllike-EPZ6pqQD.js → mllike-DeoJnUZQ.js} +0 -0
- /package/public/dist/assets/{modelica-PU45hbqg.js → modelica-FD_-Fxlc.js} +0 -0
- /package/public/dist/assets/{mscgen-DEnh2Ojr.js → mscgen-C-OyhbwB.js} +0 -0
- /package/public/dist/assets/{mumps-8GhR7rRa.js → mumps-BxkCDTK7.js} +0 -0
- /package/public/dist/assets/{nginx-CXwagpwp.js → nginx-2JaV__gC.js} +0 -0
- /package/public/dist/assets/{ntriples-BDQxxstw.js → ntriples--rhhCzqb.js} +0 -0
- /package/public/dist/assets/{octave-2c90WnyU.js → octave-rS4nMzRe.js} +0 -0
- /package/public/dist/assets/{oz-CO0rQ8EL.js → oz-I4fMb_NC.js} +0 -0
- /package/public/dist/assets/{pascal-CcVwOGeN.js → pascal-BEghJs8t.js} +0 -0
- /package/public/dist/assets/{path-utils-DySmCVZK.js → path-utils-r2bJIu28.js} +0 -0
- /package/public/dist/assets/{perl-B9UvGoAV.js → perl-BRO9ZFo9.js} +0 -0
- /package/public/dist/assets/{pig-Cd1f86ZJ.js → pig-L4Ii6KI0.js} +0 -0
- /package/public/dist/assets/{powershell-DV4cOnkJ.js → powershell-BBeqUCRp.js} +0 -0
- /package/public/dist/assets/{properties-DaSVPhrZ.js → properties-Boi0jF2J.js} +0 -0
- /package/public/dist/assets/{protobuf-CEtFnY22.js → protobuf-fB2aGypX.js} +0 -0
- /package/public/dist/assets/{puppet-Ca0DHfcW.js → puppet-BRmsErtO.js} +0 -0
- /package/public/dist/assets/{python-ydzCwWG-.js → python-Be4P9Dgp.js} +0 -0
- /package/public/dist/assets/{q-Cl8kzQmk.js → q-DZGhDLYt.js} +0 -0
- /package/public/dist/assets/{r-DKZPJFrD.js → r-B4NERjRM.js} +0 -0
- /package/public/dist/assets/{rough.esm-Dnk3WN4D.js → rough.esm-C0Gkx4O1.js} +0 -0
- /package/public/dist/assets/{rpm-D0lqeHoZ.js → rpm-e-QbHJ1q.js} +0 -0
- /package/public/dist/assets/{ruby-RVmtmNDw.js → ruby-BSVP_v59.js} +0 -0
- /package/public/dist/assets/{sas-CEzodAB7.js → sas-DHlU4v4g.js} +0 -0
- /package/public/dist/assets/{scheme-Pqmt6dh3.js → scheme-BGXbz5Hz.js} +0 -0
- /package/public/dist/assets/{settings-client-BN3XzwEo.js → settings-client-DPuJroyk.js} +0 -0
- /package/public/dist/assets/{shell-CLG3zy-u.js → shell-yonx6xY2.js} +0 -0
- /package/public/dist/assets/{sieve-C95IWC3O.js → sieve-ClPJUZyi.js} +0 -0
- /package/public/dist/assets/{simple-mode-B9ErAHMD.js → simple-mode-CjViblDK.js} +0 -0
- /package/public/dist/assets/{smalltalk-4cL-gRJb.js → smalltalk-CHXubeqS.js} +0 -0
- /package/public/dist/assets/{solr-CEA7oOx_.js → solr-C6q6YwPz.js} +0 -0
- /package/public/dist/assets/{sparql-w8kHjP6I.js → sparql-CcspZvEd.js} +0 -0
- /package/public/dist/assets/{spreadsheet-C8bDfTgC.js → spreadsheet-DH3a4LBS.js} +0 -0
- /package/public/dist/assets/{sql-BrKz8968.js → sql-meoY6gNi.js} +0 -0
- /package/public/dist/assets/{stex-xFw1nXeT.js → stex-D2bn6Zsh.js} +0 -0
- /package/public/dist/assets/{stylus-gS_68vPk.js → stylus-DbXGih0S.js} +0 -0
- /package/public/dist/assets/{swift-D5lXmY2d.js → swift-Ch391uOd.js} +0 -0
- /package/public/dist/assets/{tcl-D-41REtC.js → tcl-CQBgGWDP.js} +0 -0
- /package/public/dist/assets/{textile-D-Znao0j.js → textile-4i3oG3tg.js} +0 -0
- /package/public/dist/assets/{tiddlywiki-Co8lXJKd.js → tiddlywiki-CXG1-CcK.js} +0 -0
- /package/public/dist/assets/{tiki-DsiNRYMP.js → tiki-DJqKUhA-.js} +0 -0
- /package/public/dist/assets/{toml-CaVZGou4.js → toml-C1FnyICQ.js} +0 -0
- /package/public/dist/assets/{troff-DJvDVr-d.js → troff-Cp8NvRO0.js} +0 -0
- /package/public/dist/assets/{ttcn-DAC92l4d.js → ttcn-NlmW_fji.js} +0 -0
- /package/public/dist/assets/{ttcn-cfg-C0X-mYlr.js → ttcn-cfg-BVuxfGZf.js} +0 -0
- /package/public/dist/assets/{turtle-D6WHyCrL.js → turtle-Ba9ERlnm.js} +0 -0
- /package/public/dist/assets/{vb-CEo_ccq3.js → vb-DDs4gjJb.js} +0 -0
- /package/public/dist/assets/{vbscript-B_PKDV1v.js → vbscript-gOFmdMJN.js} +0 -0
- /package/public/dist/assets/{velocity-ClKnKBLH.js → velocity-DtSNZA7i.js} +0 -0
- /package/public/dist/assets/{verilog-Pnuspgw6.js → verilog-Pldmtxe7.js} +0 -0
- /package/public/dist/assets/{vhdl-CZnyY4fs.js → vhdl-BFfSgWGp.js} +0 -0
- /package/public/dist/assets/{w3c-keyname-DJlC6DTY.js → w3c-keyname-BggQEPNo.js} +0 -0
- /package/public/dist/assets/{webidl-DHr762Dm.js → webidl-B6ZFYE2L.js} +0 -0
- /package/public/dist/assets/{xquery-5-FiyUtN.js → xquery-DhxUT98N.js} +0 -0
- /package/public/dist/assets/{yacas-GlqsXIeT.js → yacas-jSkQeF1Q.js} +0 -0
- /package/public/dist/assets/{z80-CI7N40Oo.js → z80-D7Lt6v61.js} +0 -0
package/public/js/ui.ts
CHANGED
|
@@ -40,6 +40,7 @@ import {
|
|
|
40
40
|
buildProcessBlockHtml,
|
|
41
41
|
getStoredProcessStepDetail,
|
|
42
42
|
mergeStoredProcessStepDetail,
|
|
43
|
+
setStoredProcessStepDetail,
|
|
43
44
|
processStepMetaFromStore,
|
|
44
45
|
releaseProcessBlockDetails,
|
|
45
46
|
type ProcessStep,
|
|
@@ -105,22 +106,22 @@ export function showProcessStep(step: ProcessStep): void {
|
|
|
105
106
|
if (state.currentProcessBlock) {
|
|
106
107
|
const rawIcon = step.rawIcon || step.icon;
|
|
107
108
|
// Completion detection: prefer semantic status field, fall back to emoji check
|
|
108
|
-
const resolvedStatus =
|
|
109
|
-
? step.status
|
|
110
|
-
: emojiToStatus(step.icon);
|
|
109
|
+
const resolvedStatus = step.status || emojiToStatus(step.icon) || 'running';
|
|
111
110
|
if (resolvedStatus === 'done' || resolvedStatus === 'error') {
|
|
112
111
|
// Prefer matching by stepRef (stable correlation), fall back to label
|
|
113
112
|
const match = findRunningProcessStepMatch(state.currentProcessBlock.steps, step);
|
|
114
113
|
if (match) {
|
|
115
114
|
step.icon = emojiToIcon(step.icon);
|
|
116
|
-
const
|
|
115
|
+
const detailPreview = step.type === 'thinking'
|
|
116
|
+
? setStoredProcessStepDetail(match.id, step.detail)
|
|
117
|
+
: mergeStoredProcessStepDetail(match.id, step.detail);
|
|
117
118
|
replaceStep(state.currentProcessBlock, match.id, {
|
|
118
119
|
...match,
|
|
119
120
|
...step,
|
|
120
121
|
id: match.id,
|
|
121
122
|
rawIcon,
|
|
122
|
-
detail:
|
|
123
|
-
detailPreview
|
|
123
|
+
detail: detailPreview,
|
|
124
|
+
detailPreview,
|
|
124
125
|
label: step.label || match.label,
|
|
125
126
|
status: resolvedStatus,
|
|
126
127
|
});
|
|
@@ -132,19 +133,44 @@ export function showProcessStep(step: ProcessStep): void {
|
|
|
132
133
|
.find(s => s.stepRef === step.stepRef && (s.status === 'done' || s.status === 'error'));
|
|
133
134
|
if (existingDone) {
|
|
134
135
|
step.icon = emojiToIcon(step.icon);
|
|
136
|
+
const detailPreview = step.type === 'thinking'
|
|
137
|
+
? setStoredProcessStepDetail(existingDone.id, step.detail)
|
|
138
|
+
: mergeStoredProcessStepDetail(existingDone.id, step.detail);
|
|
135
139
|
replaceStep(state.currentProcessBlock, existingDone.id, {
|
|
136
140
|
...existingDone,
|
|
137
141
|
...step,
|
|
138
142
|
id: existingDone.id,
|
|
139
143
|
rawIcon,
|
|
140
144
|
status: resolvedStatus,
|
|
141
|
-
detail:
|
|
145
|
+
detail: detailPreview,
|
|
146
|
+
detailPreview,
|
|
142
147
|
});
|
|
143
148
|
scrollToBottom();
|
|
144
149
|
return;
|
|
145
150
|
}
|
|
146
151
|
}
|
|
147
152
|
}
|
|
153
|
+
if (step.stepRef && resolvedStatus === 'running') {
|
|
154
|
+
const existingRunning = [...state.currentProcessBlock.steps].reverse()
|
|
155
|
+
.find(s => s.stepRef === step.stepRef && s.status === 'running');
|
|
156
|
+
if (existingRunning) {
|
|
157
|
+
step.rawIcon = rawIcon;
|
|
158
|
+
step.icon = emojiToIcon(step.icon);
|
|
159
|
+
const detailPreview = setStoredProcessStepDetail(existingRunning.id, step.detail);
|
|
160
|
+
replaceStep(state.currentProcessBlock, existingRunning.id, {
|
|
161
|
+
...existingRunning,
|
|
162
|
+
...step,
|
|
163
|
+
id: existingRunning.id,
|
|
164
|
+
rawIcon,
|
|
165
|
+
status: 'running',
|
|
166
|
+
detail: detailPreview,
|
|
167
|
+
detailPreview,
|
|
168
|
+
label: step.label || existingRunning.label,
|
|
169
|
+
});
|
|
170
|
+
scrollToBottom();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
148
174
|
// Dedupe: detail이 있는 재broadcast → 같은 label+type의 detail 없는 유령 교체
|
|
149
175
|
if (step.detail) {
|
|
150
176
|
const ghost = [...state.currentProcessBlock.steps].reverse()
|
package/public/js/ws.ts
CHANGED
|
@@ -405,7 +405,11 @@ export function connect(): void {
|
|
|
405
405
|
} else if (msg.type === 'agent_output') {
|
|
406
406
|
appendAgentText(msg.text || '');
|
|
407
407
|
} else if (msg.type === 'agent_retry') {
|
|
408
|
-
|
|
408
|
+
const retryDelay = Number(msg.delay ?? 0);
|
|
409
|
+
const retryReasonValue = (msg as WsMessage & { reason?: unknown }).reason;
|
|
410
|
+
const retryReason = escapeHtml(String(retryReasonValue || '429'));
|
|
411
|
+
const retryKey = retryDelay > 0 ? 'ws.retry' : 'ws.retryNow';
|
|
412
|
+
addSystemMsg(t(retryKey, { cli: escapeHtml(msg.cli || ''), reason: retryReason, delay: retryDelay }), 'tool-activity');
|
|
409
413
|
} else if (msg.type === 'agent_fallback') {
|
|
410
414
|
addSystemMsg(t('ws.fallback', { from: escapeHtml(msg.from || ''), to: escapeHtml(msg.to || '') }), 'tool-activity');
|
|
411
415
|
} else if (msg.type === 'agent_smoke') {
|
package/public/locales/en.json
CHANGED
|
@@ -91,7 +91,8 @@
|
|
|
91
91
|
"ws.roundNext": "Round {round} → next round",
|
|
92
92
|
"ws.roundRetry": "Round {round} → retry",
|
|
93
93
|
"ws.fallback": "{from} failed → retrying with {to}",
|
|
94
|
-
"ws.retry": "{cli}
|
|
94
|
+
"ws.retry": "{cli} {reason} → retrying in {delay}s",
|
|
95
|
+
"ws.retryNow": "{cli} {reason} → retrying",
|
|
95
96
|
"ws.disconnected": "Disconnected — reconnecting...",
|
|
96
97
|
"tg.settingsUnsupported": "Settings changes are not supported on Telegram.",
|
|
97
98
|
"dc.settingsUnsupported": "Settings changes are not supported on Discord.",
|
|
@@ -103,6 +104,11 @@
|
|
|
103
104
|
"tg.voiceFail": "Voice transcription failed: {msg}",
|
|
104
105
|
"tg.voiceEmpty": "Couldn't understand the voice message. Please try again.",
|
|
105
106
|
"voice.start": "Record voice",
|
|
107
|
+
"voice.requesting": "Requesting microphone",
|
|
108
|
+
"voice.requestTimeout": "The microphone permission prompt did not open. Check browser and macOS microphone permissions for this address ({origin}), then try again.",
|
|
109
|
+
"voice.requestTimeoutLoopback": "The microphone permission prompt did not open. Chrome stores localhost and 127.0.0.1 permissions separately. Allow the current address ({origin}) or open {alternateOrigin}, then try again.",
|
|
110
|
+
"voice.policyBlocked": "This view cannot use the microphone because of the browser permissions policy. Refresh Manager preview or open it in a new tab.",
|
|
111
|
+
"voice.permissionDeniedBrowser": "Chrome has blocked microphone access for this address: {origin}. Allow the microphone from the address-bar permissions icon, or enable Chrome microphone access in macOS System Settings.",
|
|
106
112
|
"voice.stop": "Stop recording",
|
|
107
113
|
"voice.micDenied": "Microphone access denied. Please allow microphone in browser settings.",
|
|
108
114
|
"voice.micNotFound": "No microphone found. Please connect a microphone.",
|
|
@@ -124,7 +130,7 @@
|
|
|
124
130
|
"stt.save": "Save STT Settings",
|
|
125
131
|
"stt.saved": "Saved",
|
|
126
132
|
"stt.key.savedPlaceholder": "✓ Saved ····{last4}",
|
|
127
|
-
"stt.shortcutHint": "Ctrl+Shift+Space (⌘+Shift+Space on Mac)",
|
|
133
|
+
"stt.shortcutHint": "Ctrl+Shift+Space (⌘+Shift+Space on Mac) · Alt/Option+M",
|
|
128
134
|
"stt.openaiBaseUrl": "Base URL",
|
|
129
135
|
"stt.openaiKey": "API Key",
|
|
130
136
|
"stt.openaiModel": "Model",
|
|
@@ -206,6 +212,7 @@
|
|
|
206
212
|
"settings.none": "(none)",
|
|
207
213
|
"cli.gemini.auth": "Browser auth on first run",
|
|
208
214
|
"cli.copilot.authHint": "copilot login or gh auth login",
|
|
215
|
+
"cli.showMore": "More ▸",
|
|
209
216
|
"cli.authRequired": "Install / auth required",
|
|
210
217
|
"cli.notAuthenticated": "Auth required — run command below",
|
|
211
218
|
"drag.drop": "Drop files here",
|
|
@@ -390,8 +397,16 @@
|
|
|
390
397
|
"help.telegram.effect": "Allowed Telegram chats can exchange messages, files, voice input, and task results.",
|
|
391
398
|
"help.telegram.use.1": "You want cli-jaw updates through Telegram",
|
|
392
399
|
"help.telegram.use.2": "Web responses should be forwarded to Telegram",
|
|
393
|
-
"help.telegram.
|
|
394
|
-
"help.telegram.
|
|
400
|
+
"help.telegram.link.botfather": "Create bot with BotFather",
|
|
401
|
+
"help.telegram.link.docs": "Telegram Bot API guide",
|
|
402
|
+
"help.telegram.howTo.1": "Open Telegram and search for @BotFather to start a conversation.",
|
|
403
|
+
"help.telegram.howTo.2": "Send /newbot — it will ask for a display name. Enter one (e.g. \"Jaw Bot\").",
|
|
404
|
+
"help.telegram.howTo.3": "Next, enter a username. It must end with _bot (e.g. jaw_helper_bot).",
|
|
405
|
+
"help.telegram.howTo.4": "BotFather will send you an HTTP API token (format: 1234567890:ABCdef...). Copy it.",
|
|
406
|
+
"help.telegram.howTo.5": "Open ~/.cli-jaw/settings.json and paste the token into telegram.token.",
|
|
407
|
+
"help.telegram.howTo.6": "Search for your new bot in Telegram → tap \"Start\" or send any message (e.g. \"hello\").",
|
|
408
|
+
"help.telegram.howTo.7": "Run jaw doctor in your terminal — it will display the chat ID (a number) from the message you just sent.",
|
|
409
|
+
"help.telegram.howTo.8": "Add that chat ID to the telegram.allowedChatIds array in settings.json — done!",
|
|
395
410
|
"help.telegram.example.1": "Receive a long-running task's finished file through Telegram while away from the web UI.",
|
|
396
411
|
"help.telegram.avoid.1": "Discord is the active operational channel",
|
|
397
412
|
"help.telegram.related.1": "/forward",
|
|
@@ -402,8 +417,17 @@
|
|
|
402
417
|
"help.discord.effect": "Commands, files, and employee results are limited to the configured guild and channel.",
|
|
403
418
|
"help.discord.use.1": "Operating through a server channel with slash commands",
|
|
404
419
|
"help.discord.use.2": "Restricting output to specific guilds or channels",
|
|
405
|
-
"help.discord.
|
|
406
|
-
"help.discord.
|
|
420
|
+
"help.discord.link.portal": "Open Discord Developer Portal",
|
|
421
|
+
"help.discord.link.docs": "Discord bot getting started",
|
|
422
|
+
"help.discord.howTo.1": "Go to discord.com/developers/applications and log in with your Discord account.",
|
|
423
|
+
"help.discord.howTo.2": "Click \"New Application\" (top right) → enter an app name (e.g. \"Jaw Bot\") → Create.",
|
|
424
|
+
"help.discord.howTo.3": "In the left menu, go to \"Bot\" tab → click \"Reset Token\" → copy the bot token. (It's only shown once — save it now!)",
|
|
425
|
+
"help.discord.howTo.4": "On the same Bot page, scroll to \"Privileged Gateway Intents\" → turn on MESSAGE CONTENT INTENT. (Without this, the bot can't read messages!)",
|
|
426
|
+
"help.discord.howTo.5": "In the left menu, go to \"OAuth2\" → \"URL Generator\".",
|
|
427
|
+
"help.discord.howTo.6": "Under SCOPES, check bot and applications.commands. Under BOT PERMISSIONS, select Send Messages, Read Message History, etc.",
|
|
428
|
+
"help.discord.howTo.7": "Copy the generated invite URL at the bottom → paste in browser → select the server to add the bot to.",
|
|
429
|
+
"help.discord.howTo.8": "Open ~/.cli-jaw/settings.json and enter discord.token, guildId (server ID), and channelId (channel ID).",
|
|
430
|
+
"help.discord.howTo.9": "Run jaw doctor in your terminal to verify bot connection and permissions — done!",
|
|
407
431
|
"help.discord.example.1": "Collect employee verification results in one project channel.",
|
|
408
432
|
"help.discord.avoid.1": "You expect direct-message delivery",
|
|
409
433
|
"help.discord.related.1": "jaw doctor",
|
|
@@ -528,7 +552,7 @@
|
|
|
528
552
|
"help.keyboardShortcuts.use.1": "You want to run frequent actions without the mouse",
|
|
529
553
|
"help.keyboardShortcuts.use.2": "You need to know whether shortcuts interrupt typing",
|
|
530
554
|
"help.keyboardShortcuts.use.3": "You are looking for Manager dashboard shortcut settings",
|
|
531
|
-
"help.keyboardShortcuts.howTo.1": "Classic Web: Enter sends from the chat input, Shift+Enter adds a new line,
|
|
555
|
+
"help.keyboardShortcuts.howTo.1": "Classic Web: Enter sends from the chat input, Shift+Enter adds a new line, slash commands start with / in the same input, and STT recording toggles with Ctrl+Shift+Space or Alt/Option+M.",
|
|
532
556
|
"help.keyboardShortcuts.howTo.2": "Manager: ? opens shortcut help outside editors; Alt+I, Alt+P, and Alt+N jump to Instances, the active Preview, and Notes; Alt+K and Alt+J select the previous or next instance.",
|
|
533
557
|
"help.keyboardShortcuts.howTo.3": "Manager Notes: Cmd/Ctrl+S saves, Cmd/Ctrl+E cycles Raw/Preview/WYSIWYG, Cmd/Ctrl+Shift+F opens note search, Cmd/Ctrl+P toggles the quick switcher, and Cmd/Ctrl+Delete or Cmd/Ctrl+Backspace trashes the selected note or folder.",
|
|
534
558
|
"help.keyboardShortcuts.example.1": "Press Enter in the chat input to send; use Shift+Enter when you need a new line.",
|
package/public/locales/ja.json
CHANGED
|
@@ -89,7 +89,8 @@
|
|
|
89
89
|
"ws.roundNext": "ラウンド {round} → 次のラウンド",
|
|
90
90
|
"ws.roundRetry": "ラウンド {round} → 再試行",
|
|
91
91
|
"ws.fallback": "{from} が失敗 → {to} で再試行しています",
|
|
92
|
-
"ws.retry": "{cli}
|
|
92
|
+
"ws.retry": "{cli} {reason} → {delay}s 後に再試行",
|
|
93
|
+
"ws.retryNow": "{cli} {reason} → 再試行",
|
|
93
94
|
"ws.disconnected": "接続が切れました — 再接続中...",
|
|
94
95
|
"tg.settingsUnsupported": "Telegram では設定変更に対応していません。",
|
|
95
96
|
"dc.settingsUnsupported": "Discord では設定変更に対応していません。",
|
|
@@ -101,6 +102,11 @@
|
|
|
101
102
|
"tg.voiceFail": "音声文字起こしに失敗しました: {msg}",
|
|
102
103
|
"tg.voiceEmpty": "音声を認識できませんでした。もう一度お試しください。",
|
|
103
104
|
"voice.start": "録音",
|
|
105
|
+
"voice.requesting": "マイク権限を確認中",
|
|
106
|
+
"voice.requestTimeout": "マイク権限のダイアログが開きませんでした。このアドレス({origin})のブラウザと macOS のマイク権限を確認してから、もう一度試してください。",
|
|
107
|
+
"voice.requestTimeoutLoopback": "マイク権限のダイアログが開きませんでした。Chrome は localhost と 127.0.0.1 の権限を別々に保存します。現在のアドレス({origin})を許可するか、{alternateOrigin} を開いてもう一度試してください。",
|
|
108
|
+
"voice.policyBlocked": "この画面はブラウザーの権限ポリシーによりマイクを使用できません。Manager preview を再読み込みするか、新しいタブで開いてください。",
|
|
109
|
+
"voice.permissionDeniedBrowser": "Chrome でこのアドレスのマイク権限がブロックされています: {origin}。アドレスバー左側の権限アイコンでマイクを許可するか、macOS のシステム設定で Chrome のマイク権限を有効にしてください。",
|
|
104
110
|
"voice.stop": "録音を停止",
|
|
105
111
|
"voice.micDenied": "マイクへのアクセスが拒否されました。ブラウザ設定でマイクを許可してください。",
|
|
106
112
|
"voice.micNotFound": "マイクが見つかりません。マイクを接続してください。",
|
|
@@ -122,7 +128,7 @@
|
|
|
122
128
|
"stt.save": "STT 設定を保存",
|
|
123
129
|
"stt.saved": "保存しました",
|
|
124
130
|
"stt.key.savedPlaceholder": "✓ 入力済み ····{last4}",
|
|
125
|
-
"stt.shortcutHint": "Ctrl+Shift+Space(Mac では ⌘+Shift+Space)",
|
|
131
|
+
"stt.shortcutHint": "Ctrl+Shift+Space(Mac では ⌘+Shift+Space) · Alt/Option+M",
|
|
126
132
|
"stt.openaiBaseUrl": "ベース URL",
|
|
127
133
|
"stt.openaiKey": "API キー",
|
|
128
134
|
"stt.openaiModel": "モデル",
|
|
@@ -204,6 +210,7 @@
|
|
|
204
210
|
"settings.none": "(なし)",
|
|
205
211
|
"cli.gemini.auth": "初回実行時にブラウザ認証",
|
|
206
212
|
"cli.copilot.authHint": "copilot login または gh auth login",
|
|
213
|
+
"cli.showMore": "もっと見る ▸",
|
|
207
214
|
"cli.authRequired": "インストール/認証が必要です",
|
|
208
215
|
"cli.notAuthenticated": "認証が必要です — 下のコマンドを実行してください",
|
|
209
216
|
"drag.drop": "ここにファイルをドロップ",
|
|
@@ -388,8 +395,16 @@
|
|
|
388
395
|
"help.telegram.effect": "許可された Telegram チャットで、メッセージ、ファイル、音声入力、タスク結果をやり取りできます。",
|
|
389
396
|
"help.telegram.use.1": "Telegram で cli-jaw の更新を受け取りたいとき",
|
|
390
397
|
"help.telegram.use.2": "Web の応答を Telegram に転送したいとき",
|
|
391
|
-
"help.telegram.
|
|
392
|
-
"help.telegram.
|
|
398
|
+
"help.telegram.link.botfather": "BotFatherでbot作成",
|
|
399
|
+
"help.telegram.link.docs": "Telegram Bot APIガイド",
|
|
400
|
+
"help.telegram.howTo.1": "Telegram アプリで @BotFather を検索して会話を開始します。",
|
|
401
|
+
"help.telegram.howTo.2": "/newbot を送信すると bot 名を聞かれます。表示名を入力してください(例: \"Jaw Bot\")。",
|
|
402
|
+
"help.telegram.howTo.3": "次にユーザー名を入力します。必ず _bot で終わる必要があります(例: jaw_helper_bot)。",
|
|
403
|
+
"help.telegram.howTo.4": "成功すると BotFather が HTTP API token を送ってきます(1234567890:ABCdef... 形式)。これをコピーしてください。",
|
|
404
|
+
"help.telegram.howTo.5": "~/.cli-jaw/settings.json を開き、telegram.token にコピーした token を貼り付けます。",
|
|
405
|
+
"help.telegram.howTo.6": "Telegram で作成した bot を検索 →「開始」をタップするか、何かメッセージ(例: \"hello\")を送ります。",
|
|
406
|
+
"help.telegram.howTo.7": "ターミナルで jaw doctor を実行すると、送信したチャットの chat ID(数字)が表示されます。",
|
|
407
|
+
"help.telegram.howTo.8": "settings.json の telegram.allowedChatIds 配列にその chat ID を追加すれば設定完了!",
|
|
393
408
|
"help.telegram.example.1": "Web から離れていても、長時間タスクの完了ファイルを Telegram で受け取れます。",
|
|
394
409
|
"help.telegram.avoid.1": "Discord が現在の運用チャンネルである場合",
|
|
395
410
|
"help.telegram.related.1": "/forward コマンド",
|
|
@@ -400,8 +415,17 @@
|
|
|
400
415
|
"help.discord.effect": "コマンド、ファイル、従業員結果は、設定した guild と channel に制限されます。",
|
|
401
416
|
"help.discord.use.1": "サーバーチャンネルでスラッシュコマンド中心に運用するとき",
|
|
402
417
|
"help.discord.use.2": "出力先を特定の guild や channel に制限したいとき",
|
|
403
|
-
"help.discord.
|
|
404
|
-
"help.discord.
|
|
418
|
+
"help.discord.link.portal": "Discord Developer Portalを開く",
|
|
419
|
+
"help.discord.link.docs": "Discord botスタートガイド",
|
|
420
|
+
"help.discord.howTo.1": "discord.com/developers/applications にアクセスし、Discord アカウントでログインします。",
|
|
421
|
+
"help.discord.howTo.2": "右上の「New Application」をクリック → アプリ名を入力(例: \"Jaw Bot\")→ Create。",
|
|
422
|
+
"help.discord.howTo.3": "左メニュー「Bot」タブ →「Reset Token」をクリック → bot token をコピーします。(一度しか表示されないのですぐ保存!)",
|
|
423
|
+
"help.discord.howTo.4": "同じ Bot ページ下部「Privileged Gateway Intents」→ MESSAGE CONTENT INTENT を有効にします。(これがないとメッセージを読めません!)",
|
|
424
|
+
"help.discord.howTo.5": "左メニュー「OAuth2」→「URL Generator」に移動します。",
|
|
425
|
+
"help.discord.howTo.6": "SCOPES で bot と applications.commands をチェック。下の BOT PERMISSIONS で Send Messages、Read Message History などを選択します。",
|
|
426
|
+
"help.discord.howTo.7": "ページ下部に生成された招待 URL をコピー → ブラウザに貼り付け → bot を追加するサーバーを選択します。",
|
|
427
|
+
"help.discord.howTo.8": "~/.cli-jaw/settings.json に discord.token、guildId(サーバー ID)、channelId(チャンネル ID)を入力します。",
|
|
428
|
+
"help.discord.howTo.9": "ターミナルで jaw doctor を実行して bot 接続と権限が正常か確認すれば完了!",
|
|
405
429
|
"help.discord.example.1": "従業員の検証結果を 1 つのプロジェクトチャンネルに集約できます。",
|
|
406
430
|
"help.discord.avoid.1": "DM での配信を期待している場合",
|
|
407
431
|
"help.discord.related.1": "jaw doctor コマンド",
|
|
@@ -526,7 +550,7 @@
|
|
|
526
550
|
"help.keyboardShortcuts.use.1": "マウスなしでよく使う操作を実行したいとき",
|
|
527
551
|
"help.keyboardShortcuts.use.2": "ショートカットが入力を邪魔しないか確認したいとき",
|
|
528
552
|
"help.keyboardShortcuts.use.3": "Manager dashboard のショートカット設定を探しているとき",
|
|
529
|
-
"help.keyboardShortcuts.howTo.1": "Classic Web: チャット入力では Enter で送信し、Shift+Enter で改行します。スラッシュコマンドは同じ入力欄で / から始めます。",
|
|
553
|
+
"help.keyboardShortcuts.howTo.1": "Classic Web: チャット入力では Enter で送信し、Shift+Enter で改行します。スラッシュコマンドは同じ入力欄で / から始めます。STT 録音は Ctrl+Shift+Space または Alt/Option+M で切り替えます。",
|
|
530
554
|
"help.keyboardShortcuts.howTo.2": "Manager: エディタ外では ? でショートカットヘルプを開き、Alt+I、Alt+P、Alt+N で Instances、active Preview、Notes へ移動し、Alt+K と Alt+J で前後のインスタンスを選択します。",
|
|
531
555
|
"help.keyboardShortcuts.howTo.3": "Manager Notes: Cmd/Ctrl+S で保存、Cmd/Ctrl+E で Raw/Preview/WYSIWYG を切り替え、Cmd/Ctrl+Shift+F でノート検索、Cmd/Ctrl+P で quick switcher、Cmd/Ctrl+Delete または Cmd/Ctrl+Backspace で選択中のノートやフォルダをゴミ箱へ移動します。",
|
|
532
556
|
"help.keyboardShortcuts.example.1": "チャット入力で Enter を押すと送信し、改行したいときは Shift+Enter を使います。",
|
package/public/locales/ko.json
CHANGED
|
@@ -91,7 +91,8 @@
|
|
|
91
91
|
"ws.roundNext": "라운드 {round} → 다음 라운드",
|
|
92
92
|
"ws.roundRetry": "라운드 {round} → 재시도",
|
|
93
93
|
"ws.fallback": "{from} 실패 → {to}로 재시도",
|
|
94
|
-
"ws.retry": "{cli}
|
|
94
|
+
"ws.retry": "{cli} {reason} → {delay}s 후 재시도",
|
|
95
|
+
"ws.retryNow": "{cli} {reason} → 재시도",
|
|
95
96
|
"ws.disconnected": "연결 끊김 — 재연결 중...",
|
|
96
97
|
"tg.settingsUnsupported": "Telegram에서 설정 변경은 지원하지 않습니다.",
|
|
97
98
|
"dc.settingsUnsupported": "Discord에서 설정 변경은 지원하지 않습니다.",
|
|
@@ -103,6 +104,11 @@
|
|
|
103
104
|
"tg.voiceFail": "음성 인식 실패: {msg}",
|
|
104
105
|
"tg.voiceEmpty": "음성을 인식하지 못했어요. 다시 시도해주세요.",
|
|
105
106
|
"voice.start": "음성 녹음",
|
|
107
|
+
"voice.requesting": "마이크 권한 확인 중",
|
|
108
|
+
"voice.requestTimeout": "마이크 권한 창이 열리지 않았어요. 현재 주소({origin})의 브라우저와 macOS 마이크 권한을 확인한 뒤 다시 눌러 주세요.",
|
|
109
|
+
"voice.requestTimeoutLoopback": "마이크 권한 창이 열리지 않았어요. Chrome은 localhost와 127.0.0.1 권한을 따로 저장합니다. 현재 주소({origin})를 허용하거나 {alternateOrigin}로 열어 다시 눌러 주세요.",
|
|
110
|
+
"voice.policyBlocked": "이 화면은 브라우저 권한 정책 때문에 마이크를 사용할 수 없어요. Manager preview를 새로고침하거나 새 탭에서 열어 주세요.",
|
|
111
|
+
"voice.permissionDeniedBrowser": "Chrome에서 이 주소의 마이크 권한이 차단되어 있어요: {origin}. 주소창 왼쪽 권한 아이콘에서 마이크를 허용하거나 macOS 시스템 설정에서 Chrome 마이크 권한을 켜 주세요.",
|
|
106
112
|
"voice.stop": "녹음 중지",
|
|
107
113
|
"voice.micDenied": "마이크 접근이 거부됐어요. 브라우저 설정에서 마이크를 허용해 주세요.",
|
|
108
114
|
"voice.micNotFound": "마이크를 찾을 수 없어요. 마이크를 연결해 주세요.",
|
|
@@ -124,7 +130,7 @@
|
|
|
124
130
|
"stt.save": "STT 설정 저장",
|
|
125
131
|
"stt.saved": "저장됨",
|
|
126
132
|
"stt.key.savedPlaceholder": "✓ 입력됨 ····{last4}",
|
|
127
|
-
"stt.shortcutHint": "Ctrl+Shift+Space (Mac: ⌘+Shift+Space)",
|
|
133
|
+
"stt.shortcutHint": "Ctrl+Shift+Space (Mac: ⌘+Shift+Space) · Alt/Option+M",
|
|
128
134
|
"stt.openaiBaseUrl": "Base URL",
|
|
129
135
|
"stt.openaiKey": "API Key",
|
|
130
136
|
"stt.openaiModel": "모델",
|
|
@@ -206,6 +212,7 @@
|
|
|
206
212
|
"settings.none": "(없음)",
|
|
207
213
|
"cli.gemini.auth": "첫 실행 시 브라우저 인증",
|
|
208
214
|
"cli.copilot.authHint": "copilot login 또는 gh auth login",
|
|
215
|
+
"cli.showMore": "더 보기 ▸",
|
|
209
216
|
"cli.authRequired": "설치 / 인증 필요",
|
|
210
217
|
"cli.notAuthenticated": "인증 필요 — 아래 명령어 실행",
|
|
211
218
|
"drag.drop": "파일을 여기에 드랍하세요",
|
|
@@ -390,8 +397,16 @@
|
|
|
390
397
|
"help.telegram.effect": "허용된 Telegram 채팅에서 메시지, 파일, 음성 입력, 작업 결과를 주고받을 수 있습니다.",
|
|
391
398
|
"help.telegram.use.1": "Telegram에서 cli-jaw 응답이나 상태를 받고 싶을 때",
|
|
392
399
|
"help.telegram.use.2": "웹 응답을 Telegram으로 자동 전송할 때",
|
|
393
|
-
"help.telegram.
|
|
394
|
-
"help.telegram.
|
|
400
|
+
"help.telegram.link.botfather": "BotFather에서 봇 만들기",
|
|
401
|
+
"help.telegram.link.docs": "Telegram Bot API 가이드",
|
|
402
|
+
"help.telegram.howTo.1": "Telegram 앱에서 @BotFather를 검색해서 대화를 시작합니다.",
|
|
403
|
+
"help.telegram.howTo.2": "/newbot 명령을 보내면 봇 이름을 물어봅니다. 표시될 이름을 입력하세요 (예: \"Jaw Bot\").",
|
|
404
|
+
"help.telegram.howTo.3": "다음으로 유저네임을 입력합니다. 반드시 _bot으로 끝나야 해요 (예: jaw_helper_bot).",
|
|
405
|
+
"help.telegram.howTo.4": "성공하면 BotFather가 HTTP API 토큰을 보내줍니다 (1234567890:ABCdef... 형식). 이 토큰을 복사하세요.",
|
|
406
|
+
"help.telegram.howTo.5": "~/.cli-jaw/settings.json을 열고 telegram.token에 복사한 토큰을 붙여넣습니다.",
|
|
407
|
+
"help.telegram.howTo.6": "Telegram에서 방금 만든 봇을 검색 → \"시작\" 버튼을 누르거나 아무 메시지(예: \"hello\")를 보냅니다.",
|
|
408
|
+
"help.telegram.howTo.7": "터미널에서 jaw doctor를 실행하면 방금 보낸 채팅의 chat ID(숫자)가 표시됩니다.",
|
|
409
|
+
"help.telegram.howTo.8": "settings.json의 telegram.allowedChatIds 배열에 이 chat ID를 추가하면 설정 완료!",
|
|
395
410
|
"help.telegram.example.1": "외출 중에도 Telegram으로 장기 작업 완료 파일을 받을 수 있습니다.",
|
|
396
411
|
"help.telegram.avoid.1": "Discord를 주 운영 채널로 쓰는 경우",
|
|
397
412
|
"help.telegram.related.1": "/forward",
|
|
@@ -402,8 +417,17 @@
|
|
|
402
417
|
"help.discord.effect": "설정된 guild와 channel로 명령, 파일, 직원 결과 전달 범위가 제한됩니다.",
|
|
403
418
|
"help.discord.use.1": "서버 채널에서 slash command 중심으로 운영할 때",
|
|
404
419
|
"help.discord.use.2": "특정 guild/channel로 출력을 제한할 때",
|
|
405
|
-
"help.discord.
|
|
406
|
-
"help.discord.
|
|
420
|
+
"help.discord.link.portal": "Discord Developer Portal 열기",
|
|
421
|
+
"help.discord.link.docs": "Discord 봇 시작 가이드",
|
|
422
|
+
"help.discord.howTo.1": "discord.com/developers/applications에 접속하고 Discord 계정으로 로그인합니다.",
|
|
423
|
+
"help.discord.howTo.2": "오른쪽 상단 \"New Application\" 클릭 → 앱 이름 입력 (예: \"Jaw Bot\") → Create.",
|
|
424
|
+
"help.discord.howTo.3": "왼쪽 메뉴 \"Bot\" 탭 → \"Reset Token\" 클릭 → 봇 토큰을 복사합니다. (한 번만 보이니 바로 저장하세요!)",
|
|
425
|
+
"help.discord.howTo.4": "같은 Bot 페이지 아래쪽 \"Privileged Gateway Intents\" → MESSAGE CONTENT INTENT를 켭니다. (안 켜면 메시지를 못 읽어요!)",
|
|
426
|
+
"help.discord.howTo.5": "왼쪽 메뉴 \"OAuth2\" → \"URL Generator\"로 이동합니다.",
|
|
427
|
+
"help.discord.howTo.6": "SCOPES에서 bot과 applications.commands를 체크합니다. 아래 BOT PERMISSIONS에서 Send Messages, Read Message History 등을 선택합니다.",
|
|
428
|
+
"help.discord.howTo.7": "페이지 하단에 생성된 초대 URL을 복사 → 브라우저에 붙여넣기 → 봇을 추가할 서버를 선택합니다.",
|
|
429
|
+
"help.discord.howTo.8": "~/.cli-jaw/settings.json에 discord.token, guildId(서버 ID), channelId(채널 ID)를 입력합니다.",
|
|
430
|
+
"help.discord.howTo.9": "터미널에서 jaw doctor를 실행해서 봇 연결 상태와 권한이 정상인지 확인하면 완료!",
|
|
407
431
|
"help.discord.example.1": "프로젝트 채널 하나에 직원 검증 결과만 모아볼 수 있습니다.",
|
|
408
432
|
"help.discord.avoid.1": "DM 전달을 기대하는 경우",
|
|
409
433
|
"help.discord.related.1": "jaw doctor",
|
|
@@ -528,7 +552,7 @@
|
|
|
528
552
|
"help.keyboardShortcuts.use.1": "마우스 없이 자주 쓰는 동작을 실행하고 싶을 때",
|
|
529
553
|
"help.keyboardShortcuts.use.2": "단축키가 입력창을 방해하는지 확인하고 싶을 때",
|
|
530
554
|
"help.keyboardShortcuts.use.3": "Manager dashboard 단축키 설정 위치를 찾을 때",
|
|
531
|
-
"help.keyboardShortcuts.howTo.1": "Classic Web: 채팅 입력창에서 Enter는 전송, Shift+Enter는 줄바꿈이며, 슬래시 커맨드는 같은 입력창에서 /로 시작합니다.",
|
|
555
|
+
"help.keyboardShortcuts.howTo.1": "Classic Web: 채팅 입력창에서 Enter는 전송, Shift+Enter는 줄바꿈이며, 슬래시 커맨드는 같은 입력창에서 /로 시작합니다. STT 녹음은 Ctrl+Shift+Space 또는 Alt/Option+M으로 토글합니다.",
|
|
532
556
|
"help.keyboardShortcuts.howTo.2": "Manager: 에디터 밖에서 ?는 단축키 도움말을 열고, Alt+I, Alt+P, Alt+N은 Instances, active Preview, Notes로 이동하며, Alt+K와 Alt+J는 이전/다음 인스턴스를 선택합니다.",
|
|
533
557
|
"help.keyboardShortcuts.howTo.3": "Manager Notes: Cmd/Ctrl+S는 저장, Cmd/Ctrl+E는 Raw/Preview/WYSIWYG 전환, Cmd/Ctrl+Shift+F는 노트 검색, Cmd/Ctrl+P는 quick switcher 토글, Cmd/Ctrl+Delete 또는 Cmd/Ctrl+Backspace는 선택한 노트나 폴더를 휴지통으로 보냅니다.",
|
|
534
558
|
"help.keyboardShortcuts.example.1": "채팅 입력창에서 Enter를 눌러 전송하고, 줄바꿈이 필요하면 Shift+Enter를 사용합니다.",
|
package/public/locales/zh.json
CHANGED
|
@@ -89,7 +89,8 @@
|
|
|
89
89
|
"ws.roundNext": "第 {round} 轮 → 下一轮",
|
|
90
90
|
"ws.roundRetry": "第 {round} 轮 → 重试",
|
|
91
91
|
"ws.fallback": "{from} 失败 → 正在改用 {to} 重试",
|
|
92
|
-
"ws.retry": "{cli}
|
|
92
|
+
"ws.retry": "{cli} {reason} → {delay}s 后重试",
|
|
93
|
+
"ws.retryNow": "{cli} {reason} → 重试",
|
|
93
94
|
"ws.disconnected": "连接已断开 — 正在重连...",
|
|
94
95
|
"tg.settingsUnsupported": "Telegram 不支持修改设置。",
|
|
95
96
|
"dc.settingsUnsupported": "Discord 不支持修改设置。",
|
|
@@ -101,6 +102,11 @@
|
|
|
101
102
|
"tg.voiceFail": "语音转写失败:{msg}",
|
|
102
103
|
"tg.voiceEmpty": "没有听清语音内容。请再试一次。",
|
|
103
104
|
"voice.start": "录音",
|
|
105
|
+
"voice.requesting": "正在请求麦克风",
|
|
106
|
+
"voice.requestTimeout": "麦克风权限提示未打开。请检查此地址({origin})的浏览器和 macOS 麦克风权限后重试。",
|
|
107
|
+
"voice.requestTimeoutLoopback": "麦克风权限提示未打开。Chrome 会分别保存 localhost 和 127.0.0.1 的权限。请允许当前地址({origin}),或打开 {alternateOrigin} 后重试。",
|
|
108
|
+
"voice.policyBlocked": "此视图因浏览器权限策略无法使用麦克风。请刷新 Manager preview,或在新标签页中打开。",
|
|
109
|
+
"voice.permissionDeniedBrowser": "Chrome 已阻止此地址的麦克风权限:{origin}。请在地址栏左侧的权限图标中允许麦克风,或在 macOS 系统设置中启用 Chrome 的麦克风权限。",
|
|
104
110
|
"voice.stop": "停止录音",
|
|
105
111
|
"voice.micDenied": "麦克风访问被拒绝。请在浏览器设置中允许麦克风权限。",
|
|
106
112
|
"voice.micNotFound": "没有找到麦克风。请连接麦克风。",
|
|
@@ -122,7 +128,7 @@
|
|
|
122
128
|
"stt.save": "保存 STT 设置",
|
|
123
129
|
"stt.saved": "已保存",
|
|
124
130
|
"stt.key.savedPlaceholder": "✓ 已输入 ····{last4}",
|
|
125
|
-
"stt.shortcutHint": "Ctrl+Shift+Space(Mac 上为 ⌘+Shift+Space)",
|
|
131
|
+
"stt.shortcutHint": "Ctrl+Shift+Space(Mac 上为 ⌘+Shift+Space) · Alt/Option+M",
|
|
126
132
|
"stt.openaiBaseUrl": "Base URL(基础地址)",
|
|
127
133
|
"stt.openaiKey": "API 密钥",
|
|
128
134
|
"stt.openaiModel": "模型",
|
|
@@ -204,6 +210,7 @@
|
|
|
204
210
|
"settings.none": "(无)",
|
|
205
211
|
"cli.gemini.auth": "首次运行时通过浏览器认证",
|
|
206
212
|
"cli.copilot.authHint": "copilot login 或 gh auth login",
|
|
213
|
+
"cli.showMore": "更多 ▸",
|
|
207
214
|
"cli.authRequired": "需要安装/认证",
|
|
208
215
|
"cli.notAuthenticated": "需要认证 — 请运行下面的命令",
|
|
209
216
|
"drag.drop": "将文件拖到这里",
|
|
@@ -388,8 +395,16 @@
|
|
|
388
395
|
"help.telegram.effect": "允许的 Telegram 聊天可以收发消息、文件、语音输入和任务结果。",
|
|
389
396
|
"help.telegram.use.1": "希望通过 Telegram 接收 cli-jaw 更新时",
|
|
390
397
|
"help.telegram.use.2": "希望把 Web 回复转发到 Telegram 时",
|
|
391
|
-
"help.telegram.
|
|
392
|
-
"help.telegram.
|
|
398
|
+
"help.telegram.link.botfather": "用 BotFather 创建 bot",
|
|
399
|
+
"help.telegram.link.docs": "Telegram Bot API 指南",
|
|
400
|
+
"help.telegram.howTo.1": "Telegram 应用中搜索 @BotFather 并开始对话。",
|
|
401
|
+
"help.telegram.howTo.2": "发送 /newbot,它会询问显示名称。输入一个名字(例如 \"Jaw Bot\")。",
|
|
402
|
+
"help.telegram.howTo.3": "接着输入用户名,必须以 _bot 结尾(例如 jaw_helper_bot)。",
|
|
403
|
+
"help.telegram.howTo.4": "成功后 BotFather 会发送 HTTP API token(格式: 1234567890:ABCdef...)。复制它。",
|
|
404
|
+
"help.telegram.howTo.5": "打开 ~/.cli-jaw/settings.json,将 token 粘贴到 telegram.token 中。",
|
|
405
|
+
"help.telegram.howTo.6": "在 Telegram 中搜索刚创建的 bot → 点击「开始」或发送任意消息(例如 \"hello\")。",
|
|
406
|
+
"help.telegram.howTo.7": "在终端运行 jaw doctor,会显示刚才发送消息的 chat ID(数字)。",
|
|
407
|
+
"help.telegram.howTo.8": "将该 chat ID 添加到 settings.json 的 telegram.allowedChatIds 数组中,设置完成!",
|
|
393
408
|
"help.telegram.example.1": "离开网页时,也可以通过 Telegram 接收长任务完成后的文件。",
|
|
394
409
|
"help.telegram.avoid.1": "Discord 才是当前运营频道时",
|
|
395
410
|
"help.telegram.related.1": "/forward 命令",
|
|
@@ -400,8 +415,17 @@
|
|
|
400
415
|
"help.discord.effect": "命令、文件和员工结果会限制在配置的 guild 和 channel 内。",
|
|
401
416
|
"help.discord.use.1": "通过服务器频道和斜杠命令运营时",
|
|
402
417
|
"help.discord.use.2": "需要将输出限制到特定 guild 或 channel 时",
|
|
403
|
-
"help.discord.
|
|
404
|
-
"help.discord.
|
|
418
|
+
"help.discord.link.portal": "打开 Discord Developer Portal",
|
|
419
|
+
"help.discord.link.docs": "Discord bot 入门指南",
|
|
420
|
+
"help.discord.howTo.1": "访问 discord.com/developers/applications 并用 Discord 账号登录。",
|
|
421
|
+
"help.discord.howTo.2": "点击右上角「New Application」→ 输入应用名(例如 \"Jaw Bot\")→ Create。",
|
|
422
|
+
"help.discord.howTo.3": "左侧菜单「Bot」标签 → 点击「Reset Token」→ 复制 bot token。(只显示一次,请立即保存!)",
|
|
423
|
+
"help.discord.howTo.4": "同一 Bot 页面底部「Privileged Gateway Intents」→ 开启 MESSAGE CONTENT INTENT。(不开的话 bot 无法读取消息!)",
|
|
424
|
+
"help.discord.howTo.5": "左侧菜单「OAuth2」→「URL Generator」。",
|
|
425
|
+
"help.discord.howTo.6": "SCOPES 勾选 bot 和 applications.commands。下方 BOT PERMISSIONS 选择 Send Messages、Read Message History 等权限。",
|
|
426
|
+
"help.discord.howTo.7": "复制页面底部生成的邀请 URL → 粘贴到浏览器 → 选择要添加 bot 的服务器。",
|
|
427
|
+
"help.discord.howTo.8": "打开 ~/.cli-jaw/settings.json,填写 discord.token、guildId(服务器 ID)、channelId(频道 ID)。",
|
|
428
|
+
"help.discord.howTo.9": "在终端运行 jaw doctor 确认 bot 连接和权限正常,设置完成!",
|
|
405
429
|
"help.discord.example.1": "把员工验证结果集中到一个项目频道。",
|
|
406
430
|
"help.discord.avoid.1": "你期待通过私信投递时",
|
|
407
431
|
"help.discord.related.1": "jaw doctor 命令",
|
|
@@ -526,7 +550,7 @@
|
|
|
526
550
|
"help.keyboardShortcuts.use.1": "希望不用鼠标执行常用操作时",
|
|
527
551
|
"help.keyboardShortcuts.use.2": "需要确认快捷键是否会打断输入时",
|
|
528
552
|
"help.keyboardShortcuts.use.3": "寻找 Manager dashboard 快捷键设置时",
|
|
529
|
-
"help.keyboardShortcuts.howTo.1": "Classic Web:在聊天输入框中按 Enter 发送,Shift+Enter 换行,斜杠命令从同一个输入框里的 /
|
|
553
|
+
"help.keyboardShortcuts.howTo.1": "Classic Web:在聊天输入框中按 Enter 发送,Shift+Enter 换行,斜杠命令从同一个输入框里的 / 开始;STT 录音可用 Ctrl+Shift+Space 或 Alt/Option+M 切换。",
|
|
530
554
|
"help.keyboardShortcuts.howTo.2": "Manager:不在编辑器中时,? 打开快捷键帮助;Alt+I、Alt+P、Alt+N 跳到 Instances、active Preview 和 Notes;Alt+K 与 Alt+J 选择上一个或下一个实例。",
|
|
531
555
|
"help.keyboardShortcuts.howTo.3": "Manager Notes:Cmd/Ctrl+S 保存,Cmd/Ctrl+E 在 Raw/Preview/WYSIWYG 间切换,Cmd/Ctrl+Shift+F 打开笔记搜索,Cmd/Ctrl+P 切换 quick switcher,Cmd/Ctrl+Delete 或 Cmd/Ctrl+Backspace 将选中的笔记或文件夹移到废纸篓。",
|
|
532
556
|
"help.keyboardShortcuts.example.1": "在聊天输入框按 Enter 发送;需要换行时使用 Shift+Enter。",
|
|
@@ -29,12 +29,13 @@ import { useCommandPalette } from './hooks/useCommandPalette';
|
|
|
29
29
|
import { useInstanceLabelEditor } from './hooks/useInstanceLabelEditor';
|
|
30
30
|
import { useInstanceMessageEvents } from './hooks/useInstanceMessageEvents';
|
|
31
31
|
import { useManagerEvents } from './hooks/useManagerEvents';
|
|
32
|
+
import { usePreviewSttLifecycle } from './usePreviewSttLifecycle';
|
|
33
|
+
import { usePreviewShortcutMessages } from './usePreviewShortcutMessages';
|
|
32
34
|
import { formatUptime, instanceLabel } from './instance-label';
|
|
33
35
|
import { useJawCeoDashboardBridge } from './jaw-ceo/useJawCeoDashboardBridge';
|
|
34
36
|
import { actionForShortcutEvent, isManagerShortcutEditableTarget } from './manager-shortcuts';
|
|
35
37
|
import { reconcileActiveProfileFilter } from './profile-filter';
|
|
36
38
|
import type { DashboardDetailTab, DashboardInstance, DashboardInstanceStatus, DashboardLifecycleAction, DashboardNotesAuthoringMode, DashboardNotesViewMode, DashboardProfile, DashboardScanResult, DashboardShortcutAction, DashboardSidebarMode } from './types';
|
|
37
|
-
|
|
38
39
|
export function App() {
|
|
39
40
|
const [data, setData] = useState<DashboardScanResult | null>(null);
|
|
40
41
|
const [loading, setLoading] = useState(true);
|
|
@@ -120,6 +121,8 @@ export function App() {
|
|
|
120
121
|
}, [filtered, instances, view.selectedPort]);
|
|
121
122
|
const activeJawCeoPort = selectedInstance?.port ?? view.selectedPort ?? null;
|
|
122
123
|
const jawCeoBridge = useJawCeoDashboardBridge({ selectedPort: activeJawCeoPort, managerEvents: managerEvents.events, messageEvents: messageActivity.events, onOpenWorker: handleOpenJawCeoWorker });
|
|
124
|
+
usePreviewSttLifecycle(jawCeoBridge.voice);
|
|
125
|
+
usePreviewShortcutMessages({ enabled: view.dashboardShortcutsEnabled, keymap: view.dashboardShortcutKeymap, onAction: runManagerShortcut });
|
|
123
126
|
const activePreviewPort = view.activeDetailTab === 'preview' && view.sidebarMode === 'instances'
|
|
124
127
|
? (selectedInstance?.port ?? null)
|
|
125
128
|
: null;
|
|
@@ -316,30 +319,12 @@ export function App() {
|
|
|
316
319
|
view.setSidebarMode(sidebarMode); void saveUi({ sidebarMode });
|
|
317
320
|
}
|
|
318
321
|
|
|
319
|
-
function handleNotesSelectedPathChange(path: string | null): void {
|
|
320
|
-
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
function
|
|
324
|
-
|
|
325
|
-
setNotesSearchFocusToken(token => token + 1);
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
function handleNotesViewModeChange(mode: DashboardNotesViewMode): void {
|
|
329
|
-
view.setNotesViewMode(mode); void saveUi({ notesViewMode: mode });
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
function handleNotesAuthoringModeChange(mode: DashboardNotesAuthoringMode): void {
|
|
333
|
-
view.setNotesAuthoringMode(mode); void saveUi({ notesAuthoringMode: mode });
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
function handleNotesWordWrapChange(value: boolean): void {
|
|
337
|
-
view.setNotesWordWrap(value); void saveUi({ notesWordWrap: value });
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
function handleNotesTreeWidthChange(value: number): void {
|
|
341
|
-
view.setNotesTreeWidth(value); void saveUi({ notesTreeWidth: value });
|
|
342
|
-
}
|
|
322
|
+
function handleNotesSelectedPathChange(path: string | null): void { view.setNotesSelectedPath(path); void saveUi({ notesSelectedPath: path }); }
|
|
323
|
+
function openNotesSidebarSearch(): void { setNotesSidebarMode('search'); setNotesSearchFocusToken(token => token + 1); }
|
|
324
|
+
function handleNotesViewModeChange(mode: DashboardNotesViewMode): void { view.setNotesViewMode(mode); void saveUi({ notesViewMode: mode }); }
|
|
325
|
+
function handleNotesAuthoringModeChange(mode: DashboardNotesAuthoringMode): void { view.setNotesAuthoringMode(mode); void saveUi({ notesAuthoringMode: mode }); }
|
|
326
|
+
function handleNotesWordWrapChange(value: boolean): void { view.setNotesWordWrap(value); void saveUi({ notesWordWrap: value }); }
|
|
327
|
+
function handleNotesTreeWidthChange(value: number): void { view.setNotesTreeWidth(value); void saveUi({ notesTreeWidth: value }); }
|
|
343
328
|
|
|
344
329
|
const notesModel = useNotesModel({
|
|
345
330
|
active: view.sidebarMode === 'notes',
|
|
@@ -405,6 +390,14 @@ export function App() {
|
|
|
405
390
|
|
|
406
391
|
useEffect(() => {
|
|
407
392
|
function onKeyDown(event: KeyboardEvent): void {
|
|
393
|
+
if ((event.ctrlKey || event.metaKey) && event.key === 'f') {
|
|
394
|
+
const frame = document.querySelector<HTMLIFrameElement>('.preview-frame');
|
|
395
|
+
if (frame?.contentWindow) {
|
|
396
|
+
event.preventDefault();
|
|
397
|
+
frame.contentWindow.postMessage({ type: 'jaw-preview-search' }, '*');
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
408
401
|
if (!view.dashboardShortcutsEnabled) return;
|
|
409
402
|
if (isManagerShortcutEditableTarget(event.target)) return;
|
|
410
403
|
const action = actionForShortcutEvent(event, view.dashboardShortcutKeymap);
|
|
@@ -414,36 +407,7 @@ export function App() {
|
|
|
414
407
|
}
|
|
415
408
|
document.addEventListener('keydown', onKeyDown);
|
|
416
409
|
return () => document.removeEventListener('keydown', onKeyDown);
|
|
417
|
-
}, [
|
|
418
|
-
filtered,
|
|
419
|
-
selectedInstance,
|
|
420
|
-
view.dashboardShortcutsEnabled,
|
|
421
|
-
view.dashboardShortcutKeymap,
|
|
422
|
-
view.sidebarMode,
|
|
423
|
-
view.activeDetailTab,
|
|
424
|
-
settingsDirty,
|
|
425
|
-
]);
|
|
426
|
-
|
|
427
|
-
useEffect(() => {
|
|
428
|
-
function onPreviewShortcut(event: MessageEvent): void {
|
|
429
|
-
if (!view.dashboardShortcutsEnabled) return;
|
|
430
|
-
const data = event.data;
|
|
431
|
-
if (!data || data.type !== 'jaw-preview-shortcut') return;
|
|
432
|
-
const synth = { key: data.key, altKey: !!data.altKey, ctrlKey: false, metaKey: false, shiftKey: !!data.shiftKey } as unknown as KeyboardEvent;
|
|
433
|
-
const action = actionForShortcutEvent(synth, view.dashboardShortcutKeymap);
|
|
434
|
-
if (action) runManagerShortcut(action);
|
|
435
|
-
}
|
|
436
|
-
window.addEventListener('message', onPreviewShortcut);
|
|
437
|
-
return () => window.removeEventListener('message', onPreviewShortcut);
|
|
438
|
-
}, [
|
|
439
|
-
filtered,
|
|
440
|
-
selectedInstance,
|
|
441
|
-
view.dashboardShortcutsEnabled,
|
|
442
|
-
view.dashboardShortcutKeymap,
|
|
443
|
-
view.sidebarMode,
|
|
444
|
-
view.activeDetailTab,
|
|
445
|
-
settingsDirty,
|
|
446
|
-
]);
|
|
410
|
+
}, [filtered, selectedInstance, view.dashboardShortcutsEnabled, view.dashboardShortcutKeymap, view.sidebarMode, view.activeDetailTab, settingsDirty]);
|
|
447
411
|
|
|
448
412
|
async function handleLifecycle(action: DashboardLifecycleAction, instance: DashboardInstance): Promise<void> {
|
|
449
413
|
const lifecycle = instance.lifecycle;
|