mixdog 0.9.174 → 1.0.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 +11 -12
- package/package.json +2 -2
- package/scripts/agent-turn-trace-probe.mjs +1 -1
- package/scripts/build-ffmpeg-runtime.sh +16 -0
- package/scripts/build-runtime-linux.sh +8 -2
- package/scripts/build-runtime-macos.sh +8 -2
- package/scripts/computer-task-cost-report.mjs +1 -9
- package/scripts/context-renewal-live-check.mjs +2 -1
- package/scripts/graph-parity.mjs +78 -55
- package/scripts/lib/bench-sandbox.mjs +67 -0
- package/scripts/lib/bench-sandbox.test.mjs +54 -0
- package/scripts/lib/coverage.mjs +2 -4
- package/scripts/lib/run-node-tests.mjs +24 -1
- package/scripts/lib/session-bench-fmt.mjs +65 -0
- package/scripts/lib/session-bench-render.mjs +394 -0
- package/scripts/lib/smoke-loop-shared.mjs +28 -0
- package/scripts/lib/smoke-loop-shared.test.mjs +22 -0
- package/scripts/lib/trace-row.mjs +40 -0
- package/scripts/lib/trace-row.test.mjs +47 -0
- package/scripts/lib/trace-stats.mjs +7 -0
- package/scripts/lib/trace-stats.test.mjs +7 -1
- package/scripts/llm-trace-summary.mjs +2 -44
- package/scripts/memory-chunk-quality.mjs +1 -1
- package/scripts/memory-layer2-check.mjs +1 -1
- package/scripts/pg-memory-diet.mjs +1 -1
- package/scripts/plan-runtime-release-tag.mjs +57 -0
- package/scripts/prepare-native-assets.mjs +1 -1
- package/scripts/provider-contract-test-env.mjs +21 -0
- package/scripts/release-paths.mjs +1 -0
- package/scripts/routing-corpus.mjs +1 -11
- package/scripts/session-diag.mjs +2 -44
- package/scripts/smoke-runtime-negative.sh +7 -1
- package/scripts/test-data-dir.mjs +19 -0
- package/scripts/tidy/sync-engines-manifest.mjs +8 -10
- package/scripts/tool-efficiency-diag.mjs +1 -4
- package/scripts/voice-runtime-config.json +1 -1
- package/src/app.mjs +1 -1
- package/src/defaults/skills/code-tidy/SKILL.md +5 -2
- package/src/defaults/skills/pptx/SKILL.md +1 -1
- package/src/defaults/skills/pptx/references/pictures.md +1 -1
- package/src/defaults/skills/pptx/scripts/review-deck.mjs +13 -4
- package/src/defaults/skills/skill-creator/scripts/validate-skill.mjs +40 -40
- package/src/defaults/skills/xlsx/SKILL.md +1 -0
- package/src/headless-exec.mjs +4 -2
- package/src/headless-role.mjs +81 -68
- package/src/lib/keychain-cjs.cjs +26 -49
- package/src/lib/mixdog-debug.cjs +1 -1
- package/src/lib/rules-builder.cjs +4 -3
- package/src/mixdog-session-runtime.mjs +2 -2
- package/src/repl/slash-commands.mjs +1 -1
- package/src/repl/stream-sink.mjs +1 -1
- package/src/repl/turn-output.mjs +2 -2
- package/src/repl.mjs +1 -1
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/session-prep.mjs +1 -1
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +20 -16
- package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +0 -3
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +23 -22
- package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +2 -2
- package/src/runtime/{shared/llm/index.mjs → agent/orchestrator/maintenance-preset.mjs} +2 -2
- package/src/runtime/agent/orchestrator/mcp/client-config.mjs +2 -1
- package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +7 -36
- package/src/runtime/agent/orchestrator/mcp/client.mjs +28 -2
- package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-api-transport.mjs +6 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +1 -47
- package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +1 -383
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +2 -59
- package/src/runtime/agent/orchestrator/providers/anthropic-midstream-recovery.mjs +32 -31
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +10 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +12 -61
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +30 -67
- package/src/runtime/agent/orchestrator/providers/anthropic-recovery-guards.mjs +9 -12
- package/src/runtime/agent/orchestrator/providers/anthropic-server-fallback.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/leak-guard.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-stop.mjs +20 -12
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +12 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-outcome.mjs +4 -3
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn.mjs +5 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-watchdogs.mjs +18 -10
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +20 -16
- package/src/runtime/agent/orchestrator/providers/anthropic-thinking-contract.mjs +1 -26
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +9 -13
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +8 -3
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +4 -8
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +21 -30
- package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +4 -2
- package/src/runtime/agent/orchestrator/providers/api-usage.mjs +10 -8
- package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +13 -10
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +29 -0
- package/src/runtime/agent/orchestrator/providers/cursor-wire-guards.mjs +0 -1
- package/src/runtime/agent/orchestrator/providers/cursor-wire-protobuf.mjs +10 -26
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-bridge.mjs +2 -3
- package/src/runtime/agent/orchestrator/providers/cursor-wire-transport.mjs +7 -3
- package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +9 -15
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +31 -5
- package/src/runtime/agent/orchestrator/providers/gemini-cache-policy.mjs +1 -2
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +1 -4
- package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +48 -46
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +18 -19
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +3 -26
- package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +41 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +5 -19
- package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +16 -83
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +26 -8
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-models.mjs +8 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +30 -1
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-stream-labels.mjs +6 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-system-blocks.mjs +17 -0
- package/src/runtime/agent/orchestrator/providers/{anthropic-leaked-toolcall.mjs → lib/leaked-toolcall.mjs} +7 -7
- package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +44 -0
- package/src/runtime/agent/orchestrator/providers/lib/send-callbacks.mjs +12 -0
- package/src/runtime/agent/orchestrator/providers/lib/sse-framing.mjs +9 -8
- package/src/runtime/agent/orchestrator/providers/lib/transport-fallback-trace.mjs +25 -0
- package/src/runtime/agent/orchestrator/providers/model-catalog-projection.mjs +1 -181
- package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +1 -796
- package/src/runtime/agent/orchestrator/providers/model-pricing-rates.mjs +1 -71
- package/src/runtime/agent/orchestrator/providers/npm-cli-version.mjs +87 -0
- package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +4 -5
- package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +4 -5
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +2 -21
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +2 -3
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/tool-call-acc.mjs +1 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-options.mjs +4 -8
- package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +45 -32
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-state.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +6 -12
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream-common.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +14 -22
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +25 -34
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +14 -14
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-request.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/terminal-frames.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-items.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-outcome.mjs +2 -13
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-state.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +2 -44
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -16
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +6 -5
- package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +4 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +3 -2
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/tool-calls.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-ws-text-relay.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +6 -4
- package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +1 -130
- package/src/runtime/agent/orchestrator/providers/registry.mjs +20 -16
- package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +21 -20
- package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +17 -17
- package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +193 -0
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +421 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-inspection.mjs +17 -17
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-inspection.mjs +1 -1
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-shape.mjs +3 -3
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-delta.mjs +101 -0
- package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +145 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/extension-scopes.mjs +5 -5
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/fs-utils.mjs +1 -1
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-control.mjs +2 -2
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-mutations.mjs +2 -2
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-reminder.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-state.mjs +326 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-storage.mjs +2 -2
- package/src/runtime/agent/orchestrator/runtime-core/goal-tasks.mjs +148 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-title.mjs +2 -2
- package/src/runtime/agent/orchestrator/runtime-core/goal-tool-defs.mjs +140 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-turns.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/model-capabilities.mjs +140 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/orchestration.mjs +1 -1
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/plugin-mcp.mjs +2 -2
- package/src/runtime/agent/orchestrator/runtime-core/session-id.mjs +2 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-route-policy.mjs +2 -2
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-text.mjs +3 -3
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-title.mjs +1 -2
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/skill-tool-loading.mjs +1 -1
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-catalog-schema.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +747 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +149 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/agents.mjs +11 -7
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/context.mjs +6 -4
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/packs.mjs +2 -3
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow-ids.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +255 -0
- package/src/runtime/agent/orchestrator/session/agent-loop.mjs +3 -4
- package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +2 -4
- package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/context-identity-writer.mjs +162 -0
- package/src/runtime/agent/orchestrator/session/context-tool-pairs.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/context-tool-schema.mjs +87 -0
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +3 -245
- package/src/runtime/agent/orchestrator/session/eager-dispatch/admission.mjs +2 -3
- package/src/runtime/agent/orchestrator/session/eager-dispatch/mutation-paths.mjs +54 -0
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/lifecycle-scan.mjs +1 -16
- package/src/runtime/agent/orchestrator/session/loop/arg-schema-coerce.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +13 -1
- package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +4 -4
- package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/continuation.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +2 -3
- package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +6 -3
- package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/call-prep.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +6 -10
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop.mjs +5 -6
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +5 -5
- package/src/runtime/agent/orchestrator/session/manager/foreign-pending-messages.mjs +40 -64
- package/src/runtime/agent/orchestrator/session/manager/pending-lifecycle-epoch.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +24 -16
- package/src/runtime/agent/orchestrator/session/manager/pending-persist-queue.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-file.mjs +7 -13
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-path.mjs +17 -2
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-shard.mjs +139 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-sweep.mjs +34 -14
- package/src/runtime/agent/orchestrator/session/manager/prefetch-bridge/file-prefetch.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +4 -18
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +10 -18
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +6 -10
- package/src/runtime/agent/orchestrator/session/manager.mjs +1 -2
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +11 -6
- package/src/runtime/agent/orchestrator/session/result-classification.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/send-instrumentation.mjs +194 -0
- package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +6 -198
- package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +7 -7
- package/src/runtime/agent/orchestrator/session/store/fs-probe.mjs +0 -19
- package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +15 -8
- package/src/runtime/agent/orchestrator/session/store/listing.mjs +18 -29
- package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +6 -36
- package/src/runtime/agent/orchestrator/session/store/save-delta.mjs +148 -0
- package/src/runtime/agent/orchestrator/session/store/save-fault.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +15 -142
- package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +4 -2
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +9 -22
- package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +14 -6
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +200 -52
- package/src/runtime/agent/orchestrator/session/store-summary-log.mjs +81 -0
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +38 -4
- package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +5 -2
- package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +3 -5
- package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +54 -0
- package/src/runtime/agent/orchestrator/session/store.mjs +5 -9
- package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +19 -8
- package/src/runtime/agent/orchestrator/session/tool-batch/flush.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/transcript-restore/agent-envelope.mjs +489 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +419 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-status.mjs +358 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-text.mjs +157 -0
- package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +2 -3
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +32 -11
- package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +1 -31
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/benign-exit.mjs +7 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/deadline-plan.mjs +11 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/spawn-env.mjs +4 -0
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +13 -7
- package/src/runtime/agent/orchestrator/tools/builtin/binary-file.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +11 -5
- package/src/runtime/agent/orchestrator/tools/builtin/device-paths.mjs +1 -206
- package/src/runtime/agent/orchestrator/tools/builtin/find-files-tool.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +39 -3
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-path-fanout.mjs +5 -7
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-request.mjs +7 -25
- package/src/runtime/agent/orchestrator/tools/builtin/lib/list-helpers.mjs +27 -1
- package/src/runtime/agent/orchestrator/tools/builtin/lib/search-input-helpers.mjs +37 -0
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-insights.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +28 -18
- package/src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs +6 -10
- package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +15 -17
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/builtin/read-image-resize.mjs +1 -399
- package/src/runtime/agent/orchestrator/tools/builtin/read-line-collector.mjs +3 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-office-files.mjs +8 -15
- package/src/runtime/agent/orchestrator/tools/builtin/read-range-index.mjs +5 -8
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-render.mjs +3 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-source-windows.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +6 -5
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-dispatch.mjs +50 -5
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-render.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-snapshot.mjs +2 -5
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +11 -1
- package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/search-glob-tool.mjs +3 -35
- package/src/runtime/agent/orchestrator/tools/builtin/search-grep-tool.mjs +0 -12
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +50 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +9 -26
- package/src/runtime/agent/orchestrator/tools/builtin/shell-lossless-compact.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/builtin/shell-output.mjs +6 -5
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +8 -3
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +6 -14
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-validation.mjs +3 -9
- package/src/runtime/agent/orchestrator/tools/builtin/tool-output-limit.mjs +1 -60
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +10 -32
- package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/code-graph/modes/calls.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/project-root.mjs +3 -7
- package/src/runtime/agent/orchestrator/tools/code-graph/search-references.mjs +15 -10
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +6 -10
- package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +4 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/text-columns.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/trusted-roots.mjs +3 -7
- package/src/runtime/agent/orchestrator/tools/code-graph-state.mjs +1 -84
- package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +11 -11
- package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
- package/src/runtime/agent/orchestrator/tools/io-trace.mjs +28 -0
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +38 -5
- package/src/runtime/agent/orchestrator/tools/lib/shell-warm-standby.mjs +10 -4
- package/src/runtime/agent/orchestrator/tools/patch/apply-patch/codex-batch.mjs +6 -26
- package/src/runtime/agent/orchestrator/tools/patch/apply-patch/request.mjs +0 -3
- package/src/runtime/agent/orchestrator/tools/patch/dispatch/native-report.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +3 -10
- package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/mutation-output.mjs +6 -19
- package/src/runtime/agent/orchestrator/tools/patch/native-server.mjs +5 -15
- package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +1 -3
- package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +4 -0
- package/src/runtime/agent/orchestrator/tools/patch/sequence/run.mjs +1 -3
- package/src/runtime/agent/orchestrator/tools/patch/sequence/units.mjs +4 -10
- package/src/runtime/agent/orchestrator/tools/patch/sequence.mjs +1 -2
- package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +5 -11
- package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +1 -2
- package/src/runtime/agent/orchestrator/tools/patch-manifest-path.mjs +3 -0
- package/src/runtime/agent/orchestrator/tools/patch-manifest.json +12 -12
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +87 -12
- package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +15 -25
- package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +13 -13
- package/src/runtime/{shared/llm → agent/orchestrator}/usage-log.mjs +1 -1
- package/src/runtime/attachments/pdf-extract.mjs +32 -29
- package/src/runtime/attachments/store.mjs +2 -1
- package/src/runtime/browser-bridge/browser-action-contract.d.mts +0 -2
- package/src/runtime/browser-bridge/client.mjs +30 -9
- package/src/runtime/channels/data/voice-runtime-manifest.json +21 -21
- package/src/runtime/channels/lib/config.mjs +4 -4
- package/src/runtime/channels/lib/event-pipeline.mjs +3 -3
- package/src/runtime/channels/lib/event-queue.mjs +1 -0
- package/src/runtime/channels/lib/executor.mjs +3 -25
- package/src/runtime/channels/lib/runtime-paths.mjs +36 -41
- package/src/runtime/channels/lib/scheduler.mjs +28 -44
- package/src/runtime/{shared → channels/lib}/schedules-db.mjs +3 -3
- package/src/runtime/channels/lib/tool-dispatch.mjs +3 -8
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +19 -23
- package/src/runtime/channels/lib/voice-transcription.mjs +13 -9
- package/src/runtime/channels/lib/webhook/log.mjs +2 -29
- package/src/runtime/channels/lib/webhook/request-handler.mjs +4 -5
- package/src/runtime/channels/lib/webhook/session-dispatch.mjs +8 -12
- package/src/runtime/channels/lib/webhook/signature.mjs +15 -19
- package/src/runtime/channels/lib/webhook/untrusted-fence.mjs +9 -0
- package/src/runtime/channels/lib/webhook.mjs +1 -1
- package/src/runtime/{shared → channels/lib}/webhooks-db.mjs +3 -3
- package/src/runtime/channels/lib/whisper-server.mjs +3 -2
- package/src/runtime/channels/lib/worker-bootstrap.mjs +19 -21
- package/src/runtime/channels/lib/worker-main.mjs +49 -58
- package/src/runtime/computer-bridge/client.mjs +7 -10
- package/src/runtime/computer-bridge/core-actions.mjs +1 -1
- package/src/runtime/computer-bridge/limits.d.mts +0 -1
- package/src/runtime/github/client.mjs +11 -6
- package/src/runtime/github/commands.mjs +4 -2
- package/src/runtime/github/contract.mjs +3 -1
- package/src/runtime/local-provider/hugging-face.mjs +3 -3
- package/src/runtime/local-provider/registered-models.mjs +3 -1
- package/src/runtime/local-provider/request-queue.mjs +24 -29
- package/src/runtime/local-provider/serial-chain.mjs +19 -0
- package/src/runtime/local-provider/server-process.mjs +2 -10
- package/src/runtime/media/adapters/antigravity-image.mjs +2 -2
- package/src/runtime/media/adapters/codex-image.mjs +2 -2
- package/src/runtime/media/adapters/gemini-image.mjs +2 -1
- package/src/runtime/media/adapters/gemini-video.mjs +3 -7
- package/src/runtime/media/adapters/xai-media.mjs +3 -7
- package/src/runtime/media/bounded-signal.mjs +13 -0
- package/src/runtime/media/store.mjs +9 -3
- package/src/runtime/memory/data/runtime-manifest.json +11 -11
- package/src/runtime/memory/index.mjs +6 -21
- package/src/runtime/memory/lib/core-memory-file.mjs +1 -1
- package/src/runtime/memory/lib/cycle-scheduler/backlog-probe.mjs +2 -1
- package/src/runtime/memory/lib/cycle1/cycle1-plan.mjs +1 -1
- package/src/runtime/memory/lib/embedding-idle-lease.mjs +18 -0
- package/src/runtime/memory/lib/embedding-provider.mjs +13 -0
- package/src/runtime/memory/lib/embedding-worker.mjs +12 -1
- package/src/runtime/memory/lib/http-router/ingest-routes.mjs +1 -1
- package/src/runtime/memory/lib/http-router/session-routes.mjs +1 -1
- package/src/runtime/memory/lib/ingest/transcript-discovery.mjs +1 -1
- package/src/runtime/memory/lib/memory-action-handlers/manage-actions.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle1.mjs +24 -1
- package/src/runtime/memory/lib/memory-cycle2-quarantine.mjs +99 -0
- package/src/runtime/memory/lib/memory-cycle2-review.mjs +8 -2
- package/src/runtime/memory/lib/memory-cycle2.mjs +49 -9
- package/src/runtime/memory/lib/memory-embed.mjs +3 -2
- package/src/runtime/memory/lib/memory-extraction.mjs +1 -2
- package/src/runtime/memory/lib/memory-fingerprint.mjs +1 -1
- package/src/runtime/memory/lib/memory-ops-policy.mjs +18 -2
- package/src/runtime/memory/lib/memory-retrievers.mjs +2 -2
- package/src/runtime/memory/lib/memory-text-utils.mjs +1 -1
- package/src/runtime/memory/lib/pg/adapter.mjs +3 -3
- package/src/runtime/memory/lib/pg/process.mjs +2 -2
- package/src/runtime/memory/lib/pg/supervisor.mjs +1 -2
- package/src/runtime/memory/lib/query-ranking.mjs +2 -2
- package/src/runtime/memory/lib/query-search-plan.mjs +1 -1
- package/src/runtime/memory/lib/recall-format.mjs +3 -4
- package/src/runtime/memory/lib/runtime-fetcher.mjs +94 -23
- package/src/runtime/memory/lib/session-ingest-runtime.mjs +1 -1
- package/src/runtime/memory/lib/trace-store.mjs +6 -2
- package/src/runtime/office/authoring/pptx-author-action.mjs +8 -3
- package/src/runtime/office/authoring/pptx-brief.mjs +3 -3
- package/src/runtime/office/authoring/pptx-html-build.mjs +109 -37
- package/src/runtime/office/authoring/pptx-html-geometry.mjs +188 -46
- package/src/runtime/office/authoring/pptx-html-measure.mjs +60 -21
- package/src/runtime/office/authoring/pptx-html-runner.mjs +83 -29
- package/src/runtime/office/authoring/pptx-script-normalize.mjs +156 -16
- package/src/runtime/office/bench/polish-benchmark.mjs +204 -201
- package/src/runtime/office/bench/quality-live-benchmark.mjs +8 -4
- package/src/runtime/office/capabilities-catalog.mjs +12 -1
- package/src/runtime/office/capabilities-signatures.mjs +31 -11
- package/src/runtime/office/capabilities.mjs +39 -20
- package/src/runtime/office/com/com-adapter.mjs +16 -14
- package/src/runtime/office/com/office-com-host.ps1 +118 -140
- package/src/runtime/office/core/excel-snapshot-normalize.mjs +149 -0
- package/src/runtime/office/core/office-actions-batch.mjs +4 -7
- package/src/runtime/office/core/office-actions-inspect.mjs +17 -14
- package/src/runtime/office/core/office-actions-open.mjs +1 -6
- package/src/runtime/office/core/office-core.mjs +107 -49
- package/src/runtime/office/core/office-finalize/review-stage.mjs +4 -1
- package/src/runtime/office/core/office-qa/design-review-stage.mjs +2 -9
- package/src/runtime/office/core/office-qa/review-assembly.mjs +9 -7
- package/src/runtime/office/core/office-sessions.mjs +10 -149
- package/src/runtime/office/design/composition-system.mjs +5 -10
- package/src/runtime/office/design/design-system.mjs +1 -2
- package/src/runtime/office/design/docx/design-docx/section.mjs +1 -1
- package/src/runtime/office/design/docx/design-docx-components.mjs +2 -1
- package/src/runtime/office/design/docx/design-docx.mjs +2 -2
- package/src/runtime/office/design/xlsx/design-xlsx.mjs +6 -2
- package/src/runtime/office/pdf/pdf-analysis.mjs +39 -32
- package/src/runtime/office/pdf/pdf-batch-content.mjs +1 -1
- package/src/runtime/office/pdf/pdf-writer.mjs +26 -22
- package/src/runtime/office/portable/docx-tracked-edits.mjs +6 -6
- package/src/runtime/office/portable/font-provisioner.mjs +37 -11
- package/src/runtime/office/portable/portable-cells.mjs +2 -6
- package/src/runtime/office/portable/portable-chart.mjs +6 -6
- package/src/runtime/office/portable/portable-docx-edits.mjs +4 -9
- package/src/runtime/office/portable/portable-docx-operations.mjs +16 -13
- package/src/runtime/office/portable/portable-docx-parts.mjs +7 -2
- package/src/runtime/office/portable/portable-docx-xml.mjs +36 -28
- package/src/runtime/office/portable/portable-opc.mjs +11 -13
- package/src/runtime/office/portable/portable-package.mjs +3 -4
- package/src/runtime/office/portable/portable-pivot.mjs +7 -3
- package/src/runtime/office/portable/portable-pptx-charts.mjs +59 -42
- package/src/runtime/office/portable/portable-pptx-core.mjs +14 -4
- package/src/runtime/office/portable/portable-pptx-package.mjs +5 -4
- package/src/runtime/office/portable/portable-pptx-shapes.mjs +25 -8
- package/src/runtime/office/portable/portable-sheet-audits.mjs +4 -8
- package/src/runtime/office/portable/portable-sheet-page.mjs +2 -2
- package/src/runtime/office/portable/portable-sheet-xml.mjs +1 -1
- package/src/runtime/office/portable/portable-snapshot-docx.mjs +2 -3
- package/src/runtime/office/portable/portable-snapshot-pptx.mjs +3 -1
- package/src/runtime/office/portable/portable-soffice.mjs +27 -22
- package/src/runtime/office/portable/portable-validation-package.mjs +1 -2
- package/src/runtime/office/portable/portable-validation.mjs +9 -3
- package/src/runtime/office/portable/portable-xlsx-operations.mjs +2 -49
- package/src/runtime/office/portable/portable-xlsx-pivot-ops.mjs +10 -5
- package/src/runtime/office/portable/portable-xlsx-range-layout.mjs +3 -2
- package/src/runtime/office/portable/portable-xlsx-reference-shift.mjs +189 -98
- package/src/runtime/office/portable/portable-xlsx-sheet-edits.mjs +26 -6
- package/src/runtime/office/portable/portable-xml.mjs +1 -4
- package/src/runtime/office/portable/text-metrics.mjs +14 -17
- package/src/runtime/office/portable/xlsx-contract.mjs +37 -3
- package/src/runtime/office/portable/xlsx-formula-engine.mjs +7 -1
- package/src/runtime/office/quality/assurance-checklist.mjs +1 -1
- package/src/runtime/office/quality/assurance-rendered.mjs +1 -1
- package/src/runtime/office/quality/assurance-structure-pptx.mjs +17 -8
- package/src/runtime/office/quality/assurance-structure.mjs +0 -2
- package/src/runtime/office/quality/design-aesthetics.mjs +2 -9
- package/src/runtime/office/quality/design-deck-diversity.mjs +2 -9
- package/src/runtime/office/quality/design-review.mjs +3 -3
- package/src/runtime/office/quality/pptx-slide-roles.mjs +3 -3
- package/src/runtime/office/shared/line-breaks.mjs +3 -1
- package/src/runtime/office/tool-defs.mjs +2 -2
- package/src/runtime/shared/async-log-appender.mjs +83 -0
- package/src/runtime/shared/automation-presence.mjs +9 -0
- package/src/runtime/shared/buffered-appender.mjs +10 -7
- package/src/runtime/shared/child-spawn-gate.mjs +2 -37
- package/src/runtime/shared/code-graph-state.mjs +84 -0
- package/src/runtime/shared/config.mjs +71 -89
- package/src/runtime/shared/context-inspection.mjs +56 -0
- package/src/runtime/shared/context-measurement.mjs +83 -0
- package/src/runtime/shared/device-paths.mjs +206 -0
- package/src/{standalone → runtime/shared}/fair-call-scheduler/owner-groups.mjs +1 -1
- package/src/runtime/shared/fair-call-scheduler.mjs +198 -0
- package/src/runtime/shared/file-lock.mjs +85 -55
- package/src/runtime/shared/http-request-body.mjs +3 -1
- package/src/runtime/shared/llm/anthropic-betas.mjs +46 -0
- package/src/runtime/shared/llm/anthropic-effort.mjs +378 -0
- package/src/runtime/shared/llm/anthropic-thinking-contract.mjs +29 -0
- package/src/runtime/shared/llm/cost.mjs +19 -10
- package/src/runtime/shared/llm/model-catalog-projection.mjs +182 -0
- package/src/runtime/shared/llm/model-catalog.mjs +799 -0
- package/src/runtime/shared/llm/model-pricing-rates.mjs +78 -0
- package/src/runtime/shared/llm/provider-catalog-cache.mjs +130 -0
- package/src/runtime/shared/llm/usage-accounting.mjs +12 -11
- package/src/runtime/shared/llm/usage-context.mjs +7 -0
- package/src/runtime/shared/llm/usage-ledger-import.mjs +14 -3
- package/src/runtime/shared/llm/usage-ledger-quota.mjs +97 -37
- package/src/runtime/shared/llm/usage-ledger-repair.mjs +3 -1
- package/src/runtime/shared/llm/usage-ledger-rollup.mjs +6 -10
- package/src/runtime/shared/llm/usage-ledger.mjs +6 -7
- package/src/runtime/shared/llm/usage-pricing-refresh.mjs +1 -1
- package/src/runtime/shared/llm/usage-rollup.mjs +0 -1
- package/src/runtime/shared/model-display.mjs +178 -0
- package/src/runtime/shared/notify-trace.mjs +14 -3
- package/src/runtime/shared/owner-fair-gate.mjs +1 -1
- package/src/runtime/shared/pending-json-projection.mjs +17 -0
- package/src/runtime/shared/pristine-execution.mjs +4 -3
- package/src/runtime/shared/process-lifecycle.mjs +18 -7
- package/src/runtime/shared/read-image-resize.mjs +399 -0
- package/src/runtime/shared/schedule-model-ref.mjs +2 -2
- package/src/runtime/shared/staged-update.mjs +7 -36
- package/src/runtime/shared/statusline/ansi.mjs +161 -0
- package/src/{ui → runtime/shared/statusline}/statusline-format.mjs +5 -5
- package/src/{ui → runtime/shared/statusline}/statusline-segments.mjs +54 -50
- package/src/runtime/shared/tool-card-model/background-task.mjs +1 -1
- package/src/runtime/shared/tool-card-model/card-detail.mjs +2 -2
- package/src/runtime/shared/tool-card-model/card-status.mjs +7 -5
- package/src/runtime/shared/tool-card-model/git-result.mjs +10 -0
- package/src/runtime/shared/tool-card-model/terminal-status.mjs +6 -2
- package/src/runtime/shared/tool-card-model.golden-cases.mjs +2 -1
- package/src/runtime/shared/tool-output-limit.mjs +60 -0
- package/src/runtime/shared/tool-primitives.mjs +1 -1
- package/src/runtime/shared/tool-result-summary.mjs +1 -0
- package/src/runtime/shared/tool-status.mjs +35 -2
- package/src/runtime/shared/transcript-metadata.mjs +1 -1
- package/src/runtime/shared/transcript-writer/transcript-file.mjs +1 -2
- package/src/runtime/shared/turn-snapshot-store.mjs +23 -17
- package/src/runtime/shared/turn-worktree-snapshot.mjs +8 -4
- package/src/runtime/shared/update-checker.mjs +1 -3
- package/src/runtime/tidy/apply.mjs +2 -2
- package/src/runtime/tidy/function-length.mjs +63 -0
- package/src/runtime/tidy/report.mjs +6 -3
- package/src/runtime/tidy/runners/shared.mjs +1 -0
- package/src/runtime/tidy/runners/shellcheck.mjs +1 -1
- package/src/runtime/tidy/tool.mjs +10 -3
- package/src/runtime/web-search/index.mjs +6 -17
- package/src/runtime/web-search/lib/cache.mjs +8 -54
- package/src/runtime/web-search/lib/config.mjs +2 -6
- package/src/runtime/web-search/lib/debounced-json-writer.mjs +62 -0
- package/src/runtime/web-search/lib/http-fetch.mjs +24 -112
- package/src/runtime/web-search/lib/package-version.mjs +10 -0
- package/src/runtime/web-search/lib/ssrf-guard.mjs +34 -28
- package/src/runtime/web-search/lib/state.mjs +8 -53
- package/src/runtime/web-search/lib/web-tools.mjs +5 -5
- package/src/session-runtime/agent-tool-routing.mjs +3 -9
- package/src/{runtime/shared → session-runtime}/automation-workflow.mjs +4 -4
- package/src/session-runtime/boot/apis.mjs +4 -5
- package/src/session-runtime/boot/begin.mjs +1 -1
- package/src/session-runtime/boot/config.mjs +2 -2
- package/src/session-runtime/boot/facade.mjs +2 -2
- package/src/session-runtime/boot/infrastructure.mjs +4 -4
- package/src/session-runtime/boot/providers.mjs +6 -6
- package/src/session-runtime/boot/session.mjs +1 -1
- package/src/session-runtime/boot/shared.mjs +5 -7
- package/src/session-runtime/boot/tools.mjs +6 -6
- package/src/session-runtime/bridge-first-use-gate.mjs +1 -1
- package/src/session-runtime/builtin-features.mjs +1 -193
- package/src/session-runtime/channel-config-api.mjs +3 -3
- package/src/session-runtime/config-helpers.mjs +1 -420
- package/src/session-runtime/config-lifecycle.mjs +2 -2
- package/src/session-runtime/cwd-plugins/core-memory-context.mjs +2 -2
- package/src/session-runtime/cwd-plugins/plugin-status.mjs +1 -1
- package/src/session-runtime/deferred-tool-delta.mjs +1 -101
- package/src/session-runtime/effort.mjs +1 -145
- package/src/session-runtime/goal-facade-api.mjs +1 -1
- package/src/session-runtime/goal-state.mjs +1 -325
- package/src/session-runtime/goal-tasks.mjs +1 -137
- package/src/session-runtime/goal-tool-defs.mjs +1 -140
- package/src/session-runtime/hook-payload.mjs +4 -5
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -3
- package/src/session-runtime/internal-tool-executor/caller-context.mjs +8 -0
- package/src/session-runtime/internal-tool-executor/feature-tools.mjs +3 -2
- package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +4 -6
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +2 -2
- package/src/session-runtime/internal-tool-executor.mjs +1 -1
- package/src/session-runtime/lifecycle/inheritance.mjs +1 -1
- package/src/session-runtime/lifecycle/session-catalog.mjs +3 -3
- package/src/session-runtime/lifecycle/session-switch/resume.mjs +2 -2
- package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +1 -1
- package/src/session-runtime/lifecycle/session-switch.mjs +1 -1
- package/src/session-runtime/lifecycle/shared.mjs +1 -1
- package/src/session-runtime/mcp-glue/connect.mjs +1 -1
- package/src/session-runtime/mcp-glue/server-catalog.mjs +1 -1
- package/src/session-runtime/mcp-glue/server-input.mjs +1 -1
- package/src/session-runtime/model-capabilities.mjs +1 -140
- package/src/session-runtime/model-recency.mjs +1 -1
- package/src/session-runtime/model-route/route-persist.mjs +2 -2
- package/src/session-runtime/model-route/route-tuning.mjs +3 -3
- package/src/session-runtime/model-route/set-route.mjs +6 -6
- package/src/session-runtime/model-route/web-search-route.mjs +5 -5
- package/src/session-runtime/model-route-api.mjs +1 -1
- package/src/session-runtime/native-web-search/routes.mjs +1 -1
- package/src/session-runtime/native-web-search/tool-shape.mjs +2 -2
- package/src/session-runtime/output-styles.mjs +2 -2
- package/src/session-runtime/prewarm/channel-start.mjs +1 -0
- package/src/session-runtime/provider-auth/accounts.mjs +7 -2
- package/src/session-runtime/provider-auth/login.mjs +1 -1
- package/src/session-runtime/provider-auth-api.mjs +1 -1
- package/src/session-runtime/provider-models/model-meta.mjs +1 -1
- package/src/session-runtime/provider-models/row-hydration.mjs +3 -3
- package/src/session-runtime/provider-usage.mjs +2 -2
- package/src/session-runtime/quick-model-rows/model-meta.mjs +1 -1
- package/src/session-runtime/quick-model-rows/provider-rows.mjs +1 -1
- package/src/session-runtime/quick-model-rows/web-search-rows.mjs +2 -2
- package/src/session-runtime/resource-api.mjs +2 -2
- package/src/session-runtime/resource-mcp-api.mjs +3 -3
- package/src/session-runtime/resource-plugins-api.mjs +3 -3
- package/src/session-runtime/resource-recall-api.mjs +2 -2
- package/src/session-runtime/resource-scope-decorate.mjs +2 -2
- package/src/session-runtime/route-resolution.mjs +3 -3
- package/src/session-runtime/route-state.mjs +4 -4
- package/src/session-runtime/runtime-bootstrap.mjs +1 -1
- package/src/session-runtime/runtime-facade.mjs +1 -1
- package/src/session-runtime/runtime-feature-gates.mjs +2 -2
- package/src/session-runtime/runtime-modules.mjs +3 -3
- package/src/session-runtime/runtime-paths.mjs +6 -2
- package/src/session-runtime/runtime-tool-routing.mjs +2 -2
- package/src/{runtime/shared → session-runtime}/schedule-session-run.mjs +5 -5
- package/src/{standalone → session-runtime/services}/agent-task-status.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/close-flow/close-all.mjs +2 -2
- package/src/{standalone → session-runtime/services}/agent-tool/close-flow.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/execute.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/helpers.mjs +6 -6
- package/src/session-runtime/services/agent-tool/index-write-queue.mjs +209 -0
- package/src/{standalone → session-runtime/services}/agent-tool/job-task-reconcile.mjs +2 -2
- package/src/{standalone → session-runtime/services}/agent-tool/job-views/job-lookup.mjs +5 -1
- package/src/{standalone → session-runtime/services}/agent-tool/job-views/job-render.mjs +1 -1
- package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +101 -0
- package/src/{standalone → session-runtime/services}/agent-tool/job-views/spawn-meta.mjs +1 -1
- package/src/session-runtime/services/agent-tool/job-views.mjs +59 -0
- package/src/session-runtime/services/agent-tool/lead-worker-index/index-file.mjs +48 -0
- package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/row-settlement.mjs +3 -3
- package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index.mjs +10 -2
- package/src/{standalone → session-runtime/services}/agent-tool/notify/early-completion.mjs +2 -2
- package/src/{standalone → session-runtime/services}/agent-tool/notify.mjs +4 -4
- package/src/{standalone → session-runtime/services}/agent-tool/render.mjs +2 -2
- package/src/{standalone → session-runtime/services}/agent-tool/send-flow.mjs +6 -2
- package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/job-start.mjs +2 -2
- package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-plan.mjs +3 -3
- package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-prep.mjs +3 -3
- package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-run.mjs +3 -3
- package/src/{standalone → session-runtime/services}/agent-tool/spawn-preset.mjs +1 -1
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +121 -0
- package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/reap-timers.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/scan-admission.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/stale-rows.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/tombstones.mjs +5 -2
- package/src/session-runtime/services/agent-tool/tool-def.mjs +60 -0
- package/src/{standalone → session-runtime/services}/agent-tool/turn-review.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-liveness.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-store.mjs +46 -20
- package/src/{standalone → session-runtime/services}/agent-tool/worker-index.mjs +8 -1
- package/src/{standalone → session-runtime/services}/agent-tool/worker-rows.mjs +1 -1
- package/src/session-runtime/services/agent-tool.mjs +151 -0
- package/src/{standalone → session-runtime/services}/agent-watchdog-registry.mjs +1 -1
- package/src/{standalone → session-runtime/services}/channel-admin.mjs +8 -10
- package/src/{standalone → session-runtime/services}/channel-client.mjs +1 -1
- package/src/{standalone → session-runtime/services}/channel-session-router.mjs +1 -1
- package/src/{standalone → session-runtime/services}/channel-worker/client-heartbeat.mjs +1 -1
- package/src/{standalone → session-runtime/services}/channel-worker/daemon-attach.mjs +1 -1
- package/src/{standalone → session-runtime/services}/channel-worker/daemon-spawn.mjs +5 -5
- package/src/session-runtime/services/channel-worker.mjs +140 -0
- package/src/session-runtime/services/daemon-crash-capture/daemon-exit-record.mjs +189 -0
- package/src/{standalone → session-runtime/services}/daemon-crash-capture/retention.mjs +1 -1
- package/src/{standalone → session-runtime/services}/daemon-crash-capture/spawn-capture.mjs +12 -1
- package/src/{standalone → session-runtime/services}/daemon-crash-capture.mjs +6 -0
- package/src/{standalone → session-runtime/services}/hook-bus/command-handler.mjs +1 -1
- package/src/{standalone → session-runtime/services}/hook-bus/event-runner.mjs +1 -1
- package/src/{standalone → session-runtime/services}/hook-bus/handler-dispatch.mjs +1 -1
- package/src/{standalone → session-runtime/services}/hook-bus/handlers.mjs +5 -4
- package/src/{standalone → session-runtime/services}/hook-bus/rule-file.mjs +2 -2
- package/src/{standalone → session-runtime/services}/hook-bus/tool-gate.mjs +1 -1
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/client-registry.mjs +1 -1
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/daemon-spawn.mjs +4 -4
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/discovery.mjs +5 -5
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/owner-claim.mjs +2 -2
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/rpc.mjs +0 -4
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/start.mjs +1 -1
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/tool-wire.mjs +1 -1
- package/src/session-runtime/services/memory-runtime-proxy.mjs +130 -0
- package/src/{standalone → session-runtime/services}/plugin-admin.mjs +6 -6
- package/src/session-runtime/services/provider-admin.mjs +576 -0
- package/src/{standalone → session-runtime/services}/seeds.mjs +3 -3
- package/src/{standalone → session-runtime/services}/usage-dashboard-model.mjs +1 -1
- package/src/session-runtime/services/usage-dashboard.mjs +278 -0
- package/src/{standalone → session-runtime/services}/usage-stats-hours.mjs +1 -1
- package/src/session-runtime/services/usage-stats-model.mjs +657 -0
- package/src/session-runtime/services/usage-stats-period.mjs +178 -0
- package/src/session-runtime/session-create/materialize.mjs +3 -3
- package/src/session-runtime/session-create/session-options.mjs +14 -7
- package/src/session-runtime/session-lifecycle.mjs +2 -2
- package/src/session-runtime/settings-builtin-tools-api.mjs +1 -1
- package/src/session-runtime/setup-tool/executor.mjs +2 -2
- package/src/session-runtime/skills-api.mjs +2 -2
- package/src/session-runtime/statusline-route.mjs +1 -1
- package/src/session-runtime/tool-catalog.mjs +1 -753
- package/src/session-runtime/tool-defs.mjs +1 -149
- package/src/session-runtime/tool-policy-refresh.mjs +7 -5
- package/src/session-runtime/tool-surface.mjs +5 -5
- package/src/session-runtime/turn/agent-ops.mjs +2 -2
- package/src/session-runtime/turn/session-ops.mjs +2 -2
- package/src/session-runtime/turn/share-ops.mjs +4 -3
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +1 -1
- package/src/session-runtime/turn/turn-run/turn-settle.mjs +4 -4
- package/src/session-runtime/usage-stats-api.mjs +18 -2
- package/src/session-runtime/warmup/statusline-usage-warmup.mjs +2 -2
- package/src/{runtime/shared → session-runtime}/webhook-session-run.mjs +5 -5
- package/src/session-runtime/workflow-agents-api/agent-editor.mjs +2 -2
- package/src/session-runtime/workflow-agents-api/agent-route.mjs +4 -4
- package/src/session-runtime/workflow-agents-api/onboarding.mjs +2 -2
- package/src/session-runtime/workflow-agents-api/shared.mjs +4 -6
- package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +1 -1
- package/src/session-runtime/workflow.mjs +1 -255
- package/src/standalone/agent-tool/job-views/session-progress.mjs +1 -101
- package/src/standalone/agent-tool/job-views.mjs +1 -59
- package/src/standalone/agent-tool/tag-registry.mjs +1 -121
- package/src/standalone/agent-tool/tool-def.mjs +1 -60
- package/src/standalone/agent-tool.mjs +1 -151
- package/src/standalone/channel-worker.mjs +1 -140
- package/src/standalone/daemon-agent-control.mjs +1 -1
- package/src/standalone/daemon-desktop-runtime.mjs +2 -2
- package/src/standalone/daemon-stored-session-views.mjs +1 -1
- package/src/standalone/daemon.mjs +38 -5
- package/src/standalone/fair-call-scheduler.mjs +1 -198
- package/src/standalone/folder-dialog.mjs +12 -8
- package/src/standalone/memory-runtime-proxy.mjs +1 -130
- package/src/standalone/provider-admin.mjs +1 -576
- package/src/standalone/session-client/frame-stream.mjs +1 -1
- package/src/standalone/session-client.mjs +2 -2
- package/src/standalone/session-service/agent-tree/agent-child.mjs +1 -1
- package/src/standalone/session-service/projection/transcript-window.mjs +2 -2
- package/src/standalone/usage-dashboard.mjs +1 -278
- package/src/standalone/usage-stats-model.mjs +1 -653
- package/src/standalone/usage-stats-period.mjs +1 -178
- package/src/tui/App.jsx +107 -256
- package/src/tui/app/app-view/floating-panel.jsx +3 -12
- package/src/tui/app/app-view/welcome-banner.jsx +36 -0
- package/src/tui/app/app-view.jsx +18 -45
- package/src/tui/app/create-app-pickers.mjs +1 -1
- package/src/tui/app/doctor.mjs +15 -1
- package/src/tui/app/extension-pickers/mcp-servers-picker.mjs +7 -3
- package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +5 -8
- package/src/tui/app/model-options.mjs +2 -3
- package/src/tui/app/model-picker/model-footer.mjs +1 -1
- package/src/tui/app/model-picker/route-selection.mjs +1 -3
- package/src/tui/app/mouse-input/button-gestures.mjs +13 -31
- package/src/tui/app/mouse-input/wheel-router.mjs +22 -32
- package/src/tui/app/picker-enter-latch.mjs +21 -0
- package/src/tui/app/picker-index-mode.mjs +34 -0
- package/src/tui/app/shell-layout/panel-transition.mjs +7 -12
- package/src/tui/app/shell-layout/row-budgets.mjs +4 -9
- package/src/tui/app/slash-palette.mjs +31 -0
- package/src/tui/app/text-layout.mjs +1 -1
- package/src/tui/app/theme-effort-pickers.mjs +1 -1
- package/src/tui/app/transcript-window.mjs +1 -5
- package/src/tui/app/usage-context-panels/context-model.mjs +1 -1
- package/src/tui/app/use-global-key-input.mjs +0 -1
- package/src/tui/app/use-interaction-refs.mjs +55 -0
- package/src/tui/app/use-onboarding-start.mjs +45 -0
- package/src/tui/app/use-panel-transition.mjs +40 -0
- package/src/tui/app/use-prompt-draft-flow.mjs +4 -13
- package/src/tui/app/use-prompt-layout-rows.mjs +39 -0
- package/src/tui/app/use-prompt-queue-history/prompt-history.mjs +1 -1
- package/src/tui/app/use-prompt-state.mjs +40 -0
- package/src/tui/app/use-selection-paint.mjs +9 -5
- package/src/tui/app/use-transcript-scroll-state.mjs +61 -0
- package/src/tui/app/use-transcript-window.mjs +0 -1
- package/src/tui/app/use-ui-open-request.mjs +18 -0
- package/src/tui/app/use-workflow-tab-cycle.mjs +39 -0
- package/src/tui/components/ContextInspector.jsx +1 -1
- package/src/tui/components/ContextPanel.jsx +1 -1
- package/src/tui/components/Picker.jsx +41 -322
- package/src/tui/components/PromptInput.jsx +34 -468
- package/src/tui/components/StatusLine.jsx +8 -555
- package/src/tui/components/TextEntryPanel.jsx +25 -211
- package/src/tui/components/ToolExecution.jsx +43 -328
- package/src/tui/components/UsagePanel.jsx +1 -1
- package/src/tui/components/picker/PickerItemRow.jsx +85 -0
- package/src/tui/components/picker/picker-layout.mjs +46 -0
- package/src/tui/components/picker/use-picker-input.mjs +165 -0
- package/src/tui/components/picker/use-picker-selection.mjs +67 -0
- package/src/tui/components/prompt-input/edit-chords.mjs +87 -0
- package/src/tui/components/prompt-input/edit-helpers.mjs +15 -12
- package/src/tui/components/prompt-input/escape-key.mjs +87 -0
- package/src/tui/components/prompt-input/key-handler.mjs +364 -0
- package/src/tui/components/status-line/boot-schedule.mjs +83 -0
- package/src/tui/components/status-line/local-line.mjs +213 -0
- package/src/tui/components/status-line/use-statusline-text.mjs +319 -0
- package/src/tui/components/statusline-module-loader.mjs +21 -0
- package/src/tui/components/text-entry-layout.mjs +104 -0
- package/src/tui/components/text-entry-value.jsx +47 -0
- package/src/tui/components/tool-execution/aggregate-card.jsx +141 -0
- package/src/tui/components/tool-execution/pending-placeholder.jsx +24 -0
- package/src/tui/components/tool-execution/standard-card.jsx +229 -0
- package/src/tui/components/tool-output-format.mjs +3 -5
- package/src/tui/dist/index.mjs +3616 -3022
- package/src/tui/index.jsx +85 -66
- package/src/tui/markdown/format-token.mjs +3 -3
- package/src/tui/paste-attachments.mjs +1 -1
- package/src/tui/prompt-history-store.mjs +17 -6
- package/src/tui/session/agent-envelope.mjs +1 -489
- package/src/tui/session/context-state.mjs +2 -2
- package/src/tui/session/goal-continuation/continuation-queue.mjs +1 -1
- package/src/tui/session/goal-continuation/deadline-delivery.mjs +1 -1
- package/src/tui/session/goal-continuation/goal-visibility.mjs +1 -1
- package/src/tui/session/initial-state.mjs +1 -1
- package/src/tui/session/live-share/wire.mjs +3 -0
- package/src/tui/session/oauth-flows.mjs +1 -7
- package/src/tui/session/session-api/commands.mjs +5 -3
- package/src/tui/session/session-api/controls.mjs +1 -1
- package/src/tui/session/session-api/intake/submission.mjs +8 -3
- package/src/tui/session/session-api/integrations.mjs +1 -1
- package/src/tui/session/session-api/routes.mjs +9 -8
- package/src/tui/session/session-api/settings.mjs +24 -23
- package/src/tui/session/session-api/shared.mjs +13 -2
- package/src/tui/session/session-api-ext.mjs +7 -415
- package/src/tui/session/session-flow/drain.mjs +86 -82
- package/src/tui/session/session-flow/queue.mjs +3 -1
- package/src/tui/session/tool-result-status.mjs +1 -354
- package/src/tui/session/tool-result-text.mjs +1 -157
- package/src/tui/session/transcript-intake.mjs +1 -1
- package/src/tui/session/transcript-spill/spill-dir.mjs +4 -1
- package/src/tui/session/transcript-spill/spill-writer.mjs +1 -1
- package/src/tui/session/tui-steering-persist.mjs +44 -86
- package/src/tui/session-local.mjs +8 -5
- package/src/tui/statusline-ansi-bridge.mjs +1 -1
- package/src/tui/theme.mjs +1 -1
- package/src/ui/ansi.mjs +1 -161
- package/src/ui/context-inspection.mjs +1 -56
- package/src/ui/context-measurement.mjs +1 -83
- package/src/ui/markdown.mjs +3 -3
- package/src/ui/model-display.mjs +1 -173
- package/src/ui/statusline-agents.mjs +22 -21
- package/src/ui/statusline.mjs +21 -24
- package/src/ui/stream-finalize.mjs +1 -1
- package/src/ui/tool-card.mjs +1 -1
- package/src/vendor/statusline/src/gateway/route-meta.mjs +157 -29
- package/scripts/fixtures/spawn-lease-child-harness.mjs +0 -8
- package/scripts/fixtures/spawn-lease-fixture-worker.mjs +0 -37
- package/src/runtime/agent/orchestrator/activity-bus.mjs +0 -31
- package/src/runtime/shared/child-spawn-remote.mjs +0 -210
- package/src/runtime/shared/session-runtime-health.mjs +0 -201
- package/src/standalone/agent-tool/lead-worker-index/index-file.mjs +0 -45
- package/src/standalone/session-runtime-agent-control-client.mjs +0 -117
- package/src/standalone/session-runtime-agent-control.mjs +0 -85
- package/src/standalone/session-runtime-host-factory.mjs +0 -22
- package/src/standalone/session-runtime-host.mjs +0 -742
- package/src/standalone/session-runtime-provider-cooldown.mjs +0 -78
- package/src/standalone/session-runtime-proxy.mjs +0 -164
- package/src/standalone/session-runtime-record.mjs +0 -18
- package/src/standalone/session-runtime-shard-router.mjs +0 -151
- package/src/standalone/session-runtime-spawn-leases.mjs +0 -82
- package/src/standalone/session-runtime-worker.mjs +0 -678
- package/src/standalone/session-runtime-workload.mjs +0 -98
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-cache.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/deferred-tool-availability.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-deadlines.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-runtime.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-store.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-text.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-tool-exec.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/provider-request-snapshot.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/provider-request-tools.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-catalog-data.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-profile.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/shared-scan-cache.mjs +0 -0
- /package/src/{standalone → runtime/shared}/fair-call-scheduler/queue-item.mjs +0 -0
- /package/src/runtime/{agent/orchestrator/providers → shared/llm}/provider-model-identities.mjs +0 -0
- /package/src/{standalone → runtime/shared}/projects.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/execute-send.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/execute-spawn.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/job-views/agent-list.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/lead-rows.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/reap-timers.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/provider-init.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/deferred-spawn.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/tag-maps.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/tag-registry/tag-lookup.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/tag-registry/tag-refresh.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/row-helpers.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/terminal-trace.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/worker-index/mutation-batch.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-shape.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/channel-client/daemon-request.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/channel-client/notify-stream.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/channel-client/reconnect.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/channel-client/registration.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/daemon-candidate.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/daemon-crash-capture/paths.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/config-loader.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/config.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/constants.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/event-log.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/handler-timeout.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/payload.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/rule-store.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/rules.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/memory-runtime-proxy/calls.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/memory-runtime-proxy/state.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/sse-frames.mjs +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync,
|
|
2
|
-
import { appendFile as _appendFile } from 'node:fs';
|
|
1
|
+
import { readFileSync, writeFileSync, unlinkSync } from 'node:fs';
|
|
3
2
|
import { join, isAbsolute } from 'node:path';
|
|
4
3
|
import { randomUUID } from 'node:crypto';
|
|
5
4
|
import { DATA_DIR } from './config.mjs';
|
|
@@ -17,42 +16,21 @@ import {
|
|
|
17
16
|
setDeferred,
|
|
18
17
|
setNextFire,
|
|
19
18
|
setSkippedUntil,
|
|
20
|
-
} from '
|
|
21
|
-
import {
|
|
19
|
+
} from './schedules-db.mjs';
|
|
20
|
+
import { appendBuffered } from '../../shared/buffered-appender.mjs';
|
|
21
|
+
import { tryRead } from './settings.mjs';
|
|
22
22
|
|
|
23
23
|
const SCHEDULE_LOG = join(DATA_DIR, 'schedule.log');
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
_schedLogTimer = null;
|
|
29
|
-
if (_schedLogBuf.length === 0) return;
|
|
30
|
-
const lines = _schedLogBuf.join('');
|
|
31
|
-
_schedLogBuf = [];
|
|
32
|
-
_appendFile(SCHEDULE_LOG, lines, () => {});
|
|
33
|
-
}
|
|
34
|
-
function _flushSchedLogSync() {
|
|
35
|
-
if (_schedLogBuf.length === 0) return;
|
|
36
|
-
const lines = _schedLogBuf.join('');
|
|
37
|
-
_schedLogBuf = [];
|
|
38
|
-
try {
|
|
39
|
-
appendFileSync(SCHEDULE_LOG, lines);
|
|
40
|
-
} catch {}
|
|
41
|
-
}
|
|
42
|
-
process.on('exit', _flushSchedLogSync);
|
|
43
|
-
// Note: do not install a module-level SIGTERM handler that calls
|
|
44
|
-
// process.exit() here. The channels worker owns shutdown sequencing
|
|
45
|
-
// (drain queues, persist baselines, release the scheduler lock, etc.)
|
|
46
|
-
// and a library-level exit(0) preempts that drain. The `exit` listener
|
|
47
|
-
// above still flushes pending log lines synchronously when the worker
|
|
48
|
-
// finishes its own shutdown.
|
|
24
|
+
// Do not install a module-level SIGTERM handler that calls process.exit()
|
|
25
|
+
// here. The channels worker owns shutdown sequencing (drain queues, persist
|
|
26
|
+
// baselines, release the scheduler lock, etc.) and a library-level exit(0)
|
|
27
|
+
// preempts that drain. The buffered appender drains pending log lines on exit.
|
|
49
28
|
function logSchedule(msg) {
|
|
29
|
+
msg = msg.replace(/\n$/, '');
|
|
50
30
|
process.stderr.write(`mixdog scheduler: ${msg}\n`);
|
|
51
|
-
|
|
52
|
-
if (!_schedLogTimer) _schedLogTimer = setTimeout(_flushScheduleLog, 2000);
|
|
31
|
+
appendBuffered(SCHEDULE_LOG, `[${new Date().toISOString()}] ${msg}\n`);
|
|
53
32
|
}
|
|
54
33
|
|
|
55
|
-
import { tryRead } from './settings.mjs';
|
|
56
34
|
// node-cron is an optional runtime dep. If the module isn't installed
|
|
57
35
|
// (e.g. a fresh v0.6.190 where node_modules predates the package.json
|
|
58
36
|
// bump), cron expressions are disabled (cron stays null below) instead
|
|
@@ -67,6 +45,8 @@ try {
|
|
|
67
45
|
);
|
|
68
46
|
}
|
|
69
47
|
const TICK_INTERVAL = 6e4;
|
|
48
|
+
// setTimeout's delay ceiling (~24.8 days); longer waits re-arm instead of firing early.
|
|
49
|
+
const MAX_TIMER_DELAY_MS = 2 ** 31 - 1;
|
|
70
50
|
// All schedule `time` values must be valid 5- or 6-field cron expressions
|
|
71
51
|
// (node-cron format). Legacy formats (HH:MM, everyNm, hourly, daily) are
|
|
72
52
|
// no longer accepted — migrate to cron: "MM HH * * *", "*/N * * * *", etc.
|
|
@@ -127,6 +107,8 @@ class Scheduler {
|
|
|
127
107
|
sendFn = null;
|
|
128
108
|
injectReadyFn = null;
|
|
129
109
|
pendingCheck = null;
|
|
110
|
+
// Injected by the host: (schedule, { prompt }) => Promise<{ result }>.
|
|
111
|
+
scheduleRunner = null;
|
|
130
112
|
// Activity tracking
|
|
131
113
|
lastActivity = 0;
|
|
132
114
|
// timestamp of last inbound message
|
|
@@ -172,6 +154,9 @@ class Scheduler {
|
|
|
172
154
|
setPendingCheck(fn) {
|
|
173
155
|
this.pendingCheck = typeof fn === 'function' ? fn : null;
|
|
174
156
|
}
|
|
157
|
+
setScheduleRunner(fn) {
|
|
158
|
+
this.scheduleRunner = typeof fn === 'function' ? fn : null;
|
|
159
|
+
}
|
|
175
160
|
noteActivity() {
|
|
176
161
|
this.lastActivity = Date.now();
|
|
177
162
|
}
|
|
@@ -268,6 +253,7 @@ class Scheduler {
|
|
|
268
253
|
const dow = now.getDay();
|
|
269
254
|
return {
|
|
270
255
|
hour: now.getHours(),
|
|
256
|
+
minute: now.getMinutes(),
|
|
271
257
|
dayOfWeek: days[dow],
|
|
272
258
|
isWeekend: dow === 0 || dow === 6,
|
|
273
259
|
};
|
|
@@ -281,7 +267,7 @@ class Scheduler {
|
|
|
281
267
|
const time = this.getTimeContext();
|
|
282
268
|
const header = [
|
|
283
269
|
`[schedule: ${name} | type: ${type} | session: ${state}]`,
|
|
284
|
-
`[time: ${time.dayOfWeek} ${String(time.hour).padStart(2, '0')}:${String(
|
|
270
|
+
`[time: ${time.dayOfWeek} ${String(time.hour).padStart(2, '0')}:${String(time.minute).padStart(2, '0')} | weekend: ${time.isWeekend}]`,
|
|
285
271
|
`Before starting any work, briefly tell the user what you're about to do in one short sentence.`,
|
|
286
272
|
].join('\n');
|
|
287
273
|
return `${header}
|
|
@@ -475,9 +461,8 @@ ${prompt}`;
|
|
|
475
461
|
return;
|
|
476
462
|
}
|
|
477
463
|
const delay = fireAt - Date.now();
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
const timer = setTimeout(() => this.armOneShot(schedule, type), MAX);
|
|
464
|
+
if (delay > MAX_TIMER_DELAY_MS) {
|
|
465
|
+
const timer = setTimeout(() => this.armOneShot(schedule, type), MAX_TIMER_DELAY_MS);
|
|
481
466
|
this.oneShotTimers.set(schedule.name, timer);
|
|
482
467
|
return;
|
|
483
468
|
}
|
|
@@ -552,9 +537,7 @@ ${prompt}`;
|
|
|
552
537
|
const until = this.skipUntil(schedule.name);
|
|
553
538
|
const fireAt = new Date(schedule.whenAt).getTime();
|
|
554
539
|
const target = Math.max(Number.isFinite(fireAt) ? fireAt : 0, until);
|
|
555
|
-
const
|
|
556
|
-
let delay = target - Date.now();
|
|
557
|
-
delay = delay > MAX ? MAX : Math.max(delay, 1);
|
|
540
|
+
const delay = Math.min(Math.max(target - Date.now(), 1), MAX_TIMER_DELAY_MS);
|
|
558
541
|
logSchedule(`one-shot "${schedule.name}" deferred/skipped — re-arming for ${new Date(target).toISOString()}\n`);
|
|
559
542
|
const timer = setTimeout(() => this.fireOneShot(schedule, type), delay);
|
|
560
543
|
this.oneShotTimers.set(schedule.name, timer);
|
|
@@ -703,7 +686,10 @@ ${prompt}`;
|
|
|
703
686
|
* success; a failure rejects for awaitDispatch callers and resolves false
|
|
704
687
|
* (after a channel notice) for fire-and-forget cron fires. */
|
|
705
688
|
dispatchScheduleRun(schedule, prompt, channelId, awaitDispatch) {
|
|
706
|
-
|
|
689
|
+
const run = this.scheduleRunner
|
|
690
|
+
? this.scheduleRunner(schedule, { prompt })
|
|
691
|
+
: Promise.reject(new Error('schedule runner not configured'));
|
|
692
|
+
return run
|
|
707
693
|
.then(({ result }) => {
|
|
708
694
|
this.running.delete(schedule.name);
|
|
709
695
|
if (result && channelId && this.sendFn) {
|
|
@@ -720,8 +706,8 @@ ${prompt}`;
|
|
|
720
706
|
// The cron fire-and-forget contract swallowed failures entirely;
|
|
721
707
|
// surface them on the channel so a failed scheduled run is never
|
|
722
708
|
// silent (one-shots propagate via the awaitDispatch throw instead).
|
|
723
|
-
if (!awaitDispatch) this.notifyFailure(schedule, `run failed: ${err.message}`);
|
|
724
709
|
if (awaitDispatch) throw err;
|
|
710
|
+
this.notifyFailure(schedule, `run failed: ${err.message}`);
|
|
725
711
|
return false;
|
|
726
712
|
});
|
|
727
713
|
}
|
|
@@ -744,9 +730,7 @@ ${prompt}`;
|
|
|
744
730
|
resolvePrompt(schedule) {
|
|
745
731
|
const ref = schedule.prompt ?? `${schedule.name}.md`;
|
|
746
732
|
const fromFile = this.loadPrompt(ref);
|
|
747
|
-
|
|
748
|
-
if (schedule.prompt) return schedule.prompt;
|
|
749
|
-
return null;
|
|
733
|
+
return fromFile || schedule.prompt || null;
|
|
750
734
|
}
|
|
751
735
|
loadPrompt(nameOrPath) {
|
|
752
736
|
const full = isAbsolute(nameOrPath) ? nameOrPath : join(this.promptsDir, nameOrPath);
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
* connection search_path.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import { ensurePgInstance, withSchemaBootstrapLock } from '
|
|
15
|
-
import { createPgSchemaDb } from '
|
|
16
|
-
import { resolvePluginData } from '
|
|
14
|
+
import { ensurePgInstance, withSchemaBootstrapLock } from '../../memory/lib/pg/adapter.mjs';
|
|
15
|
+
import { createPgSchemaDb } from '../../shared/pg-schema-db.mjs';
|
|
16
|
+
import { resolvePluginData } from '../../shared/plugin-paths.mjs';
|
|
17
17
|
|
|
18
18
|
const SCHEMA = 'scheduler';
|
|
19
19
|
|
|
@@ -10,7 +10,6 @@ function createToolDispatch({ isChannelsDegraded, lifecycle }) {
|
|
|
10
10
|
setChannelBridgeActive,
|
|
11
11
|
writeBridgeState,
|
|
12
12
|
notifyRemoteAcquired,
|
|
13
|
-
refreshBridgeOwnership,
|
|
14
13
|
startChannelBridge,
|
|
15
14
|
stopOwnedRuntime,
|
|
16
15
|
reloadRuntimeConfig,
|
|
@@ -36,15 +35,11 @@ function createToolDispatch({ isChannelsDegraded, lifecycle }) {
|
|
|
36
35
|
// (getOwned() is always true), so activate never needs to claim a
|
|
37
36
|
// seat or pre-notify — the not-connected -> connected transition
|
|
38
37
|
// inside startOwnedRuntime fires notifyRemoteAcquired exactly once.
|
|
39
|
-
if (getOwned
|
|
40
|
-
notifyRemoteAcquired
|
|
38
|
+
if (getOwned() !== true) {
|
|
39
|
+
notifyRemoteAcquired();
|
|
41
40
|
}
|
|
42
41
|
try {
|
|
43
|
-
|
|
44
|
-
await startChannelBridge();
|
|
45
|
-
} else {
|
|
46
|
-
await refreshBridgeOwnership({ restoreBinding: true });
|
|
47
|
-
}
|
|
42
|
+
await startChannelBridge();
|
|
48
43
|
} catch (e) {
|
|
49
44
|
process.stderr.write(`mixdog: bridge activate refresh failed (non-fatal): ${e?.message || e}\n`);
|
|
50
45
|
}
|
|
@@ -141,6 +141,13 @@ async function _withInstallLock(rootDir, lockName, fn, { pollMs = 250 } = {}) {
|
|
|
141
141
|
// "alive" indefinitely without ever releasing this lockfile.
|
|
142
142
|
let foreignWaitSince = 0;
|
|
143
143
|
let samePidWaitSince = 0;
|
|
144
|
+
const reclaim = () => {
|
|
145
|
+
try {
|
|
146
|
+
rmSync(lockPath, { force: true });
|
|
147
|
+
} catch {}
|
|
148
|
+
foreignWaitSince = 0;
|
|
149
|
+
samePidWaitSince = 0;
|
|
150
|
+
};
|
|
144
151
|
while (true) {
|
|
145
152
|
try {
|
|
146
153
|
fd = openSync(lockPath, 'wx');
|
|
@@ -159,11 +166,7 @@ async function _withInstallLock(rootDir, lockName, fn, { pollMs = 250 } = {}) {
|
|
|
159
166
|
const holder = _readInstallLockToken(lockPath);
|
|
160
167
|
if (!holder) {
|
|
161
168
|
// empty or invalid PID — orphan lockfile, reclaim
|
|
162
|
-
|
|
163
|
-
rmSync(lockPath, { force: true });
|
|
164
|
-
} catch {}
|
|
165
|
-
foreignWaitSince = 0;
|
|
166
|
-
samePidWaitSince = 0;
|
|
169
|
+
reclaim();
|
|
167
170
|
continue;
|
|
168
171
|
}
|
|
169
172
|
const { pid: holderPid, ts: holderTs, token: holderToken } = holder;
|
|
@@ -181,11 +184,7 @@ async function _withInstallLock(rootDir, lockName, fn, { pollMs = 250 } = {}) {
|
|
|
181
184
|
}
|
|
182
185
|
if (ageMs > LOCK_MAX_AGE_MS) {
|
|
183
186
|
if (_installLockTokenMatches(lockPath, holderPid, holderTs, holderToken)) {
|
|
184
|
-
|
|
185
|
-
rmSync(lockPath, { force: true });
|
|
186
|
-
} catch {}
|
|
187
|
-
foreignWaitSince = 0;
|
|
188
|
-
samePidWaitSince = 0;
|
|
187
|
+
reclaim();
|
|
189
188
|
continue;
|
|
190
189
|
}
|
|
191
190
|
}
|
|
@@ -196,11 +195,7 @@ async function _withInstallLock(rootDir, lockName, fn, { pollMs = 250 } = {}) {
|
|
|
196
195
|
try {
|
|
197
196
|
process.kill(holderPid, 0);
|
|
198
197
|
} catch {
|
|
199
|
-
|
|
200
|
-
rmSync(lockPath, { force: true });
|
|
201
|
-
} catch {}
|
|
202
|
-
foreignWaitSince = 0;
|
|
203
|
-
samePidWaitSince = 0;
|
|
198
|
+
reclaim();
|
|
204
199
|
continue;
|
|
205
200
|
}
|
|
206
201
|
// Live foreign pid. Apply age ceiling so a recycled/unrelated
|
|
@@ -213,11 +208,7 @@ async function _withInstallLock(rootDir, lockName, fn, { pollMs = 250 } = {}) {
|
|
|
213
208
|
if (!foreignWaitSince) foreignWaitSince = Date.now();
|
|
214
209
|
if (ageMs > LOCK_MAX_AGE_MS) {
|
|
215
210
|
if (_installLockTokenMatches(lockPath, holderPid, holderTs, holderToken)) {
|
|
216
|
-
|
|
217
|
-
rmSync(lockPath, { force: true });
|
|
218
|
-
} catch {}
|
|
219
|
-
foreignWaitSince = 0;
|
|
220
|
-
samePidWaitSince = 0;
|
|
211
|
+
reclaim();
|
|
221
212
|
continue;
|
|
222
213
|
}
|
|
223
214
|
}
|
|
@@ -491,13 +482,18 @@ async function downloadFile(url, destPath, { onProgress = null, timeoutMs = 180_
|
|
|
491
482
|
// the unzip command (preinstalled on every distro we support, apt-get on
|
|
492
483
|
// Ubuntu / dnf on Fedora). Platform decision is a single switch — no fallback
|
|
493
484
|
// chain, no probing.
|
|
494
|
-
function extractZip(zipPath, destDir) {
|
|
485
|
+
export function extractZip(zipPath, destDir) {
|
|
495
486
|
// Windows: bundled tar.exe (libarchive) misreads `C:` drive letter as
|
|
496
487
|
// host:path and tries DNS resolution. Use PowerShell Expand-Archive,
|
|
497
488
|
// which is Windows-native and path-safe.
|
|
498
489
|
if (process.platform === 'win32') {
|
|
499
|
-
|
|
500
|
-
const
|
|
490
|
+
// Paths travel via env vars so `$` / backticks in them are never expanded.
|
|
491
|
+
const ps = 'Expand-Archive -LiteralPath $env:MIXDOG_ZIP_PATH -DestinationPath $env:MIXDOG_ZIP_DEST -Force';
|
|
492
|
+
const r = spawnSync('powershell', ['-NoProfile', '-Command', ps], {
|
|
493
|
+
stdio: 'pipe',
|
|
494
|
+
windowsHide: true,
|
|
495
|
+
env: { ...process.env, MIXDOG_ZIP_PATH: zipPath, MIXDOG_ZIP_DEST: destDir },
|
|
496
|
+
});
|
|
501
497
|
if (r.status !== 0) {
|
|
502
498
|
throw new Error(
|
|
503
499
|
`[voice-runtime] zip extract failed via Expand-Archive: ${r.stderr?.toString() || r.stdout?.toString() || 'unknown'}`
|
|
@@ -152,6 +152,17 @@ function createVoiceWavCache() {
|
|
|
152
152
|
};
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
+
// Configured whisper thread count, else a quarter of the cores (at least one).
|
|
156
|
+
function whisperThreadCount(config) {
|
|
157
|
+
let cpuCount;
|
|
158
|
+
try {
|
|
159
|
+
cpuCount = os.cpus().length;
|
|
160
|
+
} catch {
|
|
161
|
+
cpuCount = 2;
|
|
162
|
+
}
|
|
163
|
+
return config.voice?.transcription?.threadCount ?? Math.max(1, Math.ceil(cpuCount / 4));
|
|
164
|
+
}
|
|
165
|
+
|
|
155
166
|
// The one resolution of the managed runtime and the exact whisper-server
|
|
156
167
|
// contract, shared by transcription and warm-up. Returns { error } (a
|
|
157
168
|
// user-actionable message) when the runtime is not installed.
|
|
@@ -169,14 +180,7 @@ function resolveVoiceTranscriptionRuntime(config, dataDir) {
|
|
|
169
180
|
error: `voice runtime not installed (missing: ${missing}) — open the setup wizard and click "Install voice"`,
|
|
170
181
|
};
|
|
171
182
|
}
|
|
172
|
-
const
|
|
173
|
-
try {
|
|
174
|
-
return os.cpus().length;
|
|
175
|
-
} catch {
|
|
176
|
-
return 2;
|
|
177
|
-
}
|
|
178
|
-
})();
|
|
179
|
-
const threadCount = config.voice?.transcription?.threadCount ?? Math.max(1, Math.ceil(cpuCount / 4));
|
|
183
|
+
const threadCount = whisperThreadCount(config);
|
|
180
184
|
return {
|
|
181
185
|
runtime,
|
|
182
186
|
threadCount,
|
|
@@ -289,4 +293,4 @@ function createVoiceTranscription({ getConfig, dataDir }) {
|
|
|
289
293
|
return { isVoiceAttachment, transcribeVoice, prepareTranscription };
|
|
290
294
|
}
|
|
291
295
|
|
|
292
|
-
export { createVoiceTranscription };
|
|
296
|
+
export { createVoiceTranscription, whisperThreadCount };
|
|
@@ -1,31 +1,8 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
|
-
import { appendFileSync } from 'node:fs';
|
|
3
|
-
import { appendFile } from 'node:fs/promises';
|
|
4
2
|
import { DATA_DIR } from '../config.mjs';
|
|
3
|
+
import { appendBuffered } from '../../../shared/buffered-appender.mjs';
|
|
5
4
|
|
|
6
5
|
const WEBHOOK_LOG = join(DATA_DIR, 'webhook.log');
|
|
7
|
-
let webhookLogBuffer = [];
|
|
8
|
-
let webhookLogTimer = null;
|
|
9
|
-
function flushWebhookLog() {
|
|
10
|
-
if (webhookLogTimer) {
|
|
11
|
-
clearTimeout(webhookLogTimer);
|
|
12
|
-
webhookLogTimer = null;
|
|
13
|
-
}
|
|
14
|
-
if (!webhookLogBuffer.length) return;
|
|
15
|
-
const lines = webhookLogBuffer.join('');
|
|
16
|
-
webhookLogBuffer = [];
|
|
17
|
-
void appendFile(WEBHOOK_LOG, lines).catch(() => {});
|
|
18
|
-
}
|
|
19
|
-
try {
|
|
20
|
-
process.on('beforeExit', flushWebhookLog);
|
|
21
|
-
process.on('exit', () => {
|
|
22
|
-
if (!webhookLogBuffer.length) return;
|
|
23
|
-
try {
|
|
24
|
-
appendFileSync(WEBHOOK_LOG, webhookLogBuffer.join(''));
|
|
25
|
-
} catch {}
|
|
26
|
-
webhookLogBuffer = [];
|
|
27
|
-
});
|
|
28
|
-
} catch {}
|
|
29
6
|
function logWebhook(msg) {
|
|
30
7
|
const line = `[${(/* @__PURE__ */ new Date()).toISOString()}] ${msg}
|
|
31
8
|
`;
|
|
@@ -33,11 +10,7 @@ function logWebhook(msg) {
|
|
|
33
10
|
process.stderr.write(`mixdog webhook: ${msg}
|
|
34
11
|
`);
|
|
35
12
|
} catch {}
|
|
36
|
-
|
|
37
|
-
if (!webhookLogTimer) {
|
|
38
|
-
webhookLogTimer = setTimeout(flushWebhookLog, 1000);
|
|
39
|
-
webhookLogTimer.unref?.();
|
|
40
|
-
}
|
|
13
|
+
appendBuffered(WEBHOOK_LOG, line);
|
|
41
14
|
}
|
|
42
15
|
|
|
43
16
|
export { logWebhook };
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
readEndpointSecret,
|
|
5
5
|
claimDelivery,
|
|
6
6
|
updateDeliveryStatus,
|
|
7
|
-
} from '
|
|
7
|
+
} from '../webhooks-db.mjs';
|
|
8
8
|
import { contentDeliveryId, extractDeliveryId, buildHeadersSummary } from './deliveries.mjs';
|
|
9
9
|
|
|
10
10
|
const MAX_BODY_BYTES = 5 * 1024 * 1024;
|
|
@@ -202,15 +202,14 @@ async function processWebhookBody(req, res, name, rawBody, { getConfig, verifyRe
|
|
|
202
202
|
logWebhook(invalidJson ? `JSON parse error for ${name}: ${err}` : `${name}: request failed: ${err}`);
|
|
203
203
|
// Terminal failed row: an error return must close out the `received` claim
|
|
204
204
|
// so retries don't loop on dedup.
|
|
205
|
-
|
|
206
|
-
if (_id) {
|
|
205
|
+
if (typeof deliveryId === 'string' && deliveryId) {
|
|
207
206
|
try {
|
|
208
|
-
await updateDeliveryStatus(name,
|
|
207
|
+
await updateDeliveryStatus(name, deliveryId, 'failed', {
|
|
209
208
|
error: invalidJson ? `invalid JSON: ${err?.message || err}` : String(err?.message || err),
|
|
210
209
|
});
|
|
211
210
|
} catch (e2) {
|
|
212
211
|
process.stderr.write(
|
|
213
|
-
`mixdog webhook: failed to mark delivery ${name}/${
|
|
212
|
+
`mixdog webhook: failed to mark delivery ${name}/${deliveryId} failed \u2014 ${e2?.message || e2}\n`
|
|
214
213
|
);
|
|
215
214
|
}
|
|
216
215
|
}
|
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
import { logWebhook } from './log.mjs';
|
|
2
|
-
import { updateDeliveryStatus } from '
|
|
2
|
+
import { updateDeliveryStatus } from '../webhooks-db.mjs';
|
|
3
|
+
import { UNTRUSTED_MARKER, scrubFenceMarker } from './untrusted-fence.mjs';
|
|
3
4
|
|
|
4
5
|
const DISPATCH_TIMEOUT_MS = 10 * 60 * 1000;
|
|
5
6
|
|
|
6
7
|
function buildFencedPayload(body, headers) {
|
|
7
|
-
// Trust boundary: webhook body + headers are external
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// boundary it can rely on.
|
|
14
|
-
const _UNTRUSTED = 'WEBHOOK_UNTRUSTED_DATA';
|
|
15
|
-
const _scrubFence = (s) => String(s).split(_UNTRUSTED).join('WEBHOOK_DATA');
|
|
16
|
-
const payload = _scrubFence(JSON.stringify(body, null, 2));
|
|
17
|
-
const headersSummary = _scrubFence(
|
|
8
|
+
// Trust boundary: webhook body + headers are external input and must be
|
|
9
|
+
// treated as DATA, never instructions. The directive line gives the
|
|
10
|
+
// downstream prompt a trust boundary it can rely on.
|
|
11
|
+
const _UNTRUSTED = UNTRUSTED_MARKER;
|
|
12
|
+
const payload = scrubFenceMarker(JSON.stringify(body, null, 2));
|
|
13
|
+
const headersSummary = scrubFenceMarker(
|
|
18
14
|
Object.entries(headers)
|
|
19
15
|
.filter(([k]) => k.startsWith('x-') || k === 'content-type')
|
|
20
16
|
.map(([k, v]) => `${k}: ${v}`)
|
|
@@ -23,6 +23,18 @@ function extractSignature(headers, parser) {
|
|
|
23
23
|
// Stripe's documented replay tolerance. A captured signature older (or more
|
|
24
24
|
// than this skew newer) than the window is rejected even if the HMAC matches.
|
|
25
25
|
const STRIPE_TOLERANCE_MS = 5 * 60 * 1000;
|
|
26
|
+
// timingSafeEqual throws on length mismatch / malformed hex; wrap so a crafted
|
|
27
|
+
// signature header can't crash the request handler.
|
|
28
|
+
function hexDigestsEqual(providedHex, expectedHex) {
|
|
29
|
+
try {
|
|
30
|
+
const a = Buffer.from(providedHex, 'hex');
|
|
31
|
+
const b = Buffer.from(expectedHex, 'hex');
|
|
32
|
+
if (a.length !== b.length) return false;
|
|
33
|
+
return crypto.timingSafeEqual(a, b);
|
|
34
|
+
} catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
26
38
|
function verifySignature(secret, rawBody, signatureValue, parser) {
|
|
27
39
|
if (parser === 'stripe') {
|
|
28
40
|
// Stripe signs `${t}.${payload}`, not the body alone, and the t= field
|
|
@@ -34,27 +46,11 @@ function verifySignature(secret, rawBody, signatureValue, parser) {
|
|
|
34
46
|
if (!vMatch || !tMatch) return false;
|
|
35
47
|
const ts = Number(tMatch[1]);
|
|
36
48
|
if (!Number.isFinite(ts) || Math.abs(Date.now() - ts * 1000) > STRIPE_TOLERANCE_MS) return false;
|
|
37
|
-
const expected = crypto.createHmac('sha256', secret).update(`${tMatch[1]}
|
|
38
|
-
|
|
39
|
-
// crafted signature header can't crash the request handler.
|
|
40
|
-
try {
|
|
41
|
-
const a = Buffer.from(vMatch[1], 'hex');
|
|
42
|
-
const b = Buffer.from(expected, 'hex');
|
|
43
|
-
if (a.length !== b.length) return false;
|
|
44
|
-
return crypto.timingSafeEqual(a, b);
|
|
45
|
-
} catch {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
49
|
+
const expected = crypto.createHmac('sha256', secret).update(Buffer.concat([Buffer.from(`${tMatch[1]}.`), Buffer.from(rawBody)])).digest('hex');
|
|
50
|
+
return hexDigestsEqual(vMatch[1], expected);
|
|
48
51
|
}
|
|
49
52
|
const expected = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
|
|
50
|
-
|
|
51
|
-
const a = Buffer.from(signatureValue, 'hex');
|
|
52
|
-
const b = Buffer.from(expected, 'hex');
|
|
53
|
-
if (a.length !== b.length) return false;
|
|
54
|
-
return crypto.timingSafeEqual(a, b);
|
|
55
|
-
} catch {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
53
|
+
return hexDigestsEqual(signatureValue, expected);
|
|
58
54
|
}
|
|
59
55
|
|
|
60
56
|
export { extractSignature, verifySignature };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Webhook fields are external, attacker-controllable input. Prompts fence them
|
|
2
|
+
// with this marker token and scrub the token from the content, so a field
|
|
3
|
+
// cannot close its own fence early and smuggle instructions into the agent
|
|
4
|
+
// prompt (indirect prompt injection).
|
|
5
|
+
export const UNTRUSTED_MARKER = 'WEBHOOK_UNTRUSTED_DATA';
|
|
6
|
+
|
|
7
|
+
export function scrubFenceMarker(value) {
|
|
8
|
+
return String(value).split(UNTRUSTED_MARKER).join('WEBHOOK_DATA');
|
|
9
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { logWebhook } from './webhook/log.mjs';
|
|
2
|
-
import { updateDeliveryStatus } from '
|
|
2
|
+
import { updateDeliveryStatus } from './webhooks-db.mjs';
|
|
3
3
|
import { createWebhookListener } from './webhook/listener-lifecycle.mjs';
|
|
4
4
|
import { createWebhookRequestHandler } from './webhook/request-handler.mjs';
|
|
5
5
|
import { createWebhookVerifier } from './webhook/verification.mjs';
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
* the connection search_path.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { ensurePgInstance, withSchemaBootstrapLock } from '
|
|
18
|
-
import { createPgSchemaDb } from '
|
|
19
|
-
import { resolvePluginData } from '
|
|
17
|
+
import { ensurePgInstance, withSchemaBootstrapLock } from '../../memory/lib/pg/adapter.mjs';
|
|
18
|
+
import { createPgSchemaDb } from '../../shared/pg-schema-db.mjs';
|
|
19
|
+
import { resolvePluginData } from '../../shared/plugin-paths.mjs';
|
|
20
20
|
|
|
21
21
|
const SCHEMA = 'webhooks';
|
|
22
22
|
|
|
@@ -39,6 +39,7 @@ import path from 'node:path';
|
|
|
39
39
|
import fs from 'node:fs';
|
|
40
40
|
import { spawn, spawnSync } from 'node:child_process';
|
|
41
41
|
import { setTimeout as delay } from 'node:timers/promises';
|
|
42
|
+
import { windowsSystemRoot } from '../../agent/orchestrator/tools/builtin/windows-roots.mjs';
|
|
42
43
|
import { selectWhisperPort, whisperListenerOwned } from './whisper-port.mjs';
|
|
43
44
|
|
|
44
45
|
// ── Tunables (deterministic; no ranges) ──────────────────────────────────────
|
|
@@ -149,7 +150,8 @@ function readPidMeta() {
|
|
|
149
150
|
// closed (never kill, never reuse).
|
|
150
151
|
function readProcessCommandLine(pid) {
|
|
151
152
|
if (IS_WIN) {
|
|
152
|
-
const sysRoot =
|
|
153
|
+
const sysRoot = windowsSystemRoot();
|
|
154
|
+
if (!sysRoot) return '';
|
|
153
155
|
const wmic = path.join(sysRoot, 'System32', 'wbem', 'wmic.exe');
|
|
154
156
|
try {
|
|
155
157
|
const r = spawnSync(wmic, ['process', 'where', `ProcessId=${pid}`, 'get', 'CommandLine', '/FORMAT:LIST'], {
|
|
@@ -354,7 +356,6 @@ function wireChildExit() {
|
|
|
354
356
|
mgr.inflight.clear();
|
|
355
357
|
detachChildHandlers();
|
|
356
358
|
clearPidMeta();
|
|
357
|
-
mgr.state = STATE.DEAD;
|
|
358
359
|
mgr.child = null;
|
|
359
360
|
mgr.port = null;
|
|
360
361
|
mgr.runtimeKey = null;
|
|
@@ -25,10 +25,10 @@ const STALE_WORKER_FILE_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
|
25
25
|
|
|
26
26
|
// Rotate additional worker logs (10 MB threshold).
|
|
27
27
|
function rotateWorkerLogs() {
|
|
28
|
-
for (const
|
|
29
|
-
const
|
|
28
|
+
for (const name of ROTATED_WORKER_LOGS) {
|
|
29
|
+
const logPath = path.join(DATA_DIR, name);
|
|
30
30
|
try {
|
|
31
|
-
if (fs.statSync(
|
|
31
|
+
if (fs.statSync(logPath).size > 10 * 1024 * 1024) fs.renameSync(logPath, `${logPath}.1`);
|
|
32
32
|
} catch {}
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -39,17 +39,17 @@ function rotateWorkerLogs() {
|
|
|
39
39
|
// cleanup signal. 7-day TTL keeps recent crash forensics while bounding leak.
|
|
40
40
|
function pruneStaleScopedLogs() {
|
|
41
41
|
try {
|
|
42
|
-
const
|
|
43
|
-
for (const
|
|
42
|
+
const now = Date.now();
|
|
43
|
+
for (const name of fs.readdirSync(DATA_DIR)) {
|
|
44
44
|
if (
|
|
45
|
-
!/^(channels|memory)-worker\.\d+\.\d+\.log$/.test(
|
|
46
|
-
!/^mcp-debug\.\d+\.\d+\.log$/.test(
|
|
47
|
-
!/^supervisor\.\d+\.log$/.test(
|
|
45
|
+
!/^(channels|memory)-worker\.\d+\.\d+\.log$/.test(name) &&
|
|
46
|
+
!/^mcp-debug\.\d+\.\d+\.log$/.test(name) &&
|
|
47
|
+
!/^supervisor\.\d+\.log$/.test(name)
|
|
48
48
|
)
|
|
49
49
|
continue;
|
|
50
|
-
const
|
|
50
|
+
const filePath = path.join(DATA_DIR, name);
|
|
51
51
|
try {
|
|
52
|
-
if (
|
|
52
|
+
if (now - fs.statSync(filePath).mtimeMs > STALE_WORKER_FILE_TTL_MS) fs.unlinkSync(filePath);
|
|
53
53
|
} catch {}
|
|
54
54
|
}
|
|
55
55
|
} catch {}
|
|
@@ -61,14 +61,14 @@ function pruneStaleScopedLogs() {
|
|
|
61
61
|
// 7-day TTL is safe because live agent sessions touch their JSON file on
|
|
62
62
|
// every ask iteration, so any file older than 7 days is provably abandoned.
|
|
63
63
|
function pruneStaleSessionFiles() {
|
|
64
|
-
const
|
|
64
|
+
const sessionsDir = path.join(DATA_DIR, 'sessions');
|
|
65
65
|
try {
|
|
66
|
-
const
|
|
67
|
-
for (const
|
|
68
|
-
if (!
|
|
69
|
-
const
|
|
66
|
+
const now = Date.now();
|
|
67
|
+
for (const name of fs.readdirSync(sessionsDir)) {
|
|
68
|
+
if (!name.endsWith('.json')) continue;
|
|
69
|
+
const filePath = path.join(sessionsDir, name);
|
|
70
70
|
try {
|
|
71
|
-
if (
|
|
71
|
+
if (now - fs.statSync(filePath).mtimeMs > STALE_WORKER_FILE_TTL_MS) fs.unlinkSync(filePath);
|
|
72
72
|
} catch {}
|
|
73
73
|
}
|
|
74
74
|
} catch {}
|
|
@@ -88,14 +88,12 @@ export function runWorkerBootstrap({
|
|
|
88
88
|
try {
|
|
89
89
|
pruneStalePluginDataLogSiblings(DATA_DIR, DEFAULT_STALE_LOG_SIBLING_MAX);
|
|
90
90
|
} catch {}
|
|
91
|
-
// SIGTERM: do NOT exit here in worker mode — the graceful
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
// process.on('exit') hooks still run.
|
|
91
|
+
// SIGTERM: do NOT exit here in worker mode — the graceful shutdown handler in
|
|
92
|
+
// worker-ipc.mjs owns shutdown (stop() → cleanup → process.exit). In
|
|
93
|
+
// non-worker mode exit explicitly so process.on('exit') hooks still run.
|
|
95
94
|
process.on('SIGTERM', () => {
|
|
96
95
|
if (!isWorkerMode) process.exit(0);
|
|
97
96
|
});
|
|
98
|
-
// ────────────────────────────────────────────────────────────────────────────
|
|
99
97
|
ensureRuntimeDirs();
|
|
100
98
|
cleanupStaleRuntimeFiles();
|
|
101
99
|
if (!isWorkerMode) {
|