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
|
@@ -325,8 +325,9 @@ export function measureTextBlock(paragraphs = [], { width = 0, lineSpacing = 1,
|
|
|
325
325
|
italic: paragraph.italic,
|
|
326
326
|
};
|
|
327
327
|
const size = Math.max(1, Number(paragraph.fontSize) || 18);
|
|
328
|
-
const
|
|
328
|
+
const multiple =
|
|
329
329
|
Number(paragraph.lineSpacing) > 0 ? Number(paragraph.lineSpacing) : Math.max(0.5, Number(lineSpacing) || 1);
|
|
330
|
+
const pitch = lineHeightRatio > 0 ? lineHeightRatio : LINE_HEIGHT_RATIO * multiple;
|
|
330
331
|
// Runs of different sizes ("+4.3" at 47 pt, "%p" at 19 pt) are measured each at its own size: read at the first
|
|
331
332
|
// run's size, a figure with its small unit was reported as breaking mid-word and overflowing its box. When the
|
|
332
333
|
// whole paragraph fits one line that way, it is one line.
|
|
@@ -340,7 +341,7 @@ export function measureTextBlock(paragraphs = [], { width = 0, lineSpacing = 1,
|
|
|
340
341
|
widest = Math.max(widest, total);
|
|
341
342
|
longestRun = Math.max(longestRun, total);
|
|
342
343
|
lines += 1;
|
|
343
|
-
height += size *
|
|
344
|
+
height += size * pitch;
|
|
344
345
|
height += Math.max(0, Number(paragraph.spaceBefore) || 0) + Math.max(0, Number(paragraph.spaceAfter) || 0);
|
|
345
346
|
continue;
|
|
346
347
|
}
|
|
@@ -351,9 +352,6 @@ export function measureTextBlock(paragraphs = [], { width = 0, lineSpacing = 1,
|
|
|
351
352
|
if (part !== ' ') longestRun = Math.max(longestRun, measureTextWidth(part, font));
|
|
352
353
|
}
|
|
353
354
|
lines += wrapped.length;
|
|
354
|
-
const multiple =
|
|
355
|
-
Number(paragraph.lineSpacing) > 0 ? Number(paragraph.lineSpacing) : Math.max(0.5, Number(lineSpacing) || 1);
|
|
356
|
-
const pitch = lineHeightRatio > 0 ? lineHeightRatio : LINE_HEIGHT_RATIO * multiple;
|
|
357
355
|
height += wrapped.length * size * pitch;
|
|
358
356
|
height += Math.max(0, Number(paragraph.spaceBefore) || 0);
|
|
359
357
|
height += Math.max(0, Number(paragraph.spaceAfter) || 0);
|
|
@@ -391,9 +389,10 @@ export function contrastRatio(foreground, background) {
|
|
|
391
389
|
// between blocks of copy, not inside a labelled construct.
|
|
392
390
|
const LABEL_MAX_CHARS = 16;
|
|
393
391
|
|
|
392
|
+
const paragraphsOf = (box) => (Array.isArray(box?.paragraphs) ? box.paragraphs : []);
|
|
393
|
+
|
|
394
394
|
function isLabelBox(box) {
|
|
395
|
-
const
|
|
396
|
-
const text = paragraphs
|
|
395
|
+
const text = paragraphsOf(box)
|
|
397
396
|
.map((paragraph) => String(paragraph.text ?? '').trim())
|
|
398
397
|
.filter(Boolean)
|
|
399
398
|
.join('\n');
|
|
@@ -439,9 +438,8 @@ export function reviewTextContrast(boxes = []) {
|
|
|
439
438
|
for (const box of boxes) {
|
|
440
439
|
const background = box.background;
|
|
441
440
|
if (!background) continue;
|
|
442
|
-
const paragraphs = Array.isArray(box.paragraphs) ? box.paragraphs : [];
|
|
443
441
|
let worst = null;
|
|
444
|
-
for (const paragraph of
|
|
442
|
+
for (const paragraph of paragraphsOf(box)) {
|
|
445
443
|
if (!String(paragraph.text ?? '').trim()) continue;
|
|
446
444
|
const ratio = contrastRatio(paragraph.color || '000000', background);
|
|
447
445
|
if (ratio == null) continue;
|
|
@@ -473,9 +471,8 @@ const CJK_TRACKING_RATIO = 0.05;
|
|
|
473
471
|
export function reviewCjkTracking(boxes = []) {
|
|
474
472
|
const issues = [];
|
|
475
473
|
for (const box of boxes) {
|
|
476
|
-
const paragraphs = Array.isArray(box.paragraphs) ? box.paragraphs : [];
|
|
477
474
|
let worst = null;
|
|
478
|
-
for (const paragraph of
|
|
475
|
+
for (const paragraph of paragraphsOf(box)) {
|
|
479
476
|
const text = String(paragraph.text ?? '');
|
|
480
477
|
if (!CJK_TEXT.test(text)) continue;
|
|
481
478
|
const tracking = Number(paragraph.charSpacing) || 0;
|
|
@@ -570,7 +567,7 @@ function overflowIssue(measured, usableHeight, { tolerance, substituted, path })
|
|
|
570
567
|
}
|
|
571
568
|
|
|
572
569
|
function textBoxFitIssues(box, { slideWidth, slideHeight, tolerance, isFontAvailable }) {
|
|
573
|
-
const paragraphs =
|
|
570
|
+
const paragraphs = paragraphsOf(box);
|
|
574
571
|
const path = `/slide[${box.slide}]/shape[${box.shape}]`;
|
|
575
572
|
const { usableWidth, usableHeight } = usableTextArea(box);
|
|
576
573
|
const measured = measureTextBlock(paragraphs, { width: box.wrap === false ? 0 : usableWidth });
|
|
@@ -603,7 +600,7 @@ export function reviewTextBoxFit(
|
|
|
603
600
|
) {
|
|
604
601
|
const issues = [];
|
|
605
602
|
for (const box of boxes) {
|
|
606
|
-
const paragraphs =
|
|
603
|
+
const paragraphs = paragraphsOf(box);
|
|
607
604
|
if (!paragraphs.some((paragraph) => String(paragraph.text ?? '').trim())) continue;
|
|
608
605
|
if (box.autofit === true) continue;
|
|
609
606
|
issues.push(...textBoxFitIssues(box, { slideWidth, slideHeight, tolerance, isFontAvailable }));
|
|
@@ -617,7 +614,7 @@ export function reviewTextBoxFit(
|
|
|
617
614
|
function statementSlides(boxes = []) {
|
|
618
615
|
const perSlide = new Map();
|
|
619
616
|
for (const box of boxes) {
|
|
620
|
-
const paragraphs =
|
|
617
|
+
const paragraphs = paragraphsOf(box);
|
|
621
618
|
const text = paragraphs
|
|
622
619
|
.map((paragraph) => String(paragraph.text || ''))
|
|
623
620
|
.join('')
|
|
@@ -686,7 +683,7 @@ function hollowBand(content = []) {
|
|
|
686
683
|
// The author may mean it, so it is information, not a target.
|
|
687
684
|
function titleLineHollow(slideBoxes, content, slideHeight) {
|
|
688
685
|
const texts = slideBoxes
|
|
689
|
-
.map((box) => ({ box, size: largestFontSize(
|
|
686
|
+
.map((box) => ({ box, size: largestFontSize(paragraphsOf(box)) }))
|
|
690
687
|
.filter(({ box }) => (box.paragraphs || []).some((paragraph) => String(paragraph.text || '').trim()));
|
|
691
688
|
if (texts.length < 2) return null;
|
|
692
689
|
const title = texts.reduce((largest, entry) => (entry.size > largest.size ? entry : largest));
|
|
@@ -766,7 +763,7 @@ export function reviewStatLabelProximity(boxes = [], { maximumGap = 36 } = {}) {
|
|
|
766
763
|
issues.push(...reviewDeclaredRelations(shapes, maximumGap));
|
|
767
764
|
for (const box of shapes) {
|
|
768
765
|
if (box.relation?.role === 'value') continue;
|
|
769
|
-
const paragraphs =
|
|
766
|
+
const paragraphs = paragraphsOf(box);
|
|
770
767
|
const text = paragraphs
|
|
771
768
|
.map((paragraph) => String(paragraph.text ?? ''))
|
|
772
769
|
.join(' ')
|
|
@@ -777,7 +774,7 @@ export function reviewStatLabelProximity(boxes = [], { maximumGap = 36 } = {}) {
|
|
|
777
774
|
if (letters > text.replace(/\s/g, '').length * 0.5) continue;
|
|
778
775
|
const nearest = shapes
|
|
779
776
|
.filter((candidate) => candidate !== box)
|
|
780
|
-
.filter((candidate) => largestFontSize(
|
|
777
|
+
.filter((candidate) => largestFontSize(paragraphsOf(candidate)) <= 20)
|
|
781
778
|
.filter((candidate) => candidate.paragraphs?.some((paragraph) => String(paragraph.text || '').trim()))
|
|
782
779
|
.sort((first, second) => rectangleGap(box, first) - rectangleGap(box, second))[0];
|
|
783
780
|
if (!nearest) continue;
|
|
@@ -246,6 +246,42 @@ export function listValidationChoices(formula1) {
|
|
|
246
246
|
return `"${text}"`;
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
+
export const XLSX_VALIDATION_TYPES = Object.freeze(['list', 'whole', 'decimal', 'date', 'time', 'textLength', 'custom']);
|
|
250
|
+
export const XLSX_VALIDATION_OPERATORS = Object.freeze([
|
|
251
|
+
'between',
|
|
252
|
+
'notBetween',
|
|
253
|
+
'equal',
|
|
254
|
+
'notEqual',
|
|
255
|
+
'greaterThan',
|
|
256
|
+
'lessThan',
|
|
257
|
+
'greaterThanOrEqual',
|
|
258
|
+
'lessThanOrEqual',
|
|
259
|
+
]);
|
|
260
|
+
|
|
261
|
+
// Resolve and validate once, before either Excel COM or the portable writer
|
|
262
|
+
// can interpret an unknown name as a different rule.
|
|
263
|
+
export function normalizeXlsxValidation(operation) {
|
|
264
|
+
if (!String(operation.formula1 ?? '').trim()) throw new Error('add_validation requires non-empty formula1');
|
|
265
|
+
const requestedType = String(operation.type ?? '').trim() || (listValidationFormula(operation.formula1) ? 'list' : 'custom');
|
|
266
|
+
const type = XLSX_VALIDATION_TYPES.find((value) => value.toLowerCase() === requestedType.toLowerCase());
|
|
267
|
+
if (!type) throw new Error(`add_validation type must be one of ${XLSX_VALIDATION_TYPES.join(', ')}`);
|
|
268
|
+
const requestedOperator = String(operation.operator ?? '').trim();
|
|
269
|
+
const bounded = !['list', 'custom'].includes(type);
|
|
270
|
+
const operator = requestedOperator
|
|
271
|
+
? XLSX_VALIDATION_OPERATORS.find((value) => value.toLowerCase() === requestedOperator.toLowerCase())
|
|
272
|
+
: bounded ? 'between' : '';
|
|
273
|
+
if (requestedOperator && !operator) {
|
|
274
|
+
throw new Error(`add_validation operator must be one of ${XLSX_VALIDATION_OPERATORS.join(', ')}`);
|
|
275
|
+
}
|
|
276
|
+
if (!bounded && requestedOperator) {
|
|
277
|
+
throw new Error(`add_validation operator is unsupported for type "${type}"; omit operator`);
|
|
278
|
+
}
|
|
279
|
+
if (['between', 'notBetween'].includes(operator) && !String(operation.formula2 ?? '').trim()) {
|
|
280
|
+
throw new Error(`add_validation operator "${operator}" requires formula2; for one bound use a comparison operator`);
|
|
281
|
+
}
|
|
282
|
+
return { type, ...(operator ? { operator } : {}) };
|
|
283
|
+
}
|
|
284
|
+
|
|
249
285
|
// Three ways a sheet marks its numbers: a rule that paints the cells it picks,
|
|
250
286
|
// a scale that colors every cell by where its value sits, and a bar drawn in
|
|
251
287
|
// the cell. The first needs a formula and a format; the other two carry their
|
|
@@ -394,9 +430,7 @@ function validateXlsxOperation(operation) {
|
|
|
394
430
|
// Both backends write the kind named here, so the default is settled once:
|
|
395
431
|
// a formula that names choices is a dropdown, a formula that states a test
|
|
396
432
|
// is a custom rule. Writing B2>0 as a list would offer it as one entry.
|
|
397
|
-
if (op === 'add_validation'
|
|
398
|
-
operation.type = listValidationFormula(operation.formula1) ? 'list' : 'custom';
|
|
399
|
-
}
|
|
433
|
+
if (op === 'add_validation') Object.assign(operation, normalizeXlsxValidation(operation));
|
|
400
434
|
if (op === 'set_style' && operation.cell) parseXlsxCell(operation.cell);
|
|
401
435
|
if (operation.range && RANGE_OPERATIONS.includes(op)) validateRangeOperation(operation, op);
|
|
402
436
|
else if (op === 'set_range') throw new Error('XLSX set_range requires range');
|
|
@@ -53,7 +53,13 @@ const SCANNERS = [
|
|
|
53
53
|
['string', /"(?:[^"]|"")*"/y],
|
|
54
54
|
// Excel writes a reference whose cells were deleted as #REF!, after the sheet name when it named another sheet
|
|
55
55
|
// (Data!#REF!), and one whose sheet was deleted as #REF! before the cells it named (#REF!B2:B4).
|
|
56
|
-
[
|
|
56
|
+
[
|
|
57
|
+
'error',
|
|
58
|
+
new RegExp(
|
|
59
|
+
String.raw`(?:${SHEET_PREFIX})?#(?:REF!(?:${REFERENCE_BODY})?|DIV\/0!|VALUE!|NAME\?|N\/A|NUM!|NULL!)`,
|
|
60
|
+
'yu'
|
|
61
|
+
),
|
|
62
|
+
],
|
|
57
63
|
// A name followed by "(" is a call, which keeps LOG10( from reading as a cell.
|
|
58
64
|
['call', /[A-Za-z_][A-Za-z0-9_.]*(?=\s*\()/y],
|
|
59
65
|
['reference', new RegExp(`(?:${SHEET_PREFIX})?(?:${REFERENCE_BODY})`, 'yu')],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createCanvas, loadImage } from '@napi-rs/canvas';
|
|
2
2
|
import { reviewRenderedOfficeAesthetics } from './design-aesthetics.mjs';
|
|
3
|
-
import { issue } from './assurance-
|
|
3
|
+
import { issue } from './assurance-issue.mjs';
|
|
4
4
|
|
|
5
5
|
function imagePages(image) {
|
|
6
6
|
return Array.isArray(image?.pages) && image.pages.length ? image.pages.map(Number) : [Number(image?.page) || 0];
|
|
@@ -134,9 +134,6 @@ function isPptxChromeText(shape) {
|
|
|
134
134
|
return fontSize > 0 && fontSize <= PPTX_BODY_MIN_PT && text.length <= PPTX_CHROME_MAX_CHARS && !/[\r\n]/.test(text);
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
// A numeral or short lead directly above its own description is one unit
|
|
138
|
-
// (a hero number and its label, a step number and its detail); the tight gap
|
|
139
|
-
// is the design, not a spacing defect.
|
|
140
137
|
// Near-miss alignment: an element a few points off an axis the slide already
|
|
141
138
|
// shares reads as a mistake, not as a decision — the eye registers the step
|
|
142
139
|
// without being able to name it. The reference axis must already be held by two
|
|
@@ -164,13 +161,15 @@ const PPTX_AXIS_KINDS = Object.freeze(['left edge', 'centre', 'right edge', 'top
|
|
|
164
161
|
// position. Registering that single position as three different kinds would let
|
|
165
162
|
// any box's edge drift against a rule it has nothing to do with, so the collapsed
|
|
166
163
|
// dimension reports its centre only; the drawn dimension keeps both ends.
|
|
164
|
+
const PPTX_VERTICAL_AXES = new Set(['top edge', 'bottom edge', 'middle']);
|
|
165
|
+
const PPTX_HORIZONTAL_AXES = new Set(['left edge', 'right edge', 'centre']);
|
|
166
|
+
|
|
167
167
|
function pptxShapeAxes(shape) {
|
|
168
168
|
const flat = { x: shape.width === 0, y: shape.height === 0 };
|
|
169
169
|
const span = shape.pageSpan || {};
|
|
170
|
-
const VERTICAL = new Set(['top edge', 'bottom edge', 'middle']);
|
|
171
|
-
const HORIZONTAL = new Set(['left edge', 'right edge', 'centre']);
|
|
172
170
|
return pptxPlacedAxes(shape, flat).filter(
|
|
173
|
-
([kind]) =>
|
|
171
|
+
([kind]) =>
|
|
172
|
+
!(span.spansHeight && PPTX_VERTICAL_AXES.has(kind)) && !(span.spansWidth && PPTX_HORIZONTAL_AXES.has(kind))
|
|
174
173
|
);
|
|
175
174
|
}
|
|
176
175
|
|
|
@@ -705,14 +704,24 @@ const FRAME_EDGED_GEOMETRY = new Set(['rect', 'roundRect']);
|
|
|
705
704
|
function reviewPptxTextEdgeCrossing(slide, textShapes, issues) {
|
|
706
705
|
for (const textShape of textShapes) {
|
|
707
706
|
if (isPptxChromeText(textShape)) continue;
|
|
708
|
-
const t = {
|
|
707
|
+
const t = {
|
|
708
|
+
l: Number(textShape.left),
|
|
709
|
+
t: Number(textShape.top),
|
|
710
|
+
w: Number(textShape.width),
|
|
711
|
+
h: Number(textShape.height),
|
|
712
|
+
};
|
|
709
713
|
if (!(t.w > 0 && t.h > 0)) continue;
|
|
710
714
|
for (const surface of slide.shapes || []) {
|
|
711
715
|
if (surface === textShape || isMotifShape(surface) || String(surface.text || '').trim()) continue;
|
|
712
716
|
if (!isPptxPicture(surface) && !solidShapeFill(surface)) continue;
|
|
713
717
|
if (surface.geometry && !FRAME_EDGED_GEOMETRY.has(surface.geometry)) continue;
|
|
714
718
|
if (!hasFrame(surface)) continue;
|
|
715
|
-
const s = {
|
|
719
|
+
const s = {
|
|
720
|
+
l: Number(surface.left),
|
|
721
|
+
t: Number(surface.top),
|
|
722
|
+
w: Number(surface.width),
|
|
723
|
+
h: Number(surface.height),
|
|
724
|
+
};
|
|
716
725
|
const across = Math.min(t.l + t.w, s.l + s.w) - Math.max(t.l, s.l);
|
|
717
726
|
const down = Math.min(t.t + t.h, s.t + s.h) - Math.max(t.t, s.t);
|
|
718
727
|
if (across <= 0 || down <= 0) continue;
|
|
@@ -2,8 +2,6 @@ import { reviewDocxStructure } from './assurance-structure-docx.mjs';
|
|
|
2
2
|
import { reviewPptxStructure } from './assurance-structure-pptx.mjs';
|
|
3
3
|
import { reviewXlsxStructure } from './assurance-structure-xlsx.mjs';
|
|
4
4
|
|
|
5
|
-
export { issue } from './assurance-issue.mjs';
|
|
6
|
-
|
|
7
5
|
export function reviewOfficeStructure({ format, document, auditProfile = '' } = {}) {
|
|
8
6
|
const normalized = String(format || document?.format || '').toLowerCase();
|
|
9
7
|
if (normalized === 'docx') return reviewDocxStructure(document);
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// the issues the render can raise (contrast, density, rhythm, repetition) and
|
|
3
3
|
// the v2 score. Sampling lives in design-aesthetics-metrics.mjs.
|
|
4
4
|
import { clamp } from '../shared/values.mjs';
|
|
5
|
+
import { issue } from './assurance-issue.mjs';
|
|
5
6
|
import {
|
|
6
7
|
deviation,
|
|
7
8
|
mean,
|
|
@@ -96,15 +97,7 @@ function roleAwareComposition(metric, role) {
|
|
|
96
97
|
};
|
|
97
98
|
}
|
|
98
99
|
|
|
99
|
-
|
|
100
|
-
return {
|
|
101
|
-
severity: 'warning',
|
|
102
|
-
code,
|
|
103
|
-
path,
|
|
104
|
-
message,
|
|
105
|
-
source: 'aesthetic-review',
|
|
106
|
-
};
|
|
107
|
-
}
|
|
100
|
+
const aestheticIssue = (code, path, message) => issue(code, path, message, 'aesthetic-review');
|
|
108
101
|
|
|
109
102
|
function contentPages(pages) {
|
|
110
103
|
return pages.length >= 3 ? pages.slice(1, -1) : pages.slice(1);
|
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
import { slideReceipt } from '../authoring/pptx-receipt.mjs';
|
|
2
2
|
import { isPictureShape, signedVisualType } from '../design/design-discipline.mjs';
|
|
3
|
+
import { issue as sharedIssue } from './assurance-issue.mjs';
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
return {
|
|
6
|
-
severity: 'warning',
|
|
7
|
-
code,
|
|
8
|
-
path: '/',
|
|
9
|
-
message,
|
|
10
|
-
source: 'design-review',
|
|
11
|
-
};
|
|
12
|
-
}
|
|
5
|
+
const issue = (code, message) => sharedIssue(code, '/', message, 'design-review');
|
|
13
6
|
|
|
14
7
|
// The deck's shape, read from the page grammar the receipt assigns (beat | evidence | text). Thirteen reference
|
|
15
8
|
// decks (400 pages) run beats — dark or field pages — on 0-21% of their pages (median 13%) and never three in a
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
import { authoredBackgroundLadder, isCardGridSlide, isOrnamentalStripe, slideSize } from './design-review-authored.mjs';
|
|
15
15
|
import { reviewBriefPromises, reviewFactCoverage, reviewSourceGrounding } from '../authoring/pptx-brief.mjs';
|
|
16
16
|
import { isAdvisoryOfficeIssue } from './quality-pipeline.mjs';
|
|
17
|
+
import { issue } from './assurance-issue.mjs';
|
|
17
18
|
import { isPptxSpecimenSlide, isPptxStatementSlide } from './pptx-slide-roles.mjs';
|
|
18
19
|
import { usesNativeOfficeDesign } from '../design/native-design.mjs';
|
|
19
20
|
import { reviewNativeDocumentDesign } from './document-design-review.mjs';
|
|
@@ -27,9 +28,8 @@ export {
|
|
|
27
28
|
isPptxStatementSlide,
|
|
28
29
|
} from './pptx-slide-roles.mjs';
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
31
|
+
const designIssue = (code, path, message, severity = 'warning') =>
|
|
32
|
+
issue(code, path, message, 'design-review', severity);
|
|
33
33
|
|
|
34
34
|
function pptxSlideBackgroundColor(slide) {
|
|
35
35
|
return hex(slide?.background?.color, '');
|
|
@@ -42,7 +42,7 @@ function isRegisteredText(shape, anchors) {
|
|
|
42
42
|
|
|
43
43
|
// A diagram shape is a connector, a preset geometry that is not a plain text
|
|
44
44
|
// rectangle, or a rectangle with a surface fill (a field, a plane, a lane).
|
|
45
|
-
|
|
45
|
+
function isPptxDiagramShape(shape) {
|
|
46
46
|
if (!shape || shape.placeholder || isMotifShape(shape)) return false;
|
|
47
47
|
if (shape.type === 'p:cxnSp') return true;
|
|
48
48
|
if (shape.type !== 'p:sp' || !shape.geometry) return false;
|
|
@@ -53,7 +53,7 @@ export function isPptxDiagramShape(shape) {
|
|
|
53
53
|
// count: the drawn shapes; fieldShare: the union box of those shapes and the
|
|
54
54
|
// text registered to them (the slide's title — its largest type — excluded),
|
|
55
55
|
// as a share of the canvas.
|
|
56
|
-
|
|
56
|
+
function pptxDiagramCoverage(slide, size = DEFAULT_SLIDE) {
|
|
57
57
|
const all = (Array.isArray(slide?.shapes) ? slide.shapes : []).filter(
|
|
58
58
|
(shape) => hasBox(shape) && !shape.placeholder && !isMotifShape(shape)
|
|
59
59
|
);
|
|
@@ -80,7 +80,7 @@ export function pptxDiagramCoverage(slide, size = DEFAULT_SLIDE) {
|
|
|
80
80
|
const PICTURE_MIN_SHARE = 0.25;
|
|
81
81
|
|
|
82
82
|
// The share of the canvas under pictures (each frame's own area; overlaps count twice, which only helps a stack).
|
|
83
|
-
|
|
83
|
+
function pptxPictureShare(slide, size = DEFAULT_SLIDE) {
|
|
84
84
|
const canvas = canvasArea(size);
|
|
85
85
|
const area = (Array.isArray(slide?.shapes) ? slide.shapes : [])
|
|
86
86
|
.filter((shape) => shape?.type === 'p:pic' && Number(shape.width) > 0 && Number(shape.height) > 0)
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
// "14시 30분"), a sum written in two groups ("12만 6천 원", "1억 3,500만 원"), and a sum with its unit ("24억 원").
|
|
5
5
|
// Broken between them, a decision read "…을 10월 / 14일 투자심의에서" and a saving "12만 / 6천 원".
|
|
6
6
|
function bound(left, right) {
|
|
7
|
-
return (
|
|
7
|
+
return (
|
|
8
|
+
(/\d(?:분의|월|시|조|억|만)$/.test(left) && /^\d/.test(right)) || (/\d[억만천조]?$/.test(left) && /^원/.test(right))
|
|
9
|
+
);
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
// A line's words with each pair that reads as one joined by its space: the units a line is broken between.
|
|
@@ -26,7 +26,7 @@ export const TOOL_DEFS = [
|
|
|
26
26
|
type: 'string',
|
|
27
27
|
enum: OFFICE_ACTIONS,
|
|
28
28
|
description:
|
|
29
|
-
'detect/describe discover; author:
|
|
29
|
+
'detect/describe discover; author: HTML/pptxgenjs PPTX; transactions/recover/begin/diff/commit/rollback checkpoints; create/attach/open; snapshot/get/query; batch edits; issues/qa/validate review; render exports PDF and page images; save/finalize/close; secure: PDF passwords.',
|
|
30
30
|
},
|
|
31
31
|
path: { type: 'string', description: 'Document path; relative paths resolve from the caller project.' },
|
|
32
32
|
script: { type: 'string', description: 'author: HTML slides or a pptxgenjs script (pptx skill).' },
|
|
@@ -75,7 +75,7 @@ export const TOOL_DEFS = [
|
|
|
75
75
|
description:
|
|
76
76
|
'auto defaults to background with Office, otherwise portable. Only explicit attach (alias live) co-edits an open file; visible opens a window; background edits a copy.',
|
|
77
77
|
},
|
|
78
|
-
output: { type: 'string', description: 'Output copy
|
|
78
|
+
output: { type: 'string', description: 'Output copy; render: exported PDF path. Defaults beside source.' },
|
|
79
79
|
target: { type: 'string', description: 'Stable path from snapshot/query, e.g. /body/p[2].' },
|
|
80
80
|
query: { type: 'string', description: 'Case-insensitive value search; with pdf-layout, where the text sits.' },
|
|
81
81
|
queryKind: {
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Non-blocking, size-bounded line appender for diagnostic logs.
|
|
2
|
+
//
|
|
3
|
+
// Callers on hot paths (notification delivery, every session close) used to
|
|
4
|
+
// appendFileSync per line and, for one of them, stat + rewrite the file too.
|
|
5
|
+
// Here `append` only queues the line; one drain per file writes the batch
|
|
6
|
+
// asynchronously, and once the file would pass `maxBytes` it is cut down to
|
|
7
|
+
// its last `keepBytes` (whole lines) before the next batch lands. Best effort:
|
|
8
|
+
// a failed write drops its batch and never throws into the caller.
|
|
9
|
+
import { appendFile, readFile, stat, writeFile } from 'node:fs/promises';
|
|
10
|
+
|
|
11
|
+
// A wedged disk must not turn the queue into a memory leak.
|
|
12
|
+
const MAX_QUEUED_LINES = 4096;
|
|
13
|
+
// Other processes append to the same file; re-measure now and then.
|
|
14
|
+
const RESTAT_EVERY_DRAINS = 256;
|
|
15
|
+
|
|
16
|
+
export function createAsyncLogAppender({ maxBytes, keepBytes }) {
|
|
17
|
+
/** path -> { lines, bytes (last known size or null), drains, running } */
|
|
18
|
+
const lanes = new Map();
|
|
19
|
+
|
|
20
|
+
async function measure(path) {
|
|
21
|
+
try {
|
|
22
|
+
return (await stat(path)).size;
|
|
23
|
+
} catch {
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async function rotate(path) {
|
|
29
|
+
const buffer = await readFile(path);
|
|
30
|
+
if (buffer.length <= maxBytes) return buffer.length;
|
|
31
|
+
let tail = buffer.subarray(buffer.length - keepBytes);
|
|
32
|
+
// Start on a line boundary so no half line survives rotation.
|
|
33
|
+
const newline = tail.indexOf(0x0a);
|
|
34
|
+
if (newline >= 0 && newline + 1 < tail.length) tail = tail.subarray(newline + 1);
|
|
35
|
+
await writeFile(path, tail);
|
|
36
|
+
return tail.length;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function drain(path, lane) {
|
|
40
|
+
try {
|
|
41
|
+
if (lane.bytes === null || ++lane.drains % RESTAT_EVERY_DRAINS === 0) lane.bytes = await measure(path);
|
|
42
|
+
while (lane.lines.length > 0) {
|
|
43
|
+
const chunk = lane.lines.join('');
|
|
44
|
+
lane.lines = [];
|
|
45
|
+
const size = Buffer.byteLength(chunk);
|
|
46
|
+
if (lane.bytes + size > maxBytes) {
|
|
47
|
+
lane.bytes = await measure(path);
|
|
48
|
+
if (lane.bytes + size > maxBytes) lane.bytes = await rotate(path);
|
|
49
|
+
}
|
|
50
|
+
await appendFile(path, chunk);
|
|
51
|
+
lane.bytes += size;
|
|
52
|
+
}
|
|
53
|
+
} catch {
|
|
54
|
+
lane.bytes = null;
|
|
55
|
+
lane.lines = [];
|
|
56
|
+
} finally {
|
|
57
|
+
lane.running = null;
|
|
58
|
+
if (lane.lines.length > 0) lane.running = drain(path, lane);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
/** Queue one already-terminated line for `path`. */
|
|
64
|
+
append(path, line) {
|
|
65
|
+
let lane = lanes.get(path);
|
|
66
|
+
if (!lane) {
|
|
67
|
+
lane = { lines: [], bytes: null, drains: 0, running: null };
|
|
68
|
+
lanes.set(path, lane);
|
|
69
|
+
}
|
|
70
|
+
lane.lines.push(line);
|
|
71
|
+
if (lane.lines.length > MAX_QUEUED_LINES) lane.lines.shift();
|
|
72
|
+
if (!lane.running) lane.running = drain(path, lane);
|
|
73
|
+
},
|
|
74
|
+
/** Resolves once everything queued so far has been written (or dropped). */
|
|
75
|
+
async flush() {
|
|
76
|
+
for (;;) {
|
|
77
|
+
const running = [...lanes.values()].map((lane) => lane.running).filter(Boolean);
|
|
78
|
+
if (running.length === 0) return;
|
|
79
|
+
await Promise.all(running);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Automation presence: any enabled schedule that has not finished, or any
|
|
2
|
+
// enabled webhook endpoint. The channel worker boots only while one exists,
|
|
3
|
+
// so this is also what tells a stopped worker apart from an idle one.
|
|
4
|
+
export function hasEnabledAutomation({ schedules = [], webhooks = [] } = {}) {
|
|
5
|
+
return (
|
|
6
|
+
schedules.some((entry) => entry?.enabled !== false && entry?.status !== 'done') ||
|
|
7
|
+
webhooks.some((entry) => entry?.enabled !== false)
|
|
8
|
+
);
|
|
9
|
+
}
|
|
@@ -137,6 +137,8 @@ function _flush(path, q) {
|
|
|
137
137
|
q.chunks.unshift(data);
|
|
138
138
|
q.bytes += Buffer.byteLength(data, 'utf8');
|
|
139
139
|
trimBufferedQueue(q);
|
|
140
|
+
} else {
|
|
141
|
+
recordDroppedBytes(q, Buffer.byteLength(data, 'utf8'));
|
|
140
142
|
}
|
|
141
143
|
})
|
|
142
144
|
.finally(() => {
|
|
@@ -189,24 +191,25 @@ export function getBufferedAppenderStats(path) {
|
|
|
189
191
|
*/
|
|
190
192
|
function drainAllSync() {
|
|
191
193
|
for (const path of queues.keys()) {
|
|
192
|
-
drainPathSync(path);
|
|
194
|
+
drainPathSync(path, { exiting: true });
|
|
193
195
|
}
|
|
194
196
|
}
|
|
195
197
|
|
|
196
198
|
/**
|
|
197
|
-
* Synchronously drain the queue for a single path.
|
|
198
|
-
* (already-dequeued but not yet persisted) payload
|
|
199
|
-
*
|
|
200
|
-
*
|
|
199
|
+
* Synchronously drain the queue for a single path. At process exit the
|
|
200
|
+
* in-flight (already-dequeued but not yet persisted) payload is written
|
|
201
|
+
* FIRST, since its async append can no longer land; otherwise the live
|
|
202
|
+
* async append still owns it and rewriting it would duplicate the bytes.
|
|
203
|
+
* Then any still-queued chunks are written. Best-effort, never throws.
|
|
201
204
|
*/
|
|
202
|
-
export function drainPathSync(path) {
|
|
205
|
+
export function drainPathSync(path, { exiting = false } = {}) {
|
|
203
206
|
const q = queues.get(path);
|
|
204
207
|
if (!q) return;
|
|
205
208
|
if (q.timer) {
|
|
206
209
|
clearTimeout(q.timer);
|
|
207
210
|
q.timer = null;
|
|
208
211
|
}
|
|
209
|
-
if (q.inFlight) {
|
|
212
|
+
if (exiting && q.inFlight) {
|
|
210
213
|
try {
|
|
211
214
|
appendFileSync(path, q.inFlight, 'utf8');
|
|
212
215
|
} catch {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { availableParallelism } from 'node:os';
|
|
2
2
|
import { createOwnerFairGate } from './owner-fair-gate.mjs';
|
|
3
3
|
import { currentToolExecutionOwner } from './tool-execution-owner.mjs';
|
|
4
|
-
import { acquireRemoteSpawnLease, remoteSpawnLeasesEnabled } from './child-spawn-remote.mjs';
|
|
5
4
|
import { positiveInt } from './numbers.mjs';
|
|
6
5
|
|
|
7
6
|
// ── Module-global child-spawn semaphore ──────────────────────────────────
|
|
@@ -128,21 +127,6 @@ const SLOW_WAIT_MS = Math.max(1000, Number(process.env.MIXDOG_CHILD_SPAWN_SLOW_M
|
|
|
128
127
|
const SLOW_WARN_THROTTLE_MS = 30000;
|
|
129
128
|
|
|
130
129
|
let _lastSlowWarnAt = 0;
|
|
131
|
-
let _lastFallbackWarnAt = 0;
|
|
132
|
-
|
|
133
|
-
function _warnLeaseFallback(error, laneName) {
|
|
134
|
-
const now = Date.now();
|
|
135
|
-
if (now - _lastFallbackWarnAt < SLOW_WARN_THROTTLE_MS) return;
|
|
136
|
-
_lastFallbackWarnAt = now;
|
|
137
|
-
try {
|
|
138
|
-
process.stderr.write(
|
|
139
|
-
`[child-spawn-gate] lane=${laneName} machine spawn budget unavailable` +
|
|
140
|
-
` (${error?.message || error}); using this process's bounded local lane\n`
|
|
141
|
-
);
|
|
142
|
-
} catch {
|
|
143
|
-
/* ignore */
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
130
|
|
|
147
131
|
function _maybeWarnSlow(waitedMs, laneName, limit, queued) {
|
|
148
132
|
if (waitedMs < SLOW_WAIT_MS) return;
|
|
@@ -180,25 +164,6 @@ export function acquire(signal = null, laneName = 'search', options = {}) {
|
|
|
180
164
|
const lane = _lane(normalizedLaneName);
|
|
181
165
|
const ownerKey = options?.ownerKey || currentToolExecutionOwner();
|
|
182
166
|
const waitTimeoutMs = options?.waitTimeoutMs ?? lane.waitTimeoutMs;
|
|
183
|
-
// Session shards defer to the machine-wide budget owned by the daemon-side
|
|
184
|
-
// pool; the local lane remains the bounded fallback when the pool channel
|
|
185
|
-
// cannot answer. Real admission rejections (wait timeout, queue full)
|
|
186
|
-
// surface unchanged.
|
|
187
|
-
if (remoteSpawnLeasesEnabled()) {
|
|
188
|
-
return acquireRemoteSpawnLease({
|
|
189
|
-
lane: normalizedLaneName,
|
|
190
|
-
ownerKey,
|
|
191
|
-
signal,
|
|
192
|
-
waitTimeoutMs,
|
|
193
|
-
}).catch((error) => {
|
|
194
|
-
if (error?.code !== 'ELEASEFALLBACK') throw error;
|
|
195
|
-
// Only a genuinely dead pool channel reaches here (the client re-arms
|
|
196
|
-
// while the link is alive). Say so loudly: from this point the cap is
|
|
197
|
-
// per-process, so N shards can hold N× the machine-wide budget.
|
|
198
|
-
_warnLeaseFallback(error, normalizedLaneName);
|
|
199
|
-
return _acquireLocal(signal, normalizedLaneName, lane, ownerKey, waitTimeoutMs);
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
167
|
return _acquireLocal(signal, normalizedLaneName, lane, ownerKey, waitTimeoutMs);
|
|
203
168
|
}
|
|
204
169
|
|
|
@@ -240,7 +205,7 @@ function _abortError() {
|
|
|
240
205
|
* Best-effort capacity probe for NON-COMPETING prewarm/warmup work. Returns
|
|
241
206
|
* true only when a slot could be taken right now without queuing — i.e. below
|
|
242
207
|
* the cap AND with no waiter already queued. Speculative warmers
|
|
243
|
-
* code_graph / find prewarm) consult this to skip/defer when the daemon is
|
|
208
|
+
* (code_graph / find prewarm) consult this to skip/defer when the daemon is
|
|
244
209
|
* busy, so a fire-and-forget warm never pushes a real tool query into the
|
|
245
210
|
* queue (the "non-competing under fanout" guarantee). This is a probe, NOT a
|
|
246
211
|
* reservation: the answer can go stale under a race, which is acceptable for
|
|
@@ -254,7 +219,7 @@ export function hasSpareCapacity(laneName = 'search') {
|
|
|
254
219
|
|
|
255
220
|
export function snapshot() {
|
|
256
221
|
return {
|
|
257
|
-
mode:
|
|
222
|
+
mode: 'local',
|
|
258
223
|
maxInflight: Number.isFinite(DEFAULT_MAX_INFLIGHT) ? DEFAULT_MAX_INFLIGHT : null,
|
|
259
224
|
lanes: [..._lanes.entries()].map(([name, lane]) => {
|
|
260
225
|
const state = lane.gate.snapshot();
|