@provos/ironcurtain 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -14
- package/dist/auth/oauth-provider.js +1 -4
- package/dist/auth/oauth-provider.js.map +1 -1
- package/dist/cli-help.d.ts +12 -0
- package/dist/cli-help.js +21 -0
- package/dist/cli-help.js.map +1 -1
- package/dist/cli.js +46 -6
- package/dist/cli.js.map +1 -1
- package/dist/config/agent-model-guard.d.ts +14 -0
- package/dist/config/agent-model-guard.js +24 -0
- package/dist/config/agent-model-guard.js.map +1 -0
- package/dist/config/config-command.js +277 -7
- package/dist/config/config-command.js.map +1 -1
- package/dist/config/first-start.js +62 -7
- package/dist/config/first-start.js.map +1 -1
- package/dist/config/generated/compiled-policy.json +528 -161
- package/dist/config/generated/test-scenarios.json +4810 -170
- package/dist/config/generated/tool-annotations.json +34 -47
- package/dist/config/index.d.ts +58 -0
- package/dist/config/index.js +97 -15
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-servers.json +2 -2
- package/dist/config/model-provider.d.ts +9 -0
- package/dist/config/model-provider.js +13 -0
- package/dist/config/model-provider.js.map +1 -1
- package/dist/config/paths.d.ts +217 -0
- package/dist/config/paths.js +363 -14
- package/dist/config/paths.js.map +1 -1
- package/dist/config/types.d.ts +7 -1
- package/dist/config/user-config.d.ts +101 -6
- package/dist/config/user-config.js +145 -31
- package/dist/config/user-config.js.map +1 -1
- package/dist/config/validate-policy-dir.d.ts +10 -0
- package/dist/config/validate-policy-dir.js +59 -0
- package/dist/config/validate-policy-dir.js.map +1 -0
- package/dist/cron/job-commands.js +22 -2
- package/dist/cron/job-commands.js.map +1 -1
- package/dist/cron/types.d.ts +16 -2
- package/dist/cron/types.js +1 -3
- package/dist/cron/types.js.map +1 -1
- package/dist/daemon/daemon-command.js +30 -7
- package/dist/daemon/daemon-command.js.map +1 -1
- package/dist/daemon/ironcurtain-daemon.d.ts +62 -1
- package/dist/daemon/ironcurtain-daemon.js +231 -8
- package/dist/daemon/ironcurtain-daemon.js.map +1 -1
- package/dist/daemon-client/daemon-client.d.ts +123 -0
- package/dist/daemon-client/daemon-client.js +324 -0
- package/dist/daemon-client/daemon-client.js.map +1 -0
- package/dist/docker/adapters/claude-code.js +194 -20
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/adapters/codex.d.ts +9 -0
- package/dist/docker/adapters/codex.js +297 -0
- package/dist/docker/adapters/codex.js.map +1 -0
- package/dist/docker/adapters/goose.d.ts +12 -11
- package/dist/docker/adapters/goose.js +80 -27
- package/dist/docker/adapters/goose.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +183 -5
- package/dist/docker/agent-adapter.js +16 -0
- package/dist/docker/agent-adapter.js.map +1 -1
- package/dist/docker/agent-registry.js +5 -0
- package/dist/docker/agent-registry.js.map +1 -1
- package/dist/docker/apple-container-manager.d.ts +49 -0
- package/dist/docker/apple-container-manager.js +464 -0
- package/dist/docker/apple-container-manager.js.map +1 -0
- package/dist/docker/code-mode-proxy.d.ts +38 -0
- package/dist/docker/code-mode-proxy.js +6 -1
- package/dist/docker/code-mode-proxy.js.map +1 -1
- package/dist/docker/container-lifecycle.d.ts +2 -2
- package/dist/docker/container-lifecycle.js.map +1 -1
- package/dist/docker/container-runtime.d.ts +29 -0
- package/dist/docker/container-runtime.js +76 -0
- package/dist/docker/container-runtime.js.map +1 -0
- package/dist/docker/docker-agent-session.d.ts +113 -62
- package/dist/docker/docker-agent-session.js +271 -294
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +428 -26
- package/dist/docker/docker-infrastructure.js +1005 -70
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/docker-manager.d.ts +58 -3
- package/dist/docker/docker-manager.js +378 -33
- package/dist/docker/docker-manager.js.map +1 -1
- package/dist/docker/docker-probe.d.ts +45 -0
- package/dist/docker/docker-probe.js +86 -0
- package/dist/docker/docker-probe.js.map +1 -0
- package/dist/docker/docker-progress-sink.d.ts +43 -0
- package/dist/docker/docker-progress-sink.js +299 -0
- package/dist/docker/docker-progress-sink.js.map +1 -0
- package/dist/docker/mitm-proxy.d.ts +135 -1
- package/dist/docker/mitm-proxy.js +611 -25
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/network-topology.d.ts +81 -0
- package/dist/docker/network-topology.js +160 -0
- package/dist/docker/network-topology.js.map +1 -0
- package/dist/docker/oauth-credentials.d.ts +59 -3
- package/dist/docker/oauth-credentials.js +181 -14
- package/dist/docker/oauth-credentials.js.map +1 -1
- package/dist/docker/oauth-token-manager.js +2 -2
- package/dist/docker/oauth-token-manager.js.map +1 -1
- package/dist/docker/orientation.d.ts +1 -1
- package/dist/docker/package-types.d.ts +1 -1
- package/dist/docker/provider-config.d.ts +78 -3
- package/dist/docker/provider-config.js +295 -31
- package/dist/docker/provider-config.js.map +1 -1
- package/dist/docker/provision-lock.d.ts +46 -0
- package/dist/docker/provision-lock.js +152 -0
- package/dist/docker/provision-lock.js.map +1 -0
- package/dist/docker/proxy-tools.d.ts +0 -2
- package/dist/docker/proxy-tools.js +2 -7
- package/dist/docker/proxy-tools.js.map +1 -1
- package/dist/docker/pty-session.d.ts +64 -1
- package/dist/docker/pty-session.js +306 -104
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/docker/pty-types.d.ts +0 -2
- package/dist/docker/pty-types.js +0 -2
- package/dist/docker/pty-types.js.map +1 -1
- package/dist/docker/registry-proxy.d.ts +46 -0
- package/dist/docker/registry-proxy.js +255 -1
- package/dist/docker/registry-proxy.js.map +1 -1
- package/dist/docker/resource-limits.d.ts +134 -0
- package/dist/docker/resource-limits.js +203 -0
- package/dist/docker/resource-limits.js.map +1 -0
- package/dist/docker/spawn-with-idle-timeout.d.ts +39 -0
- package/dist/docker/spawn-with-idle-timeout.js +152 -0
- package/dist/docker/spawn-with-idle-timeout.js.map +1 -0
- package/dist/docker/sse-extractor.d.ts +51 -0
- package/dist/docker/sse-extractor.js +303 -0
- package/dist/docker/sse-extractor.js.map +1 -0
- package/dist/docker/token-stream-bus.d.ts +83 -0
- package/dist/docker/token-stream-bus.js +98 -0
- package/dist/docker/token-stream-bus.js.map +1 -0
- package/dist/docker/token-stream-types.d.ts +71 -0
- package/dist/docker/token-stream-types.js +8 -0
- package/dist/docker/token-stream-types.js.map +1 -0
- package/dist/docker/trajectory-capture.d.ts +79 -0
- package/dist/docker/trajectory-capture.js +521 -0
- package/dist/docker/trajectory-capture.js.map +1 -0
- package/dist/docker/trajectory-reassembler.d.ts +286 -0
- package/dist/docker/trajectory-reassembler.js +990 -0
- package/dist/docker/trajectory-reassembler.js.map +1 -0
- package/dist/docker/trajectory-tap.d.ts +100 -0
- package/dist/docker/trajectory-tap.js +410 -0
- package/dist/docker/trajectory-tap.js.map +1 -0
- package/dist/docker/trajectory-types.d.ts +187 -0
- package/dist/docker/trajectory-types.js +43 -0
- package/dist/docker/trajectory-types.js.map +1 -0
- package/dist/docker/types.d.ts +105 -12
- package/dist/doctor/checks.d.ts +171 -0
- package/dist/doctor/checks.js +598 -0
- package/dist/doctor/checks.js.map +1 -0
- package/dist/doctor/doctor-command.d.ts +29 -0
- package/dist/doctor/doctor-command.js +190 -0
- package/dist/doctor/doctor-command.js.map +1 -0
- package/dist/doctor/mcp-liveness.d.ts +28 -0
- package/dist/doctor/mcp-liveness.js +92 -0
- package/dist/doctor/mcp-liveness.js.map +1 -0
- package/dist/doctor/oauth-checks.d.ts +23 -0
- package/dist/doctor/oauth-checks.js +157 -0
- package/dist/doctor/oauth-checks.js.map +1 -0
- package/dist/doctor/output.d.ts +26 -0
- package/dist/doctor/output.js +82 -0
- package/dist/doctor/output.js.map +1 -0
- package/dist/escalation/listener-command.js +0 -3
- package/dist/escalation/listener-command.js.map +1 -1
- package/dist/event-bus/typed-event-bus.d.ts +26 -0
- package/dist/event-bus/typed-event-bus.js +35 -0
- package/dist/event-bus/typed-event-bus.js.map +1 -0
- package/dist/index.js +54 -21
- package/dist/index.js.map +1 -1
- package/dist/logger.js +31 -2
- package/dist/logger.js.map +1 -1
- package/dist/memory/auto-save.d.ts +18 -4
- package/dist/memory/auto-save.js +46 -6
- package/dist/memory/auto-save.js.map +1 -1
- package/dist/memory/memory-policy.d.ts +41 -0
- package/dist/memory/memory-policy.js +36 -0
- package/dist/memory/memory-policy.js.map +1 -0
- package/dist/mux/mux-app.d.ts +2 -0
- package/dist/mux/mux-app.js +1 -0
- package/dist/mux/mux-app.js.map +1 -1
- package/dist/mux/mux-command.d.ts +10 -1
- package/dist/mux/mux-command.js +74 -40
- package/dist/mux/mux-command.js.map +1 -1
- package/dist/mux/mux-renderer.js +2 -12
- package/dist/mux/mux-renderer.js.map +1 -1
- package/dist/mux/pty-bridge.d.ts +2 -0
- package/dist/mux/pty-bridge.js +3 -0
- package/dist/mux/pty-bridge.js.map +1 -1
- package/dist/mux/session-scanner.js +1 -2
- package/dist/mux/session-scanner.js.map +1 -1
- package/dist/{pipeline → observability}/llm-logger.d.ts +8 -3
- package/dist/{pipeline → observability}/llm-logger.js +8 -3
- package/dist/observability/llm-logger.js.map +1 -0
- package/dist/observe/observe-command.d.ts +12 -0
- package/dist/observe/observe-command.js +285 -0
- package/dist/observe/observe-command.js.map +1 -0
- package/dist/observe/observe-renderer.d.ts +24 -0
- package/dist/observe/observe-renderer.js +87 -0
- package/dist/observe/observe-renderer.js.map +1 -0
- package/dist/observe/observe-tui-rain.d.ts +42 -0
- package/dist/observe/observe-tui-rain.js +531 -0
- package/dist/observe/observe-tui-rain.js.map +1 -0
- package/dist/observe/observe-tui-text-panel.d.ts +46 -0
- package/dist/observe/observe-tui-text-panel.js +525 -0
- package/dist/observe/observe-tui-text-panel.js.map +1 -0
- package/dist/observe/observe-tui-types.d.ts +270 -0
- package/dist/observe/observe-tui-types.js +200 -0
- package/dist/observe/observe-tui-types.js.map +1 -0
- package/dist/observe/observe-tui-word-scorer.d.ts +143 -0
- package/dist/observe/observe-tui-word-scorer.js +572 -0
- package/dist/observe/observe-tui-word-scorer.js.map +1 -0
- package/dist/observe/observe-tui.d.ts +59 -0
- package/dist/observe/observe-tui.js +592 -0
- package/dist/observe/observe-tui.js.map +1 -0
- package/dist/persona/broad-policy-validator.d.ts +95 -0
- package/dist/persona/broad-policy-validator.js +171 -0
- package/dist/persona/broad-policy-validator.js.map +1 -0
- package/dist/persona/compile-persona-policy.d.ts +54 -2
- package/dist/persona/compile-persona-policy.js +29 -4
- package/dist/persona/compile-persona-policy.js.map +1 -1
- package/dist/persona/event-bus-progress-reporter.d.ts +57 -0
- package/dist/persona/event-bus-progress-reporter.js +66 -0
- package/dist/persona/event-bus-progress-reporter.js.map +1 -0
- package/dist/persona/memory-gate.d.ts +19 -0
- package/dist/persona/memory-gate.js +33 -0
- package/dist/persona/memory-gate.js.map +1 -0
- package/dist/persona/persona-command.js +77 -72
- package/dist/persona/persona-command.js.map +1 -1
- package/dist/persona/persona-compile-orchestrator.d.ts +101 -0
- package/dist/persona/persona-compile-orchestrator.js +504 -0
- package/dist/persona/persona-compile-orchestrator.js.map +1 -0
- package/dist/persona/persona-service.d.ts +137 -0
- package/dist/persona/persona-service.js +263 -0
- package/dist/persona/persona-service.js.map +1 -0
- package/dist/persona/policy-mutation-audit.d.ts +109 -0
- package/dist/persona/policy-mutation-audit.js +179 -0
- package/dist/persona/policy-mutation-audit.js.map +1 -0
- package/dist/persona/resolve.d.ts +22 -0
- package/dist/persona/resolve.js +45 -2
- package/dist/persona/resolve.js.map +1 -1
- package/dist/persona/rule-delta.d.ts +30 -0
- package/dist/persona/rule-delta.js +82 -0
- package/dist/persona/rule-delta.js.map +1 -0
- package/dist/persona/types.d.ts +28 -0
- package/dist/pipeline/annotate.js +10 -2
- package/dist/pipeline/annotate.js.map +1 -1
- package/dist/pipeline/compile.js +14 -2
- package/dist/pipeline/compile.js.map +1 -1
- package/dist/pipeline/constitution-compiler.d.ts +25 -14
- package/dist/pipeline/constitution-compiler.js +107 -38
- package/dist/pipeline/constitution-compiler.js.map +1 -1
- package/dist/pipeline/dynamic-list-types.d.ts +3 -6
- package/dist/pipeline/dynamic-list-types.js +3 -16
- package/dist/pipeline/dynamic-list-types.js.map +1 -1
- package/dist/pipeline/pipeline-runner.d.ts +63 -4
- package/dist/pipeline/pipeline-runner.js +242 -94
- package/dist/pipeline/pipeline-runner.js.map +1 -1
- package/dist/pipeline/pipeline-shared.d.ts +33 -4
- package/dist/pipeline/pipeline-shared.js +79 -19
- package/dist/pipeline/pipeline-shared.js.map +1 -1
- package/dist/pipeline/policy-verifier.js +16 -3
- package/dist/pipeline/policy-verifier.js.map +1 -1
- package/dist/pipeline/proxy-mcp-connections.js +17 -2
- package/dist/pipeline/proxy-mcp-connections.js.map +1 -1
- package/dist/pipeline/refresh-lists.js +3 -5
- package/dist/pipeline/refresh-lists.js.map +1 -1
- package/dist/pipeline/scenario-generator.d.ts +4 -8
- package/dist/pipeline/scenario-generator.js +13 -46
- package/dist/pipeline/scenario-generator.js.map +1 -1
- package/dist/sandbox/index.d.ts +29 -0
- package/dist/sandbox/index.js +351 -119
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/ironcurtain-protocol.d.ts +52 -0
- package/dist/sandbox/ironcurtain-protocol.js +185 -0
- package/dist/sandbox/ironcurtain-protocol.js.map +1 -0
- package/dist/session/agent-session.d.ts +6 -0
- package/dist/session/agent-session.js +16 -5
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/cli-transport.js +0 -6
- package/dist/session/cli-transport.js.map +1 -1
- package/dist/session/index.d.ts +35 -14
- package/dist/session/index.js +333 -130
- package/dist/session/index.js.map +1 -1
- package/dist/session/preflight.d.ts +21 -13
- package/dist/session/preflight.js +227 -88
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/prompts.d.ts +2 -5
- package/dist/session/prompts.js.map +1 -1
- package/dist/session/session-manager.d.ts +61 -6
- package/dist/session/session-manager.js +72 -10
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/session-metadata.d.ts +21 -5
- package/dist/session/session-metadata.js +34 -12
- package/dist/session/session-metadata.js.map +1 -1
- package/dist/session/types.d.ts +320 -5
- package/dist/session/types.js +57 -1
- package/dist/session/types.js.map +1 -1
- package/dist/signal/bot-command.js +6 -1
- package/dist/signal/bot-command.js.map +1 -1
- package/dist/signal/setup-signal.js +13 -21
- package/dist/signal/setup-signal.js.map +1 -1
- package/dist/signal/signal-bot-daemon.d.ts +16 -1
- package/dist/signal/signal-bot-daemon.js +39 -27
- package/dist/signal/signal-bot-daemon.js.map +1 -1
- package/dist/signal/signal-container.d.ts +3 -3
- package/dist/signal/signal-container.js +9 -3
- package/dist/signal/signal-container.js.map +1 -1
- package/dist/skills/discovery.d.ts +77 -0
- package/dist/skills/discovery.js +206 -0
- package/dist/skills/discovery.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.js +3 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/staging.d.ts +28 -0
- package/dist/skills/staging.js +68 -0
- package/dist/skills/staging.js.map +1 -0
- package/dist/skills/types.d.ts +46 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/trusted-process/approval-whitelist.d.ts +0 -2
- package/dist/trusted-process/approval-whitelist.js +17 -17
- package/dist/trusted-process/approval-whitelist.js.map +1 -1
- package/dist/trusted-process/async-mutex.d.ts +32 -0
- package/dist/trusted-process/async-mutex.js +50 -0
- package/dist/trusted-process/async-mutex.js.map +1 -0
- package/dist/trusted-process/audit-log.d.ts +38 -1
- package/dist/trusted-process/audit-log.js +82 -13
- package/dist/trusted-process/audit-log.js.map +1 -1
- package/dist/trusted-process/call-circuit-breaker.d.ts +6 -0
- package/dist/trusted-process/call-circuit-breaker.js +23 -3
- package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
- package/dist/trusted-process/container-command.d.ts +35 -0
- package/dist/trusted-process/container-command.js +49 -0
- package/dist/trusted-process/container-command.js.map +1 -0
- package/dist/trusted-process/control-server.d.ts +101 -0
- package/dist/trusted-process/control-server.js +282 -0
- package/dist/trusted-process/control-server.js.map +1 -0
- package/dist/trusted-process/domain-utils.d.ts +6 -6
- package/dist/trusted-process/domain-utils.js +7 -23
- package/dist/trusted-process/domain-utils.js.map +1 -1
- package/dist/trusted-process/error-prefixes.d.ts +16 -0
- package/dist/trusted-process/error-prefixes.js +17 -0
- package/dist/trusted-process/error-prefixes.js.map +1 -0
- package/dist/trusted-process/index.d.ts +40 -23
- package/dist/trusted-process/index.js +131 -225
- package/dist/trusted-process/index.js.map +1 -1
- package/dist/trusted-process/list-matcher.d.ts +17 -0
- package/dist/trusted-process/list-matcher.js +31 -0
- package/dist/trusted-process/list-matcher.js.map +1 -0
- package/dist/trusted-process/mcp-client-manager.d.ts +35 -6
- package/dist/trusted-process/mcp-client-manager.js +40 -45
- package/dist/trusted-process/mcp-client-manager.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.d.ts +31 -120
- package/dist/trusted-process/mcp-proxy-server.js +201 -660
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/policy-engine.d.ts +16 -4
- package/dist/trusted-process/policy-engine.js +103 -47
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/policy-roots.d.ts +6 -0
- package/dist/trusted-process/policy-roots.js +20 -0
- package/dist/trusted-process/policy-roots.js.map +1 -1
- package/dist/trusted-process/sandbox-integration.d.ts +12 -0
- package/dist/trusted-process/sandbox-integration.js +18 -0
- package/dist/trusted-process/sandbox-integration.js.map +1 -1
- package/dist/trusted-process/tcp-server-transport.d.ts +12 -1
- package/dist/trusted-process/tcp-server-transport.js +9 -1
- package/dist/trusted-process/tcp-server-transport.js.map +1 -1
- package/dist/trusted-process/tool-call-coordinator.d.ts +283 -0
- package/dist/trusted-process/tool-call-coordinator.js +592 -0
- package/dist/trusted-process/tool-call-coordinator.js.map +1 -0
- package/dist/trusted-process/tool-call-pipeline.d.ts +213 -0
- package/dist/trusted-process/tool-call-pipeline.js +832 -0
- package/dist/trusted-process/tool-call-pipeline.js.map +1 -0
- package/dist/trusted-process/tool-description-hints.d.ts +1 -1
- package/dist/types/argument-roles.d.ts +1 -1
- package/dist/types/argument-roles.js +14 -1
- package/dist/types/argument-roles.js.map +1 -1
- package/dist/types/audit.d.ts +9 -0
- package/dist/{session → types}/errors.d.ts +8 -2
- package/dist/{session → types}/errors.js +8 -2
- package/dist/types/errors.js.map +1 -0
- package/dist/types/reserved-servers.d.ts +11 -0
- package/dist/types/reserved-servers.js +12 -0
- package/dist/types/reserved-servers.js.map +1 -0
- package/dist/types/server-listing.d.ts +14 -0
- package/dist/types/server-listing.js +2 -0
- package/dist/types/server-listing.js.map +1 -0
- package/dist/types/slug.d.ts +2 -0
- package/dist/types/slug.js +2 -0
- package/dist/types/slug.js.map +1 -1
- package/dist/types/url-normalize.d.ts +16 -0
- package/dist/types/url-normalize.js +33 -0
- package/dist/types/url-normalize.js.map +1 -0
- package/dist/util/atomic-write.d.ts +31 -0
- package/dist/util/atomic-write.js +43 -0
- package/dist/util/atomic-write.js.map +1 -0
- package/dist/utils/error-message.d.ts +8 -0
- package/dist/utils/error-message.js +11 -0
- package/dist/utils/error-message.js.map +1 -0
- package/dist/utils/exec-error.d.ts +19 -0
- package/dist/utils/exec-error.js +16 -0
- package/dist/utils/exec-error.js.map +1 -0
- package/dist/utils/is-plain-object.d.ts +7 -0
- package/dist/utils/is-plain-object.js +12 -0
- package/dist/utils/is-plain-object.js.map +1 -0
- package/dist/utils/preflight-checks.d.ts +16 -0
- package/dist/utils/preflight-checks.js +178 -0
- package/dist/utils/preflight-checks.js.map +1 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.d.ts +7 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +725 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -0
- package/dist/web-ui/conn-registry.d.ts +14 -0
- package/dist/web-ui/conn-registry.js +25 -0
- package/dist/web-ui/conn-registry.js.map +1 -0
- package/dist/web-ui/dispatch/escalation-dispatch.d.ts +7 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js +52 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/job-dispatch.d.ts +8 -0
- package/dist/web-ui/dispatch/job-dispatch.js +83 -0
- package/dist/web-ui/dispatch/job-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/persona-dispatch.d.ts +50 -0
- package/dist/web-ui/dispatch/persona-dispatch.js +269 -0
- package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/session-dispatch.d.ts +9 -0
- package/dist/web-ui/dispatch/session-dispatch.js +219 -0
- package/dist/web-ui/dispatch/session-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.d.ts +15 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.js +55 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/types.d.ts +54 -0
- package/dist/web-ui/dispatch/types.js +72 -0
- package/dist/web-ui/dispatch/types.js.map +1 -0
- package/dist/web-ui/dispatch/workflow-dispatch.d.ts +103 -0
- package/dist/web-ui/dispatch/workflow-dispatch.js +1036 -0
- package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -0
- package/dist/web-ui/json-rpc-dispatch.d.ts +12 -0
- package/dist/web-ui/json-rpc-dispatch.js +34 -0
- package/dist/web-ui/json-rpc-dispatch.js.map +1 -0
- package/dist/web-ui/state-graph.d.ts +13 -0
- package/dist/web-ui/state-graph.js +82 -0
- package/dist/web-ui/state-graph.js.map +1 -0
- package/dist/web-ui/token-stream-bridge.d.ts +76 -0
- package/dist/web-ui/token-stream-bridge.js +265 -0
- package/dist/web-ui/token-stream-bridge.js.map +1 -0
- package/dist/web-ui/web-event-bus.d.ts +176 -0
- package/dist/web-ui/web-event-bus.js +19 -0
- package/dist/web-ui/web-event-bus.js.map +1 -0
- package/dist/web-ui/web-session-transport.d.ts +31 -0
- package/dist/web-ui/web-session-transport.js +109 -0
- package/dist/web-ui/web-session-transport.js.map +1 -0
- package/dist/web-ui/web-ui-server.d.ts +90 -0
- package/dist/web-ui/web-ui-server.js +477 -0
- package/dist/web-ui/web-ui-server.js.map +1 -0
- package/dist/web-ui/web-ui-types.d.ts +418 -0
- package/dist/web-ui/web-ui-types.js +32 -0
- package/dist/web-ui/web-ui-types.js.map +1 -0
- package/dist/web-ui/ws-utils.d.ts +5 -0
- package/dist/web-ui/ws-utils.js +12 -0
- package/dist/web-ui/ws-utils.js.map +1 -0
- package/dist/web-ui-static/assets/index-BD5U6ILh.css +1 -0
- package/dist/web-ui-static/assets/index-FMsHWEfK.js +79 -0
- package/dist/web-ui-static/assets/orbitron-latin-700-normal-4jsRXGGJ.woff2 +0 -0
- package/dist/web-ui-static/assets/orbitron-latin-700-normal-DmYOh-W9.woff +0 -0
- package/dist/web-ui-static/index.html +14 -0
- package/dist/workflow/artifacts.d.ts +59 -0
- package/dist/workflow/artifacts.js +188 -0
- package/dist/workflow/artifacts.js.map +1 -0
- package/dist/workflow/checkpoint-selection.d.ts +34 -0
- package/dist/workflow/checkpoint-selection.js +48 -0
- package/dist/workflow/checkpoint-selection.js.map +1 -0
- package/dist/workflow/checkpoint.d.ts +35 -0
- package/dist/workflow/checkpoint.js +84 -0
- package/dist/workflow/checkpoint.js.map +1 -0
- package/dist/workflow/cli-shared.d.ts +62 -0
- package/dist/workflow/cli-shared.js +117 -0
- package/dist/workflow/cli-shared.js.map +1 -0
- package/dist/workflow/cli-support.d.ts +92 -0
- package/dist/workflow/cli-support.js +421 -0
- package/dist/workflow/cli-support.js.map +1 -0
- package/dist/workflow/container-snapshots.d.ts +29 -0
- package/dist/workflow/container-snapshots.js +137 -0
- package/dist/workflow/container-snapshots.js.map +1 -0
- package/dist/workflow/daemon-gate-commands.d.ts +21 -0
- package/dist/workflow/daemon-gate-commands.js +599 -0
- package/dist/workflow/daemon-gate-commands.js.map +1 -0
- package/dist/workflow/definition-loader.d.ts +32 -0
- package/dist/workflow/definition-loader.js +56 -0
- package/dist/workflow/definition-loader.js.map +1 -0
- package/dist/workflow/discovery.d.ts +107 -0
- package/dist/workflow/discovery.js +263 -0
- package/dist/workflow/discovery.js.map +1 -0
- package/dist/workflow/errors.d.ts +66 -0
- package/dist/workflow/errors.js +49 -0
- package/dist/workflow/errors.js.map +1 -0
- package/dist/workflow/guards.d.ts +8 -0
- package/dist/workflow/guards.js +38 -0
- package/dist/workflow/guards.js.map +1 -0
- package/dist/workflow/lane-template.d.ts +89 -0
- package/dist/workflow/lane-template.js +141 -0
- package/dist/workflow/lane-template.js.map +1 -0
- package/dist/workflow/lint-integration.d.ts +64 -0
- package/dist/workflow/lint-integration.js +56 -0
- package/dist/workflow/lint-integration.js.map +1 -0
- package/dist/workflow/lint.d.ts +72 -0
- package/dist/workflow/lint.js +593 -0
- package/dist/workflow/lint.js.map +1 -0
- package/dist/workflow/machine-builder.d.ts +178 -0
- package/dist/workflow/machine-builder.js +678 -0
- package/dist/workflow/machine-builder.js.map +1 -0
- package/dist/workflow/message-log.d.ts +99 -0
- package/dist/workflow/message-log.js +40 -0
- package/dist/workflow/message-log.js.map +1 -0
- package/dist/workflow/orchestrator.d.ts +954 -0
- package/dist/workflow/orchestrator.js +3594 -0
- package/dist/workflow/orchestrator.js.map +1 -0
- package/dist/workflow/prompt-builder.d.ts +39 -0
- package/dist/workflow/prompt-builder.js +243 -0
- package/dist/workflow/prompt-builder.js.map +1 -0
- package/dist/workflow/run-state-command.d.ts +9 -0
- package/dist/workflow/run-state-command.js +414 -0
- package/dist/workflow/run-state-command.js.map +1 -0
- package/dist/workflow/run-state-debug-capture.d.ts +40 -0
- package/dist/workflow/run-state-debug-capture.js +101 -0
- package/dist/workflow/run-state-debug-capture.js.map +1 -0
- package/dist/workflow/status-parser.d.ts +68 -0
- package/dist/workflow/status-parser.js +274 -0
- package/dist/workflow/status-parser.js.map +1 -0
- package/dist/workflow/types.d.ts +598 -0
- package/dist/workflow/types.js +85 -0
- package/dist/workflow/types.js.map +1 -0
- package/dist/workflow/validate.d.ts +80 -0
- package/dist/workflow/validate.js +788 -0
- package/dist/workflow/validate.js.map +1 -0
- package/dist/workflow/workflow-command.d.ts +9 -0
- package/dist/workflow/workflow-command.js +670 -0
- package/dist/workflow/workflow-command.js.map +1 -0
- package/dist/workflow/workflow-discovery.d.ts +27 -0
- package/dist/workflow/workflow-discovery.js +121 -0
- package/dist/workflow/workflow-discovery.js.map +1 -0
- package/dist/workflow/workflow-manager.d.ts +156 -0
- package/dist/workflow/workflow-manager.js +359 -0
- package/dist/workflow/workflow-manager.js.map +1 -0
- package/dist/workflow/workflows/design-and-code/README.md +50 -0
- package/dist/workflow/workflows/design-and-code/workflow.yaml +169 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
- package/dist/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
- package/dist/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
- package/dist/workflow/workflows/evolve/scripts/LICENSE +201 -0
- package/dist/workflow/workflows/evolve/scripts/README.md +314 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-brief +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-db +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-eval +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-files +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-summary +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
- package/dist/workflow/workflows/evolve/scripts/requirements.txt +2 -0
- package/dist/workflow/workflows/evolve/workflow.yaml +646 -0
- package/dist/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
- package/dist/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
- package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
- package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
- package/dist/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
- package/dist/workflow/workflows/test-email-summary/workflow.yaml +90 -0
- package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
- package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
- package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
- package/dist/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
- package/dist/workflow/worktree.d.ts +43 -0
- package/dist/workflow/worktree.js +106 -0
- package/dist/workflow/worktree.js.map +1 -0
- package/docker/Dockerfile.base +31 -0
- package/docker/Dockerfile.base.arm64 +27 -0
- package/docker/Dockerfile.claude-code +3 -1
- package/docker/Dockerfile.codex +17 -0
- package/docker/Dockerfile.goose +3 -1
- package/docker/entrypoint-claude-code.sh +7 -0
- package/docker/entrypoint-codex.sh +42 -0
- package/docker/entrypoint-goose.sh +6 -0
- package/docker/entrypoint-uid-remap.sh +93 -0
- package/package.json +27 -11
- package/packages/web-ui/README.md +113 -0
- package/packages/web-ui/docs/workflow-state-machine.png +0 -0
- package/src/config/generated/compiled-policy.json +528 -161
- package/src/config/generated/test-scenarios.json +4810 -170
- package/src/config/generated/tool-annotations.json +34 -47
- package/src/config/mcp-servers.json +2 -2
- package/src/workflow/workflows/design-and-code/README.md +50 -0
- package/src/workflow/workflows/design-and-code/workflow.yaml +169 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
- package/src/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
- package/src/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
- package/src/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
- package/src/workflow/workflows/evolve/scripts/LICENSE +201 -0
- package/src/workflow/workflows/evolve/scripts/README.md +314 -0
- package/src/workflow/workflows/evolve/scripts/evolve-brief +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-db +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-eval +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-files +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-summary +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
- package/src/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
- package/src/workflow/workflows/evolve/scripts/requirements.txt +2 -0
- package/src/workflow/workflows/evolve/workflow.yaml +646 -0
- package/src/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
- package/src/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
- package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
- package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
- package/src/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
- package/src/workflow/workflows/test-email-summary/workflow.yaml +90 -0
- package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
- package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
- package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
- package/src/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
- package/dist/pipeline/llm-logger.js.map +0 -1
- package/dist/session/errors.js.map +0 -1
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types, constants, and layout calculation for the observe TUI.
|
|
3
|
+
*
|
|
4
|
+
* This module is types-and-constants only -- no behavior, no rendering,
|
|
5
|
+
* no I/O. All TUI modules depend on this file; it depends on nothing
|
|
6
|
+
* except Node built-ins (for locale detection).
|
|
7
|
+
*/
|
|
8
|
+
import type { TokenStreamEvent } from '../docker/token-stream-types.js';
|
|
9
|
+
/** Half-width katakana + digits -- same set as mux-splash.ts RAIN_CHARS. */
|
|
10
|
+
export declare const RAIN_CHARS = "\uFF66\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D0123456789";
|
|
11
|
+
/** ASCII fallback for non-UTF-8 locales. */
|
|
12
|
+
export declare const ASCII_RAIN_CHARS = "0123456789abcdefghijklmnopqrstuvwxyz@#$%&*+=<>~";
|
|
13
|
+
/** Target frame interval in milliseconds (~15 FPS). */
|
|
14
|
+
export declare const FRAME_MS = 66;
|
|
15
|
+
/** Fraction of terminal width allocated to the rain panel. */
|
|
16
|
+
export declare const RAIN_WIDTH_FRACTION = 0.18;
|
|
17
|
+
/** Minimum columns for the rain panel when visible. */
|
|
18
|
+
export declare const MIN_RAIN_COLS = 15;
|
|
19
|
+
/** Minimum columns for the text panel. */
|
|
20
|
+
export declare const MIN_TEXT_COLS = 40;
|
|
21
|
+
/** Below this total width, rain is hidden and text takes the full width. */
|
|
22
|
+
export declare const MIN_TOTAL_COLS = 60;
|
|
23
|
+
/** Below this row count, only the status bar is rendered (rain + text suppressed). */
|
|
24
|
+
export declare const MIN_USABLE_ROWS = 5;
|
|
25
|
+
/** Width of the vertical divider between rain and text panels. */
|
|
26
|
+
export declare const DIVIDER_WIDTH = 1;
|
|
27
|
+
/** Maximum characters queued for rain display before oldest are dropped. */
|
|
28
|
+
export declare const RAIN_QUEUE_CAPACITY = 2048;
|
|
29
|
+
/** Maximum lines retained in the text panel ring buffer. */
|
|
30
|
+
export declare const TEXT_BUFFER_CAPACITY = 10000;
|
|
31
|
+
/**
|
|
32
|
+
* SGR escape sequences (true-color 24-bit).
|
|
33
|
+
* Adapted from mux-splash.ts CLR_* constants.
|
|
34
|
+
* Inline SGR avoids chalk dependency for zero-allocation frame rendering.
|
|
35
|
+
*/
|
|
36
|
+
export declare const SGR: {
|
|
37
|
+
readonly RESET: "\u001B[0m";
|
|
38
|
+
readonly RAIN_HEAD_TEXT: "\u001B[1;38;2;180;255;180m";
|
|
39
|
+
readonly RAIN_NEAR_TEXT: "\u001B[38;2;0;255;70m";
|
|
40
|
+
readonly RAIN_FAR_TEXT: "\u001B[38;2;0;120;0m";
|
|
41
|
+
readonly RAIN_HEAD_TOOL: "\u001B[1;38;2;180;255;255m";
|
|
42
|
+
readonly RAIN_NEAR_TOOL: "\u001B[38;2;0;200;255m";
|
|
43
|
+
readonly RAIN_FAR_TOOL: "\u001B[38;2;0;100;130m";
|
|
44
|
+
readonly RAIN_HEAD_ERROR: "\u001B[1;38;2;255;180;180m";
|
|
45
|
+
readonly RAIN_NEAR_ERROR: "\u001B[38;2;255;70;70m";
|
|
46
|
+
readonly RAIN_FAR_ERROR: "\u001B[38;2;130;0;0m";
|
|
47
|
+
readonly RAIN_IDLE: "\u001B[38;2;0;80;0m";
|
|
48
|
+
readonly TEXT_NORMAL: "\u001B[38;2;200;200;200m";
|
|
49
|
+
readonly TEXT_TOOL: "\u001B[38;2;0;200;255m";
|
|
50
|
+
readonly TEXT_TOOL_DIM: "\u001B[38;2;0;130;170m";
|
|
51
|
+
readonly TEXT_ERROR: "\u001B[38;2;255;80;80m";
|
|
52
|
+
readonly TEXT_SEPARATOR: "\u001B[38;2;80;80;80m";
|
|
53
|
+
readonly TEXT_META: "\u001B[38;2;100;100;100m";
|
|
54
|
+
readonly TEXT_DIM: "\u001B[2m";
|
|
55
|
+
readonly SESSION_0: "\u001B[38;2;0;255;70m";
|
|
56
|
+
readonly SESSION_1: "\u001B[38;2;0;200;255m";
|
|
57
|
+
readonly SESSION_2: "\u001B[38;2;200;150;255m";
|
|
58
|
+
readonly SESSION_3: "\u001B[38;2;255;200;0m";
|
|
59
|
+
readonly SESSION_4: "\u001B[38;2;255;100;100m";
|
|
60
|
+
readonly SESSION_5: "\u001B[38;2;100;255;200m";
|
|
61
|
+
readonly DIVIDER: "\u001B[38;2;40;60;40m";
|
|
62
|
+
readonly STATUS_BG: "\u001B[48;2;10;15;10m";
|
|
63
|
+
readonly STATUS_LABEL: "\u001B[1;38;2;0;255;70m";
|
|
64
|
+
readonly STATUS_VALUE: "\u001B[38;2;0;200;180m";
|
|
65
|
+
readonly STATUS_SEPARATOR: "\u001B[38;2;40;70;40m";
|
|
66
|
+
readonly STATUS_HINT: "\u001B[38;2;60;80;60m";
|
|
67
|
+
readonly STATUS_ERROR: "\u001B[1;38;2;255;70;70m";
|
|
68
|
+
readonly WORD_TEXT: "\u001B[1;38;2;150;255;150m";
|
|
69
|
+
readonly WORD_TOOL: "\u001B[1;38;2;100;255;255m";
|
|
70
|
+
readonly WORD_PHASE: "\u001B[1;38;2;255;255;180m";
|
|
71
|
+
readonly WORD_MODEL: "\u001B[1;38;2;180;180;255m";
|
|
72
|
+
readonly TEXT_THINKING: "\u001B[2;3;38;2;0;200;100m";
|
|
73
|
+
readonly STATUS_PHASE_THINKING: "\u001B[38;2;0;255;70m";
|
|
74
|
+
readonly STATUS_PHASE_TOOL: "\u001B[38;2;0;200;255m";
|
|
75
|
+
readonly STATUS_PHASE_IDLE: "\u001B[38;2;80;80;80m";
|
|
76
|
+
readonly STATUS_PHASE_ERROR: "\u001B[38;2;255;70;70m";
|
|
77
|
+
};
|
|
78
|
+
/** Session label colors, indexed by `label % SESSION_COLORS.length`. */
|
|
79
|
+
export declare const SESSION_COLORS: readonly ["\u001B[38;2;0;255;70m", "\u001B[38;2;0;200;255m", "\u001B[38;2;200;150;255m", "\u001B[38;2;255;200;0m", "\u001B[38;2;255;100;100m", "\u001B[38;2;100;255;200m"];
|
|
80
|
+
/** Returns the SGR color sequence for a given session label number. */
|
|
81
|
+
export declare function sessionColor(label: number): string;
|
|
82
|
+
/** Computed screen layout for the TUI. */
|
|
83
|
+
export interface TuiLayout {
|
|
84
|
+
readonly cols: number;
|
|
85
|
+
readonly rows: number;
|
|
86
|
+
/** Number of columns for the rain panel (0 when terminal too narrow). */
|
|
87
|
+
readonly rainCols: number;
|
|
88
|
+
/** Column index of the vertical divider. */
|
|
89
|
+
readonly dividerCol: number;
|
|
90
|
+
/** First column of the text panel. */
|
|
91
|
+
readonly textStartCol: number;
|
|
92
|
+
/** Usable width of the text panel. */
|
|
93
|
+
readonly textCols: number;
|
|
94
|
+
/** Rows available for text content (rows - 1, reserving status bar). */
|
|
95
|
+
readonly textRows: number;
|
|
96
|
+
/** 0-indexed row for the status bar. */
|
|
97
|
+
readonly statusRow: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Computes the TUI layout for the given terminal dimensions.
|
|
101
|
+
*
|
|
102
|
+
* When `cols >= MIN_TOTAL_COLS`, the rain panel gets ~18% of the width.
|
|
103
|
+
* Otherwise the rain panel is hidden and text takes the full width.
|
|
104
|
+
*/
|
|
105
|
+
export declare function calculateTuiLayout(cols: number, rows: number): TuiLayout;
|
|
106
|
+
/**
|
|
107
|
+
* Agent phase as tracked by the orchestrator and communicated
|
|
108
|
+
* to the rain engine for color selection.
|
|
109
|
+
*
|
|
110
|
+
* Extends the existing SessionState.phase with an 'error' pseudo-phase
|
|
111
|
+
* that the rain engine can react to (triggered by error events, auto-clears).
|
|
112
|
+
*/
|
|
113
|
+
export type AgentPhase = 'thinking' | 'tool_use' | 'idle' | 'error';
|
|
114
|
+
/** Lifecycle phase of a word drop. */
|
|
115
|
+
export type WordDropPhase = 'forming' | 'holding' | 'dissolving';
|
|
116
|
+
/** Source category for word drop content, determines color. */
|
|
117
|
+
export type WordDropSource = 'tool' | 'phase' | 'model' | 'text';
|
|
118
|
+
/**
|
|
119
|
+
* A word that materializes horizontally in the rain panel.
|
|
120
|
+
*
|
|
121
|
+
* The word occupies a contiguous horizontal span at a fixed row.
|
|
122
|
+
* Each character tracks whether it has been "revealed" (formation),
|
|
123
|
+
* is "held" (static), or "released" (converted to a falling drop).
|
|
124
|
+
*/
|
|
125
|
+
export interface WordDrop {
|
|
126
|
+
/** The word to display. */
|
|
127
|
+
readonly word: string;
|
|
128
|
+
/** Source category (determines color). */
|
|
129
|
+
readonly source: WordDropSource;
|
|
130
|
+
/** Top-left column (0-indexed within rain panel). */
|
|
131
|
+
readonly col: number;
|
|
132
|
+
/** Row position (0-indexed). */
|
|
133
|
+
readonly row: number;
|
|
134
|
+
/** Current lifecycle phase. */
|
|
135
|
+
phase: WordDropPhase;
|
|
136
|
+
/** Frame counter within the current phase. */
|
|
137
|
+
phaseFrame: number;
|
|
138
|
+
/**
|
|
139
|
+
* Per-character state.
|
|
140
|
+
* - During 'forming': index < revealedCount are visible.
|
|
141
|
+
* - During 'holding': all visible.
|
|
142
|
+
* - During 'dissolving': dissolveOrder tracks release sequence.
|
|
143
|
+
*/
|
|
144
|
+
revealedCount: number;
|
|
145
|
+
/**
|
|
146
|
+
* Randomized dissolution order. Indices into `word` specifying
|
|
147
|
+
* which character dissolves on each frame of the dissolving phase.
|
|
148
|
+
* Length = word.length. Built once at transition to 'dissolving'.
|
|
149
|
+
*/
|
|
150
|
+
dissolveOrder: number[];
|
|
151
|
+
/** Number of characters dissolved so far. */
|
|
152
|
+
dissolvedCount: number;
|
|
153
|
+
/** Number of frames to hold (chosen at formation). */
|
|
154
|
+
holdDuration: number;
|
|
155
|
+
}
|
|
156
|
+
/** Tracks accumulated tool_use input fragments per session. */
|
|
157
|
+
export interface ToolAccumulator {
|
|
158
|
+
/** Tool name from the content_block_start event. */
|
|
159
|
+
toolName: string;
|
|
160
|
+
/** Accumulated inputDelta JSON fragments. */
|
|
161
|
+
inputBuffer: string;
|
|
162
|
+
/** Whether we have received at least one inputDelta fragment. */
|
|
163
|
+
hasInput: boolean;
|
|
164
|
+
}
|
|
165
|
+
/** Raw SSE event types that are suppressed in --raw mode (shown only in --debug). */
|
|
166
|
+
export declare const SUPPRESSED_RAW_EVENTS: ReadonlySet<string>;
|
|
167
|
+
/** Event kind that determines rain drop coloring. */
|
|
168
|
+
export type RainColorKind = 'text' | 'tool' | 'error' | 'idle';
|
|
169
|
+
/** A character queued for rain display, tagged with its event kind. */
|
|
170
|
+
export interface RainToken {
|
|
171
|
+
readonly char: string;
|
|
172
|
+
readonly kind: 'text' | 'tool' | 'error';
|
|
173
|
+
}
|
|
174
|
+
/** State of a single falling rain drop. */
|
|
175
|
+
export interface RainDrop {
|
|
176
|
+
/** Column within the rain panel (0-indexed). */
|
|
177
|
+
col: number;
|
|
178
|
+
/** Current head row position (can be negative during entry). */
|
|
179
|
+
headRow: number;
|
|
180
|
+
/** Rows per frame (1-3, fractional via speedAccum). */
|
|
181
|
+
speed: number;
|
|
182
|
+
/** Fractional speed accumulator for sub-integer movement. */
|
|
183
|
+
speedAccum: number;
|
|
184
|
+
/** Number of trailing characters (3-6). */
|
|
185
|
+
trailLen: number;
|
|
186
|
+
/** Color scheme for this drop. */
|
|
187
|
+
colorKind: RainColorKind;
|
|
188
|
+
/** Fixed-size ring buffer of characters (length = trailLen + 1). */
|
|
189
|
+
chars: string[];
|
|
190
|
+
/** Rotating write index into chars; wraps at chars.length. */
|
|
191
|
+
headIdx: number;
|
|
192
|
+
/** False once the drop has fully exited the screen. */
|
|
193
|
+
alive: boolean;
|
|
194
|
+
}
|
|
195
|
+
/** A single pre-formatted line in the text panel ring buffer. */
|
|
196
|
+
export interface PanelLine {
|
|
197
|
+
/** Pre-formatted content with SGR codes (no cursor positioning). */
|
|
198
|
+
readonly ansi: string;
|
|
199
|
+
/** Visible character width (excluding ANSI escape sequences). */
|
|
200
|
+
readonly plainLen: number;
|
|
201
|
+
}
|
|
202
|
+
/** Tracks an incomplete text line for a session (text_delta accumulation). */
|
|
203
|
+
export interface SessionPartialLine {
|
|
204
|
+
/** Accumulated text not yet terminated by a newline. */
|
|
205
|
+
buffer: string;
|
|
206
|
+
/** ANSI prefix for the current line (session label SGR, if showLabel). */
|
|
207
|
+
prefix: string;
|
|
208
|
+
}
|
|
209
|
+
/** Per-session tracking for the TUI status bar and metrics. */
|
|
210
|
+
export interface SessionState {
|
|
211
|
+
/** Session label number. */
|
|
212
|
+
readonly label: number;
|
|
213
|
+
/** Running sum of input tokens from message_end events. */
|
|
214
|
+
inputTokens: number;
|
|
215
|
+
/** Running sum of output tokens from message_end events. */
|
|
216
|
+
outputTokens: number;
|
|
217
|
+
/** Count of tool_use events observed. */
|
|
218
|
+
toolCount: number;
|
|
219
|
+
/** Model name from the most recent message_start event. */
|
|
220
|
+
model: string | null;
|
|
221
|
+
/** Current agent phase: thinking, using tools, or idle. */
|
|
222
|
+
phase: 'thinking' | 'tool_use' | 'idle';
|
|
223
|
+
/** Timestamp (Date.now()) of the last event received. */
|
|
224
|
+
lastEventTime: number;
|
|
225
|
+
/** Whether the session has ended. */
|
|
226
|
+
ended: boolean;
|
|
227
|
+
/** Reason for session end, if ended. */
|
|
228
|
+
endReason: string | null;
|
|
229
|
+
/** Name of the tool currently being invoked (null when not in tool_use phase). */
|
|
230
|
+
currentToolName: string | null;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Abstraction over the rendering backend for observe events.
|
|
234
|
+
* Both the plain text renderer and the TUI implement this interface,
|
|
235
|
+
* allowing observe-command.ts to route events without knowing which
|
|
236
|
+
* renderer is active.
|
|
237
|
+
*/
|
|
238
|
+
export interface ObserveEventSink {
|
|
239
|
+
/** Feed a batch of token stream events from one session. */
|
|
240
|
+
pushEvents(label: number, events: readonly TokenStreamEvent[]): void;
|
|
241
|
+
/** Notify that a session ended. */
|
|
242
|
+
sessionEnded(label: number, reason: string): void;
|
|
243
|
+
/** Notify that the WebSocket connection to the daemon was lost. */
|
|
244
|
+
connectionLost(reason: string): void;
|
|
245
|
+
}
|
|
246
|
+
/** Options for creating an ObserveTui instance. */
|
|
247
|
+
export interface ObserveTuiOptions {
|
|
248
|
+
/** Show all event kinds, not just text_delta. */
|
|
249
|
+
readonly raw: boolean;
|
|
250
|
+
/** Prefix output lines with a session label (multi-session mode). */
|
|
251
|
+
readonly showLabel: boolean;
|
|
252
|
+
/** Show absolutely all events including protocol noise. Implies raw. */
|
|
253
|
+
readonly debug: boolean;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Returns true when the current locale supports UTF-8 output.
|
|
257
|
+
* Checks `LANG`, `LC_ALL`, and `LC_CTYPE` environment variables.
|
|
258
|
+
*/
|
|
259
|
+
export declare function isUtf8Locale(): boolean;
|
|
260
|
+
/**
|
|
261
|
+
* Returns the appropriate rain character set based on locale.
|
|
262
|
+
* Uses half-width katakana for UTF-8 locales, ASCII fallback otherwise.
|
|
263
|
+
*/
|
|
264
|
+
export declare function getRainChars(): string;
|
|
265
|
+
/** Regex matching SGR escape sequences (e.g. \x1b[38;2;0;255;70m). */
|
|
266
|
+
export declare const ANSI_RE: RegExp;
|
|
267
|
+
/** Strip SGR escape sequences, returning only visible characters. */
|
|
268
|
+
export declare function stripAnsi(s: string): string;
|
|
269
|
+
/** Visible character count of a string with embedded ANSI escape sequences. */
|
|
270
|
+
export declare function visibleLength(s: string): number;
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types, constants, and layout calculation for the observe TUI.
|
|
3
|
+
*
|
|
4
|
+
* This module is types-and-constants only -- no behavior, no rendering,
|
|
5
|
+
* no I/O. All TUI modules depend on this file; it depends on nothing
|
|
6
|
+
* except Node built-ins (for locale detection).
|
|
7
|
+
*/
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Character sets
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/** Half-width katakana + digits -- same set as mux-splash.ts RAIN_CHARS. */
|
|
12
|
+
export const RAIN_CHARS = 'ヲアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン0123456789';
|
|
13
|
+
/** ASCII fallback for non-UTF-8 locales. */
|
|
14
|
+
export const ASCII_RAIN_CHARS = '0123456789abcdefghijklmnopqrstuvwxyz@#$%&*+=<>~';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Timing
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/** Target frame interval in milliseconds (~15 FPS). */
|
|
19
|
+
export const FRAME_MS = 66;
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Layout constants
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
/** Fraction of terminal width allocated to the rain panel. */
|
|
24
|
+
export const RAIN_WIDTH_FRACTION = 0.18;
|
|
25
|
+
/** Minimum columns for the rain panel when visible. */
|
|
26
|
+
export const MIN_RAIN_COLS = 15;
|
|
27
|
+
/** Minimum columns for the text panel. */
|
|
28
|
+
export const MIN_TEXT_COLS = 40;
|
|
29
|
+
/** Below this total width, rain is hidden and text takes the full width. */
|
|
30
|
+
export const MIN_TOTAL_COLS = 60;
|
|
31
|
+
/** Below this row count, only the status bar is rendered (rain + text suppressed). */
|
|
32
|
+
export const MIN_USABLE_ROWS = 5;
|
|
33
|
+
/** Width of the vertical divider between rain and text panels. */
|
|
34
|
+
export const DIVIDER_WIDTH = 1;
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Capacity limits
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/** Maximum characters queued for rain display before oldest are dropped. */
|
|
39
|
+
export const RAIN_QUEUE_CAPACITY = 2048;
|
|
40
|
+
/** Maximum lines retained in the text panel ring buffer. */
|
|
41
|
+
export const TEXT_BUFFER_CAPACITY = 10_000;
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// SGR color palette
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/**
|
|
46
|
+
* SGR escape sequences (true-color 24-bit).
|
|
47
|
+
* Adapted from mux-splash.ts CLR_* constants.
|
|
48
|
+
* Inline SGR avoids chalk dependency for zero-allocation frame rendering.
|
|
49
|
+
*/
|
|
50
|
+
export const SGR = {
|
|
51
|
+
RESET: '\x1b[0m',
|
|
52
|
+
// Rain colors by event kind
|
|
53
|
+
RAIN_HEAD_TEXT: '\x1b[1;38;2;180;255;180m', // bright white-green (text_delta head)
|
|
54
|
+
RAIN_NEAR_TEXT: '\x1b[38;2;0;255;70m', // bright green trail
|
|
55
|
+
RAIN_FAR_TEXT: '\x1b[38;2;0;120;0m', // dim green trail
|
|
56
|
+
RAIN_HEAD_TOOL: '\x1b[1;38;2;180;255;255m', // bright white-cyan (tool_use head)
|
|
57
|
+
RAIN_NEAR_TOOL: '\x1b[38;2;0;200;255m', // bright cyan trail
|
|
58
|
+
RAIN_FAR_TOOL: '\x1b[38;2;0;100;130m', // dim cyan trail
|
|
59
|
+
RAIN_HEAD_ERROR: '\x1b[1;38;2;255;180;180m', // bright white-red (error head)
|
|
60
|
+
RAIN_NEAR_ERROR: '\x1b[38;2;255;70;70m', // bright red trail
|
|
61
|
+
RAIN_FAR_ERROR: '\x1b[38;2;130;0;0m', // dim red trail
|
|
62
|
+
RAIN_IDLE: '\x1b[38;2;0;80;0m', // very dim green (ambient)
|
|
63
|
+
// Text panel
|
|
64
|
+
TEXT_NORMAL: '\x1b[38;2;200;200;200m', // light grey prose
|
|
65
|
+
TEXT_TOOL: '\x1b[38;2;0;200;255m', // cyan tool headers
|
|
66
|
+
TEXT_TOOL_DIM: '\x1b[38;2;0;130;170m', // dim cyan tool input
|
|
67
|
+
TEXT_ERROR: '\x1b[38;2;255;80;80m', // red errors
|
|
68
|
+
TEXT_SEPARATOR: '\x1b[38;2;80;80;80m', // dim grey separators
|
|
69
|
+
TEXT_META: '\x1b[38;2;100;100;100m', // very dim metadata
|
|
70
|
+
TEXT_DIM: '\x1b[2m', // generic dim
|
|
71
|
+
// Session label colors (cycled per label number)
|
|
72
|
+
SESSION_0: '\x1b[38;2;0;255;70m', // green
|
|
73
|
+
SESSION_1: '\x1b[38;2;0;200;255m', // cyan
|
|
74
|
+
SESSION_2: '\x1b[38;2;200;150;255m', // purple
|
|
75
|
+
SESSION_3: '\x1b[38;2;255;200;0m', // amber
|
|
76
|
+
SESSION_4: '\x1b[38;2;255;100;100m', // salmon
|
|
77
|
+
SESSION_5: '\x1b[38;2;100;255;200m', // mint
|
|
78
|
+
// Divider
|
|
79
|
+
DIVIDER: '\x1b[38;2;40;60;40m', // very dim green vertical line
|
|
80
|
+
// Status bar (cyberpunk palette)
|
|
81
|
+
STATUS_BG: '\x1b[48;2;10;15;10m', // near-black green tint background
|
|
82
|
+
STATUS_LABEL: '\x1b[1;38;2;0;255;70m', // bright green labels
|
|
83
|
+
STATUS_VALUE: '\x1b[38;2;0;200;180m', // teal values
|
|
84
|
+
STATUS_SEPARATOR: '\x1b[38;2;40;70;40m', // dim green separators
|
|
85
|
+
STATUS_HINT: '\x1b[38;2;60;80;60m', // very dim hint text
|
|
86
|
+
STATUS_ERROR: '\x1b[1;38;2;255;70;70m', // bright red for connection lost
|
|
87
|
+
// Word drop colors (brighter than regular rain to stand out)
|
|
88
|
+
WORD_TEXT: '\x1b[1;38;2;150;255;150m', // bright green (text fragments)
|
|
89
|
+
WORD_TOOL: '\x1b[1;38;2;100;255;255m', // bright cyan (tool names)
|
|
90
|
+
WORD_PHASE: '\x1b[1;38;2;255;255;180m', // bright warm yellow (phase labels)
|
|
91
|
+
WORD_MODEL: '\x1b[1;38;2;180;180;255m', // bright lavender (model name)
|
|
92
|
+
// Thinking text in text panel
|
|
93
|
+
TEXT_THINKING: '\x1b[2;3;38;2;0;200;100m', // dim italic green
|
|
94
|
+
// Status bar phase indicators
|
|
95
|
+
STATUS_PHASE_THINKING: '\x1b[38;2;0;255;70m', // green
|
|
96
|
+
STATUS_PHASE_TOOL: '\x1b[38;2;0;200;255m', // cyan
|
|
97
|
+
STATUS_PHASE_IDLE: '\x1b[38;2;80;80;80m', // dim grey
|
|
98
|
+
STATUS_PHASE_ERROR: '\x1b[38;2;255;70;70m', // red
|
|
99
|
+
};
|
|
100
|
+
/** Session label colors, indexed by `label % SESSION_COLORS.length`. */
|
|
101
|
+
export const SESSION_COLORS = [
|
|
102
|
+
SGR.SESSION_0,
|
|
103
|
+
SGR.SESSION_1,
|
|
104
|
+
SGR.SESSION_2,
|
|
105
|
+
SGR.SESSION_3,
|
|
106
|
+
SGR.SESSION_4,
|
|
107
|
+
SGR.SESSION_5,
|
|
108
|
+
];
|
|
109
|
+
/** Returns the SGR color sequence for a given session label number. */
|
|
110
|
+
export function sessionColor(label) {
|
|
111
|
+
return SESSION_COLORS[label % SESSION_COLORS.length];
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Computes the TUI layout for the given terminal dimensions.
|
|
115
|
+
*
|
|
116
|
+
* When `cols >= MIN_TOTAL_COLS`, the rain panel gets ~18% of the width.
|
|
117
|
+
* Otherwise the rain panel is hidden and text takes the full width.
|
|
118
|
+
*/
|
|
119
|
+
export function calculateTuiLayout(cols, rows) {
|
|
120
|
+
const statusRow = rows - 1;
|
|
121
|
+
const textRows = rows - 1;
|
|
122
|
+
if (cols < MIN_TOTAL_COLS) {
|
|
123
|
+
// Too narrow for split: full-width text panel, no rain
|
|
124
|
+
return {
|
|
125
|
+
cols,
|
|
126
|
+
rows,
|
|
127
|
+
rainCols: 0,
|
|
128
|
+
dividerCol: 0,
|
|
129
|
+
textStartCol: 0,
|
|
130
|
+
textCols: cols,
|
|
131
|
+
textRows,
|
|
132
|
+
statusRow,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
const rainCols = Math.max(MIN_RAIN_COLS, Math.floor(cols * RAIN_WIDTH_FRACTION));
|
|
136
|
+
const dividerCol = rainCols;
|
|
137
|
+
const textStartCol = rainCols + DIVIDER_WIDTH;
|
|
138
|
+
const textCols = cols - textStartCol;
|
|
139
|
+
return {
|
|
140
|
+
cols,
|
|
141
|
+
rows,
|
|
142
|
+
rainCols,
|
|
143
|
+
dividerCol,
|
|
144
|
+
textStartCol,
|
|
145
|
+
textCols: Math.max(1, textCols),
|
|
146
|
+
textRows,
|
|
147
|
+
statusRow,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
// Filtered raw event types
|
|
152
|
+
// ---------------------------------------------------------------------------
|
|
153
|
+
/** Raw SSE event types that are suppressed in --raw mode (shown only in --debug). */
|
|
154
|
+
export const SUPPRESSED_RAW_EVENTS = new Set([
|
|
155
|
+
'content_block_stop',
|
|
156
|
+
'message_stop',
|
|
157
|
+
'ping',
|
|
158
|
+
'signature_delta',
|
|
159
|
+
]);
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
// Locale detection
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
163
|
+
/**
|
|
164
|
+
* Returns true when the current locale supports UTF-8 output.
|
|
165
|
+
* Checks `LANG`, `LC_ALL`, and `LC_CTYPE` environment variables.
|
|
166
|
+
*/
|
|
167
|
+
export function isUtf8Locale() {
|
|
168
|
+
const vars = [process.env.LC_ALL, process.env.LC_CTYPE, process.env.LANG];
|
|
169
|
+
for (const v of vars) {
|
|
170
|
+
if (v) {
|
|
171
|
+
const upper = v.toUpperCase();
|
|
172
|
+
if (upper.includes('UTF-8') || upper.includes('UTF8')) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Returns the appropriate rain character set based on locale.
|
|
181
|
+
* Uses half-width katakana for UTF-8 locales, ASCII fallback otherwise.
|
|
182
|
+
*/
|
|
183
|
+
export function getRainChars() {
|
|
184
|
+
return isUtf8Locale() ? RAIN_CHARS : ASCII_RAIN_CHARS;
|
|
185
|
+
}
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
// ANSI helpers
|
|
188
|
+
// ---------------------------------------------------------------------------
|
|
189
|
+
/** Regex matching SGR escape sequences (e.g. \x1b[38;2;0;255;70m). */
|
|
190
|
+
// eslint-disable-next-line no-control-regex
|
|
191
|
+
export const ANSI_RE = /\x1b\[[0-9;]*m/g;
|
|
192
|
+
/** Strip SGR escape sequences, returning only visible characters. */
|
|
193
|
+
export function stripAnsi(s) {
|
|
194
|
+
return s.replace(ANSI_RE, '');
|
|
195
|
+
}
|
|
196
|
+
/** Visible character count of a string with embedded ANSI escape sequences. */
|
|
197
|
+
export function visibleLength(s) {
|
|
198
|
+
return stripAnsi(s).length;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=observe-tui-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe-tui-types.js","sourceRoot":"","sources":["../../src/observe/observe-tui-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TF-IDF word scorer for the observe TUI rain panel.
|
|
3
|
+
*
|
|
4
|
+
* Maintains a running TF-IDF model over the session, treating each
|
|
5
|
+
* message turn or tool call as a "document" and the full session
|
|
6
|
+
* history as the corpus. Produces top-scoring words for rain panel
|
|
7
|
+
* word drops, with throttle/dedup to avoid repetition.
|
|
8
|
+
*
|
|
9
|
+
* Depends on observe-tui-types.ts only. No external dependencies.
|
|
10
|
+
*/
|
|
11
|
+
import type { TokenStreamEvent } from '../docker/token-stream-types.js';
|
|
12
|
+
import type { WordDropSource } from './observe-tui-types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Extract candidate words from plain text.
|
|
15
|
+
*
|
|
16
|
+
* Returns an array of { original, lower } tuples where `original`
|
|
17
|
+
* preserves the source casing for display and `lower` is used for
|
|
18
|
+
* matching and dedup.
|
|
19
|
+
*/
|
|
20
|
+
export declare function extractWordsFromText(text: string): Array<{
|
|
21
|
+
original: string;
|
|
22
|
+
lower: string;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Extract words from code content (e.g., the `code` field of execute_code).
|
|
26
|
+
*
|
|
27
|
+
* Extracts function/method call names, meaningful string literals,
|
|
28
|
+
* dotted tool names, and also runs the regular word extractor on
|
|
29
|
+
* the full text.
|
|
30
|
+
*/
|
|
31
|
+
export declare function extractWordsFromCode(code: string): Array<{
|
|
32
|
+
original: string;
|
|
33
|
+
lower: string;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Try to extract the `code` field from accumulated tool input JSON.
|
|
37
|
+
* Returns the code string, or null if parsing fails or no code field.
|
|
38
|
+
*/
|
|
39
|
+
export declare function extractCodeFromToolInput(accumulatedJson: string): string | null;
|
|
40
|
+
/**
|
|
41
|
+
* Scored word result from TF-IDF computation.
|
|
42
|
+
*/
|
|
43
|
+
export interface ScoredWord {
|
|
44
|
+
/** Original-cased word for display. */
|
|
45
|
+
word: string;
|
|
46
|
+
/** Lowercase key for dedup. */
|
|
47
|
+
key: string;
|
|
48
|
+
/** TF-IDF score. */
|
|
49
|
+
score: number;
|
|
50
|
+
}
|
|
51
|
+
/** Public interface for the word scorer. */
|
|
52
|
+
export interface WordScorer {
|
|
53
|
+
/**
|
|
54
|
+
* Score a new document (message text or tool input).
|
|
55
|
+
* Adds it to the corpus and returns the top-scoring words.
|
|
56
|
+
*/
|
|
57
|
+
scoreDocument(words: Array<{
|
|
58
|
+
original: string;
|
|
59
|
+
lower: string;
|
|
60
|
+
}>): ScoredWord[];
|
|
61
|
+
/**
|
|
62
|
+
* Check if a word can be shown (not recently displayed).
|
|
63
|
+
* If allowed, records it as shown.
|
|
64
|
+
*/
|
|
65
|
+
tryShow(key: string, now?: number): boolean;
|
|
66
|
+
/** Number of documents in the corpus. */
|
|
67
|
+
readonly documentCount: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a WordScorer that maintains a running TF-IDF model.
|
|
71
|
+
*
|
|
72
|
+
* @param topN - Number of top-scoring words to return (default: 3)
|
|
73
|
+
* @param dedupWindowMs - Milliseconds before re-showing a word (default: 30s)
|
|
74
|
+
*/
|
|
75
|
+
export declare function createWordScorer(topN?: number, dedupWindowMs?: number): WordScorer;
|
|
76
|
+
/**
|
|
77
|
+
* Clean up MCP tool names for display.
|
|
78
|
+
* Strips `mcp__` prefix and server name prefix.
|
|
79
|
+
* e.g., `mcp__ironcurtain__execute_code` -> `execute_code`
|
|
80
|
+
*/
|
|
81
|
+
export declare function cleanToolName(toolName: string): string;
|
|
82
|
+
/**
|
|
83
|
+
* Shorten a model name for display.
|
|
84
|
+
* Strips the "claude-" prefix if present.
|
|
85
|
+
* e.g., "claude-sonnet-4-20250514" -> "sonnet-4-20250514"
|
|
86
|
+
*/
|
|
87
|
+
export declare function shortenModelName(model: string): string;
|
|
88
|
+
/** Tracks accumulated text for periodic mid-stream word extraction. */
|
|
89
|
+
export interface TextAccumulator {
|
|
90
|
+
/** Append text and return words if the threshold is reached. */
|
|
91
|
+
append(text: string): Array<{
|
|
92
|
+
original: string;
|
|
93
|
+
lower: string;
|
|
94
|
+
}> | null;
|
|
95
|
+
/** Flush remaining text and return words (for message_end). */
|
|
96
|
+
flush(): Array<{
|
|
97
|
+
original: string;
|
|
98
|
+
lower: string;
|
|
99
|
+
}>;
|
|
100
|
+
/** Reset the accumulator (for message_start). */
|
|
101
|
+
reset(): void;
|
|
102
|
+
/** Current accumulated text length. */
|
|
103
|
+
readonly length: number;
|
|
104
|
+
}
|
|
105
|
+
export declare function createTextAccumulator(threshold?: number): TextAccumulator;
|
|
106
|
+
/** Tracks accumulated tool input JSON for word extraction on completion. */
|
|
107
|
+
export interface ToolInputAccumulator {
|
|
108
|
+
/** Start a new tool call. */
|
|
109
|
+
start(toolName: string): void;
|
|
110
|
+
/** Append an input JSON delta fragment. */
|
|
111
|
+
appendDelta(delta: string): void;
|
|
112
|
+
/** Flush the accumulated input and return extracted words plus the tool name. */
|
|
113
|
+
flush(): {
|
|
114
|
+
toolName: string;
|
|
115
|
+
words: Array<{
|
|
116
|
+
original: string;
|
|
117
|
+
lower: string;
|
|
118
|
+
}>;
|
|
119
|
+
} | null;
|
|
120
|
+
/** Whether a tool call is in progress. */
|
|
121
|
+
readonly active: boolean;
|
|
122
|
+
}
|
|
123
|
+
export declare function createToolInputAccumulator(): ToolInputAccumulator;
|
|
124
|
+
/** Per-session scoring state (text accumulator + tool input accumulator). */
|
|
125
|
+
export interface SessionWordState {
|
|
126
|
+
readonly textAccumulator: TextAccumulator;
|
|
127
|
+
readonly toolAccumulator: ToolInputAccumulator;
|
|
128
|
+
}
|
|
129
|
+
export declare function createSessionWordState(): SessionWordState;
|
|
130
|
+
/** A word drop candidate ready for enqueuing. */
|
|
131
|
+
export interface WordDropCandidate {
|
|
132
|
+
word: string;
|
|
133
|
+
source: WordDropSource;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Process a token stream event through the word scorer and produce
|
|
137
|
+
* word drop candidates. Returns an array of candidates to enqueue.
|
|
138
|
+
*
|
|
139
|
+
* This is the main integration point between the orchestrator and
|
|
140
|
+
* the word scorer. The caller is responsible for calling
|
|
141
|
+
* `rainEngine.enqueueWord()` for each returned candidate.
|
|
142
|
+
*/
|
|
143
|
+
export declare function processEventForWords(event: TokenStreamEvent, sessionWordState: SessionWordState, scorer: WordScorer, now?: number): WordDropCandidate[];
|