cli-jaw 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +3 -2
- package/README.md +41 -12
- package/dist/bin/_http-client.js +34 -0
- package/dist/bin/_http-client.js.map +1 -0
- package/dist/bin/cli-jaw.js +10 -5
- package/dist/bin/cli-jaw.js.map +1 -1
- package/dist/bin/commands/browser-web-ai.js +155 -38
- package/dist/bin/commands/browser-web-ai.js.map +1 -1
- package/dist/bin/commands/browser.js +265 -37
- package/dist/bin/commands/browser.js.map +1 -1
- package/dist/bin/commands/chat.js +18 -14
- package/dist/bin/commands/chat.js.map +1 -1
- package/dist/bin/commands/clone.js +3 -2
- package/dist/bin/commands/clone.js.map +1 -1
- package/dist/bin/commands/dashboard.js +22 -18
- package/dist/bin/commands/dashboard.js.map +1 -1
- package/dist/bin/commands/dispatch.js +9 -11
- package/dist/bin/commands/dispatch.js.map +1 -1
- package/dist/bin/commands/doctor.js +26 -14
- package/dist/bin/commands/doctor.js.map +1 -1
- package/dist/bin/commands/employee.js +12 -7
- package/dist/bin/commands/employee.js.map +1 -1
- package/dist/bin/commands/init.js +9 -9
- package/dist/bin/commands/init.js.map +1 -1
- package/dist/bin/commands/launchd.js +17 -7
- package/dist/bin/commands/launchd.js.map +1 -1
- package/dist/bin/commands/mcp.js +7 -4
- package/dist/bin/commands/mcp.js.map +1 -1
- package/dist/bin/commands/memory.js +7 -5
- package/dist/bin/commands/memory.js.map +1 -1
- package/dist/bin/commands/orchestrate.js +6 -3
- package/dist/bin/commands/orchestrate.js.map +1 -1
- package/dist/bin/commands/reset.js +4 -3
- package/dist/bin/commands/reset.js.map +1 -1
- package/dist/bin/commands/serve.js +3 -2
- package/dist/bin/commands/serve.js.map +1 -1
- package/dist/bin/commands/service.js +2 -2
- package/dist/bin/commands/service.js.map +1 -1
- package/dist/bin/commands/status.js +10 -9
- package/dist/bin/commands/status.js.map +1 -1
- package/dist/bin/commands/tui/api.js +26 -18
- package/dist/bin/commands/tui/api.js.map +1 -1
- package/dist/bin/commands/tui/overlays.js +3 -1
- package/dist/bin/commands/tui/overlays.js.map +1 -1
- package/dist/bin/commands/tui/simple-mode.js +1 -1
- package/dist/bin/commands/tui/simple-mode.js.map +1 -1
- package/dist/bin/commands/tui/types.js.map +1 -1
- package/dist/bin/postinstall.js +153 -65
- package/dist/bin/postinstall.js.map +1 -1
- package/dist/bin/star-prompt.js +4 -3
- package/dist/bin/star-prompt.js.map +1 -1
- package/dist/lib/mcp/format-converters.js +15 -10
- package/dist/lib/mcp/format-converters.js.map +1 -1
- package/dist/lib/mcp/mcp-install.js +2 -2
- package/dist/lib/mcp/mcp-install.js.map +1 -1
- package/dist/lib/mcp/skills-distribution.js +2 -2
- package/dist/lib/mcp/skills-distribution.js.map +1 -1
- package/dist/lib/mcp/skills-reset.js +5 -4
- package/dist/lib/mcp/skills-reset.js.map +1 -1
- package/dist/lib/mcp/skills-symlinks.js +9 -9
- package/dist/lib/mcp/skills-symlinks.js.map +1 -1
- package/dist/lib/mcp/skills-utils.js +5 -4
- package/dist/lib/mcp/skills-utils.js.map +1 -1
- package/dist/lib/mcp/unified-config.js +3 -2
- package/dist/lib/mcp/unified-config.js.map +1 -1
- package/dist/lib/mime-detect.js +65 -0
- package/dist/lib/mime-detect.js.map +1 -0
- package/dist/lib/quota-copilot.js +12 -10
- package/dist/lib/quota-copilot.js.map +1 -1
- package/dist/lib/stt.js +3 -3
- package/dist/lib/stt.js.map +1 -1
- package/dist/lib/upload.js +14 -5
- package/dist/lib/upload.js.map +1 -1
- package/dist/scripts/i18n-registry.js +4 -4
- package/dist/scripts/i18n-registry.js.map +1 -1
- package/dist/server.js +61 -57
- package/dist/server.js.map +1 -1
- package/dist/src/agent/alert-escalation.js +61 -0
- package/dist/src/agent/alert-escalation.js.map +1 -0
- package/dist/src/agent/args.js +71 -2
- package/dist/src/agent/args.js.map +1 -1
- package/dist/src/agent/error-classifier.js +9 -4
- package/dist/src/agent/error-classifier.js.map +1 -1
- package/dist/src/agent/events.js +130 -101
- package/dist/src/agent/events.js.map +1 -1
- package/dist/src/agent/lifecycle-handler.js +44 -19
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/live-run-state.js +7 -3
- package/dist/src/agent/live-run-state.js.map +1 -1
- package/dist/src/agent/memory-flush-controller.js +6 -4
- package/dist/src/agent/memory-flush-controller.js.map +1 -1
- package/dist/src/agent/opencode-diagnostics.js +7 -6
- package/dist/src/agent/opencode-diagnostics.js.map +1 -1
- package/dist/src/agent/session-persistence.js +1 -1
- package/dist/src/agent/session-persistence.js.map +1 -1
- package/dist/src/agent/spawn-env.js +33 -16
- package/dist/src/agent/spawn-env.js.map +1 -1
- package/dist/src/agent/spawn.js +176 -110
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/agent/watchdog.js +56 -0
- package/dist/src/agent/watchdog.js.map +1 -0
- package/dist/src/browser/actions.js +179 -70
- package/dist/src/browser/actions.js.map +1 -1
- package/dist/src/browser/connection.js +296 -19
- package/dist/src/browser/connection.js.map +1 -1
- package/dist/src/browser/index.js +4 -1
- package/dist/src/browser/index.js.map +1 -1
- package/dist/src/browser/launch-policy.js +1 -1
- package/dist/src/browser/launch-policy.js.map +1 -1
- package/dist/src/browser/primitives.js +11 -7
- package/dist/src/browser/primitives.js.map +1 -1
- package/dist/src/browser/runtime-diagnostics.js +45 -0
- package/dist/src/browser/runtime-diagnostics.js.map +1 -0
- package/dist/src/browser/runtime-orphans.js +127 -0
- package/dist/src/browser/runtime-orphans.js.map +1 -0
- package/dist/src/browser/runtime-owner-store.js +51 -0
- package/dist/src/browser/runtime-owner-store.js.map +1 -0
- package/dist/src/browser/runtime-owner.js +2 -2
- package/dist/src/browser/runtime-owner.js.map +1 -1
- package/dist/src/browser/tab-lifecycle.js +157 -0
- package/dist/src/browser/tab-lifecycle.js.map +1 -0
- package/dist/src/browser/vision.js +35 -11
- package/dist/src/browser/vision.js.map +1 -1
- package/dist/src/browser/web-ai/action-breadth.js +56 -0
- package/dist/src/browser/web-ai/action-breadth.js.map +1 -0
- package/dist/src/browser/web-ai/action-cache.js +9 -8
- package/dist/src/browser/web-ai/action-cache.js.map +1 -1
- package/dist/src/browser/web-ai/action-intent.js +64 -0
- package/dist/src/browser/web-ai/action-intent.js.map +1 -0
- package/dist/src/browser/web-ai/action-memory.js +82 -0
- package/dist/src/browser/web-ai/action-memory.js.map +1 -0
- package/dist/src/browser/web-ai/action-trace.js +11 -6
- package/dist/src/browser/web-ai/action-trace.js.map +1 -1
- package/dist/src/browser/web-ai/annotated-screenshot.js +2 -1
- package/dist/src/browser/web-ai/annotated-screenshot.js.map +1 -1
- package/dist/src/browser/web-ai/answer-artifact.js +97 -0
- package/dist/src/browser/web-ai/answer-artifact.js.map +1 -0
- package/dist/src/browser/web-ai/ax-snapshot.js +3 -2
- package/dist/src/browser/web-ai/ax-snapshot.js.map +1 -1
- package/dist/src/browser/web-ai/browser-primitives.js +10 -7
- package/dist/src/browser/web-ai/browser-primitives.js.map +1 -1
- package/dist/src/browser/web-ai/capability-registry.js +1 -1
- package/dist/src/browser/web-ai/capability-registry.js.map +1 -1
- package/dist/src/browser/web-ai/chatgpt-composer.js +12 -12
- package/dist/src/browser/web-ai/chatgpt-composer.js.map +1 -1
- package/dist/src/browser/web-ai/chatgpt-model.js +469 -50
- package/dist/src/browser/web-ai/chatgpt-model.js.map +1 -1
- package/dist/src/browser/web-ai/chatgpt-response.js +82 -10
- package/dist/src/browser/web-ai/chatgpt-response.js.map +1 -1
- package/dist/src/browser/web-ai/chatgpt.js +325 -49
- package/dist/src/browser/web-ai/chatgpt.js.map +1 -1
- package/dist/src/browser/web-ai/churn-log.js +1 -1
- package/dist/src/browser/web-ai/churn-log.js.map +1 -1
- package/dist/src/browser/web-ai/cli-sessions.js +42 -26
- package/dist/src/browser/web-ai/cli-sessions.js.map +1 -1
- package/dist/src/browser/web-ai/context-pack/builder.js +1 -1
- package/dist/src/browser/web-ai/context-pack/builder.js.map +1 -1
- package/dist/src/browser/web-ai/context-pack/file-selector.js +2 -2
- package/dist/src/browser/web-ai/context-pack/file-selector.js.map +1 -1
- package/dist/src/browser/web-ai/context-pack/report.js +1 -1
- package/dist/src/browser/web-ai/context-pack/report.js.map +1 -1
- package/dist/src/browser/web-ai/copy-markdown.js +25 -5
- package/dist/src/browser/web-ai/copy-markdown.js.map +1 -1
- package/dist/src/browser/web-ai/diagnostics.js +17 -14
- package/dist/src/browser/web-ai/diagnostics.js.map +1 -1
- package/dist/src/browser/web-ai/doctor.js +10 -6
- package/dist/src/browser/web-ai/doctor.js.map +1 -1
- package/dist/src/browser/web-ai/dom-hash.js.map +1 -1
- package/dist/src/browser/web-ai/errors.js +5 -22
- package/dist/src/browser/web-ai/errors.js.map +1 -1
- package/dist/src/browser/web-ai/gemini-live.js +7 -6
- package/dist/src/browser/web-ai/gemini-live.js.map +1 -1
- package/dist/src/browser/web-ai/grok-live.js +9 -5
- package/dist/src/browser/web-ai/grok-live.js.map +1 -1
- package/dist/src/browser/web-ai/index.js +5 -0
- package/dist/src/browser/web-ai/index.js.map +1 -1
- package/dist/src/browser/web-ai/observation-bundle.js +90 -0
- package/dist/src/browser/web-ai/observation-bundle.js.map +1 -0
- package/dist/src/browser/web-ai/observe-actions.js +186 -0
- package/dist/src/browser/web-ai/observe-actions.js.map +1 -0
- package/dist/src/browser/web-ai/observe-targets.js +6 -1
- package/dist/src/browser/web-ai/observe-targets.js.map +1 -1
- package/dist/src/browser/web-ai/planner-contract.js +18 -0
- package/dist/src/browser/web-ai/planner-contract.js.map +1 -0
- package/dist/src/browser/web-ai/post-action-assert.js +8 -7
- package/dist/src/browser/web-ai/post-action-assert.js.map +1 -1
- package/dist/src/browser/web-ai/product-surfaces.js +2 -1
- package/dist/src/browser/web-ai/product-surfaces.js.map +1 -1
- package/dist/src/browser/web-ai/provider-adapter.js.map +1 -1
- package/dist/src/browser/web-ai/question.js +14 -7
- package/dist/src/browser/web-ai/question.js.map +1 -1
- package/dist/src/browser/web-ai/ref-registry.js.map +1 -1
- package/dist/src/browser/web-ai/self-heal.js +20 -14
- package/dist/src/browser/web-ai/self-heal.js.map +1 -1
- package/dist/src/browser/web-ai/session-store.js +61 -1
- package/dist/src/browser/web-ai/session-store.js.map +1 -1
- package/dist/src/browser/web-ai/session.js +43 -2
- package/dist/src/browser/web-ai/session.js.map +1 -1
- package/dist/src/browser/web-ai/source-audit.js +116 -0
- package/dist/src/browser/web-ai/source-audit.js.map +1 -0
- package/dist/src/browser/web-ai/tab-finalizer.js +18 -0
- package/dist/src/browser/web-ai/tab-finalizer.js.map +1 -0
- package/dist/src/browser/web-ai/tab-lease-store.js +390 -0
- package/dist/src/browser/web-ai/tab-lease-store.js.map +1 -0
- package/dist/src/browser/web-ai/tab-pool.js +44 -0
- package/dist/src/browser/web-ai/tab-pool.js.map +1 -0
- package/dist/src/browser/web-ai/target-resolver.js +31 -0
- package/dist/src/browser/web-ai/target-resolver.js.map +1 -0
- package/dist/src/browser/web-ai/trace-persistence.js +4 -2
- package/dist/src/browser/web-ai/trace-persistence.js.map +1 -1
- package/dist/src/browser/web-ai/vendor-editor-contract.js.map +1 -1
- package/dist/src/browser/web-ai/watcher.js +8 -7
- package/dist/src/browser/web-ai/watcher.js.map +1 -1
- package/dist/src/cli/acp-client.js +40 -26
- package/dist/src/cli/acp-client.js.map +1 -1
- package/dist/src/cli/command-context.js +3 -3
- package/dist/src/cli/command-context.js.map +1 -1
- package/dist/src/cli/commands.js +25 -16
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/compact.js.map +1 -1
- package/dist/src/cli/handlers-completions.js +6 -4
- package/dist/src/cli/handlers-completions.js.map +1 -1
- package/dist/src/cli/handlers-runtime.js +45 -38
- package/dist/src/cli/handlers-runtime.js.map +1 -1
- package/dist/src/cli/handlers.js +44 -36
- package/dist/src/cli/handlers.js.map +1 -1
- package/dist/src/cli/readiness.js +3 -1
- package/dist/src/cli/readiness.js.map +1 -1
- package/dist/src/cli/registry.js +1 -1
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/cli/tui/overlay.js +4 -1
- package/dist/src/cli/tui/overlay.js.map +1 -1
- package/dist/src/cli/types.js +4 -0
- package/dist/src/cli/types.js.map +1 -0
- package/dist/src/command-contract/catalog.js +1 -1
- package/dist/src/command-contract/catalog.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/browser-open-default.js +13 -0
- package/dist/src/core/browser-open-default.js.map +1 -0
- package/dist/src/core/browser-open.js +41 -0
- package/dist/src/core/browser-open.js.map +1 -0
- package/dist/src/core/bus.js +13 -2
- package/dist/src/core/bus.js.map +1 -1
- package/dist/src/core/compact.js +5 -4
- package/dist/src/core/compact.js.map +1 -1
- package/dist/src/core/config.js +51 -52
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +48 -6
- package/dist/src/core/db.js.map +1 -1
- package/dist/src/core/employees.js +9 -8
- package/dist/src/core/employees.js.map +1 -1
- package/dist/src/core/instance.js +7 -6
- package/dist/src/core/instance.js.map +1 -1
- package/dist/src/core/logger.js +1 -1
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/main-session.js +7 -7
- package/dist/src/core/main-session.js.map +1 -1
- package/dist/src/core/path-expand.js +10 -0
- package/dist/src/core/path-expand.js.map +1 -0
- package/dist/src/core/runtime-path.js +1 -1
- package/dist/src/core/runtime-path.js.map +1 -1
- package/dist/src/core/runtime-settings.js +13 -13
- package/dist/src/core/runtime-settings.js.map +1 -1
- package/dist/src/core/settings-merge.js +14 -14
- package/dist/src/core/settings-merge.js.map +1 -1
- package/dist/src/core/strip-undefined.js +13 -0
- package/dist/src/core/strip-undefined.js.map +1 -0
- package/dist/src/core/tcc.js +1 -1
- package/dist/src/core/tcc.js.map +1 -1
- package/dist/src/discord/bot.js +19 -18
- package/dist/src/discord/bot.js.map +1 -1
- package/dist/src/discord/channel-types.js +14 -0
- package/dist/src/discord/channel-types.js.map +1 -0
- package/dist/src/discord/commands.js +7 -6
- package/dist/src/discord/commands.js.map +1 -1
- package/dist/src/discord/discord-file.js.map +1 -1
- package/dist/src/discord/forwarder.js +3 -3
- package/dist/src/discord/forwarder.js.map +1 -1
- package/dist/src/http/error-middleware.js +3 -3
- package/dist/src/http/error-middleware.js.map +1 -1
- package/dist/src/http/response.js +2 -2
- package/dist/src/http/response.js.map +1 -1
- package/dist/src/ide/diff.js +7 -7
- package/dist/src/ide/diff.js.map +1 -1
- package/dist/src/manager/board/routes.js +28 -27
- package/dist/src/manager/board/routes.js.map +1 -1
- package/dist/src/manager/dashboard-home.js +3 -5
- package/dist/src/manager/dashboard-home.js.map +1 -1
- package/dist/src/manager/dashboard-service.js +2 -2
- package/dist/src/manager/dashboard-service.js.map +1 -1
- package/dist/src/manager/health-history.js +10 -9
- package/dist/src/manager/health-history.js.map +1 -1
- package/dist/src/manager/launchd-service.js +2 -2
- package/dist/src/manager/launchd-service.js.map +1 -1
- package/dist/src/manager/lifecycle-helpers.js +7 -6
- package/dist/src/manager/lifecycle-helpers.js.map +1 -1
- package/dist/src/manager/lifecycle.js +7 -6
- package/dist/src/manager/lifecycle.js.map +1 -1
- package/dist/src/manager/logs.js +18 -18
- package/dist/src/manager/logs.js.map +1 -1
- package/dist/src/manager/metadata.js +10 -2
- package/dist/src/manager/metadata.js.map +1 -1
- package/dist/src/manager/notes/assets.js +216 -0
- package/dist/src/manager/notes/assets.js.map +1 -0
- package/dist/src/manager/notes/capabilities.js +56 -0
- package/dist/src/manager/notes/capabilities.js.map +1 -0
- package/dist/src/manager/notes/constants.js +11 -0
- package/dist/src/manager/notes/constants.js.map +1 -0
- package/dist/src/manager/notes/frontmatter.js +120 -0
- package/dist/src/manager/notes/frontmatter.js.map +1 -0
- package/dist/src/manager/notes/link-resolver.js +96 -0
- package/dist/src/manager/notes/link-resolver.js.map +1 -0
- package/dist/src/manager/notes/path-guards.js +4 -0
- package/dist/src/manager/notes/path-guards.js.map +1 -1
- package/dist/src/manager/notes/remote-assets.js +128 -0
- package/dist/src/manager/notes/remote-assets.js.map +1 -0
- package/dist/src/manager/notes/routes.js +63 -13
- package/dist/src/manager/notes/routes.js.map +1 -1
- package/dist/src/manager/notes/store.js +3 -2
- package/dist/src/manager/notes/store.js.map +1 -1
- package/dist/src/manager/notes/system-trash.js +3 -3
- package/dist/src/manager/notes/system-trash.js.map +1 -1
- package/dist/src/manager/notes/vault-index.js +220 -0
- package/dist/src/manager/notes/vault-index.js.map +1 -0
- package/dist/src/manager/notes/watcher.js +27 -0
- package/dist/src/manager/notes/watcher.js.map +1 -0
- package/dist/src/manager/notes/wiki-links.js +109 -0
- package/dist/src/manager/notes/wiki-links.js.map +1 -0
- package/dist/src/manager/process-verify.js +29 -0
- package/dist/src/manager/process-verify.js.map +1 -1
- package/dist/src/manager/profiles.js +3 -2
- package/dist/src/manager/profiles.js.map +1 -1
- package/dist/src/manager/registry.js +60 -58
- package/dist/src/manager/registry.js.map +1 -1
- package/dist/src/manager/routes/electron-metrics.js +22 -22
- package/dist/src/manager/routes/electron-metrics.js.map +1 -1
- package/dist/src/manager/scan.js +2 -2
- package/dist/src/manager/scan.js.map +1 -1
- package/dist/src/manager/schedule/routes.js +24 -23
- package/dist/src/manager/schedule/routes.js.map +1 -1
- package/dist/src/manager/server.js +28 -28
- package/dist/src/manager/server.js.map +1 -1
- package/dist/src/manager/systemd-service.js +1 -1
- package/dist/src/manager/systemd-service.js.map +1 -1
- package/dist/src/memory/bootstrap.js +5 -4
- package/dist/src/memory/bootstrap.js.map +1 -1
- package/dist/src/memory/heartbeat-schedule.js +10 -10
- package/dist/src/memory/heartbeat-schedule.js.map +1 -1
- package/dist/src/memory/heartbeat.js +23 -22
- package/dist/src/memory/heartbeat.js.map +1 -1
- package/dist/src/memory/indexing.js.map +1 -1
- package/dist/src/memory/keyword-expand.js +1 -1
- package/dist/src/memory/keyword-expand.js.map +1 -1
- package/dist/src/memory/memory.js +2 -2
- package/dist/src/memory/memory.js.map +1 -1
- package/dist/src/memory/runtime.js +6 -5
- package/dist/src/memory/runtime.js.map +1 -1
- package/dist/src/memory/shared.js +2 -1
- package/dist/src/memory/shared.js.map +1 -1
- package/dist/src/memory/worklog.js +1 -1
- package/dist/src/memory/worklog.js.map +1 -1
- package/dist/src/messaging/runtime.js +13 -10
- package/dist/src/messaging/runtime.js.map +1 -1
- package/dist/src/messaging/send.js +16 -15
- package/dist/src/messaging/send.js.map +1 -1
- package/dist/src/orchestrator/collect.js +6 -6
- package/dist/src/orchestrator/collect.js.map +1 -1
- package/dist/src/orchestrator/distribute.js +112 -77
- package/dist/src/orchestrator/distribute.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +6 -5
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +42 -42
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/state-machine.js +3 -3
- package/dist/src/orchestrator/state-machine.js.map +1 -1
- package/dist/src/orchestrator/worker-registry.js +4 -3
- package/dist/src/orchestrator/worker-registry.js.map +1 -1
- package/dist/src/prompt/builder.js +24 -19
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +15 -10
- package/dist/src/prompt/templates/control-system.md +9 -7
- package/dist/src/prompt/templates/employee.md +5 -4
- package/dist/src/prompt/templates/vision-click.md +1 -1
- package/dist/src/routes/_http-error.js +15 -0
- package/dist/src/routes/_http-error.js.map +1 -0
- package/dist/src/routes/avatar.js +6 -5
- package/dist/src/routes/avatar.js.map +1 -1
- package/dist/src/routes/browser.js +132 -45
- package/dist/src/routes/browser.js.map +1 -1
- package/dist/src/routes/employees.js +28 -21
- package/dist/src/routes/employees.js.map +1 -1
- package/dist/src/routes/heartbeat.js +12 -9
- package/dist/src/routes/heartbeat.js.map +1 -1
- package/dist/src/routes/i18n.js +13 -7
- package/dist/src/routes/i18n.js.map +1 -1
- package/dist/src/routes/jaw-memory.js +15 -11
- package/dist/src/routes/jaw-memory.js.map +1 -1
- package/dist/src/routes/memory.js +25 -20
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/messaging.js +50 -29
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/routes/orchestrate.js +38 -24
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/routes/quota.js +81 -17
- package/dist/src/routes/quota.js.map +1 -1
- package/dist/src/routes/settings.js +28 -18
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/skills.js +22 -13
- package/dist/src/routes/skills.js.map +1 -1
- package/dist/src/routes/traces.js +77 -0
- package/dist/src/routes/traces.js.map +1 -0
- package/dist/src/security/path-guards.js +2 -1
- package/dist/src/security/path-guards.js.map +1 -1
- package/dist/src/shared/tool-log-sanitize.js +191 -0
- package/dist/src/shared/tool-log-sanitize.js.map +1 -0
- package/dist/src/telegram/bot.js +65 -55
- package/dist/src/telegram/bot.js.map +1 -1
- package/dist/src/telegram/forwarder.js +5 -9
- package/dist/src/telegram/forwarder.js.map +1 -1
- package/dist/src/telegram/telegram-file.js +28 -24
- package/dist/src/telegram/telegram-file.js.map +1 -1
- package/dist/src/telegram/voice.js +4 -3
- package/dist/src/telegram/voice.js.map +1 -1
- package/dist/src/trace/redact.js +50 -0
- package/dist/src/trace/redact.js.map +1 -0
- package/dist/src/trace/store.js +162 -0
- package/dist/src/trace/store.js.map +1 -0
- package/dist/src/trace/types.js +2 -0
- package/dist/src/trace/types.js.map +1 -0
- package/dist/src/types/cli-engine.js +34 -0
- package/dist/src/types/cli-engine.js.map +1 -0
- package/dist/src/types/cli-events.js +31 -0
- package/dist/src/types/cli-events.js.map +1 -0
- package/package.json +22 -2
- package/public/css/tool-ui.css +3 -1
- package/public/css/trace-drawer.css +48 -0
- package/public/dist/assets/{AdvancedExport-3WAYIabE.js → AdvancedExport-DJZ2VmBR.js} +1 -1
- package/public/dist/assets/Agent-CgpLT8IY.js +1 -0
- package/public/dist/assets/Browser-CrkiQoB8.js +1 -0
- package/public/dist/assets/{ChannelsDiscord-UzFPlWT4.js → ChannelsDiscord-CVUC22D4.js} +1 -1
- package/public/dist/assets/{ChannelsTelegram-DNWtPX0w.js → ChannelsTelegram-DEatIQNM.js} +1 -1
- package/public/dist/assets/{DashboardMeta-Y_6nVeJO.js → DashboardMeta-BKoxRc7i.js} +1 -1
- package/public/dist/assets/{Display-D8vGOl4s.js → Display-DnNGV9Km.js} +1 -1
- package/public/dist/assets/{Employees-YR_sIRK4.js → Employees-DZ2iJYKy.js} +1 -1
- package/public/dist/assets/{HealthBadge-CPePajyU.js → HealthBadge-Cq2c7G9s.js} +1 -1
- package/public/dist/assets/{Heartbeat-DTpAULQR.js → Heartbeat-BML6eTXZ.js} +1 -1
- package/public/dist/assets/{Mcp-DM-PgG6z.js → Mcp-BlEviQ3h.js} +1 -1
- package/public/dist/assets/{Memory-C_LvJnkn.js → Memory-BRyH80He.js} +1 -1
- package/public/dist/assets/MilkdownWysiwygEditor-Cm3uXfWf.js +52 -0
- package/public/dist/assets/ModelProvider-DxyR7EL9.js +1 -0
- package/public/dist/assets/Network-DDOOESh1.js +1 -0
- package/public/dist/assets/{Permissions-B1naJjjw.js → Permissions-Br0eSbKb.js} +1 -1
- package/public/dist/assets/{Permissions-BKffrMJD.js → Permissions-QHkzStqQ.js} +1 -1
- package/public/dist/assets/{Profile-DIqjSe2C.js → Profile-C79NKumk.js} +1 -1
- package/public/dist/assets/{Prompts-BMfbV6Y4.js → Prompts-BmiIDiXW.js} +1 -1
- package/public/dist/assets/{SpeechKeys-DjiQTzSL.js → SpeechKeys-B8304XJK.js} +1 -1
- package/public/dist/assets/app-Be58Cs3Y.js +32 -0
- package/public/dist/assets/{app-BzvwJJiv.css → app-CphocJzo.css} +1 -1
- package/public/dist/assets/{dist-DTvxN3ux.js → dist-BD0UXfgF2.js} +1 -1
- package/public/dist/assets/{dist-CASeq-Tl.js → dist-BNfXO3Yr.js} +1 -1
- package/public/dist/assets/{dist-BMPiaUzF.js → dist-BUnPYbK3.js} +1 -1
- package/public/dist/assets/{dist-CT_X3hVT.js → dist-BZosRD2u.js} +1 -1
- package/public/dist/assets/{dist-4J6YbNXv.js → dist-Bd9PlnQm.js} +1 -1
- package/public/dist/assets/{dist-BcZjyn5g.js → dist-BsT5UdNP.js} +1 -1
- package/public/dist/assets/{dist-BfBhOPR-.js → dist-CIuXW-sc.js} +1 -1
- package/public/dist/assets/{dist-BMiCig3A2.js → dist-CL4PTYWf.js} +1 -1
- package/public/dist/assets/{dist-VyP6-HLb.js → dist-Ch5VAlV9.js} +1 -1
- package/public/dist/assets/dist-ClqO40BE.js +1 -0
- package/public/dist/assets/{dist-c98Tp7bP.js → dist-Cp42cMcI.js} +1 -1
- package/public/dist/assets/{dist-CIlYL1qe.js → dist-CpUK8ypo.js} +1 -1
- package/public/dist/assets/dist-CxeLAw2Y.js +1 -0
- package/public/dist/assets/dist-D2SH8nxa.js +1 -0
- package/public/dist/assets/{dist-84fwQ7bO.js → dist-D6cUXP7K.js} +1 -1
- package/public/dist/assets/{dist-BOCcQAyF.js → dist-D7bCuS3f.js} +1 -1
- package/public/dist/assets/{dist-DMmpfLVP.js → dist-DFYRUAjN.js} +1 -1
- package/public/dist/assets/{dist-DdY6pTJr.js → dist-DZsFVYF4.js} +1 -1
- package/public/dist/assets/{dist-B0p3Eyme.js → dist-Db16ogVk.js} +1 -1
- package/public/dist/assets/{dist-DlnNtr6L.js → dist-DfodGES_.js} +1 -1
- package/public/dist/assets/{dist-DO9so2a2.js → dist-SU-YTAIg.js} +1 -1
- package/public/dist/assets/{dist-DUjXiMLP.js → dist-UYn7T-GH.js} +1 -1
- package/public/dist/assets/{dist-BW1409rz.js → dist-W51oDoeA.js} +1 -1
- package/public/dist/assets/{dist-BimBQZx1.js → dist-eU7TyC86.js} +1 -1
- package/public/dist/assets/dist-l9HH00ip.js +1 -0
- package/public/dist/assets/{dist-BrOPNxdH.js → dist-urPTQzXL.js} +1 -1
- package/public/dist/assets/{dist-AloEV3J52.js → dist-yHP6L0Ty.js} +1 -1
- package/public/dist/assets/{employees-Bbabvbyx.js → employees-CxdghzoD.js} +7 -7
- package/public/dist/assets/{error-normalize-DdvKGLt_.js → error-normalize-5n-zlEQ3.js} +1 -1
- package/public/dist/assets/insert-image-markdown-DIEa-zjk.js +22 -0
- package/public/dist/assets/{manager-DyB2ZUr9.css → manager-DEiyrWDP.css} +1 -1
- package/public/dist/assets/manager-UEXd1_9T.js +25 -0
- package/public/dist/assets/{memory-B_plvcuQ.js → memory-CsMNkYtv.js} +9 -9
- package/public/dist/assets/memory-DXad_DPO.js +1 -0
- package/public/dist/assets/{page-shell-DML_HneX.js → page-shell-D5tbivHH.js} +1 -1
- package/public/dist/assets/{render-DEhbfUAW.js → render-DGQX46ei.js} +2 -2
- package/public/dist/assets/{settings-D7F-_kYG.js → settings-BH213Yv3.js} +14 -14
- package/public/dist/assets/settings-DXT87G2U.js +1 -0
- package/public/dist/assets/settings-client-ajlwI-oK.js +1 -0
- package/public/dist/assets/skills-5o_1v0nz.js +1 -0
- package/public/dist/assets/{skills-DoGJOc0D.js → skills-CQtCtHPA.js} +6 -6
- package/public/dist/assets/slash-commands-D4-hrrmh.js +1 -0
- package/public/dist/assets/{slash-commands-khNFPOyF.js → slash-commands-Dzk1xHWS.js} +1 -1
- package/public/dist/assets/trace-drawer-SRKcfm2S.js +15 -0
- package/public/dist/assets/ui-CdRKN2S6.js +141 -0
- package/public/dist/assets/ui-n43jmg_f.js +1 -0
- package/public/dist/assets/{ws-B2aJ-nD2.js → ws-CTHQFzM1.js} +8 -8
- package/public/dist/index.html +2 -2
- package/public/dist/manager/index.html +2 -2
- package/public/index.html +1 -0
- package/public/js/constants.ts +5 -5
- package/public/js/diagram/iframe-renderer.ts +11 -11
- package/public/js/features/chat.ts +1 -1
- package/public/js/features/memory.ts +10 -10
- package/public/js/features/pending-queue.ts +2 -2
- package/public/js/features/process-block.ts +257 -29
- package/public/js/features/process-step-match.ts +18 -0
- package/public/js/features/settings-cli-status.ts +1 -1
- package/public/js/features/settings-stt.ts +37 -11
- package/public/js/features/settings-templates.ts +2 -2
- package/public/js/features/slash-commands.ts +1 -1
- package/public/js/features/tool-ui.ts +13 -7
- package/public/js/features/trace-drawer.ts +122 -0
- package/public/js/icons.ts +1 -1
- package/public/js/main.ts +28 -28
- package/public/js/provider-icons.ts +1 -1
- package/public/js/render.ts +29 -27
- package/public/js/sanitizer.ts +4 -0
- package/public/js/ui.ts +234 -68
- package/public/js/virtual-scroll.ts +19 -33
- package/public/js/ws.ts +22 -10
- package/public/manager/src/App.tsx +34 -6
- package/public/manager/src/api.ts +55 -1
- package/public/manager/src/components/ActivityTimeline.tsx +1 -1
- package/public/manager/src/components/InstanceDetailPanel.tsx +2 -2
- package/public/manager/src/components/InstanceGroups.tsx +5 -5
- package/public/manager/src/components/InstanceListContent.tsx +1 -1
- package/public/manager/src/dashboard-features.ts +1 -1
- package/public/manager/src/manager-notes.css +49 -2
- package/public/manager/src/notes/MarkdownEditor.tsx +7 -3
- package/public/manager/src/notes/NotesFileTree.tsx +45 -6
- package/public/manager/src/notes/NotesSidebar.tsx +24 -55
- package/public/manager/src/notes/NotesWorkspace.tsx +50 -3
- package/public/manager/src/notes/image-assets/clipboard-images.ts +100 -0
- package/public/manager/src/notes/image-assets/insert-image-markdown.ts +85 -0
- package/public/manager/src/notes/notes-api.ts +2 -0
- package/public/manager/src/notes/notes-types.ts +8 -1
- package/public/manager/src/notes/rendering/MarkdownRenderer.tsx +6 -0
- package/public/manager/src/notes/rendering/markdown-render-security.ts +19 -1
- package/public/manager/src/notes/rich-markdown/paste-policy.ts +6 -2
- package/public/manager/src/notes/rich-markdown/rich-markdown-extension.ts +5 -5
- package/public/manager/src/notes/rich-markdown/rich-widget.ts +8 -8
- package/public/manager/src/notes/useNotesExternalSync.ts +37 -0
- package/public/manager/src/notes/useNotesModel.ts +91 -0
- package/public/manager/src/notes/wysiwyg/MilkdownWysiwygEditor.tsx +157 -17
- package/public/manager/src/notes/wysiwyg/milkdown-block-keymap.ts +14 -2
- package/public/manager/src/notes/wysiwyg/milkdown-code-block-view.ts +20 -20
- package/public/manager/src/notes/wysiwyg/milkdown-heading-source-view.ts +8 -8
- package/public/manager/src/notes/wysiwyg/milkdown-math.ts +25 -25
- package/public/manager/src/settings/pages/Browser.tsx +38 -20
- package/public/manager/src/settings/pages/ModelProvider.tsx +11 -9
- package/public/manager/src/settings/pages/Network.tsx +10 -10
- package/public/manager/src/settings/pages/components/HealthBadge.tsx +12 -12
- package/public/manager/src/settings/pages/components/agent/runtime-employees-helpers.ts +12 -10
- package/public/manager/src/settings/pages/components/employees-helpers.ts +9 -9
- package/public/manager/src/settings/pages/components/heartbeat-helpers.ts +13 -13
- package/public/manager/src/settings/pages/components/memory-helpers.ts +4 -4
- package/public/manager/src/settings/pages/mcp-helpers.ts +7 -7
- package/public/manager/src/settings/settings-client.ts +4 -3
- package/public/manager/src/sync/IframeBridge.tsx +29 -0
- package/public/manager/src/sync/VisibilityBridge.tsx +24 -0
- package/public/manager/src/sync/invalidation-bus.ts +30 -0
- package/public/manager/src/sync/useInvalidationSubscription.ts +19 -0
- package/public/manager/src/types.ts +101 -0
- package/scripts/check-strict-baseline.mjs +255 -0
- package/scripts/claim-audit.mjs +159 -0
- package/scripts/i18n-registry.ts +4 -4
- package/scripts/install-officecli.sh +2 -2
- package/scripts/install-wsl.sh +2 -1
- package/scripts/release-gates.mjs +347 -0
- package/scripts/release-preview.sh +3 -0
- package/scripts/release.sh +4 -0
- package/scripts/smoke/opencode-external-dir-smoke.ts +14 -5
- package/public/dist/assets/Agent-BYdzZwD0.js +0 -1
- package/public/dist/assets/Browser-CkGeczuN.js +0 -1
- package/public/dist/assets/MilkdownWysiwygEditor-B7k9bAey.js +0 -52
- package/public/dist/assets/ModelProvider-CX3Qhowu.js +0 -1
- package/public/dist/assets/Network-DfPLFAvw.js +0 -1
- package/public/dist/assets/app-DLYoRkU9.js +0 -32
- package/public/dist/assets/dist-8zNAQAIa.js +0 -1
- package/public/dist/assets/dist-BgeY6nvK.js +0 -1
- package/public/dist/assets/dist-BzDGGxHQ.js +0 -1
- package/public/dist/assets/dist-D3YKbVi-.js +0 -1
- package/public/dist/assets/manager-CUSgFbMO.js +0 -25
- package/public/dist/assets/markdown-render-security-DJfJPWO-.js +0 -22
- package/public/dist/assets/memory-DQ6dU0qs.js +0 -1
- package/public/dist/assets/settings-DxLPUbpj.js +0 -1
- package/public/dist/assets/settings-client-CGf3uPPf.js +0 -1
- package/public/dist/assets/skills-yMfNYJ8m.js +0 -1
- package/public/dist/assets/slash-commands-CZcwr1W6.js +0 -1
- package/public/dist/assets/ui-04YlOMgn.js +0 -136
- package/public/dist/assets/ui-D6hlMjRq.js +0 -1
- /package/public/dist/assets/{InlineWarn-CqgWEC41.js → InlineWarn-BooBRm7o.js} +0 -0
- /package/public/dist/assets/{agent-meta-puNn13DV.js → agent-meta-DHddpWHQ.js} +0 -0
- /package/public/dist/assets/{fields-DH9JS3mb.js → fields-BtncIZYA.js} +0 -0
- /package/public/dist/assets/{mermaid-loader-6XC0y10y.js → mermaid-loader-BEFIOoJn.js} +0 -0
- /package/public/dist/assets/{path-utils-CtsDDGZg.js → path-utils-BuEEtj9w.js} +0 -0
- /package/public/dist/assets/{w3c-keyname-VSld09PZ.js → w3c-keyname-IiiZScED.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DE9SaGGd.js";import{n as t,t as n}from"./jsx-runtime-DOs-BiPY.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-DML_HneX.js";import{a as c,i as l,n as u,r as d,s as f}from"./fields-DH9JS3mb.js";import{t as p}from"./agent-meta-puNn13DV.js";import{t as m}from"./path-utils-CtsDDGZg.js";var h=e(t(),1),g=n();function _(e,t,n=!0){return{value:e,original:t,valid:n}}function v({cli:e,meta:t,original:n,value:r,setValue:i,setEntry:a}){let o=`percli-${e}-models`;return(0,g.jsxs)(`div`,{className:`settings-percli-row`,"data-cli":e,children:[(0,g.jsx)(`h3`,{className:`settings-percli-title`,children:t.label}),(0,g.jsxs)(`div`,{className:`settings-percli-grid`,children:[(0,g.jsxs)(`div`,{className:`settings-percli-model`,children:[(0,g.jsx)(f,{id:`percli-${e}-model`,label:`Model`,value:r.model??``,onChange:t=>{i({...r,model:t}),a(`perCli.${e}.model`,_(t,n.model??``))},placeholder:t.models[0]??`model id`}),t.models.length>0?(0,g.jsx)(`datalist`,{id:o,children:t.models.map(e=>(0,g.jsx)(`option`,{value:e},e))}):null]}),t.efforts.length>0?(0,g.jsx)(l,{id:`percli-${e}-effort`,label:`Effort`,value:r.effort??``,options:[{value:``,label:`(default)`},...t.efforts.map(e=>({value:e,label:e}))],onChange:t=>{i({...r,effort:t}),a(`perCli.${e}.effort`,_(t,n.effort??``))}}):null,(0,g.jsx)(c,{id:`percli-${e}-fastmode`,label:`Fast mode`,value:!!r.fastMode,onChange:t=>{i({...r,fastMode:t}),a(`perCli.${e}.fastMode`,_(t,!!n.fastMode))}})]})]})}function y(e){let t=new Set;for(let n of Object.keys(e.activeOverrides||{}))t.add(n);for(let n of Object.keys(e.perCli||{}))t.add(n);let n={};for(let e of t)n[e]={model:``,effort:``};return{activeOverrides:n}}function b({port:e,client:t,dirty:n,registerSave:c}){let{state:l,refresh:f,setData:_}=r(t,`/api/settings`),[b,x]=(0,h.useState)({}),[S,C]=(0,h.useState)([]),[w,T]=(0,h.useState)({}),[E,D]=(0,h.useState)(!1),[O,k]=(0,h.useState)(null);(0,h.useEffect)(()=>{if(l.kind!==`ready`)return;x({...l.data.perCli||{}}),C([...l.data.fallbackOrder||[]]);let e=l.data.perCli?.codex||{};T({contextWindowSize:typeof e.contextWindowSize==`number`?e.contextWindowSize:void 0,contextWindowCompactLimit:typeof e.contextWindowCompactLimit==`number`?e.contextWindowCompactLimit:void 0})},[l]),(0,h.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`fallbackOrder`||e.startsWith(`perCli.`))&&n.remove(e)},[n]);let A=(0,h.useCallback)((e,t)=>n.set(e,t),[n]),j=(0,h.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=m(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),_(a),x({...a.perCli||{}}),C([...a.fallbackOrder||[]]),await f()},[t,n,f,_]);(0,h.useEffect)(()=>{if(c)return c(j),()=>c(null)},[c,j]);let M=(0,h.useCallback)(async()=>{if(l.kind===`ready`&&window.confirm(`Reset all active overrides?`)){D(!0),k(null);try{let e=y(l.data),n=await t.put(`/api/settings`,e);_(n&&typeof n==`object`&&`data`in n?n.data:n),await f()}catch(e){k(e instanceof Error?e.message:String(e))}finally{D(!1)}}},[t,f,_,l]);if(l.kind===`loading`)return(0,g.jsx)(a,{});if(l.kind===`offline`)return(0,g.jsx)(o,{port:e});if(l.kind===`error`)return(0,g.jsx)(s,{message:l.message});let N=l.data,P=N.perCli||{},F=Object.keys(P),I=P.codex||{},L=N.activeOverrides||{},R=Object.entries(L);return(0,g.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),j()},children:[(0,g.jsx)(i,{title:`Model defaults`,hint:`Per-CLI defaults applied when no active override is set on the Agent page.`,children:F.length===0?(0,g.jsx)(`p`,{className:`settings-empty`,children:`No CLIs registered for this instance.`}):F.map(e=>(0,g.jsx)(v,{cli:e,meta:p(e),original:P[e]||{},value:b[e]||P[e]||{},setValue:t=>x({...b,[e]:t}),setEntry:A},e))}),P.codex?(0,g.jsxs)(i,{title:`Codex context window`,hint:`Codex-only sliders. Other CLIs ignore these values.`,children:[(0,g.jsx)(d,{id:`model-codex-ctx`,label:`Context window size`,value:w.contextWindowSize??(typeof I.contextWindowSize==`number`?I.contextWindowSize:1e6),min:0,step:1e4,onChange:e=>{T({...w,contextWindowSize:e}),A(`perCli.codex.contextWindowSize`,{value:e,original:I.contextWindowSize??1e6,valid:Number.isFinite(e)&&e>=0})}}),(0,g.jsx)(d,{id:`model-codex-compact`,label:`Compact limit`,value:w.contextWindowCompactLimit??(typeof I.contextWindowCompactLimit==`number`?I.contextWindowCompactLimit:9e5),min:0,step:1e4,onChange:e=>{T({...w,contextWindowCompactLimit:e}),A(`perCli.codex.contextWindowCompactLimit`,{value:e,original:I.contextWindowCompactLimit??9e5,valid:Number.isFinite(e)&&e>=0})}})]}):null,(0,g.jsx)(i,{title:`Fallback order`,hint:`Order of CLIs used when the active CLI fails. Press Enter to add a chip; Backspace to remove the last.`,children:(0,g.jsx)(u,{id:`model-fallbackOrder`,label:`Fallback order`,value:S,onChange:e=>{C(e),A(`fallbackOrder`,{value:e,original:N.fallbackOrder||[],valid:!0})},placeholder:`cli name`})}),(0,g.jsxs)(i,{title:`Active overrides`,hint:`Per-session overrides applied on top of per-CLI defaults.`,children:[R.length===0?(0,g.jsx)(`p`,{className:`settings-empty`,children:`No active overrides.`}):(0,g.jsxs)(`table`,{className:`settings-overrides-table`,children:[(0,g.jsx)(`thead`,{children:(0,g.jsxs)(`tr`,{children:[(0,g.jsx)(`th`,{scope:`col`,children:`CLI`}),(0,g.jsx)(`th`,{scope:`col`,children:`Model`}),(0,g.jsx)(`th`,{scope:`col`,children:`Effort`})]})}),(0,g.jsx)(`tbody`,{children:R.map(([e,t])=>(0,g.jsxs)(`tr`,{children:[(0,g.jsx)(`td`,{children:e}),(0,g.jsx)(`td`,{children:(0,g.jsx)(`code`,{children:t?.model||`—`})}),(0,g.jsx)(`td`,{children:(0,g.jsx)(`code`,{children:t?.effort||`—`})})]},e))})]}),(0,g.jsxs)(`div`,{className:`settings-overrides-actions`,children:[(0,g.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void M(),disabled:E||R.length===0,children:E?`Resetting…`:`Reset overrides`}),O?(0,g.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:O}):null]})]})]})}export{y as buildResetOverridesPatch,b as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DE9SaGGd.js";import{n as t,t as n}from"./jsx-runtime-DOs-BiPY.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-DML_HneX.js";import{a as c,i as l,s as u}from"./fields-DH9JS3mb.js";import{t as d}from"./InlineWarn-CqgWEC41.js";import{t as f}from"./path-utils-CtsDDGZg.js";var p=e(t(),1),m=n(),h=[`off`,`http-only`,`full`];function g(e){return e===`off`||e===`http-only`||e===`full`}var _=[`network.bindHost`,`network.lanBypass`,`network.remoteAccess.mode`,`network.remoteAccess.trustProxies`,`network.remoteAccess.trustForwardedFor`,`network.remoteAccess.publicOriginHint`],v=[{value:`127.0.0.1`,label:`127.0.0.1 — loopback only (recommended)`},{value:`0.0.0.0`,label:`0.0.0.0 — all interfaces (LAN exposed)`}],y=[{value:`off`,label:`off — block remote requests`},{value:`http-only`,label:`http-only — read-only HTTP from remote`},{value:`full`,label:`full — HTTP + WebSocket from remote`}];function b(e){let t=(e||``).trim();if(t===``)return{kind:`empty`};let n;try{n=new URL(t)}catch{return{kind:`invalid`,reason:`Must be an absolute URL (https://… or http://…).`}}return n.protocol!==`http:`&&n.protocol!==`https:`?{kind:`invalid`,reason:`Only http:// or https:// origins are accepted.`}:n.hostname?n.pathname&&n.pathname!==`/`?{kind:`invalid`,reason:`Origin must not include a path.`}:n.search||n.hash?{kind:`invalid`,reason:`Origin must not include query or hash.`}:{kind:`valid`,origin:n.origin}:{kind:`invalid`,reason:`Origin must include a host.`}}function x(e){let t=(e.locationHost||``).toLowerCase().split(`:`)[0]||``;return t===``||t===`localhost`||t===`127.0.0.1`||t===`::1`||e.currentMode===e.nextMode?!1:e.nextMode===`off`}function S({port:e,client:t,dirty:n,registerSave:h}){let{state:S,refresh:C,setData:w}=r(t,`/api/settings`),[T,E]=(0,p.useState)({});(0,p.useEffect)(()=>{if(S.kind===`ready`){let e=S.data.network??{};E({bindHost:e.bindHost,lanBypass:e.lanBypass,remoteAccess:{...e.remoteAccess??{}}})}},[S]),(0,p.useEffect)(()=>()=>{for(let e of _)n.remove(e)},[n]);let D=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),O=(0,p.useMemo)(()=>S.kind===`ready`?S.data.network??{}:{},[S]),k=O.remoteAccess??{},A=T.remoteAccess??{},j=T.bindHost??O.bindHost??`127.0.0.1`,M=!!(T.lanBypass??O.lanBypass),N=g(A.mode)?A.mode:g(k.mode)?k.mode:`off`,P=N!==`off`,F=!!(A.trustProxies??k.trustProxies),I=!!(A.trustForwardedFor??k.trustForwardedFor),L=A.publicOriginHint??k.publicOriginHint??``,R=b(L),z=x({currentMode:g(k.mode)?k.mode:`off`,nextMode:N,locationHost:typeof window<`u`?window.location.host:``}),B=(0,p.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0||z&&typeof window<`u`&&!window.confirm(`You are accessing this dashboard over a remote origin. Saving with remote access "off" will lock you out. Continue?`))return;let r=f(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear();let o=a.network??{};E({bindHost:o.bindHost,lanBypass:o.lanBypass,remoteAccess:{...o.remoteAccess??{}}}),w(a),await C()},[t,n,z,C,w]);if((0,p.useEffect)(()=>{if(h)return h(B),()=>h(null)},[h,B]),S.kind===`loading`)return(0,m.jsx)(a,{});if(S.kind===`offline`)return(0,m.jsx)(o,{port:e});if(S.kind===`error`)return(0,m.jsx)(s,{message:S.message});let V=(T.bindHost??O.bindHost)!==(O.bindHost??`127.0.0.1`);return(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),B()},children:[(0,m.jsxs)(i,{title:`Bind`,hint:`Listening interface for /i/${e}. Changes require an instance restart.`,children:[(0,m.jsx)(l,{id:`network-bindHost`,label:`Bind host`,value:j,options:v,onChange:e=>{E({...T,bindHost:e}),D(`network.bindHost`,{value:e,original:O.bindHost??`127.0.0.1`,valid:!0})}}),j===`0.0.0.0`&&(0,m.jsxs)(d,{children:[`Listening on `,(0,m.jsx)(`code`,{children:`0.0.0.0`}),` exposes this instance's API to anyone on your LAN. Pair with auth + firewall rules.`]}),V&&(0,m.jsx)(d,{tone:`info`,children:`Restart the instance for the new bind host to take effect.`}),(0,m.jsx)(c,{id:`network-lanBypass`,label:`LAN bypass`,description:`Skip auth checks for clients on the same LAN.`,value:M,onChange:e=>{E({...T,lanBypass:e}),D(`network.lanBypass`,{value:e,original:!!O.lanBypass,valid:!0})}}),M&&(0,m.jsx)(d,{children:`LAN bypass disables auth for any client on the same network. Only enable on a trusted network.`})]}),(0,m.jsxs)(i,{title:`Remote access`,hint:`Mode controls what reaches the API from outside the loopback interface.`,children:[(0,m.jsx)(l,{id:`network-remoteAccess-mode`,label:`Remote access mode`,value:N,options:y,onChange:e=>{g(e)&&(E({...T,remoteAccess:{...A,mode:e}}),D(`network.remoteAccess.mode`,{value:e,original:g(k.mode)?k.mode:`off`,valid:!0}))}}),(0,m.jsxs)(`p`,{className:`settings-section-hint`,children:[(0,m.jsx)(`strong`,{children:`off`}),` — only loopback can talk to the API.`,` `,(0,m.jsx)(`strong`,{children:`http-only`}),` — remote can issue HTTP requests but no WebSocket upgrades. `,(0,m.jsx)(`strong`,{children:`full`}),` — HTTP + WebSocket open to remote (use with auth).`]}),z&&(0,m.jsxs)(d,{role:`alert`,children:[`Saving will close remote access while you're connected from`,(0,m.jsxs)(`code`,{children:[` `,typeof window<`u`?window.location.host:``,` `]}),`— you will be locked out. Reach the dashboard over loopback first.`]}),P&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(c,{id:`network-remoteAccess-trustProxies`,label:`Trust proxies`,description:`Honor proxy headers when computing the client origin.`,value:F,onChange:e=>{E({...T,remoteAccess:{...A,trustProxies:e}}),D(`network.remoteAccess.trustProxies`,{value:e,original:!!k.trustProxies,valid:!0})}}),(0,m.jsx)(c,{id:`network-remoteAccess-trustForwardedFor`,label:`Trust X-Forwarded-For`,description:`Use X-Forwarded-For for the client IP. Only enable behind a known proxy.`,value:I,onChange:e=>{E({...T,remoteAccess:{...A,trustForwardedFor:e}}),D(`network.remoteAccess.trustForwardedFor`,{value:e,original:!!k.trustForwardedFor,valid:!0})}}),I&&!F&&(0,m.jsx)(d,{children:`Trusting X-Forwarded-For without trusting the proxy chain lets any client spoof its IP. Enable "Trust proxies" too.`}),(0,m.jsx)(u,{id:`network-remoteAccess-publicOriginHint`,label:`Public origin hint`,value:L,placeholder:`https://your-tunnel-url`,error:R.kind===`invalid`?R.reason:null,onChange:e=>{E({...T,remoteAccess:{...A,publicOriginHint:e}});let t=b(e);D(`network.remoteAccess.publicOriginHint`,{value:t.kind===`valid`?t.origin:e,original:k.publicOriginHint??``,valid:t.kind!==`invalid`})}})]})]})]})}export{h as REMOTE_ACCESS_MODES,S as default,x as detectSelfLockoutRisk,g as isRemoteAccessMode,b as parsePublicOriginHint};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e,r as t}from"./vendor-render-984tPmpy.js";import{t as n}from"./state-xhhyIPlq.js";import{a as r,i,n as a,r as o,t as s}from"./api-tVoG39dL.js";import{_ as c,c as l,g as u,h as ee,i as te,n as d,p as ne,t as re,u as f,v as p}from"./render-DEhbfUAW.js";import{t as m}from"./preload-helper-CMqhPRCH.js";import{C as ie,S as ae,d as oe,n as h,s as se,t as g,w as ce,x as le,y as ue}from"./ui-04YlOMgn.js";import{a as _,n as de}from"./idb-cache-CjnC_K0x.js";import{a as fe,i as pe,o as me,r as he,t as ge}from"./ws-B2aJ-nD2.js";import{t as _e}from"./locale-f397XJgr.js";import{a as ve,i as ye,n as be,o as xe,r as Se,t as Ce}from"./slash-commands-khNFPOyF.js";import{a as we,r as Te}from"./constants-CYjOMbjf.js";import{A as Ee,C as De,D as Oe,F as ke,I as Ae,L as je,M as Me,N as Ne,P as Pe,R as Fe,T as Ie,_ as Le,a as Re,b as v,c as ze,d as Be,f as Ve,g as He,h as Ue,i as We,j as Ge,k as Ke,l as qe,m as Je,n as Ye,o as Xe,r as Ze,s as Qe,t as y,u as $e,v as et,w as tt,y as nt,z as rt}from"./settings-D7F-_kYG.js";import{a as it,i as at,t as ot}from"./skills-DoGJOc0D.js";import{a as st,c as ct,d as lt,f as ut,i as dt,l as ft,m as pt,n as mt,o as ht,p as gt,r as _t,s as vt,t as yt,u as bt}from"./memory-B_plvcuQ.js";var b=[];function xt(e){return/^\/compact(?:\s|$)/i.test(String(e||``).trim())?300*1e3:1e4}function St(e){return/^\/(?:orchestrate|pabcd)(?:\s|$)/i.test(String(e||``).trim())}var Ct=!1;async function wt(e=`enter`){let t=document.getElementById(`chatInput`),a=document.getElementById(`btnSend`);if(!t||!a)return;let c=e===`button`;if(a.classList.contains(`stop-mode`)&&c){o(`/api/stop`,`POST`);return}if(Ct)return;let l=t.value.trim();if(!l&&!n.attachedFiles.length)return;pe(),Ct=!0;let u=a,ee=u.disabled;u.disabled=!0;try{await De();let e=l.slice(1).trim().split(/\s+/)[0]||``,a=e.includes(`/`)||e.includes(`\\`);if(l.startsWith(`/`)&&!n.attachedFiles.length&&!a){let e=St(l);t.value=``,w(),Ce();try{let e,t,n=xt(l);if(typeof AbortSignal?.timeout==`function`)e=AbortSignal.timeout(n);else{let r=new AbortController;e=r.signal,t=setTimeout(()=>r.abort(),n)}let a=_e(),o=await r(),c=await fetch(`${s}/api/command`,{method:`POST`,headers:{"Content-Type":`application/json`,"Accept-Language":a,...o?{Authorization:`Bearer ${o}`}:{}},body:JSON.stringify({text:l,locale:a}),signal:e});t&&clearTimeout(t);let u=await c.json().catch(()=>({}));if(u?.code===`not_command`){g(`user`,l),_({role:`user`,content:l,timestamp:Date.now()}),await i(`/api/message`,`POST`,{prompt:l});return}if(!c.ok&&!u?.text)throw Error(`HTTP ${c.status}`);if(u?.code===`clear_screen`){re(),ae().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``)}u?.text&&h(d(u.text),``,u.type)}catch(e){h(p(`chat.cmd.fail`,{msg:e.message}),``,`error`)}finally{e&&he(`command`).catch(()=>{})}return}if(n.attachedFiles.length){let e=`📎 [${n.attachedFiles.map(e=>e.name).join(`, `)}] ${l}`;g(`user`,e),_({role:`user`,content:e,timestamp:Date.now()}),t.value=``,w();try{let e=(await Promise.all(n.attachedFiles.map(e=>Et(e)))).map(e=>p(`chat.file.sent`,{path:e})).join(`
|
|
3
|
-
`);l&&(e+=p(`chat.file.sentWithMsg`,{text:l})),S(),await i(`/api/message`,`POST`,{prompt:e})}catch(e){h(p(`chat.file.uploadFail`,{msg:e.message})),S()}}else{t.value=``,w();let e=await fetch(`${s}/api/message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:l})}),n=await e.json().catch(()=>({}));if(e.status===409&&n?.error===`duplicate`)return;if(!e.ok){h(`${f.error} ${d(n.error||p(`chat.requestFail`,{status:e.status}))}`,``,`error`);return}if(n.queued){let{updateQueueBadge:e}=await m(async()=>{let{updateQueueBadge:e}=await import(`./ui-D6hlMjRq.js`);return{updateQueueBadge:e}},__vite__mapDeps([0]));e(n.pending||1)}else n.continued?(g(`user`,l),_({role:`user`,content:l,timestamp:Date.now()}),h(p(`chat.continue`))):(g(`user`,l),_({role:`user`,content:l,timestamp:Date.now()}))}}finally{Ct=!1,u.disabled=ee}}function Tt(e){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),wt(`enter`))}async function Et(e){let t=await fetch(`${s}/api/upload`,{method:`POST`,headers:{"X-Filename":encodeURIComponent(e.name)},body:e});if(!t.ok)throw Error(`upload failed`);return(await t.json()).path}function x(e){for(let t of e)n.attachedFiles.some(e=>e.name===t.name)||n.attachedFiles.push(t);C(),document.getElementById(`chatInput`)?.focus()}function Dt(e){n.attachedFiles.splice(e,1),C()}function S(){b.forEach(e=>URL.revokeObjectURL(e)),b=[],n.attachedFiles=[],C();let e=document.getElementById(`fileInput`);e&&(e.value=``)}function C(){let e=document.getElementById(`filePreview`),t=document.getElementById(`filePreviewList`);if(e){if(b.forEach(e=>URL.revokeObjectURL(e)),b=[],!n.attachedFiles.length){e.classList.remove(`visible`),t&&(t.innerHTML=``);return}e.classList.add(`visible`),t&&(t.innerHTML=n.attachedFiles.map((e,t)=>{let n=(e.size/1024).toFixed(1),r=e.type.startsWith(`image/`),i=``;if(r){let t=URL.createObjectURL(e);b.push(t),i=`<img src="${t}" class="file-chip-thumb" alt="">`}return`<div class="file-chip">
|
|
4
|
-
${i}
|
|
5
|
-
<span class="file-chip-name">${f.paperclip} ${d(e.name)} (${n}KB)</span>
|
|
6
|
-
<button class="file-chip-remove" data-file-idx="${t}" title="Remove">${f.close}</button>
|
|
7
|
-
</div>`}).join(``))}}async function Ot(){re(),ae().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``);let{cleanupToolActivity:t}=await m(async()=>{let{cleanupToolActivity:e}=await import(`./ui-D6hlMjRq.js`);return{cleanupToolActivity:e}},__vite__mapDeps([0]));t(),de().catch(()=>{}),pe()}var kt=0;function At(e){kt||=requestAnimationFrame(()=>{kt=0,e.style.height=`auto`,e.style.height=e.scrollHeight+`px`})}function jt(){let e=document.getElementById(`chatInput`);e&&e.addEventListener(`input`,()=>At(e))}function w(){let e=document.getElementById(`chatInput`);e&&(e.style.height=`auto`)}function Mt(){let e=document.querySelector(`.chat-area`),t=document.getElementById(`dragOverlay`);if(!e||!t)return;let n=0;e.addEventListener(`dragenter`,e=>{e.preventDefault(),n++,t.classList.add(`visible`)}),e.addEventListener(`dragleave`,e=>{e.preventDefault(),n--,n<=0&&(n=0,t.classList.remove(`visible`))}),e.addEventListener(`dragover`,e=>e.preventDefault()),e.addEventListener(`drop`,e=>{e.preventDefault(),n=0,t.classList.remove(`visible`);let r=[...e.dataTransfer?.files||[]];r.length&&x(r)}),document.getElementById(`fileInput`)?.addEventListener(`change`,e=>{let t=e.target,n=[...t.files||[]];n.length&&x(n),t.value=``}),document.addEventListener(`paste`,e=>{let t=e.clipboardData?.items;if(!t)return;let n=[];for(let e of t){if(e.kind!==`file`)continue;let t=e.getAsFile();if(t)if(!t.name||t.name===`image.png`){let e=new Date().toISOString().replace(/[:.]/g,`-`),r=t.type.split(`/`)[1]||`png`,i=new File([t],`pasted-${e}.${r}`,{type:t.type});n.push(i)}else n.push(t)}n.length&&(e.preventDefault(),x(n))})}async function Nt(e,t,r){let a=document.getElementById(`chatInput`),o=a?.value.trim()||``,c=[...n.attachedFiles],l=[p(`chat.voice.label`)];c.length&&l.push(`📎 [${c.map(e=>e.name).join(`, `)}]`),o&&l.push(o),g(`user`,l.join(` `)),_({role:`user`,content:l.join(` `),timestamp:Date.now()}),a&&o&&(a.value=``,w()),c.length&&S();try{let n=await fetch(`${s}/api/voice`,{method:`POST`,headers:{"Content-Type":r,"X-Voice-Ext":t,"X-STT-Only":`true`},body:e});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error||`HTTP ${n.status}`)}let a=await n.json().catch(()=>null);if(!a?.text)throw Error(`Empty STT result`);h(`${f.mic} STT (${d(a.engine||``)}, ${a.elapsed?.toFixed(1)}s): "${d(a.text.slice(0,100))}"`,``,`info`);let l=[];c.length&&(l=await Promise.all(c.map(e=>Et(e))));let u=[];for(let e of l)u.push(p(`chat.file.sent`,{path:e}));u.push(`🎤 ${a.text}`),o&&u.push(o),await i(`/api/message`,`POST`,{prompt:u.join(`
|
|
8
|
-
`)})}catch(e){h(p(`voice.sttFail`,{msg:e.message}),``,`error`)}}var Pt={sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6},Ft={jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12};function It(e){let t=typeof e==`string`?e.trim():``;if(t)try{return new Intl.DateTimeFormat(`en-US`,{timeZone:t}).format(new Date),t}catch{return}}function Lt(e){let t=e&&typeof e==`object`?e:{},n=t.kind,r=typeof t.timeZone==`string`?t.timeZone.trim():``,i=It(t.timeZone);if(r&&!i)return{ok:!1,code:`invalid_timezone`,error:`invalid timeZone "${r}"`};if(n===`cron`){let e=typeof t.cron==`string`?t.cron.trim().replace(/\s+/g,` `):``;if(!e)return{ok:!1,code:`invalid_cron`,error:`cron expression required`};let n=Rt(e);return n?{ok:!1,code:`invalid_cron`,error:n}:{ok:!0,schedule:i?{kind:`cron`,cron:e,timeZone:i}:{kind:`cron`,cron:e}}}if(n==null||n===`every`){let e=typeof t.minutes==`number`?t.minutes:Number(t.minutes);if(!Number.isInteger(e)||e<1)return{ok:!1,code:`invalid_minutes`,error:`minutes must be an integer >= 1`};let n=Math.max(1,Math.floor(e));return{ok:!0,schedule:i?{kind:`every`,minutes:n,timeZone:i}:{kind:`every`,minutes:n}}}return{ok:!1,code:`invalid_kind`,error:`invalid heartbeat schedule kind "${String(n)}"`}}function Rt(e){try{let[t,n,r,i,a]=zt(e);return T(t,{min:0,max:59}),T(n,{min:0,max:23}),T(r,{min:1,max:31}),T(i,{min:1,max:12,aliases:Ft}),T(a,{min:0,max:7,aliases:Pt,normalize:Ht}),null}catch(e){return e.message}}function zt(e){let t=String(e||``).trim().replace(/\s+/g,` `).split(` `);if(t.length!==5)throw Error(`cron must have 5 fields, got ${t.length}`);return t}function T(e,t){for(let n of e.split(`,`))Bt(n.trim(),t)}function Bt(e,t){if(!e)throw Error(`empty cron segment`);let n=e;if(e.includes(`/`)){let[t,r,...i]=e.split(`/`);if(!t||!r||i.length>0)throw Error(`invalid cron step segment "${e}"`);n=t,Vt(r,`invalid cron step "${r}"`)}if(n!==`*`){if(n.includes(`-`)){let[e,r,...i]=n.split(`-`);if(!e||!r||i.length>0||E(e,t)>E(r,t))throw Error(`invalid cron range "${n}"`);return}E(n,t)}}function E(e,t){let n=e.trim().toLowerCase(),r=t.aliases?.[n]??Number(n);if(!Number.isInteger(r))throw Error(`invalid cron value "${e}"`);let i=t.normalize?t.normalize(r):r;if(!Ut(i,t.min,t.max))throw Error(`cron value "${e}" out of range ${t.min}-${t.max}`);return i}function Vt(e,t){let n=Number(e);if(!Number.isInteger(n)||n<=0)throw Error(t);return n}function Ht(e){return e===7?0:e}function Ut(e,t,n){return e>=t&&e<=n}async function Wt(){n.heartbeatJobs=((await a(`/api/heartbeat`))?.jobs||[]).map(k),n.heartbeatErrors=j(n.heartbeatJobs),D(),document.getElementById(`heartbeatModal`)?.classList.add(`open`)}function Gt(e){e&&e.target!==e.currentTarget||document.getElementById(`heartbeatModal`)?.classList.remove(`open`)}function D(){let e=document.getElementById(`hbJobsList`);if(!e)return;let t=n.heartbeatJobs.map(k);n.heartbeatJobs=t,n.heartbeatErrors=j(t),t.length===0?e.innerHTML=`<p style="color:var(--text-dim);font-size:12px;text-align:center">${p(`hb.empty`)}</p>`:e.innerHTML=t.map((e,t)=>{let r=Xt(e.schedule),i=r.kind===`cron`,a=n.heartbeatErrors[e.id],o=a||nn(r),s=a?`hb-schedule-meta hb-error`:`hb-schedule-meta hb-help`,c=i?`<input type="text" value="${d(r.cron)}" placeholder="${d(p(`hb.cronPlaceholder`))}"
|
|
9
|
-
data-hb-cron="${t}">`:`<input type="number" value="${r.minutes}" min="1" data-hb-minutes="${t}">`,l=i?`<span class="hb-chip">${d(p(`hb.cronLabel`))}</span>`:`<span class="hb-chip">${d(p(`hb.minutesLabel`))}</span>`;return`
|
|
10
|
-
<div class="hb-job-card">
|
|
11
|
-
<div class="hb-job-header">
|
|
12
|
-
<input type="text" value="${d(String(e.name||``))}" placeholder="${d(p(`hb.name`))}"
|
|
13
|
-
data-hb-name="${t}">
|
|
14
|
-
<button class="hb-toggle ${e.enabled?`on`:`off`}"
|
|
15
|
-
data-hb-toggle="${t}" aria-label="${d(String(e.name||`job`)+` toggle`)}"></button>
|
|
16
|
-
<button class="hb-del" data-hb-remove="${t}">${f.close}</button>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="hb-job-schedule">
|
|
19
|
-
<select data-hb-kind="${t}">
|
|
20
|
-
<option value="every"${i?``:` selected`}>${d(p(`hb.kindEvery`))}</option>
|
|
21
|
-
<option value="cron"${i?` selected`:``}>${d(p(`hb.kindCron`))}</option>
|
|
22
|
-
</select>
|
|
23
|
-
${c}
|
|
24
|
-
${l}
|
|
25
|
-
<input type="text" value="${d(r.timeZone||``)}" placeholder="${d($t())}"
|
|
26
|
-
data-hb-timezone="${t}">
|
|
27
|
-
</div>
|
|
28
|
-
<p class="${s}">${d(o)}</p>
|
|
29
|
-
<textarea class="hb-prompt" rows="2" placeholder="${d(p(`hb.prompt`))}"
|
|
30
|
-
data-hb-prompt="${t}">${d(String(e.prompt||``))}</textarea>
|
|
31
|
-
</div>
|
|
32
|
-
`}).join(``);let r=t.filter(e=>e.enabled).length,i=document.getElementById(`hbSidebarBtn`);i&&(i.innerHTML=`${f.heartPulse} Heartbeat (${r})`)}function Kt(){n.heartbeatJobs.push({id:`hb_`+Date.now(),name:``,enabled:!0,schedule:Qt({kind:`every`,minutes:5}),prompt:``}),D(),O()}function qt(e){n.heartbeatJobs.splice(e,1),D(),O()}function Jt(e){let t=n.heartbeatJobs[e];t&&(t.enabled=!t.enabled,D(),O())}async function O(){let e=n.heartbeatJobs.map(k);if(n.heartbeatJobs=e,n.heartbeatErrors=j(e),Object.keys(n.heartbeatErrors).length>0){D();return}let t=await i(`/api/heartbeat`,`PUT`,{jobs:e});t?.jobs&&(n.heartbeatJobs=t.jobs.map(k),n.heartbeatErrors=j(n.heartbeatJobs),D())}async function Yt(){try{let e=((await a(`/api/heartbeat`))?.jobs||[]).map(k).filter(e=>e.enabled).length,t=document.getElementById(`hbSidebarBtn`);t&&(t.innerHTML=`${f.heartPulse} Heartbeat (${e})`)}catch{}}function k(e){return{id:String(e.id||`hb_${Date.now()}`),name:String(e.name||``),enabled:e.enabled!==!1,schedule:Xt(e.schedule),prompt:String(e.prompt||``)}}function Xt(e){let t=Zt(e?.timeZone);if(e?.kind===`cron`){let n=typeof e.cron==`string`?e.cron.trim().replace(/\s+/g,` `):`0 9 * * *`;return t?{kind:`cron`,cron:n,timeZone:t}:{kind:`cron`,cron:n}}let n=typeof e?.minutes==`number`&&Number.isFinite(e.minutes)&&e.minutes>0?Math.max(1,Math.floor(e.minutes)):5;return t?{kind:`every`,minutes:n,timeZone:t}:{kind:`every`,minutes:n}}function Zt(e){return(typeof e==`string`?e.trim():``)||void 0}function Qt(e){let t=A();return t?{...e,timeZone:t}:e}function A(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}catch{return}}function $t(){let e=A();return e?`${p(`hb.timezoneAuto`)} ${e}`:p(`hb.timezoneAuto`)}function j(e){let t={};for(let n of e){let e=en(n);e&&(t[n.id]=e)}return t}function en(e){let t=Lt(e.schedule);return t.ok?null:tn(t.code,t.error)}function tn(e,t){switch(e){case`invalid_cron`:return p(`hb.invalidCron`);case`invalid_timezone`:return p(`hb.invalidTimeZone`);case`invalid_minutes`:return p(`hb.invalidMinutes`);default:return t||p(`hb.invalidSchedule`)}}function nn(e){let t=e.timeZone||A()||`Asia/Seoul`;return e.kind===`cron`?p(`hb.scheduleHintCron`,{cron:`0 9 * * *`,timeZone:t}):p(`hb.scheduleHintEvery`,{minutes:e.minutes,timeZone:t})}var M=`sidebarState`,N=900,rn=768;function P(){return window.innerWidth<=rn}function an(){document.body.classList.remove(`left-expanded`,`right-expanded`)}function on(e){let t=`${e}-expanded`,n=e===`left`?`right-expanded`:`left-expanded`,r=!document.body.classList.contains(t);document.body.classList.remove(n),document.body.classList.toggle(t,r)}function sn(){let e={};try{e=JSON.parse(localStorage.getItem(M)||`{}`)}catch{}e.left&&document.body.classList.add(`left-collapsed`),e.right&&document.body.classList.add(`right-collapsed`);let t=P();document.getElementById(`toggleLeft`)?.addEventListener(`click`,cn),document.getElementById(`toggleRight`)?.addEventListener(`click`,ln),window.addEventListener(`resize`,()=>{let e=P();if(window.innerWidth>N){an();let e={};try{e=JSON.parse(localStorage.getItem(M)||`{}`)}catch{}document.body.classList.toggle(`left-collapsed`,!!e.left),document.body.classList.toggle(`right-collapsed`,!!e.right)}else document.body.classList.remove(`left-collapsed`,`right-collapsed`),e!==t&&an();t=e,I()}),window.innerWidth<=N&&(document.body.classList.remove(`left-collapsed`,`right-collapsed`),P()&&an()),I()}function F(){return window.innerWidth<=N}function cn(){F()?on(`left`):document.body.classList.toggle(`left-collapsed`),fn(),I()}function ln(){F()?on(`right`):document.body.classList.toggle(`right-collapsed`),fn(),I()}function un(){return F()?document.body.classList.contains(`left-expanded`):!document.body.classList.contains(`left-collapsed`)}function dn(){return F()?document.body.classList.contains(`right-expanded`):!document.body.classList.contains(`right-collapsed`)}function I(){let e=document.getElementById(`toggleLeft`),t=document.getElementById(`toggleRight`);e&&(e.innerHTML=un()?f.chevronLeft:f.chevronRight),t&&(t.innerHTML=dn()?f.chevronRight:f.chevronLeft)}function fn(){localStorage.setItem(M,JSON.stringify({left:document.body.classList.contains(`left-collapsed`),right:document.body.classList.contains(`right-collapsed`)}))}var pn=`theme`,L=null;function mn(e){return e===`dark`||e===`light`}function hn(n){let r=n===`light`?e:t;L||(L=document.createElement(`style`),L.id=`hljsTheme`,document.head.appendChild(L)),L.textContent=r}function gn(){let e=yn(),t=localStorage.getItem(pn),n=window.matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`;vn(e||t||n),document.getElementById(`toggleTheme`)?.addEventListener(`click`,_n),window.addEventListener(`message`,xn)}function _n(){let e=(document.documentElement.getAttribute(`data-theme`)||`dark`)===`dark`?`light`:`dark`;vn(e),localStorage.setItem(pn,e)}function vn(e){document.documentElement.setAttribute(`data-theme`,e);let t=document.getElementById(`toggleTheme`);t&&t.classList.toggle(`is-light`,e===`light`),hn(e),le(),l()}function yn(){let e=new URLSearchParams(window.location.search).get(`jawTheme`);return mn(e)?e:null}function bn(e){if(e===window.location.origin)return!0;try{let t=new URL(e).hostname;return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`}catch{return!1}}function xn(e){if(window.parent===window||e.source!==window.parent||!bn(e.origin))return;let t=e.data;!t||t.type!==`jaw-preview-theme-sync`||!mn(t.theme)||vn(t.theme)}var Sn=50,Cn=30,wn=80,Tn=500,R=null,En=!1;function Dn(){if(En||!(`ontouchstart`in window))return;En=!0;let e=document.querySelector(`.chat-area`);e&&(e.addEventListener(`touchstart`,On,{passive:!0}),e.addEventListener(`touchend`,kn,{passive:!0}))}function On(e){let t=e.touches[0],n=window.innerWidth,r=null;t.clientX<Cn?r=`left`:t.clientX>n-Cn&&(r=`right`),R={startX:t.clientX,startY:t.clientY,startTime:Date.now(),isEdge:r}}function kn(e){if(!R)return;let t=e.changedTouches[0],n=t.clientX-R.startX,r=Math.abs(t.clientY-R.startY),i=Date.now()-R.startTime,a=R;R=null,!(r>wn||i>Tn||Math.abs(n)<Sn)&&(n>0&&a.isEdge===`left`&&cn(),n<0&&a.isEdge===`right`&&ln())}var An=!1,z=null,B=[],V=null,jn=null,Mn=0;function Nn(){if(typeof MediaRecorder>`u`)return``;for(let e of[`audio/webm;codecs=opus`,`audio/mp4`,`audio/ogg;codecs=opus`])if(MediaRecorder.isTypeSupported(e))return e;return``}function Pn(e){let t=e;switch(t.name){case`NotAllowedError`:return p(`voice.micDenied`);case`NotFoundError`:return p(`voice.micNotFound`);case`NotReadableError`:case`AbortError`:return p(`voice.micBusy`);default:return t instanceof TypeError||!navigator.mediaDevices?p(`voice.httpsRequired`):p(`voice.micDenied`)}}async function Fn(){if(n.isRecording)return;if(typeof MediaRecorder>`u`||!navigator.mediaDevices?.getUserMedia){h(p(`voice.unsupported`),``,`error`);return}try{V=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(e){h(Pn(e),``,`error`);return}let e=Nn();z=new MediaRecorder(V,e?{mimeType:e}:{}),B=[],z.ondataavailable=e=>{e.data.size>0&&B.push(e.data)},z.onerror=()=>{In(),h(p(`voice.interrupted`),``,`error`)},z.onstop=async()=>{if(An){B=[],zn(),An=!1;return}let t=z?.mimeType||e||`audio/webm`,n=t.includes(`mp4`)?`.m4a`:t.includes(`ogg`)?`.ogg`:`.webm`,r=new Blob(B,{type:t});if(B=[],zn(),r.size>20*1024*1024){h(p(`voice.tooLarge`),``,`error`);return}if(r.size<1e3){h(p(`voice.tooShort`),``,`error`);return}await Nt(r,n,t)},z.start(),n.isRecording=!0,Mn=Date.now(),Hn(!0),Bn()}function In(){!n.isRecording||!z||(z.state===`recording`&&z.stop(),n.isRecording=!1,Vn(),Hn(!1))}function Ln(){!n.isRecording||!z||(An=!0,z.state===`recording`&&z.stop(),n.isRecording=!1,Vn(),Hn(!1))}function Rn(){n.isRecording?In():Fn()}function zn(){V?.getTracks().forEach(e=>e.stop()),V=null}function Bn(){let e=document.getElementById(`voiceTimer`);e&&(e.style.display=`inline`,jn=setInterval(()=>{let t=Math.floor((Date.now()-Mn)/1e3);e.textContent=`${String(Math.floor(t/60)).padStart(2,`0`)}:${String(t%60).padStart(2,`0`)}`},500))}function Vn(){jn&&=(clearInterval(jn),null);let e=document.getElementById(`voiceTimer`);e&&(e.style.display=`none`,e.textContent=`00:00`)}function Hn(e){let t=document.getElementById(`btnVoice`),n=document.getElementById(`btnVoiceCancel`);t&&(t.classList.toggle(`recording`,e),t.innerHTML=e?f.stop:f.mic,t.title=p(e?`voice.stop`:`voice.start`)),n&&(n.style.display=e?`inline-block`:`none`)}var Un={activeCli:H(`activeCli`,2,1,2),model:H(`model`,2,1,1),effort:H(`effort`,2,1,1),permissions:H(`permissions`,2,1,1),flushAgent:H(`flushAgent`,2,1,1),employees:H(`employees`,3,3,2),skills:H(`skills`,2,1,1),activeChannel:H(`activeChannel`,2,1,1),telegram:H(`telegram`,2,1,2),discord:H(`discord`,2,1,2),fallbackOrder:H(`fallbackOrder`,2,1,1),mcp:H(`mcp`,2,1,1),memory:H(`memory`,2,1,2),stt:H(`stt`,2,1,1),promptTemplates:H(`promptTemplates`,2,1,1)};function Wn(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(Un,e)}function H(e,t,n,r,i=2,a=1){return{titleKey:`help.${e}.title`,introKey:`help.${e}.intro`,effectKey:`help.${e}.effect`,useWhenKeys:U(`help.${e}.use`,t),howToKeys:U(`help.${e}.howTo`,i),exampleKeys:U(`help.${e}.example`,a),avoidWhenKeys:U(`help.${e}.avoid`,n),relatedKeys:U(`help.${e}.related`,r)}}function U(e,t){return Array.from({length:t},(t,n)=>`${e}.${n+1}`)}var Gn=!1,W=null,G=null,K=null,q=null,Kn=null,J=!1;function qn(){Gn||(Gn=!0,document.addEventListener(`click`,Yn),document.addEventListener(`keydown`,Xn,!0))}function Jn(e,t=null){let n=Un[e];if(!n){console.warn(`[help-dialog] unknown topic:`,e);return}Zn(),Kn=t,Qn(n),W?.classList.add(`open`),W?.setAttribute(`aria-hidden`,`false`),J=!0,requestAnimationFrame(()=>q?.focus())}function Y(){if(!J)return;W?.classList.remove(`open`),W?.setAttribute(`aria-hidden`,`true`),J=!1;let e=Kn;Kn=null,e?.focus()}function Yn(e){let t=e.target?.closest(`[data-help-topic]`);if(!t)return;let n=t.getAttribute(`data-help-topic`);if(!Wn(n)){console.warn(`[help-dialog] invalid topic:`,n);return}e.preventDefault(),Jn(n,t)}function Xn(e){!J||e.key!==`Escape`||(e.preventDefault(),e.stopImmediatePropagation(),Y())}function Zn(){if(W&&G&&K&&q)return;W=document.createElement(`div`),W.id=`helpDialog`,W.className=`modal-overlay help-dialog-overlay`,W.setAttribute(`role`,`presentation`),W.setAttribute(`aria-hidden`,`true`),W.addEventListener(`click`,e=>{e.target===W&&Y()});let e=document.createElement(`div`);e.className=`modal-box help-dialog-box`,e.setAttribute(`role`,`dialog`),e.setAttribute(`aria-modal`,`true`),e.setAttribute(`aria-labelledby`,`helpDialogTitle`),e.addEventListener(`click`,e=>e.stopPropagation());let t=document.createElement(`div`);t.className=`modal-header help-dialog-header`,G=document.createElement(`span`),G.id=`helpDialogTitle`,q=document.createElement(`button`),q.type=`button`,q.className=`btn-modal-close help-dialog-close`,q.setAttribute(`aria-label`,p(`help.close`)),q.textContent=`x`,q.addEventListener(`click`,()=>Y()),K=document.createElement(`div`),K.className=`help-dialog-body`;let n=document.createElement(`div`);n.className=`modal-footer help-dialog-footer`;let r=document.createElement(`button`);r.type=`button`,r.className=`btn-save help-dialog-done`,r.textContent=p(`help.close`),r.addEventListener(`click`,()=>Y()),t.append(G,q),n.append(r),e.append(t,K,n),W.append(e),document.body.append(W)}function Qn(e){!G||!K||!q||(G.textContent=p(e.titleKey),q.setAttribute(`aria-label`,p(`help.close`)),K.replaceChildren(),$n(p(`help.section.what`),p(e.introKey)),$n(p(`help.section.effect`),p(e.effectKey),`help-effect-text`),X(p(`help.section.useWhen`),e.useWhenKeys),X(p(`help.section.howTo`),e.howToKeys),X(p(`help.section.example`),e.exampleKeys,!1,`help-example-list`),e.avoidWhenKeys?.length&&X(p(`help.section.avoidWhen`),e.avoidWhenKeys),e.relatedKeys?.length&&X(p(`help.section.related`),e.relatedKeys,!0))}function $n(e,t,n){if(!K)return;let r=er(e),i=document.createElement(`p`);n&&(i.className=n),i.textContent=t,r.append(i),K.append(r)}function X(e,t,n=!1,r){if(!K)return;let i=er(e),a=document.createElement(`ul`);a.className=r??(n?`help-related-list`:`help-dialog-list`);for(let e of t){let t=document.createElement(`li`);t.textContent=p(e),a.append(t)}i.append(a),K.append(i)}function er(e){let t=document.createElement(`section`);t.className=`help-dialog-section`;let n=document.createElement(`h3`);return n.textContent=e,t.append(n),t}var Z=`jaw:stale-bundle-reload-pending`;function tr(e){let t=typeof e==`string`?e:e instanceof Error||typeof e?.message==`string`?e.message:``;if(!/(failed to fetch dynamically imported module|error loading dynamically imported module|importing a module script failed|chunkloaderror)/i.test(t))return!1;console.warn(`[stale-bundle] detected dynamic import failure:`,t);try{if(sessionStorage.getItem(Z)===`1`)return!0;sessionStorage.setItem(Z,`1`)}catch{}let n=()=>window.location.reload();return`serviceWorker`in navigator?(navigator.serviceWorker.getRegistration().then(e=>e?.update()).catch(()=>{}).finally(n),!0):(n(),!0)}window.addEventListener(`unhandledrejection`,e=>{if(tr(e.reason)){e.preventDefault();return}console.error(`[unhandled]`,e.reason),e.preventDefault()}),window.addEventListener(`error`,e=>{if(tr(e.error||e.message)){e.preventDefault();return}console.error(`[error]`,e.message,e.filename,e.lineno)});var{loadEmployees:nr,addEmployee:rr,deleteEmployee:ir,updateEmployee:Q,onEmpCliChange:ar,onEmpRoleChange:or}=await m(async()=>{let{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}=await import(`./employees-Bbabvbyx.js`);return{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}},__vite__mapDeps([0]));document.getElementById(`btnSend`)?.addEventListener(`click`,()=>{wt(`button`)});var sr=document.getElementById(`chatInput`);sr?.addEventListener(`keydown`,e=>{Se(e)||Tt(e)});var $=0;sr?.addEventListener(`input`,e=>{e.isComposing||($&&cancelAnimationFrame($),$=requestAnimationFrame(()=>{xe(e.target?.value||``),$=0}))}),sr?.addEventListener(`cmd-execute`,()=>{wt(`cmd-execute`)}),document.getElementById(`cmdDropdown`)?.addEventListener(`click`,be),document.addEventListener(`click`,ye),me(),document.getElementById(`filePreviewClear`)?.addEventListener(`click`,S),document.getElementById(`filePreviewList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-file-idx]`);t&&Dt(+(t.dataset.fileIdx||`0`))}),document.querySelector(`.btn-attach`)?.addEventListener(`click`,()=>{document.getElementById(`fileInput`)?.click()}),document.getElementById(`btnVoice`)?.addEventListener(`click`,()=>Rn()),document.getElementById(`btnVoiceCancel`)?.addEventListener(`click`,()=>Ln()),document.getElementById(`memorySidebarBtn`)?.addEventListener(`click`,dt),document.getElementById(`btnClearChat`)?.addEventListener(`click`,Ot),document.getElementById(`hbSidebarBtn`)?.addEventListener(`click`,Wt),document.getElementById(`langSelect`)?.addEventListener(`change`,async e=>{let t=e.target.value;[`ko`,`en`,`zh`,`ja`].includes(t)&&(await c(t),n.ws&&n.ws.close())}),document.querySelector(`.tab-bar`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`.tab-btn`);if(!t)return;let n=[...t.parentElement?.children||[]].filter(e=>e.classList.contains(`tab-btn`)).indexOf(t),r=[`agents`,`skills`,`settings`];r[n]&&ue(r[n],t)}),document.querySelector(`.sidebar-save-bar .btn-save`)?.addEventListener(`click`,se),document.getElementById(`selCli`)?.addEventListener(`change`,()=>Le()),document.getElementById(`selModel`)?.addEventListener(`change`,()=>nt()),document.getElementById(`selEffort`)?.addEventListener(`change`,()=>nt()),document.getElementById(`flushCli`)?.addEventListener(`change`,()=>et()),document.getElementById(`flushModel`)?.addEventListener(`change`,()=>et()),document.querySelector(`[data-action="addEmployee"]`)?.addEventListener(`click`,rr),document.getElementById(`employeesList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-emp-delete]`);if(t){ir(t.dataset.empDelete||``);return}}),document.getElementById(`employeesList`)?.addEventListener(`change`,e=>{let t=e.target,n=t.closest(`[data-emp-name]`);if(n){Q(n.dataset.empName||``,{name:t.value});return}let r=t.closest(`[data-emp-cli]`);if(r){ar(r.dataset.empCli||``,t.value);return}let i=t.closest(`[data-emp-model]`);if(i){if(t.value===`__custom__`){let e=prompt(p(`model.promptInput`));if(e?.trim()){let n=document.createElement(`option`);n.value=e.trim(),n.textContent=e.trim();let r=t.querySelector(`option[value="__custom__"]`);r&&t.insertBefore(n,r),t.value=e.trim(),Q(i.dataset.empModel||``,{model:e.trim()})}else t.value=`default`}else Q(i.dataset.empModel||``,{model:t.value});return}let a=t.closest(`[data-emp-role]`);if(a){or(a.dataset.empRole||``,t.value);return}let o=t.closest(`[data-emp-custom]`);if(o){Q(o.dataset.empCustom||``,{role:t.value});return}}),document.getElementById(`skillsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-skill-id]`);t&&it(t.dataset.skillId||``,t.dataset.skillEnabled===`true`)}),document.querySelector(`#tabSkills`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`.skill-filter`);t&&ot(t.dataset.filter||`all`,t)}),document.getElementById(`skillSearchInput`)?.addEventListener(`input`,e=>{at(e.target.value)}),document.querySelector(`[data-action="openPrompt"]`)?.addEventListener(`click`,Ze),document.getElementById(`tgOff`)?.addEventListener(`click`,()=>Fe(!1)),document.getElementById(`tgOn`)?.addEventListener(`click`,()=>Fe(!0)),document.getElementById(`tgForwardOff`)?.addEventListener(`click`,()=>je(!1)),document.getElementById(`tgForwardOn`)?.addEventListener(`click`,()=>je(!0)),document.getElementById(`tgMentionOff`)?.addEventListener(`click`,()=>rt(!1)),document.getElementById(`tgMentionOn`)?.addEventListener(`click`,()=>rt(!0)),document.getElementById(`tgToken`)?.addEventListener(`change`,Ae),document.getElementById(`tgChatIds`)?.addEventListener(`change`,Ae),document.getElementById(`chTelegram`)?.addEventListener(`click`,()=>Ee(`telegram`)),document.getElementById(`chDiscord`)?.addEventListener(`click`,()=>Ee(`discord`)),document.getElementById(`dcOff`)?.addEventListener(`click`,()=>Me(!1)),document.getElementById(`dcOn`)?.addEventListener(`click`,()=>Me(!0)),document.getElementById(`dcForwardOff`)?.addEventListener(`click`,()=>Pe(!1)),document.getElementById(`dcForwardOn`)?.addEventListener(`click`,()=>Pe(!0)),document.getElementById(`dcAllowBotsOff`)?.addEventListener(`click`,()=>Ne(!1)),document.getElementById(`dcAllowBotsOn`)?.addEventListener(`click`,()=>Ne(!0)),document.getElementById(`dcMentionOff`)?.addEventListener(`click`,()=>ke(!1)),document.getElementById(`dcMentionOn`)?.addEventListener(`click`,()=>ke(!0)),document.getElementById(`dcToken`)?.addEventListener(`change`,Ge),document.getElementById(`dcGuildId`)?.addEventListener(`change`,Ge),document.getElementById(`dcChannelIds`)?.addEventListener(`change`,Ge),document.getElementById(`fallbackOrderList`)?.addEventListener(`change`,Ke);function cr(e){let t=document.getElementById(`codexFastOn`),n=document.getElementById(`codexFastOff`);t&&n&&(t.classList.toggle(`active`,e),n.classList.toggle(`active`,!e)),v()}document.getElementById(`codexFastOn`)?.addEventListener(`click`,()=>cr(!0)),document.getElementById(`codexFastOff`)?.addEventListener(`click`,()=>cr(!1));function lr(e){let t=document.getElementById(`codexCtxOn`),n=document.getElementById(`codexCtxOff`),r=document.getElementById(`codexCtxValues`);t&&n&&(t.classList.toggle(`active`,e),n.classList.toggle(`active`,!e)),r&&(r.style.display=e?``:`none`),v()}document.getElementById(`codexCtxOn`)?.addEventListener(`click`,()=>lr(!0)),document.getElementById(`codexCtxOff`)?.addEventListener(`click`,()=>lr(!1)),document.getElementById(`codexCtxWindow`)?.addEventListener(`change`,v),document.getElementById(`codexCtxCompact`)?.addEventListener(`change`,v);function ur(e){let t=document.getElementById(`claude1mOn`),n=document.getElementById(`claude1mOff`),r=document.getElementById(`modelClaude`),i=e;if(r){let t=r.value||``;if(e&&!t.endsWith(`[1m]`)){let e=t+`[1m]`;Array.from(r.options).some(t=>t.value===e)?r.value=e:i=!1}else if(!e&&t.endsWith(`[1m]`)){let e=t.replace(/\[1m\]$/,``);Array.from(r.options).some(t=>t.value===e)?r.value=e:i=!0}else i=t.endsWith(`[1m]`)}t&&n&&(t.classList.toggle(`active`,i),n.classList.toggle(`active`,!i)),v()}document.getElementById(`claude1mOn`)?.addEventListener(`click`,()=>ur(!0)),document.getElementById(`claude1mOff`)?.addEventListener(`click`,()=>ur(!1));function dr(){for(let e of Te()){let t=e.charAt(0).toUpperCase()+e.slice(1),n=document.getElementById(`model`+t);n&&n.addEventListener(`change`,function(){Je(e,this)});let r=document.getElementById(`customModel`+t);r&&r.addEventListener(`change`,function(){Ve(e,this)});let i=document.getElementById(`effort`+t);i&&i.addEventListener(`change`,v)}}document.querySelector(`[data-action="syncMcp"]`)?.addEventListener(`click`,Oe),document.querySelector(`[data-action="installMcp"]`)?.addEventListener(`click`,Ie),document.querySelector(`[data-action="refreshCli"]`)?.addEventListener(`click`,()=>qe(!0)),document.getElementById(`cliStatusInterval`)?.addEventListener(`change`,function(){Be(this.value)}),document.getElementById(`promptModal`)?.addEventListener(`click`,e=>y(e)),document.querySelector(`#promptModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closePrompt"]`)?.addEventListener(`click`,()=>y()),document.querySelector(`[data-action="cancelPrompt"]`)?.addEventListener(`click`,()=>y()),document.querySelector(`[data-action="savePrompt"]`)?.addEventListener(`click`,Re),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&!n.isRecording&&y()}),document.querySelector(`[data-action="openTemplates"]`)?.addEventListener(`click`,We),document.querySelector(`[data-action="saveTemplate"]`)?.addEventListener(`click`,Xe),document.querySelector(`[data-action="closeTemplate"]`)?.addEventListener(`click`,()=>Ye()),document.getElementById(`templateModal`)?.addEventListener(`click`,e=>Ye(e)),document.querySelector(`#templateModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.getElementById(`templateBack`)?.addEventListener(`click`,Qe),document.getElementById(`templateDevToggle`)?.addEventListener(`click`,ze),document.getElementById(`heartbeatModal`)?.addEventListener(`click`,e=>Gt(e)),document.querySelector(`#heartbeatModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeHeartbeat"]`)?.addEventListener(`click`,()=>Gt()),document.querySelector(`[data-action="addHeartbeat"]`)?.addEventListener(`click`,Kt),document.getElementById(`hbJobsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-hb-toggle]`);if(t){Jt(+(t.dataset.hbToggle||`0`));return}let n=e.target?.closest(`[data-hb-remove]`);if(n){qt(+(n.dataset.hbRemove||`0`));return}}),document.getElementById(`hbJobsList`)?.addEventListener(`change`,e=>{let t=e.target,r=t.closest(`[data-hb-name]`);if(r){n.heartbeatJobs[+(r.dataset.hbName||`0`)].name=t.value,O();return}let i=t.closest(`[data-hb-kind]`);if(i){let e=+(i.dataset.hbKind||`0`),r=n.heartbeatJobs[e]?.schedule,a=typeof r?.timeZone==`string`?r.timeZone:void 0;n.heartbeatJobs[e].schedule=t.value===`cron`?{kind:`cron`,cron:typeof r?.cron==`string`&&r.cron.trim()?r.cron:`0 9 * * *`,...a?{timeZone:a}:{}}:{kind:`every`,minutes:typeof r?.minutes==`number`&&r.minutes>0?Math.floor(r.minutes):5,...a?{timeZone:a}:{}},D(),O();return}let a=t.closest(`[data-hb-minutes]`);if(a){let e=+(a.dataset.hbMinutes||`0`),r=n.heartbeatJobs[e]?.schedule,i=Math.max(1,Math.floor(Number(t.value)||5)),o=typeof r?.timeZone==`string`?r.timeZone:void 0;n.heartbeatJobs[e].schedule={kind:`every`,minutes:i,...o?{timeZone:o}:{}},D(),O();return}let o=t.closest(`[data-hb-cron]`);if(o){let e=+(o.dataset.hbCron||`0`),r=n.heartbeatJobs[e]?.schedule,i=typeof r?.timeZone==`string`?r.timeZone:void 0,a=t.value.trim().replace(/\s+/g,` `);n.heartbeatJobs[e].schedule={kind:`cron`,cron:a,...i?{timeZone:i}:{}},D(),O();return}let s=t.closest(`[data-hb-timezone]`);if(s){let e=+(s.dataset.hbTimezone||`0`),r=n.heartbeatJobs[e]?.schedule;r?.kind===`cron`?n.heartbeatJobs[e].schedule={kind:`cron`,cron:typeof r.cron==`string`&&r.cron.trim()?r.cron:`0 9 * * *`,...t.value.trim()?{timeZone:t.value.trim()}:{}}:n.heartbeatJobs[e].schedule={kind:`every`,minutes:typeof r?.minutes==`number`&&r.minutes>0?Math.floor(r.minutes):5,...t.value.trim()?{timeZone:t.value.trim()}:{}},D(),O();return}let c=t.closest(`[data-hb-prompt]`);if(c){n.heartbeatJobs[+(c.dataset.hbPrompt||`0`)].prompt=t.value,O();return}}),document.getElementById(`memoryModal`)?.addEventListener(`click`,e=>yt(e)),document.querySelector(`#memoryModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeMemory"]`)?.addEventListener(`click`,()=>yt()),document.getElementById(`memTabBtnSettings`)?.addEventListener(`click`,()=>bt(`settings`)),document.getElementById(`memTabBtnAdvOps`)?.addEventListener(`click`,()=>bt(`status`)),document.getElementById(`memTabBtnFiles`)?.addEventListener(`click`,()=>bt(`files`)),document.getElementById(`memOn`)?.addEventListener(`click`,()=>ft(!0)),document.getElementById(`memOff`)?.addEventListener(`click`,()=>ft(!1)),document.getElementById(`memFlushEvery`)?.addEventListener(`change`,ct),document.getElementById(`memRetention`)?.addEventListener(`change`,ct),document.getElementById(`memFlushLang`)?.addEventListener(`change`,ct),document.getElementById(`memFlushNowBtn`)?.addEventListener(`click`,ut),document.getElementById(`advBootstrapBtn`)?.addEventListener(`click`,vt),document.getElementById(`advReindexBtn`)?.addEventListener(`click`,ht),document.getElementById(`advReimportBtn`)?.addEventListener(`click`,vt),document.getElementById(`advOpenCorruptedBtn`)?.addEventListener(`click`,_t),document.getElementById(`advStatusBanner`)?.addEventListener(`click`,e=>{e.target?.id===`advUpgradeSoulBtn`&>(),e.target?.id===`advSynthesizeSoulBtn`&<()}),document.getElementById(`basicMemoryFiles`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-mem-delete]`);if(t){e.stopPropagation(),mt(t.dataset.memDelete||``);return}let n=e.target?.closest(`[data-mem-view]`);if(n){pt(n.dataset.memView||``);return}if(e.target?.closest(`[data-mem-back]`)){dt();return}});async function fr(){ne(),tt(),gn(),await u();let e=document.getElementById(`langSelect`);e&&(e.value=ee()),await we(),dr(),qn(),fe(),ge(),Mt(),jt(),await ve(),await He(),Ue(),qe(),$e(),nr(),Yt(),st(),ce(),await ie(),sn(),oe(),Dn();try{sessionStorage.removeItem(Z)}catch{}te(),`serviceWorker`in navigator&&navigator.serviceWorker.register(`/sw.js`).catch(()=>{})}fr().catch(e=>{console.error(`[bootstrap]`,e)}),document.addEventListener(`keydown`,e=>{if(e.key===`Escape`){if(n.isRecording){e.preventDefault(),Ln();return}document.querySelectorAll(`.modal-overlay.open`).forEach(e=>{e.classList.remove(`open`)})}(e.ctrlKey||e.metaKey)&&e.shiftKey&&e.code===`Space`&&(e.preventDefault(),Rn())}),document.getElementById(`mobileMenuLeft`)?.addEventListener(`click`,cn),document.getElementById(`mobileMenuRight`)?.addEventListener(`click`,ln);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./dist-CASeq-Tl.js";export{e as markdown};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./dist-DO9so2a2.js";export{e as css};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./dist-BMPiaUzF.js";export{e as html};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./dist-DlnNtr6L.js";export{e as javascript};
|