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.
Files changed (408) hide show
  1. package/README.md +3 -0
  2. package/package.json +9 -2
  3. package/scripts/code-graph-description-contract.mjs +3 -3
  4. package/scripts/verify-release-assets.mjs +2 -2
  5. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +11 -14
  6. package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +6 -6
  7. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -2
  8. package/src/runtime/agent/orchestrator/agent-trace-format.mjs +1 -0
  9. package/src/runtime/agent/orchestrator/config.mjs +19 -124
  10. package/src/runtime/agent/orchestrator/context/collect.mjs +6 -6
  11. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +2 -2
  12. package/src/runtime/agent/orchestrator/internal-agents.mjs +2 -2
  13. package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +1 -1
  14. package/src/runtime/agent/orchestrator/mcp/client.mjs +4 -4
  15. package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +2 -2
  16. package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +4 -4
  17. package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +2 -2
  18. package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +4 -4
  19. package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +333 -0
  20. package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +2 -2
  21. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +4 -4
  22. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +1 -1
  23. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +3 -277
  24. package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +2 -2
  25. package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +1 -1
  26. package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +2 -2
  27. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +6 -6
  28. package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +196 -0
  29. package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +460 -0
  30. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +14 -593
  31. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +1 -1
  32. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +1 -1
  33. package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +1 -1
  34. package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +4 -4
  35. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -2
  36. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +5 -280
  37. package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +357 -0
  38. package/src/runtime/agent/orchestrator/providers/openai-ws-headers.mjs +216 -0
  39. package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +2 -188
  40. package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +2 -2
  41. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +2 -2
  42. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +1 -1
  43. package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +1 -1
  44. package/src/runtime/agent/orchestrator/providers/registry.mjs +1 -1
  45. package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +2 -2
  46. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +1 -1
  47. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +1 -1
  48. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +3 -3
  49. package/src/runtime/agent/orchestrator/session/compact/budget.mjs +2 -2
  50. package/src/runtime/agent/orchestrator/session/compact/file-reattach.mjs +2 -2
  51. package/src/runtime/agent/orchestrator/session/compact/summary-schema.mjs +1 -1
  52. package/src/runtime/agent/orchestrator/session/compact/summary.mjs +1 -1
  53. package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +2 -2
  54. package/src/runtime/agent/orchestrator/session/context-utils.mjs +4 -4
  55. package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +1 -1
  56. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +17 -0
  57. package/src/runtime/agent/orchestrator/session/loop/steering.mjs +1 -1
  58. package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +18 -26
  59. package/src/runtime/agent/orchestrator/session/loop/termination.mjs +1 -1
  60. package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +3 -3
  61. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +1 -0
  62. package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +1 -1
  63. package/src/runtime/agent/orchestrator/session/manager/delivered-completions.mjs +1 -1
  64. package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +1 -1
  65. package/src/runtime/agent/orchestrator/session/store/live-state.mjs +49 -0
  66. package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +49 -0
  67. package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +260 -0
  68. package/src/runtime/agent/orchestrator/session/store/serialize.mjs +72 -0
  69. package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +163 -0
  70. package/src/runtime/agent/orchestrator/session/store/write-guards.mjs +1 -1
  71. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +1 -1
  72. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +4 -1
  73. package/src/runtime/agent/orchestrator/session/store.mjs +9 -561
  74. package/src/runtime/agent/orchestrator/session/tool-envelope.mjs +1 -1
  75. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +2 -2
  76. package/src/runtime/agent/orchestrator/stall-policy.mjs +11 -11
  77. package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +1 -1
  78. package/src/runtime/agent/orchestrator/tools/bash-session.mjs +2 -2
  79. package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +1 -1
  80. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +2 -2
  81. package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +1 -1
  82. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +2 -154
  83. package/src/runtime/agent/orchestrator/tools/builtin/cache-layers.mjs +1 -1
  84. package/src/runtime/agent/orchestrator/tools/builtin/cwd-utils.mjs +1 -1
  85. package/src/runtime/agent/orchestrator/tools/builtin/fs-reachability.mjs +1 -1
  86. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +1 -1
  87. package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +1 -1
  88. package/src/runtime/agent/orchestrator/tools/builtin/path-locks.mjs +1 -1
  89. package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +1 -1
  90. package/src/runtime/agent/orchestrator/tools/builtin/read-args.mjs +2 -2
  91. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +2 -3
  92. package/src/runtime/agent/orchestrator/tools/builtin/read-image-resize.mjs +4 -4
  93. package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +1 -1
  94. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +1 -1
  95. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +2 -2
  96. package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +5 -5
  97. package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +1 -1
  98. package/src/runtime/agent/orchestrator/tools/builtin/shell-job-paths.mjs +2 -2
  99. package/src/runtime/agent/orchestrator/tools/builtin/shell-job-process.mjs +2 -2
  100. package/src/runtime/agent/orchestrator/tools/builtin/shell-job-spawn.mjs +519 -0
  101. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +5 -449
  102. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +1 -1
  103. package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +212 -0
  104. package/src/runtime/agent/orchestrator/tools/builtin.mjs +1 -1
  105. package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +1 -7
  106. package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +9 -36
  107. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +15 -3
  108. package/src/runtime/agent/orchestrator/tools/code-graph/search-references.mjs +429 -0
  109. package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +2 -395
  110. package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +2 -2
  111. package/src/runtime/agent/orchestrator/tools/code-graph/text-mask.mjs +1 -1
  112. package/src/runtime/agent/orchestrator/tools/code-graph/trusted-roots.mjs +1 -1
  113. package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +1 -1
  114. package/src/runtime/agent/orchestrator/tools/code-graph-state.mjs +3 -3
  115. package/src/runtime/agent/orchestrator/tools/mutation-planner.mjs +5 -5
  116. package/src/runtime/agent/orchestrator/tools/next-call-utils.mjs +1 -1
  117. package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +1 -1
  118. package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +7 -7
  119. package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +72 -9
  120. package/src/runtime/agent/orchestrator/tools/patch/parsing.mjs +4 -4
  121. package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +1 -1
  122. package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +1 -1
  123. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +4 -4
  124. package/src/runtime/agent/orchestrator/tools/patch.mjs +1 -1
  125. package/src/runtime/agent/orchestrator/tools/result-compression.mjs +3 -3
  126. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +2 -444
  127. package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +505 -0
  128. package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +2 -2
  129. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +1 -1
  130. package/src/runtime/channels/lib/backend-dispatch.mjs +20 -5
  131. package/src/runtime/channels/lib/scheduler.mjs +1 -1
  132. package/src/runtime/channels/lib/telegram-format.mjs +1 -1
  133. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +4 -4
  134. package/src/runtime/channels/tool-defs.mjs +2 -3
  135. package/src/runtime/memory/index.mjs +1 -5
  136. package/src/runtime/memory/lib/core-memory-candidates.mjs +357 -0
  137. package/src/runtime/memory/lib/core-memory-store.mjs +7 -357
  138. package/src/runtime/memory/lib/cycle-signatures.mjs +1 -1
  139. package/src/runtime/memory/lib/embedding-model-config.mjs +1 -1
  140. package/src/runtime/memory/lib/embedding-provider.mjs +1 -5
  141. package/src/runtime/memory/lib/embedding-worker.mjs +1 -5
  142. package/src/runtime/memory/lib/ko-morph.mjs +2 -2
  143. package/src/runtime/memory/lib/memory-config-flags.mjs +2 -5
  144. package/src/runtime/memory/lib/memory-cycle-requests.mjs +3 -7
  145. package/src/runtime/memory/lib/memory-cycle1.mjs +4 -8
  146. package/src/runtime/memory/lib/memory-cycle2-gate.mjs +1 -1
  147. package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +1 -1
  148. package/src/runtime/memory/lib/memory-cycle2-shared.mjs +2 -5
  149. package/src/runtime/memory/lib/memory-cycle3.mjs +1 -5
  150. package/src/runtime/memory/lib/memory-embed.mjs +2 -6
  151. package/src/runtime/memory/lib/memory-log.mjs +8 -0
  152. package/src/runtime/memory/lib/memory-ops-policy.mjs +4 -8
  153. package/src/runtime/memory/lib/memory-recall-scope-filter.mjs +1 -1
  154. package/src/runtime/memory/lib/memory-recall-store.mjs +2 -193
  155. package/src/runtime/memory/lib/memory-score.mjs +1 -1
  156. package/src/runtime/memory/lib/memory-text-utils.mjs +2 -2
  157. package/src/runtime/memory/lib/memory.mjs +2 -6
  158. package/src/runtime/memory/lib/pg/adapter.mjs +2 -6
  159. package/src/runtime/memory/lib/pg/process.mjs +1 -5
  160. package/src/runtime/memory/lib/pg/supervisor.mjs +1 -5
  161. package/src/runtime/memory/lib/recall-format.mjs +2 -2
  162. package/src/runtime/memory/lib/recall-scoring.mjs +195 -0
  163. package/src/runtime/memory/lib/runtime-fetcher.mjs +1 -5
  164. package/src/runtime/memory/lib/trace-store.mjs +2 -6
  165. package/src/runtime/search/lib/http-fetch.mjs +6 -6
  166. package/src/runtime/search/lib/web-tools.mjs +2 -2
  167. package/src/runtime/shared/buffered-appender.mjs +1 -1
  168. package/src/runtime/shared/child-guardian.mjs +1 -1
  169. package/src/runtime/shared/child-spawn-gate.mjs +1 -1
  170. package/src/runtime/shared/config.mjs +4 -4
  171. package/src/runtime/shared/launcher-control.mjs +9 -10
  172. package/src/runtime/shared/llm/index.mjs +5 -20
  173. package/src/runtime/shared/markdown-frontmatter.mjs +1 -1
  174. package/src/runtime/shared/memory-snapshot.mjs +4 -4
  175. package/src/runtime/shared/pristine-execution.mjs +1 -1
  176. package/src/runtime/shared/process-lifecycle.mjs +0 -1
  177. package/src/runtime/shared/process-shutdown.mjs +1 -1
  178. package/src/runtime/shared/resource-admission.mjs +2 -2
  179. package/src/runtime/shared/schedule-session-run.mjs +1 -1
  180. package/src/runtime/shared/schedules-db.mjs +1 -1
  181. package/src/runtime/shared/service-discovery.mjs +2 -2
  182. package/src/runtime/shared/staged-update.mjs +6 -6
  183. package/src/runtime/shared/tool-execution-contract.mjs +1 -1
  184. package/src/runtime/shared/tool-primitives.mjs +1 -1
  185. package/src/runtime/shared/tool-surface.mjs +2 -2
  186. package/src/runtime/shared/turn-snapshot.mjs +184 -0
  187. package/src/runtime/shared/update-checker.mjs +1 -1
  188. package/src/runtime/shared/user-cwd.mjs +3 -3
  189. package/src/runtime/shared/user-data-guard.mjs +4 -4
  190. package/src/runtime/shared/workspace-router.mjs +5 -5
  191. package/src/session-runtime/config-helpers.mjs +2 -3
  192. package/src/session-runtime/config-lifecycle.mjs +1 -1
  193. package/src/session-runtime/hitch-profile.mjs +1 -1
  194. package/src/session-runtime/lifecycle-api.mjs +6 -4
  195. package/src/session-runtime/model-recency.mjs +5 -5
  196. package/src/session-runtime/plugin-mcp.mjs +1 -1
  197. package/src/session-runtime/provider-request-snapshot.mjs +338 -0
  198. package/src/session-runtime/runtime-core.mjs +4 -0
  199. package/src/session-runtime/session-text.mjs +4 -4
  200. package/src/session-runtime/session-turn-api.mjs +7 -0
  201. package/src/session-runtime/tool-catalog-schema.mjs +197 -0
  202. package/src/session-runtime/tool-catalog.mjs +6 -483
  203. package/src/session-runtime/tool-defs.mjs +1 -1
  204. package/src/standalone/agent-task-status.mjs +1 -1
  205. package/src/standalone/agent-tool/helpers.mjs +2 -2
  206. package/src/standalone/channel-admin.mjs +4 -4
  207. package/src/standalone/explore-tool.mjs +3 -3
  208. package/src/standalone/hook-bus/config.mjs +1 -1
  209. package/src/standalone/hook-bus/constants.mjs +1 -1
  210. package/src/standalone/hook-bus/rules.mjs +1 -1
  211. package/src/standalone/projects.mjs +1 -1
  212. package/src/standalone/provider-admin.mjs +2 -2
  213. package/src/tui/App.jsx +1 -1
  214. package/src/tui/app/app-format.mjs +2 -2
  215. package/src/tui/app/clipboard.mjs +3 -3
  216. package/src/tui/app/input-parsers.mjs +1 -1
  217. package/src/tui/app/text-layout.mjs +1 -1
  218. package/src/tui/app/transcript-row-estimate.mjs +360 -0
  219. package/src/tui/app/transcript-window.mjs +5 -347
  220. package/src/tui/app/use-mouse-input.mjs +1 -1
  221. package/src/tui/app/use-prompt-handlers.mjs +1 -1
  222. package/src/tui/components/tool-execution/surface-detail.mjs +9 -9
  223. package/src/tui/components/tool-execution/text-format.mjs +2 -2
  224. package/src/tui/components/tool-output-format.mjs +7 -7
  225. package/src/tui/display-width.mjs +4 -4
  226. package/src/tui/dist/index.mjs +187 -99
  227. package/src/tui/engine/agent-envelope.mjs +5 -5
  228. package/src/tui/engine/live-share.mjs +100 -0
  229. package/src/tui/engine/notification-plan.mjs +1 -1
  230. package/src/tui/engine/queue-helpers.mjs +3 -3
  231. package/src/tui/engine/render-timing.mjs +4 -5
  232. package/src/tui/engine/session-api-ext.mjs +6 -3
  233. package/src/tui/engine/tool-result-status.mjs +5 -5
  234. package/src/tui/engine/tool-result-text.mjs +1 -1
  235. package/src/tui/engine/transcript-spill.mjs +585 -0
  236. package/src/tui/engine/tui-steering-persist.mjs +1 -1
  237. package/src/tui/engine.mjs +29 -474
  238. package/src/tui/lib/voice-setup.mjs +1 -1
  239. package/src/tui/markdown/format-token.mjs +1 -1
  240. package/src/tui/markdown/render-ansi.mjs +1 -1
  241. package/src/tui/markdown/table-layout.mjs +4 -4
  242. package/src/tui/paste-attachments.mjs +1 -1
  243. package/src/tui/prompt-history-store.mjs +3 -3
  244. package/src/tui/statusline-ansi-bridge.mjs +2 -2
  245. package/src/tui/theme.mjs +1 -1
  246. package/src/tui/transcript-tool-failures.mjs +2 -2
  247. package/src/ui/ansi.mjs +0 -9
  248. package/src/ui/statusline-format.mjs +2 -4
  249. package/scripts/_bench-cwc.json +0 -20
  250. package/scripts/_jitter-fuzz.jsx +0 -42
  251. package/scripts/_jitter-fuzz2.jsx +0 -30
  252. package/scripts/_jitter-probe.jsx +0 -35
  253. package/scripts/_jp2.jsx +0 -16
  254. package/scripts/_smoke_wd.mjs +0 -7
  255. package/scripts/abort-recovery-test.mjs +0 -175
  256. package/scripts/agent-dispatch-abort-compose-test.mjs +0 -31
  257. package/scripts/agent-live-arg-guard-smoke.mjs +0 -20
  258. package/scripts/agent-live-path-suffix-smoke.mjs +0 -34
  259. package/scripts/agent-live-toolcall-args-smoke.mjs +0 -45
  260. package/scripts/agent-loop-policy-test.mjs +0 -37
  261. package/scripts/agent-model-liveness-test.mjs +0 -763
  262. package/scripts/agent-parallel-smoke.mjs +0 -435
  263. package/scripts/agent-route-batch-test.mjs +0 -40
  264. package/scripts/agent-tag-reuse-smoke.mjs +0 -441
  265. package/scripts/agent-terminal-reap-test.mjs +0 -252
  266. package/scripts/agent-trace-io-test.mjs +0 -133
  267. package/scripts/ansi-color-capability-test.mjs +0 -90
  268. package/scripts/anthropic-admission-retry-integration-test.mjs +0 -119
  269. package/scripts/anthropic-maxtokens-test.mjs +0 -119
  270. package/scripts/anthropic-oauth-refresh-race-test.mjs +0 -397
  271. package/scripts/anthropic-transport-policy-test.mjs +0 -726
  272. package/scripts/apply-patch-edit-smoke.mjs +0 -71
  273. package/scripts/arg-guard-test.mjs +0 -93
  274. package/scripts/async-notify-settlement-test.mjs +0 -99
  275. package/scripts/atomic-lock-tryonce-test.mjs +0 -125
  276. package/scripts/background-task-meta-smoke.mjs +0 -38
  277. package/scripts/bench-run.mjs +0 -508
  278. package/scripts/boot-smoke.mjs +0 -137
  279. package/scripts/build-runtime-windows.ps1 +0 -242
  280. package/scripts/channel-daemon-smoke.mjs +0 -1103
  281. package/scripts/code-graph-aggregate-cwd-test.mjs +0 -158
  282. package/scripts/code-graph-disk-hit-test.mjs +0 -290
  283. package/scripts/code-graph-dispatch-test.mjs +0 -96
  284. package/scripts/code-graph-root-federation-test.mjs +0 -273
  285. package/scripts/compact-active-turn-test.mjs +0 -68
  286. package/scripts/compact-file-reattach-test.mjs +0 -88
  287. package/scripts/compact-pressure-test.mjs +0 -788
  288. package/scripts/compact-prior-context-flatten-test.mjs +0 -252
  289. package/scripts/compact-recall-digest-test.mjs +0 -57
  290. package/scripts/compact-smoke.mjs +0 -1017
  291. package/scripts/compact-trigger-migration-smoke.mjs +0 -261
  292. package/scripts/compacted-placeholder-scrub-test.mjs +0 -63
  293. package/scripts/context-mcp-metering-test.mjs +0 -1406
  294. package/scripts/debounced-skills-async-save-test.mjs +0 -57
  295. package/scripts/deferred-tool-loading-test.mjs +0 -250
  296. package/scripts/desktop-session-bridge-test.mjs +0 -1013
  297. package/scripts/dispatch-persist-recovery-test.mjs +0 -141
  298. package/scripts/embedding-worker-exit-test.mjs +0 -76
  299. package/scripts/execution-completion-dedup-test.mjs +0 -205
  300. package/scripts/execution-pending-resume-kick-test.mjs +0 -151
  301. package/scripts/execution-resume-esc-integration-test.mjs +0 -176
  302. package/scripts/explore-bench-tmp.mjs +0 -36
  303. package/scripts/explore-bench.mjs +0 -248
  304. package/scripts/explore-prompt-policy-test.mjs +0 -256
  305. package/scripts/explore-timeout-cancel-test.mjs +0 -345
  306. package/scripts/find-fuzzy-hidden-test.mjs +0 -267
  307. package/scripts/forwarder-rebind-tail-test.mjs +0 -67
  308. package/scripts/freevar-smoke.mjs +0 -98
  309. package/scripts/gemini-provider-test.mjs +0 -1448
  310. package/scripts/generate-oc-icons.mjs +0 -11
  311. package/scripts/grok-oauth-refresh-race-test.mjs +0 -273
  312. package/scripts/headless-pristine-execution-test.mjs +0 -614
  313. package/scripts/hook-bus-test.mjs +0 -552
  314. package/scripts/ingest-pure-conversation-smoke.mjs +0 -175
  315. package/scripts/internal-comms-bench-test.mjs +0 -226
  316. package/scripts/internal-comms-bench.mjs +0 -853
  317. package/scripts/internal-comms-smoke.mjs +0 -277
  318. package/scripts/internal-tools-normalization-test.mjs +0 -62
  319. package/scripts/interrupted-turn-history-test.mjs +0 -399
  320. package/scripts/lead-workflow-smoke.mjs +0 -592
  321. package/scripts/lifecycle-api-test.mjs +0 -137
  322. package/scripts/live-share-test.mjs +0 -148
  323. package/scripts/live-worker-smoke.mjs +0 -333
  324. package/scripts/log-writer-guard-smoke.mjs +0 -131
  325. package/scripts/maintenance-default-routes-test.mjs +0 -164
  326. package/scripts/max-output-recovery-persist-test.mjs +0 -81
  327. package/scripts/max-output-recovery-test.mjs +0 -368
  328. package/scripts/mcp-client-normalization-test.mjs +0 -45
  329. package/scripts/mcp-grace-deferred-test.mjs +0 -225
  330. package/scripts/memory-core-input-test.mjs +0 -167
  331. package/scripts/memory-cycle-routing-test.mjs +0 -111
  332. package/scripts/memory-meta-concurrency-test.mjs +0 -20
  333. package/scripts/memory-pg-recovery-test.mjs +0 -59
  334. package/scripts/memory-rule-contract-test.mjs +0 -93
  335. package/scripts/model-list-sanitize-test.mjs +0 -37
  336. package/scripts/mouse-tracking-restore-smoke.mjs +0 -107
  337. package/scripts/native-edit-wire-test.mjs +0 -152
  338. package/scripts/notify-completion-mirror-test.mjs +0 -73
  339. package/scripts/openai-oauth-refresh-race-test.mjs +0 -120
  340. package/scripts/openai-oauth-ws-1006-retry-test.mjs +0 -954
  341. package/scripts/openai-ws-early-settle-test.mjs +0 -216
  342. package/scripts/output-style-bench.mjs +0 -292
  343. package/scripts/output-style-smoke.mjs +0 -145
  344. package/scripts/parent-abort-link-test.mjs +0 -90
  345. package/scripts/patch-binary-cache-test.mjs +0 -181
  346. package/scripts/path-suffix-test.mjs +0 -57
  347. package/scripts/pending-completion-drop-test.mjs +0 -239
  348. package/scripts/pending-messages-lock-nonblocking-test.mjs +0 -62
  349. package/scripts/pretool-ask-runtime-test.mjs +0 -54
  350. package/scripts/process-lifecycle-test.mjs +0 -461
  351. package/scripts/prompt-immediate-render-test.mjs +0 -89
  352. package/scripts/prompt-input-parity-test.mjs +0 -145
  353. package/scripts/provider-admission-scheduler-test.mjs +0 -681
  354. package/scripts/provider-contract-test.mjs +0 -632
  355. package/scripts/provider-stream-stall-test.mjs +0 -276
  356. package/scripts/provider-toolcall-test.mjs +0 -3063
  357. package/scripts/reactive-compact-persist-smoke.mjs +0 -203
  358. package/scripts/recall-bench.mjs +0 -359
  359. package/scripts/resource-admission-test.mjs +0 -792
  360. package/scripts/result-classification-test.mjs +0 -75
  361. package/scripts/rg-runner-test.mjs +0 -240
  362. package/scripts/routing-corpus-test.mjs +0 -349
  363. package/scripts/sanitize-tool-pairs-test.mjs +0 -260
  364. package/scripts/session-bench-cache-break-test.mjs +0 -102
  365. package/scripts/session-bench.mjs +0 -1708
  366. package/scripts/session-context-bench.mjs +0 -344
  367. package/scripts/session-heartbeat-lifecycle-test.mjs +0 -68
  368. package/scripts/session-ingest-compaction-smoke.mjs +0 -279
  369. package/scripts/session-ingest-smoke.mjs +0 -177
  370. package/scripts/session-orphan-sweep-test.mjs +0 -109
  371. package/scripts/set-effort-config-test.mjs +0 -41
  372. package/scripts/shell-failure-diagnostics-test.mjs +0 -280
  373. package/scripts/shell-hardening-test.mjs +0 -209
  374. package/scripts/shell-jobs-windows-hide-test.mjs +0 -164
  375. package/scripts/ship-mode-test.mjs +0 -98
  376. package/scripts/smoke-loop-failure-summary-test.mjs +0 -38
  377. package/scripts/smoke-loop-failure-summary.mjs +0 -16
  378. package/scripts/smoke-loop-report.mjs +0 -221
  379. package/scripts/smoke-loop.mjs +0 -202
  380. package/scripts/smoke-runtime-negative.ps1 +0 -106
  381. package/scripts/statusline-quota-hysteresis-test.mjs +0 -62
  382. package/scripts/steering-drain-buckets-test.mjs +0 -467
  383. package/scripts/steering-fold-provenance-test.mjs +0 -71
  384. package/scripts/streaming-tail-window-test.mjs +0 -175
  385. package/scripts/submit-commandbusy-race-test.mjs +0 -257
  386. package/scripts/task-bench.mjs +0 -205
  387. package/scripts/terminal-bench-isolation-guards-test.mjs +0 -102
  388. package/scripts/termio-input-smoke.mjs +0 -199
  389. package/scripts/tool-result-hook-test.mjs +0 -48
  390. package/scripts/tool-smoke.mjs +0 -2453
  391. package/scripts/tool-tui-presentation-test.mjs +0 -286
  392. package/scripts/toolcall-args-test.mjs +0 -239
  393. package/scripts/tui-ambiguous-width-test.mjs +0 -113
  394. package/scripts/tui-background-failure-smoke.mjs +0 -73
  395. package/scripts/tui-perf-run.ps1 +0 -26
  396. package/scripts/tui-render-smoke.mjs +0 -90
  397. package/scripts/tui-runtime-load-bench-entry.jsx +0 -608
  398. package/scripts/tui-runtime-load-bench.mjs +0 -50
  399. package/scripts/tui-store-frame-batch-test.mjs +0 -99
  400. package/scripts/tui-transcript-jitter-harness-entry.jsx +0 -383
  401. package/scripts/tui-transcript-perf-test.mjs +0 -934
  402. package/scripts/usage-metrics-epoch-smoke.mjs +0 -114
  403. package/scripts/verify-release-assets-test.mjs +0 -281
  404. package/scripts/web-fetch-routing-test.mjs +0 -158
  405. package/scripts/webhook-smoke.mjs +0 -201
  406. package/scripts/windows-hide-spawn-options-test.mjs +0 -19
  407. package/scripts/worker-notify-rejection-test.mjs +0 -51
  408. 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
- });