mixdog 0.9.63 → 0.9.65
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 +3 -0
- package/package.json +9 -2
- package/scripts/code-graph-description-contract.mjs +3 -3
- package/scripts/verify-release-assets.mjs +2 -2
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +11 -14
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +6 -6
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -2
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +1 -0
- package/src/runtime/agent/orchestrator/config.mjs +19 -124
- package/src/runtime/agent/orchestrator/context/collect.mjs +6 -6
- package/src/runtime/agent/orchestrator/dispatch-persist.mjs +2 -2
- package/src/runtime/agent/orchestrator/internal-agents.mjs +2 -2
- package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +1 -1
- package/src/runtime/agent/orchestrator/mcp/client.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +333 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +3 -277
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +6 -6
- package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +196 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +460 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +14 -593
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +5 -280
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +357 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-headers.mjs +216 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +2 -188
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/registry.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/compact/budget.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/compact/file-reattach.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/compact/summary-schema.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/compact/summary.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +4 -4
- package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +17 -0
- package/src/runtime/agent/orchestrator/session/loop/steering.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +18 -26
- package/src/runtime/agent/orchestrator/session/loop/termination.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/delivered-completions.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/live-state.mjs +49 -0
- package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +49 -0
- package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +260 -0
- package/src/runtime/agent/orchestrator/session/store/serialize.mjs +72 -0
- package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +163 -0
- package/src/runtime/agent/orchestrator/session/store/write-guards.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/store.mjs +9 -561
- package/src/runtime/agent/orchestrator/session/tool-envelope.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +2 -2
- package/src/runtime/agent/orchestrator/stall-policy.mjs +11 -11
- package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/bash-session.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +2 -154
- package/src/runtime/agent/orchestrator/tools/builtin/cache-layers.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/cwd-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/fs-reachability.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/path-locks.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-args.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +2 -3
- package/src/runtime/agent/orchestrator/tools/builtin/read-image-resize.mjs +4 -4
- package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +5 -5
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-paths.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-process.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-spawn.mjs +519 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +5 -449
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +212 -0
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +1 -7
- package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +9 -36
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +15 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/search-references.mjs +429 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +2 -395
- package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/code-graph/text-mask.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/trusted-roots.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-state.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/mutation-planner.mjs +5 -5
- package/src/runtime/agent/orchestrator/tools/next-call-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +7 -7
- package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +72 -9
- package/src/runtime/agent/orchestrator/tools/patch/parsing.mjs +4 -4
- package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +4 -4
- package/src/runtime/agent/orchestrator/tools/patch.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/result-compression.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +2 -444
- package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +505 -0
- package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +1 -1
- package/src/runtime/channels/lib/backend-dispatch.mjs +20 -5
- package/src/runtime/channels/lib/scheduler.mjs +1 -1
- package/src/runtime/channels/lib/telegram-format.mjs +1 -1
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +4 -4
- package/src/runtime/channels/tool-defs.mjs +2 -3
- package/src/runtime/memory/index.mjs +1 -5
- package/src/runtime/memory/lib/core-memory-candidates.mjs +357 -0
- package/src/runtime/memory/lib/core-memory-store.mjs +7 -357
- package/src/runtime/memory/lib/cycle-signatures.mjs +1 -1
- package/src/runtime/memory/lib/embedding-model-config.mjs +1 -1
- package/src/runtime/memory/lib/embedding-provider.mjs +1 -5
- package/src/runtime/memory/lib/embedding-worker.mjs +1 -5
- package/src/runtime/memory/lib/ko-morph.mjs +2 -2
- package/src/runtime/memory/lib/memory-config-flags.mjs +2 -5
- package/src/runtime/memory/lib/memory-cycle-requests.mjs +3 -7
- package/src/runtime/memory/lib/memory-cycle1.mjs +4 -8
- package/src/runtime/memory/lib/memory-cycle2-gate.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2-shared.mjs +2 -5
- package/src/runtime/memory/lib/memory-cycle3.mjs +1 -5
- package/src/runtime/memory/lib/memory-embed.mjs +2 -6
- package/src/runtime/memory/lib/memory-log.mjs +8 -0
- package/src/runtime/memory/lib/memory-ops-policy.mjs +4 -8
- package/src/runtime/memory/lib/memory-recall-scope-filter.mjs +1 -1
- package/src/runtime/memory/lib/memory-recall-store.mjs +2 -193
- package/src/runtime/memory/lib/memory-score.mjs +1 -1
- package/src/runtime/memory/lib/memory-text-utils.mjs +2 -2
- package/src/runtime/memory/lib/memory.mjs +2 -6
- package/src/runtime/memory/lib/pg/adapter.mjs +2 -6
- package/src/runtime/memory/lib/pg/process.mjs +1 -5
- package/src/runtime/memory/lib/pg/supervisor.mjs +1 -5
- package/src/runtime/memory/lib/recall-format.mjs +2 -2
- package/src/runtime/memory/lib/recall-scoring.mjs +195 -0
- package/src/runtime/memory/lib/runtime-fetcher.mjs +1 -5
- package/src/runtime/memory/lib/trace-store.mjs +2 -6
- package/src/runtime/search/lib/http-fetch.mjs +6 -6
- package/src/runtime/search/lib/web-tools.mjs +2 -2
- package/src/runtime/shared/buffered-appender.mjs +1 -1
- package/src/runtime/shared/child-guardian.mjs +1 -1
- package/src/runtime/shared/child-spawn-gate.mjs +1 -1
- package/src/runtime/shared/config.mjs +4 -4
- package/src/runtime/shared/launcher-control.mjs +9 -10
- package/src/runtime/shared/llm/index.mjs +5 -20
- package/src/runtime/shared/markdown-frontmatter.mjs +1 -1
- package/src/runtime/shared/memory-snapshot.mjs +4 -4
- package/src/runtime/shared/pristine-execution.mjs +1 -1
- package/src/runtime/shared/process-lifecycle.mjs +0 -1
- package/src/runtime/shared/process-shutdown.mjs +1 -1
- package/src/runtime/shared/resource-admission.mjs +2 -2
- package/src/runtime/shared/schedule-session-run.mjs +1 -1
- package/src/runtime/shared/schedules-db.mjs +1 -1
- package/src/runtime/shared/service-discovery.mjs +2 -2
- package/src/runtime/shared/staged-update.mjs +6 -6
- package/src/runtime/shared/tool-execution-contract.mjs +1 -1
- package/src/runtime/shared/tool-primitives.mjs +1 -1
- package/src/runtime/shared/tool-surface.mjs +2 -2
- package/src/runtime/shared/turn-snapshot.mjs +184 -0
- package/src/runtime/shared/update-checker.mjs +1 -1
- package/src/runtime/shared/user-cwd.mjs +3 -3
- package/src/runtime/shared/user-data-guard.mjs +4 -4
- package/src/runtime/shared/workspace-router.mjs +5 -5
- package/src/session-runtime/config-helpers.mjs +2 -3
- package/src/session-runtime/config-lifecycle.mjs +1 -1
- package/src/session-runtime/hitch-profile.mjs +1 -1
- package/src/session-runtime/lifecycle-api.mjs +6 -4
- package/src/session-runtime/model-recency.mjs +5 -5
- package/src/session-runtime/plugin-mcp.mjs +1 -1
- package/src/session-runtime/provider-request-snapshot.mjs +338 -0
- package/src/session-runtime/runtime-core.mjs +4 -0
- package/src/session-runtime/session-text.mjs +4 -4
- package/src/session-runtime/session-turn-api.mjs +7 -0
- package/src/session-runtime/tool-catalog-schema.mjs +197 -0
- package/src/session-runtime/tool-catalog.mjs +6 -483
- package/src/session-runtime/tool-defs.mjs +1 -1
- package/src/standalone/agent-task-status.mjs +1 -1
- package/src/standalone/agent-tool/helpers.mjs +2 -2
- package/src/standalone/channel-admin.mjs +4 -4
- package/src/standalone/explore-tool.mjs +3 -3
- package/src/standalone/hook-bus/config.mjs +1 -1
- package/src/standalone/hook-bus/constants.mjs +1 -1
- package/src/standalone/hook-bus/rules.mjs +1 -1
- package/src/standalone/projects.mjs +1 -1
- package/src/standalone/provider-admin.mjs +2 -2
- package/src/tui/App.jsx +1 -1
- package/src/tui/app/app-format.mjs +2 -2
- package/src/tui/app/clipboard.mjs +3 -3
- package/src/tui/app/input-parsers.mjs +1 -1
- package/src/tui/app/text-layout.mjs +1 -1
- package/src/tui/app/transcript-row-estimate.mjs +360 -0
- package/src/tui/app/transcript-window.mjs +5 -347
- package/src/tui/app/use-mouse-input.mjs +1 -1
- package/src/tui/app/use-prompt-handlers.mjs +1 -1
- package/src/tui/components/tool-execution/surface-detail.mjs +9 -9
- package/src/tui/components/tool-execution/text-format.mjs +2 -2
- package/src/tui/components/tool-output-format.mjs +7 -7
- package/src/tui/display-width.mjs +4 -4
- package/src/tui/dist/index.mjs +187 -99
- package/src/tui/engine/agent-envelope.mjs +5 -5
- package/src/tui/engine/live-share.mjs +100 -0
- package/src/tui/engine/notification-plan.mjs +1 -1
- package/src/tui/engine/queue-helpers.mjs +3 -3
- package/src/tui/engine/render-timing.mjs +4 -5
- package/src/tui/engine/session-api-ext.mjs +6 -3
- package/src/tui/engine/tool-result-status.mjs +5 -5
- package/src/tui/engine/tool-result-text.mjs +1 -1
- package/src/tui/engine/transcript-spill.mjs +585 -0
- package/src/tui/engine/tui-steering-persist.mjs +1 -1
- package/src/tui/engine.mjs +29 -474
- package/src/tui/lib/voice-setup.mjs +1 -1
- package/src/tui/markdown/format-token.mjs +1 -1
- package/src/tui/markdown/render-ansi.mjs +1 -1
- package/src/tui/markdown/table-layout.mjs +4 -4
- package/src/tui/paste-attachments.mjs +1 -1
- package/src/tui/prompt-history-store.mjs +3 -3
- package/src/tui/statusline-ansi-bridge.mjs +2 -2
- package/src/tui/theme.mjs +1 -1
- package/src/tui/transcript-tool-failures.mjs +2 -2
- package/src/ui/ansi.mjs +0 -9
- package/src/ui/statusline-format.mjs +2 -4
- package/scripts/_bench-cwc.json +0 -20
- package/scripts/_jitter-fuzz.jsx +0 -42
- package/scripts/_jitter-fuzz2.jsx +0 -30
- package/scripts/_jitter-probe.jsx +0 -35
- package/scripts/_jp2.jsx +0 -16
- package/scripts/_smoke_wd.mjs +0 -7
- package/scripts/abort-recovery-test.mjs +0 -175
- package/scripts/agent-dispatch-abort-compose-test.mjs +0 -31
- package/scripts/agent-live-arg-guard-smoke.mjs +0 -20
- package/scripts/agent-live-path-suffix-smoke.mjs +0 -34
- package/scripts/agent-live-toolcall-args-smoke.mjs +0 -45
- package/scripts/agent-loop-policy-test.mjs +0 -37
- package/scripts/agent-model-liveness-test.mjs +0 -763
- package/scripts/agent-parallel-smoke.mjs +0 -435
- package/scripts/agent-route-batch-test.mjs +0 -40
- package/scripts/agent-tag-reuse-smoke.mjs +0 -441
- package/scripts/agent-terminal-reap-test.mjs +0 -252
- package/scripts/agent-trace-io-test.mjs +0 -133
- package/scripts/ansi-color-capability-test.mjs +0 -90
- package/scripts/anthropic-admission-retry-integration-test.mjs +0 -119
- package/scripts/anthropic-maxtokens-test.mjs +0 -119
- package/scripts/anthropic-oauth-refresh-race-test.mjs +0 -397
- package/scripts/anthropic-transport-policy-test.mjs +0 -726
- package/scripts/apply-patch-edit-smoke.mjs +0 -71
- package/scripts/arg-guard-test.mjs +0 -93
- package/scripts/async-notify-settlement-test.mjs +0 -99
- package/scripts/atomic-lock-tryonce-test.mjs +0 -125
- package/scripts/background-task-meta-smoke.mjs +0 -38
- package/scripts/bench-run.mjs +0 -508
- package/scripts/boot-smoke.mjs +0 -137
- package/scripts/build-runtime-windows.ps1 +0 -242
- package/scripts/channel-daemon-smoke.mjs +0 -1103
- package/scripts/code-graph-aggregate-cwd-test.mjs +0 -158
- package/scripts/code-graph-disk-hit-test.mjs +0 -290
- package/scripts/code-graph-dispatch-test.mjs +0 -96
- package/scripts/code-graph-root-federation-test.mjs +0 -273
- package/scripts/compact-active-turn-test.mjs +0 -68
- package/scripts/compact-file-reattach-test.mjs +0 -88
- package/scripts/compact-pressure-test.mjs +0 -788
- package/scripts/compact-prior-context-flatten-test.mjs +0 -252
- package/scripts/compact-recall-digest-test.mjs +0 -57
- package/scripts/compact-smoke.mjs +0 -1017
- package/scripts/compact-trigger-migration-smoke.mjs +0 -261
- package/scripts/compacted-placeholder-scrub-test.mjs +0 -63
- package/scripts/context-mcp-metering-test.mjs +0 -1406
- package/scripts/debounced-skills-async-save-test.mjs +0 -57
- package/scripts/deferred-tool-loading-test.mjs +0 -250
- package/scripts/desktop-session-bridge-test.mjs +0 -1013
- package/scripts/dispatch-persist-recovery-test.mjs +0 -141
- package/scripts/embedding-worker-exit-test.mjs +0 -76
- package/scripts/execution-completion-dedup-test.mjs +0 -205
- package/scripts/execution-pending-resume-kick-test.mjs +0 -151
- package/scripts/execution-resume-esc-integration-test.mjs +0 -176
- package/scripts/explore-bench-tmp.mjs +0 -36
- package/scripts/explore-bench.mjs +0 -248
- package/scripts/explore-prompt-policy-test.mjs +0 -256
- package/scripts/explore-timeout-cancel-test.mjs +0 -345
- package/scripts/find-fuzzy-hidden-test.mjs +0 -267
- package/scripts/forwarder-rebind-tail-test.mjs +0 -67
- package/scripts/freevar-smoke.mjs +0 -98
- package/scripts/gemini-provider-test.mjs +0 -1448
- package/scripts/generate-oc-icons.mjs +0 -11
- package/scripts/grok-oauth-refresh-race-test.mjs +0 -273
- package/scripts/headless-pristine-execution-test.mjs +0 -614
- package/scripts/hook-bus-test.mjs +0 -552
- package/scripts/ingest-pure-conversation-smoke.mjs +0 -175
- package/scripts/internal-comms-bench-test.mjs +0 -226
- package/scripts/internal-comms-bench.mjs +0 -853
- package/scripts/internal-comms-smoke.mjs +0 -277
- package/scripts/internal-tools-normalization-test.mjs +0 -62
- package/scripts/interrupted-turn-history-test.mjs +0 -399
- package/scripts/lead-workflow-smoke.mjs +0 -592
- package/scripts/lifecycle-api-test.mjs +0 -137
- package/scripts/live-share-test.mjs +0 -148
- package/scripts/live-worker-smoke.mjs +0 -333
- package/scripts/log-writer-guard-smoke.mjs +0 -131
- package/scripts/maintenance-default-routes-test.mjs +0 -164
- package/scripts/max-output-recovery-persist-test.mjs +0 -81
- package/scripts/max-output-recovery-test.mjs +0 -368
- package/scripts/mcp-client-normalization-test.mjs +0 -45
- package/scripts/mcp-grace-deferred-test.mjs +0 -225
- package/scripts/memory-core-input-test.mjs +0 -167
- package/scripts/memory-cycle-routing-test.mjs +0 -111
- package/scripts/memory-meta-concurrency-test.mjs +0 -20
- package/scripts/memory-pg-recovery-test.mjs +0 -59
- package/scripts/memory-rule-contract-test.mjs +0 -93
- package/scripts/model-list-sanitize-test.mjs +0 -37
- package/scripts/mouse-tracking-restore-smoke.mjs +0 -107
- package/scripts/native-edit-wire-test.mjs +0 -152
- package/scripts/notify-completion-mirror-test.mjs +0 -73
- package/scripts/openai-oauth-refresh-race-test.mjs +0 -120
- package/scripts/openai-oauth-ws-1006-retry-test.mjs +0 -954
- package/scripts/openai-ws-early-settle-test.mjs +0 -216
- package/scripts/output-style-bench.mjs +0 -292
- package/scripts/output-style-smoke.mjs +0 -145
- package/scripts/parent-abort-link-test.mjs +0 -90
- package/scripts/patch-binary-cache-test.mjs +0 -181
- package/scripts/path-suffix-test.mjs +0 -57
- package/scripts/pending-completion-drop-test.mjs +0 -239
- package/scripts/pending-messages-lock-nonblocking-test.mjs +0 -62
- package/scripts/pretool-ask-runtime-test.mjs +0 -54
- package/scripts/process-lifecycle-test.mjs +0 -461
- package/scripts/prompt-immediate-render-test.mjs +0 -89
- package/scripts/prompt-input-parity-test.mjs +0 -145
- package/scripts/provider-admission-scheduler-test.mjs +0 -681
- package/scripts/provider-contract-test.mjs +0 -632
- package/scripts/provider-stream-stall-test.mjs +0 -276
- package/scripts/provider-toolcall-test.mjs +0 -3063
- package/scripts/reactive-compact-persist-smoke.mjs +0 -203
- package/scripts/recall-bench.mjs +0 -359
- package/scripts/resource-admission-test.mjs +0 -792
- package/scripts/result-classification-test.mjs +0 -75
- package/scripts/rg-runner-test.mjs +0 -240
- package/scripts/routing-corpus-test.mjs +0 -349
- package/scripts/sanitize-tool-pairs-test.mjs +0 -260
- package/scripts/session-bench-cache-break-test.mjs +0 -102
- package/scripts/session-bench.mjs +0 -1708
- package/scripts/session-context-bench.mjs +0 -344
- package/scripts/session-heartbeat-lifecycle-test.mjs +0 -68
- package/scripts/session-ingest-compaction-smoke.mjs +0 -279
- package/scripts/session-ingest-smoke.mjs +0 -177
- package/scripts/session-orphan-sweep-test.mjs +0 -109
- package/scripts/set-effort-config-test.mjs +0 -41
- package/scripts/shell-failure-diagnostics-test.mjs +0 -280
- package/scripts/shell-hardening-test.mjs +0 -209
- package/scripts/shell-jobs-windows-hide-test.mjs +0 -164
- package/scripts/ship-mode-test.mjs +0 -98
- package/scripts/smoke-loop-failure-summary-test.mjs +0 -38
- package/scripts/smoke-loop-failure-summary.mjs +0 -16
- package/scripts/smoke-loop-report.mjs +0 -221
- package/scripts/smoke-loop.mjs +0 -202
- package/scripts/smoke-runtime-negative.ps1 +0 -106
- package/scripts/statusline-quota-hysteresis-test.mjs +0 -62
- package/scripts/steering-drain-buckets-test.mjs +0 -467
- package/scripts/steering-fold-provenance-test.mjs +0 -71
- package/scripts/streaming-tail-window-test.mjs +0 -175
- package/scripts/submit-commandbusy-race-test.mjs +0 -257
- package/scripts/task-bench.mjs +0 -205
- package/scripts/terminal-bench-isolation-guards-test.mjs +0 -102
- package/scripts/termio-input-smoke.mjs +0 -199
- package/scripts/tool-result-hook-test.mjs +0 -48
- package/scripts/tool-smoke.mjs +0 -2453
- package/scripts/tool-tui-presentation-test.mjs +0 -286
- package/scripts/toolcall-args-test.mjs +0 -239
- package/scripts/tui-ambiguous-width-test.mjs +0 -113
- package/scripts/tui-background-failure-smoke.mjs +0 -73
- package/scripts/tui-perf-run.ps1 +0 -26
- package/scripts/tui-render-smoke.mjs +0 -90
- package/scripts/tui-runtime-load-bench-entry.jsx +0 -608
- package/scripts/tui-runtime-load-bench.mjs +0 -50
- package/scripts/tui-store-frame-batch-test.mjs +0 -99
- package/scripts/tui-transcript-jitter-harness-entry.jsx +0 -383
- package/scripts/tui-transcript-perf-test.mjs +0 -934
- package/scripts/usage-metrics-epoch-smoke.mjs +0 -114
- package/scripts/verify-release-assets-test.mjs +0 -281
- package/scripts/web-fetch-routing-test.mjs +0 -158
- package/scripts/webhook-smoke.mjs +0 -201
- package/scripts/windows-hide-spawn-options-test.mjs +0 -19
- package/scripts/worker-notify-rejection-test.mjs +0 -51
- package/scripts/write-backpressure-test.mjs +0 -147
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Static smoke for internal-comms token-optimization rules (min chars / max
|
|
3
|
-
// info). Asserts the Lead brief contract and the agent handoff contract are
|
|
4
|
-
// present and injected, without any model call. Live token A/B is a separate
|
|
5
|
-
// bench (scripts/internal-comms-bench.mjs).
|
|
6
|
-
import { createRequire } from 'node:module';
|
|
7
|
-
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
8
|
-
import { tmpdir } from 'node:os';
|
|
9
|
-
import { dirname, join, resolve } from 'node:path';
|
|
10
|
-
import { fileURLToPath } from 'node:url';
|
|
11
|
-
|
|
12
|
-
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
13
|
-
const require = createRequire(import.meta.url);
|
|
14
|
-
const rulesBuilder = require('../src/lib/rules-builder.cjs');
|
|
15
|
-
|
|
16
|
-
function assert(condition, message) {
|
|
17
|
-
if (!condition) throw new Error(message);
|
|
18
|
-
}
|
|
19
|
-
function readSrc(...parts) {
|
|
20
|
-
return readFileSync(join(root, 'src', ...parts), 'utf8');
|
|
21
|
-
}
|
|
22
|
-
function normalize(text) {
|
|
23
|
-
return String(text || '').replace(/\s+/g, ' ').trim();
|
|
24
|
-
}
|
|
25
|
-
function rawBlock(text, start, end, label) {
|
|
26
|
-
const source = String(text);
|
|
27
|
-
const from = source.indexOf(start);
|
|
28
|
-
if (from < 0) throw new Error(`${label}: missing start marker ${start}`);
|
|
29
|
-
const finish = source.indexOf(end, from + start.length);
|
|
30
|
-
if (finish < 0) throw new Error(`${label}: missing end marker ${end}`);
|
|
31
|
-
return source.slice(from, finish);
|
|
32
|
-
}
|
|
33
|
-
function block(text, start, end, label) {
|
|
34
|
-
return normalize(rawBlock(text, start, end, label));
|
|
35
|
-
}
|
|
36
|
-
function bodyAfterFrontmatter(text, label) {
|
|
37
|
-
const source = String(text);
|
|
38
|
-
const opening = source.match(/^---[ \t]*\r?\n/);
|
|
39
|
-
if (!opening) throw new Error(`${label}: missing frontmatter opening fence`);
|
|
40
|
-
const closing = source.slice(opening[0].length).match(/^---[ \t]*(?:\r?\n|$)/m);
|
|
41
|
-
if (!closing) throw new Error(`${label}: missing frontmatter closing fence`);
|
|
42
|
-
return source.slice(opening[0].length + closing.index + closing[0].length);
|
|
43
|
-
}
|
|
44
|
-
function roleBody(text, label) {
|
|
45
|
-
return normalize(bodyAfterFrontmatter(text, label));
|
|
46
|
-
}
|
|
47
|
-
function frontmatter(text, label) {
|
|
48
|
-
const source = String(text);
|
|
49
|
-
const opening = source.match(/^---[ \t]*\r?\n/);
|
|
50
|
-
if (!opening) throw new Error(`${label}: missing frontmatter opening fence`);
|
|
51
|
-
const closing = source.slice(opening[0].length).match(/^---[ \t]*(?:\r?\n|$)/m);
|
|
52
|
-
if (!closing) throw new Error(`${label}: missing frontmatter closing fence`);
|
|
53
|
-
return source.slice(opening[0].length, opening[0].length + closing.index);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// --- Compact rule contracts -------------------------------------------------
|
|
57
|
-
const workflow = readSrc('workflows', 'default', 'WORKFLOW.md');
|
|
58
|
-
const leadBrief = readSrc('rules', 'lead', 'lead-brief.md');
|
|
59
|
-
const solo = readSrc('workflows', 'solo', 'WORKFLOW.md');
|
|
60
|
-
const general = readSrc('rules', 'lead', '01-general.md');
|
|
61
|
-
const leadTool = readSrc('rules', 'lead', 'lead-tool.md');
|
|
62
|
-
const core = readSrc('rules', 'agent', '00-core.md');
|
|
63
|
-
const common = readSrc('rules', 'agent', '00-common.md');
|
|
64
|
-
const skip = readSrc('rules', 'agent', '20-skip-protocol.md');
|
|
65
|
-
const OPTIONAL_BRIEF_FIELDS = ['Anchors:', 'Allow/Forbid:', 'Deliver:'];
|
|
66
|
-
const TOKEN_PRINCIPLE = /minimum (?:characters|chars), maximum (?:information|info)/i;
|
|
67
|
-
function requireAll(text, label, patterns) {
|
|
68
|
-
for (const pattern of patterns) assert(pattern.test(normalize(text).toLowerCase()), `${label}: missing ${pattern}`);
|
|
69
|
-
}
|
|
70
|
-
assert(TOKEN_PRINCIPLE.test(normalize(leadBrief)), 'lead-brief.md: brief must state min-char/max-info principle');
|
|
71
|
-
assert(leadBrief.includes('Task:'), 'lead-brief.md: brief must require labeled field Task:');
|
|
72
|
-
assert(!leadBrief.includes('Goal:'), 'lead-brief.md: Goal: must be replaced by Task:');
|
|
73
|
-
for (const field of OPTIONAL_BRIEF_FIELDS) assert(leadBrief.includes(field), `lead-brief.md: brief missing optional labeled field ${field}`);
|
|
74
|
-
assert(!leadBrief.includes('Verify:'), 'lead-brief.md: must not prescribe Verify:');
|
|
75
|
-
assert(
|
|
76
|
-
!/copy a prior role(?:'s)? brief|worker\s*(?:->|→)\s*debugger\s*(?:->|→)\s*reviewer|\blead\s*\/\s*worker\b/i.test(leadBrief),
|
|
77
|
-
'lead-brief.md: must not restore cross-role Task copying or lineage',
|
|
78
|
-
);
|
|
79
|
-
requireAll(leadBrief, 'Lead brief task', [
|
|
80
|
-
/`task:` is mandatory and lossless/, /intent/, /required outcomes/, /negative outcomes/,
|
|
81
|
-
/completion\/stop boundary/, /all other fields are optional task-specific deltas/,
|
|
82
|
-
/preserve user-supplied exact targets and exact replacements\/outputs in `task:`/,
|
|
83
|
-
/never infer exactness from a task name, file count, or perceived difficulty/,
|
|
84
|
-
/each role independently constructs a role-appropriate, lossless `task:` from/,
|
|
85
|
-
/the original request and official spec\/test acceptance criteria/,
|
|
86
|
-
]);
|
|
87
|
-
assert(/role-known|already (?:owns|knows)|wasted cost|wasted/i.test(normalize(leadBrief)), 'lead-brief.md: brief must ban restating known rules/background as cost');
|
|
88
|
-
assert(/original request and official spec\/test acceptance criteria/i.test(normalize(leadBrief)), 'lead-brief.md: original request and official acceptance criteria must beat summary');
|
|
89
|
-
requireAll(leadBrief, 'Lead brief lifecycle', [
|
|
90
|
-
/full brief only for fresh spawn\/`respawned: true`/, /live follow-ups are delta/,
|
|
91
|
-
/dead-tag send is cold: re-supply anchors/, /never `send` mid-run/,
|
|
92
|
-
/batch one follow-up after completion/, /interrupt only to cancel/,
|
|
93
|
-
/agent communication is english/,
|
|
94
|
-
]);
|
|
95
|
-
assert(/lead brief contract/i.test(normalize(workflow)), 'WORKFLOW.md: must defer to the lead brief contract');
|
|
96
|
-
assert(!OPTIONAL_BRIEF_FIELDS.every((field) => workflow.includes(field)), 'WORKFLOW.md: must not duplicate the optional brief field list');
|
|
97
|
-
|
|
98
|
-
assert(/fragments/i.test(core), '00-core: handoff must require fragments');
|
|
99
|
-
assert(/file:line/i.test(core), '00-core: handoff must anchor evidence to file:line');
|
|
100
|
-
for (const banned of ['headings', 'tables', 'narration', 'raw logs', 'next-checks']) {
|
|
101
|
-
assert(core.toLowerCase().includes(banned), `00-core: banned list missing ${banned}`);
|
|
102
|
-
}
|
|
103
|
-
assert(/Public Agent Constraints/i.test(common), '00-common: must be titled public-only constraints');
|
|
104
|
-
assert(/git operations deferred to Lead/i.test(normalize(common)), '00-common: must refuse git/Ship');
|
|
105
|
-
assert(/Overflow goes to a file/i.test(common), '00-common: must keep overflow-to-file rule');
|
|
106
|
-
requireAll(common, 'Public-agent shell', [
|
|
107
|
-
/shell only verifies own edits/, /no exploration, install, or state change beyond brief/,
|
|
108
|
-
]);
|
|
109
|
-
|
|
110
|
-
// --- Per-role output contracts --------------------------------------------
|
|
111
|
-
const roles = {
|
|
112
|
-
'worker/AGENT.md': readSrc('agents', 'worker', 'AGENT.md'),
|
|
113
|
-
'heavy-worker/AGENT.md': readSrc('agents', 'heavy-worker', 'AGENT.md'),
|
|
114
|
-
'reviewer/AGENT.md': readSrc('agents', 'reviewer', 'AGENT.md'),
|
|
115
|
-
'debugger/AGENT.md': readSrc('agents', 'debugger', 'AGENT.md'),
|
|
116
|
-
};
|
|
117
|
-
const reviewerRole = roles['reviewer/AGENT.md'];
|
|
118
|
-
assert(
|
|
119
|
-
!/construct the review\s*`task:` independently/i.test(reviewerRole),
|
|
120
|
-
'reviewer/AGENT.md: must not restore Reviewer-specific Task construction',
|
|
121
|
-
);
|
|
122
|
-
assert(
|
|
123
|
-
!/treat prior reports as unverified claims rather than evidence/i.test(reviewerRole),
|
|
124
|
-
'reviewer/AGENT.md: must not restore prior-report framing',
|
|
125
|
-
);
|
|
126
|
-
|
|
127
|
-
// Semantic contracts deliberately avoid prose snapshots.
|
|
128
|
-
function snapshot(actual, expected, label) {
|
|
129
|
-
assert(normalize(actual) === normalize(expected), `${label}: canonical snapshot changed`);
|
|
130
|
-
}
|
|
131
|
-
assert(/^agents:\s*$/m.test(frontmatter(solo, 'Solo workflow')), 'Solo: agents frontmatter must be empty');
|
|
132
|
-
requireAll(workflow, 'Default approval', [
|
|
133
|
-
/read-only investigation\/planning while consulting/, /later explicit user message after the latest plan/,
|
|
134
|
-
/initial\/additional\/changed requests reset planning/, /scope change needs a revised plan and fresh approval/,
|
|
135
|
-
/no edits, state mutation, or delegation/,
|
|
136
|
-
]);
|
|
137
|
-
const WORKER_HEAVY_ROUTING_CONTRACT = [
|
|
138
|
-
/select worker or heavy worker by solution and validation complexity/,
|
|
139
|
-
/worker owns work whose approach is established and whose correctness can be shown with a focused check/,
|
|
140
|
-
/heavy worker owns work requiring investigation to establish the approach, resolution of material uncertainty or dependencies, iteration across hypotheses or checkpoints, or multi-step, empirical, integration, or real-use validation/,
|
|
141
|
-
];
|
|
142
|
-
requireAll(workflow, 'Default Worker/Heavy Worker routing', WORKER_HEAVY_ROUTING_CONTRACT);
|
|
143
|
-
assert(
|
|
144
|
-
!/fully\s+specified\s+artifact/i.test(workflow),
|
|
145
|
-
'Default: removed Worker routing criterion must not return',
|
|
146
|
-
);
|
|
147
|
-
const ROUTING_REVIEW_POLICY = [
|
|
148
|
-
/lead-direct execution is limited to a conceptually one-step mechanical action with an immediate deterministic check/,
|
|
149
|
-
/routine configuration\/git work/,
|
|
150
|
-
/operational support for planning, delegation, or verification/,
|
|
151
|
-
/multiple steps must not be reframed as one command to fit this boundary/,
|
|
152
|
-
/work requiring implementation judgment, investigation, iteration, or artifact authoring delegates to worker or heavy worker/,
|
|
153
|
-
/debugger owns diagnosis and reverse engineering/,
|
|
154
|
-
/applying a debugger result is implementation, not diagnosis/,
|
|
155
|
-
/review is exempt only for pure read\/analysis with no edit, artifact, or state mutation; git\/configuration; or a request where the user explicitly supplies both the exact target and exact replacement\/output\. every non-exempt mutation or artifact/,
|
|
156
|
-
/every non-exempt mutation or artifact/,
|
|
157
|
-
/worker, heavy worker, debugger, or lead/,
|
|
158
|
-
/one reviewer .*lead integration\/cross-scope verification in parallel/,
|
|
159
|
-
/debugger analysis cannot substitute for implementation review/,
|
|
160
|
-
/applying a debugger result triggers the same reviewer \+ lead verification/,
|
|
161
|
-
/loop fix -> re-verify \(same reviewer \+ lead re-check\) until clean/,
|
|
162
|
-
/exempt mutations still require shell self-verification/,
|
|
163
|
-
];
|
|
164
|
-
requireAll(workflow, 'Default routing/review policy', ROUTING_REVIEW_POLICY);
|
|
165
|
-
assert(
|
|
166
|
-
!/(high clarity|low structural complexity|immediate 1-step|genuinely simple)/i.test(workflow),
|
|
167
|
-
'Default: heuristic routing/review language must not return',
|
|
168
|
-
);
|
|
169
|
-
requireAll(workflow, 'Default lifecycle', [
|
|
170
|
-
/draft before any implementation/, /all ready scopes in one turn, with no count cap/,
|
|
171
|
-
/real dependency, overlapping write, or inseparable coupling/,
|
|
172
|
-
/after async spawn, end the turn/,
|
|
173
|
-
/high-risk scopes add distinct lenses/,
|
|
174
|
-
/original live session/,
|
|
175
|
-
/bug surviving 2\+ fix cycles/, /agent reports relay.*as in-progress, never conclusions/,
|
|
176
|
-
/final \(not interim\) report/, /never forward raw agent output/,
|
|
177
|
-
/explicit user request after issue-free feedback/, /outcome\/direction change, pause and re-consult/,
|
|
178
|
-
]);
|
|
179
|
-
requireAll(solo, 'Solo lifecycle', [
|
|
180
|
-
/no edits or state mutation/, /never spawn, send, delegate, or ask agents to work/,
|
|
181
|
-
/read-only investigation\/planning while consulting/,
|
|
182
|
-
/later explicit user message after the latest plan/,
|
|
183
|
-
/initial\/additional\/changed requests reset planning/,
|
|
184
|
-
/scope change needs a revised plan and fresh approval/,
|
|
185
|
-
/checks\/fixes directly until clean or reports a blocker/, /final \(not interim\) report/,
|
|
186
|
-
/interim updates are in-progress, never conclusions/,
|
|
187
|
-
/issue-free feedback/,
|
|
188
|
-
]);
|
|
189
|
-
requireAll(leadTool, 'Lead tools', [
|
|
190
|
-
/write-role agents self-verify/, /cross-scope verification.*benches.*all git/,
|
|
191
|
-
]);
|
|
192
|
-
requireAll(general, 'General safety', [
|
|
193
|
-
/identify as mixdog\/current coding agent/, /destructive\/hard-to-reverse action needs explicit confirmation/,
|
|
194
|
-
]);
|
|
195
|
-
requireAll(workflow, 'Default ship safety', [
|
|
196
|
-
/build\/deploy\/commit\/push require an explicit user request after issue-free feedback/,
|
|
197
|
-
/implementation approval alone is insufficient/,
|
|
198
|
-
]);
|
|
199
|
-
requireAll(skip, 'Silent skip', [
|
|
200
|
-
/webhook-handler/, /scheduler-task/, /label-only, duplicate\/dedup, no action needed\/report/,
|
|
201
|
-
/whole response.*\[meta:silent\]/,
|
|
202
|
-
]);
|
|
203
|
-
|
|
204
|
-
const roleSnapshots = {
|
|
205
|
-
'worker/AGENT.md': `# Worker
|
|
206
|
-
Scoped implementation agent.
|
|
207
|
-
|
|
208
|
-
Own only the bounded responsibility assigned in the brief. Trust its
|
|
209
|
-
\`file:line\` anchors; do only minimal targeted discovery, then make the
|
|
210
|
-
smallest coherent patch. No drive-by cleanup or scope expansion.
|
|
211
|
-
|
|
212
|
-
EDIT-FIRST DISCIPLINE. Patch promptly rather than repeating read-only turns;
|
|
213
|
-
stop and report blocked when the assigned scope cannot be completed.
|
|
214
|
-
|
|
215
|
-
Self-verify with a targeted check (for example, \`node --check\` or a focused
|
|
216
|
-
test), then report the changed \`file:line\` and stop.`,
|
|
217
|
-
'heavy-worker/AGENT.md': `# Heavy Worker
|
|
218
|
-
Own the assigned implementation slice through staged delivery.
|
|
219
|
-
|
|
220
|
-
Break work into bounded, dependency-aware slices and execute them in sequence.
|
|
221
|
-
At each checkpoint, run the narrowest relevant test or build before expanding
|
|
222
|
-
the slice. Keep the smallest coherent change; control blast radius rather than
|
|
223
|
-
rewriting adjacent systems.
|
|
224
|
-
|
|
225
|
-
EDIT-FIRST DISCIPLINE. Patch incrementally and stop at the first explicit
|
|
226
|
-
boundary: unclear ownership, a missing dependency, or growing blast radius.
|
|
227
|
-
Do not cross that boundary without a new bounded assignment; report blocked
|
|
228
|
-
work with the relevant file:line.
|
|
229
|
-
|
|
230
|
-
Self-verify each checkpoint and the final slice with shell (targeted test/build).`,
|
|
231
|
-
'reviewer/AGENT.md': `# Reviewer
|
|
232
|
-
Independent regression/risk review agent.
|
|
233
|
-
|
|
234
|
-
Review the diff and tests with independent judgment. Prioritize actionable
|
|
235
|
-
correctness, regression, security, and verification risks; inspect affected
|
|
236
|
-
boundaries. Do not reimplement the change or report non-risky nits. Independently
|
|
237
|
-
evaluate the final deliverable with a critical lens, actively seeking errors,
|
|
238
|
-
unsupported assumptions, and counterexamples before confirming.
|
|
239
|
-
|
|
240
|
-
Report findings first, severity-ordered, with one line per \`file:line\`. If clean,
|
|
241
|
-
say so in one line and include only material residual risk.
|
|
242
|
-
|
|
243
|
-
When the work comes with stated criteria or reference material for judging
|
|
244
|
-
it, verify against those as given — substituting your own interpretation or
|
|
245
|
-
a self-built check is a verification risk to report.`,
|
|
246
|
-
'debugger/AGENT.md': `# Debugger
|
|
247
|
-
Root-cause analysis agent.
|
|
248
|
-
|
|
249
|
-
Smallest confirmed cause chain before fixes. Return likely cause, evidence
|
|
250
|
-
(\`file:line\`), smallest next check/fix. Mark confirmed facts vs inferences;
|
|
251
|
-
avoid broad speculation.
|
|
252
|
-
|
|
253
|
-
Converge, don't sweep: when new evidence stops accruing, report the best
|
|
254
|
-
cause chain so far.`,
|
|
255
|
-
};
|
|
256
|
-
for (const [name, expected] of Object.entries(roleSnapshots)) {
|
|
257
|
-
const text = roles[name];
|
|
258
|
-
const permission = text.match(/^permission:\s*(.+)$/m)?.[1];
|
|
259
|
-
assert(permission === (name === 'worker/AGENT.md' || name === 'heavy-worker/AGENT.md' ? 'read-write' : 'read'), `${name}: permission contract changed`);
|
|
260
|
-
snapshot(roleBody(text, name), expected, name);
|
|
261
|
-
}
|
|
262
|
-
assert(/confirmed facts vs inferences/i.test(normalize(roles['debugger/AGENT.md'])), 'debugger: must separate confirmed facts from inferences');
|
|
263
|
-
assert(/file:line/i.test(normalize(roles['debugger/AGENT.md'])), 'debugger: must anchor evidence to file:line');
|
|
264
|
-
|
|
265
|
-
// --- Injection: Lead rules actually carry the brief contract ---------------
|
|
266
|
-
const dataDir = mkdtempSync(join(tmpdir(), 'mixdog-internal-comms-smoke-'));
|
|
267
|
-
try {
|
|
268
|
-
const leadRules = rulesBuilder.buildInjectionContent({ PLUGIN_ROOT: join(root, 'src'), DATA_DIR: dataDir });
|
|
269
|
-
assert(TOKEN_PRINCIPLE.test(normalize(leadRules)), 'injected Lead rules must carry the brief token principle');
|
|
270
|
-
assert(leadRules.includes('Task:'), 'injected Lead rules missing mandatory brief field Task:');
|
|
271
|
-
assert(!leadRules.includes('Goal:'), 'injected Lead rules must not retain Goal:');
|
|
272
|
-
for (const field of OPTIONAL_BRIEF_FIELDS) assert(leadRules.includes(field), `injected Lead rules missing optional brief field ${field}`);
|
|
273
|
-
} finally {
|
|
274
|
-
rmSync(dataDir, { recursive: true, force: true });
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
process.stdout.write('internal comms smoke passed\n');
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import test from 'node:test';
|
|
3
|
-
import assert from 'node:assert/strict';
|
|
4
|
-
import {
|
|
5
|
-
executeInternalTool,
|
|
6
|
-
setInternalToolsProvider,
|
|
7
|
-
} from '../src/runtime/agent/orchestrator/internal-tools.mjs';
|
|
8
|
-
import { classifyResultKind } from '../src/runtime/agent/orchestrator/session/result-classification.mjs';
|
|
9
|
-
|
|
10
|
-
async function normalizeToolResult(result) {
|
|
11
|
-
setInternalToolsProvider({
|
|
12
|
-
tools: [{ name: 'normalization_test' }],
|
|
13
|
-
executor: async () => result,
|
|
14
|
-
});
|
|
15
|
-
return executeInternalTool('normalization_test', {});
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
test('already-prefixed handler errors keep one canonical Error: prefix', async () => {
|
|
19
|
-
const result = await normalizeToolResult({
|
|
20
|
-
content: [{ type: 'text', text: 'Error: web search failed' }],
|
|
21
|
-
isError: true,
|
|
22
|
-
});
|
|
23
|
-
assert.equal(result, 'Error: web search failed');
|
|
24
|
-
assert.equal(classifyResultKind(result), 'error');
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
test('ordinary handler error text receives the canonical Error: prefix', async () => {
|
|
28
|
-
const result = await normalizeToolResult({
|
|
29
|
-
content: [{ type: 'text', text: 'core add: project_id required' }],
|
|
30
|
-
isError: true,
|
|
31
|
-
});
|
|
32
|
-
assert.equal(result, 'Error: core add: project_id required');
|
|
33
|
-
assert.equal(classifyResultKind(result), 'error');
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
test('successful empty output stays normal', async () => {
|
|
37
|
-
const result = await normalizeToolResult({
|
|
38
|
-
content: [{ type: 'text', text: '' }],
|
|
39
|
-
isError: false,
|
|
40
|
-
});
|
|
41
|
-
assert.equal(result, '');
|
|
42
|
-
assert.equal(classifyResultKind(result), 'normal');
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test('isError:false output stays normal', async () => {
|
|
46
|
-
const result = await normalizeToolResult({
|
|
47
|
-
content: [{ type: 'text', text: 'search complete' }],
|
|
48
|
-
isError: false,
|
|
49
|
-
});
|
|
50
|
-
assert.equal(result, 'search complete');
|
|
51
|
-
assert.equal(classifyResultKind(result), 'normal');
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
test('structured image output survives internal tool normalization', async () => {
|
|
55
|
-
const input = {
|
|
56
|
-
content: [
|
|
57
|
-
{ type: 'text', text: 'downloaded' },
|
|
58
|
-
{ type: 'image', source: { type: 'base64', media_type: 'image/png', data: 'YWJj' } },
|
|
59
|
-
],
|
|
60
|
-
};
|
|
61
|
-
assert.deepEqual(await normalizeToolResult(input), input);
|
|
62
|
-
});
|