mixdog 0.9.158 → 0.9.160

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 (399) hide show
  1. package/LICENSES/MIT.txt +1 -1
  2. package/NOTICE.md +2 -1
  3. package/README.md +0 -1
  4. package/package.json +21 -15
  5. package/scripts/build-tui.mjs +1 -16
  6. package/scripts/office-design-audit.mjs +43 -0
  7. package/scripts/release-paths.mjs +108 -0
  8. package/scripts/suite-health.mjs +102 -0
  9. package/scripts/tui-frame-harness-shim.mjs +1 -1
  10. package/scripts/tui-frame-harness.mjs +7 -2
  11. package/scripts/tui-transcript-jitter-harness.mjs +0 -11
  12. package/src/defaults/skills/setup/SKILL.md +10 -11
  13. package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +12 -12
  14. package/src/runtime/agent/orchestrator/agent-trace-format.mjs +0 -4
  15. package/src/runtime/agent/orchestrator/config.mjs +8 -13
  16. package/src/runtime/agent/orchestrator/internal-tools.mjs +6 -1
  17. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +111 -0
  18. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +1 -10
  19. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +24 -2
  20. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +52 -2
  21. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -2
  22. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +0 -9
  23. package/src/runtime/agent/orchestrator/session/compact/constants.mjs +8 -44
  24. package/src/runtime/agent/orchestrator/session/compact/continuation.mjs +55 -0
  25. package/src/runtime/agent/orchestrator/session/compact/messages.mjs +89 -4
  26. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +227 -767
  27. package/src/runtime/agent/orchestrator/session/compact/summary-schema.mjs +4 -4
  28. package/src/runtime/agent/orchestrator/session/compact/summary.mjs +43 -50
  29. package/src/runtime/agent/orchestrator/session/compact.mjs +7 -21
  30. package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +1 -0
  31. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +35 -73
  32. package/src/runtime/agent/orchestrator/session/loop/context-overflow.mjs +1 -1
  33. package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +472 -0
  34. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +6 -2
  35. package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +16 -5
  36. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +66 -163
  37. package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +4 -20
  38. package/src/runtime/agent/orchestrator/session/manager/message-sanitize.mjs +8 -4
  39. package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +4 -23
  40. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +3 -14
  41. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-context.mjs +0 -2
  42. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +64 -195
  43. package/src/runtime/agent/orchestrator/session/tool-batch.mjs +1 -0
  44. package/src/runtime/agent/orchestrator/session/tool-envelope.mjs +18 -6
  45. package/src/runtime/browser-bridge/action-schema.mjs +22 -3
  46. package/src/runtime/browser-bridge/client.mjs +6 -2
  47. package/src/runtime/browser-bridge/tool-defs.mjs +10 -10
  48. package/src/runtime/computer-bridge/action-schema.mjs +85 -365
  49. package/src/runtime/computer-bridge/client.mjs +71 -6
  50. package/src/runtime/computer-bridge/core-actions.mjs +227 -0
  51. package/src/runtime/computer-bridge/error-recovery.mjs +105 -0
  52. package/src/runtime/computer-bridge/tool-defs.mjs +11 -12
  53. package/src/runtime/memory/index.mjs +2 -1
  54. package/src/runtime/memory/lib/compact-handoff.mjs +127 -0
  55. package/src/runtime/memory/lib/http-wire.mjs +1 -1
  56. package/src/runtime/memory/lib/memory-config-flags.mjs +10 -0
  57. package/src/runtime/memory/lib/query-handlers.mjs +16 -6
  58. package/src/runtime/memory/lib/recall-format.mjs +18 -41
  59. package/src/runtime/memory/lib/session-ingest-runtime.mjs +4 -2
  60. package/src/runtime/memory/lib/session-ingest.mjs +37 -9
  61. package/src/runtime/office/README.md +49 -0
  62. package/src/runtime/office/{assurance-benchmark.mjs → bench/assurance-benchmark.mjs} +71 -5
  63. package/src/runtime/office/bench/bench-support.mjs +18 -0
  64. package/src/runtime/office/{benchmark.mjs → bench/benchmark.mjs} +5 -10
  65. package/src/runtime/office/{contract-benchmark.mjs → bench/contract-benchmark.mjs} +3 -8
  66. package/src/runtime/office/bench/freeform-live-benchmark.mjs +792 -0
  67. package/src/runtime/office/{polish-benchmark.mjs → bench/polish-benchmark.mjs} +2 -7
  68. package/src/runtime/office/{quality-live-benchmark.mjs → bench/quality-live-benchmark.mjs} +109 -112
  69. package/src/runtime/office/capabilities.mjs +9 -9
  70. package/src/runtime/office/{com-adapter.mjs → com/com-adapter.mjs} +3 -6
  71. package/src/runtime/office/{office-com-host.ps1 → com/office-com-host.ps1} +165 -20
  72. package/src/runtime/office/{office-com-session-host.ps1 → com/office-com-session-host.ps1} +185 -2
  73. package/src/runtime/office/core/office-actions-batch.mjs +316 -0
  74. package/src/runtime/office/core/office-actions-inspect.mjs +150 -0
  75. package/src/runtime/office/core/office-actions-lifecycle.mjs +226 -0
  76. package/src/runtime/office/core/office-actions-render.mjs +335 -0
  77. package/src/runtime/office/core/office-actions.mjs +6 -0
  78. package/src/runtime/office/core/office-candidate-actions.mjs +459 -0
  79. package/src/runtime/office/{office-core.mjs → core/office-core.mjs} +3 -3
  80. package/src/runtime/office/{office-sessions.mjs → core/office-sessions.mjs} +8 -6
  81. package/src/runtime/office/{office-transactions.mjs → core/office-transactions.mjs} +1 -1
  82. package/src/runtime/office/{tabular.mjs → core/tabular.mjs} +2 -12
  83. package/src/runtime/office/{composition-system.mjs → design/composition-system.mjs} +6 -10
  84. package/src/runtime/office/{content-model.mjs → design/content-model.mjs} +2 -15
  85. package/src/runtime/office/design/design-art-direction.mjs +260 -0
  86. package/src/runtime/office/design/design-creative-director.mjs +192 -0
  87. package/src/runtime/office/design/design-freeform-board.mjs +409 -0
  88. package/src/runtime/office/design/design-layout-grammar.mjs +618 -0
  89. package/src/runtime/office/design/design-layout-tournament.mjs +163 -0
  90. package/src/runtime/office/design/design-reference-genome.mjs +132 -0
  91. package/src/runtime/office/design/design-reference-visual-catalog.mjs +130 -0
  92. package/src/runtime/office/{design-system.mjs → design/design-system.mjs} +27 -14
  93. package/src/runtime/office/{design-tokens.mjs → design/design-tokens.mjs} +37 -25
  94. package/src/runtime/office/{design-docx-components.mjs → design/docx/design-docx-components.mjs} +60 -1
  95. package/src/runtime/office/{design-docx.mjs → design/docx/design-docx.mjs} +33 -4
  96. package/src/runtime/office/{design-library-core.mjs → design/library/design-library-core.mjs} +3 -28
  97. package/src/runtime/office/{design-library-pack.mjs → design/library/design-library-pack.mjs} +16 -1
  98. package/src/runtime/office/{design-library.mjs → design/library/design-library.mjs} +14 -1
  99. package/src/runtime/office/{design-template-index.mjs → design/library/design-template-index.mjs} +24 -2
  100. package/src/runtime/office/{design-template-inspect.mjs → design/library/design-template-inspect.mjs} +1 -12
  101. package/src/runtime/office/design/pptx/design-pptx-authored-project.mjs +172 -0
  102. package/src/runtime/office/design/pptx/design-pptx-authored-scene.mjs +436 -0
  103. package/src/runtime/office/design/pptx/design-pptx-executive-revisions.mjs +429 -0
  104. package/src/runtime/office/design/pptx/design-pptx-executive-scenes.mjs +304 -0
  105. package/src/runtime/office/{design-pptx-executive.mjs → design/pptx/design-pptx-executive.mjs} +2 -1
  106. package/src/runtime/office/{design-pptx-plan.mjs → design/pptx/design-pptx-plan.mjs} +63 -20
  107. package/src/runtime/office/{design-pptx-primitives.mjs → design/pptx/design-pptx-primitives.mjs} +8 -1
  108. package/src/runtime/office/design/pptx/design-pptx-review-gate.mjs +199 -0
  109. package/src/runtime/office/design/pptx/design-pptx-scene-builders.mjs +27 -0
  110. package/src/runtime/office/design/pptx/design-pptx-semantic-flow.mjs +111 -0
  111. package/src/runtime/office/design/pptx/design-pptx-semantic-visuals.mjs +995 -0
  112. package/src/runtime/office/{design-pptx-stack.mjs → design/pptx/design-pptx-stack.mjs} +16 -8
  113. package/src/runtime/office/{design-pptx.mjs → design/pptx/design-pptx.mjs} +2 -1
  114. package/src/runtime/office/{design-xlsx-components.mjs → design/xlsx/design-xlsx-components.mjs} +2 -1
  115. package/src/runtime/office/{design-xlsx.mjs → design/xlsx/design-xlsx.mjs} +31 -6
  116. package/src/runtime/office/index.mjs +20 -11
  117. package/src/runtime/office/office-test-support.mjs +66 -0
  118. package/src/runtime/office/{document-preview.mjs → pdf/document-preview.mjs} +1 -1
  119. package/src/runtime/office/{pdf-adapter.mjs → pdf/pdf-adapter.mjs} +1 -1
  120. package/src/runtime/office/{pdf-analysis.mjs → pdf/pdf-analysis.mjs} +1 -1
  121. package/src/runtime/office/{pdf-render.mjs → pdf/pdf-render.mjs} +1 -1
  122. package/src/runtime/office/{portable-cells.mjs → portable/portable-cells.mjs} +2 -2
  123. package/src/runtime/office/{portable-chart.mjs → portable/portable-chart.mjs} +18 -16
  124. package/src/runtime/office/{portable-package.mjs → portable/portable-package.mjs} +6 -24
  125. package/src/runtime/office/{portable-sheet-styles.mjs → portable/portable-sheet-styles.mjs} +4 -11
  126. package/src/runtime/office/{portable-slide-shapes.mjs → portable/portable-slide-shapes.mjs} +7 -14
  127. package/src/runtime/office/{xlsx-assertions.mjs → portable/xlsx-assertions.mjs} +2 -6
  128. package/src/runtime/office/{xlsx-contract.mjs → portable/xlsx-contract.mjs} +2 -8
  129. package/src/runtime/office/quality/assurance-checklist.mjs +185 -0
  130. package/src/runtime/office/quality/assurance-rendered.mjs +152 -0
  131. package/src/runtime/office/quality/assurance-structure.mjs +369 -0
  132. package/src/runtime/office/quality/assurance-trust.mjs +246 -0
  133. package/src/runtime/office/quality/assurance.mjs +11 -0
  134. package/src/runtime/office/quality/design-aesthetics.mjs +457 -0
  135. package/src/runtime/office/quality/design-deck-diversity.mjs +115 -0
  136. package/src/runtime/office/quality/design-frontier-review.mjs +279 -0
  137. package/src/runtime/office/{design-review.mjs → quality/design-review.mjs} +35 -10
  138. package/src/runtime/office/{quality-pipeline.mjs → quality/quality-pipeline.mjs} +20 -0
  139. package/src/runtime/office/quality/quality-score.mjs +82 -0
  140. package/src/runtime/office/shared/asar-path.mjs +5 -0
  141. package/src/runtime/office/shared/values.mjs +32 -0
  142. package/src/runtime/office/tool-defs.mjs +3 -3
  143. package/src/session-runtime/config-helpers.mjs +16 -11
  144. package/src/session-runtime/goal-reminder.mjs +18 -0
  145. package/src/session-runtime/provider-models.mjs +4 -0
  146. package/src/session-runtime/runtime-core.mjs +2 -2
  147. package/src/session-runtime/session-transcript.mjs +2 -2
  148. package/src/session-runtime/session-turn-api.mjs +5 -1
  149. package/src/session-runtime/settings-api.mjs +14 -12
  150. package/src/standalone/boot-phase-profiler.mjs +60 -0
  151. package/src/standalone/daemon-boot-coordinator.mjs +89 -0
  152. package/src/standalone/daemon.mjs +25 -33
  153. package/src/standalone/session-client.mjs +2 -0
  154. package/src/standalone/session-runtime-inline-host.mjs +28 -11
  155. package/src/standalone/session-service.mjs +10 -0
  156. package/src/standalone/session-transport.mjs +27 -3
  157. package/src/standalone/session-wire.mjs +1 -1
  158. package/src/tui/App.jsx +1 -3
  159. package/src/tui/app/app-format.mjs +1 -1
  160. package/src/tui/app/create-app-pickers.mjs +0 -4
  161. package/src/tui/app/extension-pickers.mjs +1 -56
  162. package/src/tui/app/input-parsers.mjs +1 -27
  163. package/src/tui/app/prompt-submit.mjs +2 -2
  164. package/src/tui/app/settings-picker.mjs +2 -43
  165. package/src/tui/app/slash-commands.mjs +0 -1
  166. package/src/tui/app/slash-dispatch.mjs +0 -4
  167. package/src/tui/app/usage-context-panels.mjs +0 -1
  168. package/src/tui/app/use-transcript-scroll.mjs +1 -1
  169. package/src/tui/components/PromptInput.jsx +4 -4
  170. package/src/tui/display-width.mjs +5 -6
  171. package/src/tui/dist/index.mjs +27 -121
  172. package/src/tui/index.jsx +1 -1
  173. package/src/tui/session/session-api.mjs +2 -3
  174. package/src/tui/session/session-flow.mjs +6 -11
  175. package/src/tui/session-local.mjs +0 -5
  176. package/src/vendor/statusline/src/gateway/route-meta.mjs +2 -3
  177. package/src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs +0 -245
  178. package/src/runtime/office/assurance.mjs +0 -880
  179. package/src/runtime/office/office-actions.mjs +0 -940
  180. package/vendor/ink/build/ansi-tokenizer.d.ts +0 -38
  181. package/vendor/ink/build/ansi-tokenizer.js +0 -316
  182. package/vendor/ink/build/ansi-tokenizer.js.map +0 -1
  183. package/vendor/ink/build/colorize.d.ts +0 -3
  184. package/vendor/ink/build/colorize.js +0 -48
  185. package/vendor/ink/build/colorize.js.map +0 -1
  186. package/vendor/ink/build/components/AccessibilityContext.d.ts +0 -3
  187. package/vendor/ink/build/components/AccessibilityContext.js +0 -5
  188. package/vendor/ink/build/components/AccessibilityContext.js.map +0 -1
  189. package/vendor/ink/build/components/AnimationContext.d.ts +0 -9
  190. package/vendor/ink/build/components/AnimationContext.js +0 -13
  191. package/vendor/ink/build/components/AnimationContext.js.map +0 -1
  192. package/vendor/ink/build/components/App.d.ts +0 -24
  193. package/vendor/ink/build/components/App.js +0 -608
  194. package/vendor/ink/build/components/App.js.map +0 -1
  195. package/vendor/ink/build/components/AppContext.d.ts +0 -80
  196. package/vendor/ink/build/components/AppContext.js +0 -25
  197. package/vendor/ink/build/components/AppContext.js.map +0 -1
  198. package/vendor/ink/build/components/BackgroundContext.d.ts +0 -4
  199. package/vendor/ink/build/components/BackgroundContext.js +0 -3
  200. package/vendor/ink/build/components/BackgroundContext.js.map +0 -1
  201. package/vendor/ink/build/components/Box.d.ts +0 -130
  202. package/vendor/ink/build/components/Box.js +0 -34
  203. package/vendor/ink/build/components/Box.js.map +0 -1
  204. package/vendor/ink/build/components/CursorContext.d.ts +0 -11
  205. package/vendor/ink/build/components/CursorContext.js +0 -8
  206. package/vendor/ink/build/components/CursorContext.js.map +0 -1
  207. package/vendor/ink/build/components/ErrorBoundary.d.ts +0 -18
  208. package/vendor/ink/build/components/ErrorBoundary.js +0 -23
  209. package/vendor/ink/build/components/ErrorBoundary.js.map +0 -1
  210. package/vendor/ink/build/components/ErrorOverview.d.ts +0 -6
  211. package/vendor/ink/build/components/ErrorOverview.js +0 -90
  212. package/vendor/ink/build/components/ErrorOverview.js.map +0 -1
  213. package/vendor/ink/build/components/FocusContext.d.ts +0 -16
  214. package/vendor/ink/build/components/FocusContext.js +0 -17
  215. package/vendor/ink/build/components/FocusContext.js.map +0 -1
  216. package/vendor/ink/build/components/Newline.d.ts +0 -13
  217. package/vendor/ink/build/components/Newline.js +0 -8
  218. package/vendor/ink/build/components/Newline.js.map +0 -1
  219. package/vendor/ink/build/components/Spacer.d.ts +0 -7
  220. package/vendor/ink/build/components/Spacer.js +0 -11
  221. package/vendor/ink/build/components/Spacer.js.map +0 -1
  222. package/vendor/ink/build/components/Static.d.ts +0 -24
  223. package/vendor/ink/build/components/Static.js +0 -28
  224. package/vendor/ink/build/components/Static.js.map +0 -1
  225. package/vendor/ink/build/components/StderrContext.d.ts +0 -15
  226. package/vendor/ink/build/components/StderrContext.js +0 -13
  227. package/vendor/ink/build/components/StderrContext.js.map +0 -1
  228. package/vendor/ink/build/components/StdinContext.d.ts +0 -28
  229. package/vendor/ink/build/components/StdinContext.js +0 -20
  230. package/vendor/ink/build/components/StdinContext.js.map +0 -1
  231. package/vendor/ink/build/components/StdoutContext.d.ts +0 -15
  232. package/vendor/ink/build/components/StdoutContext.js +0 -13
  233. package/vendor/ink/build/components/StdoutContext.js.map +0 -1
  234. package/vendor/ink/build/components/Text.d.ts +0 -55
  235. package/vendor/ink/build/components/Text.js +0 -50
  236. package/vendor/ink/build/components/Text.js.map +0 -1
  237. package/vendor/ink/build/components/Transform.d.ts +0 -16
  238. package/vendor/ink/build/components/Transform.js +0 -15
  239. package/vendor/ink/build/components/Transform.js.map +0 -1
  240. package/vendor/ink/build/cursor-helpers.d.ts +0 -39
  241. package/vendor/ink/build/cursor-helpers.js +0 -62
  242. package/vendor/ink/build/cursor-helpers.js.map +0 -1
  243. package/vendor/ink/build/devtools-window-polyfill.d.ts +0 -1
  244. package/vendor/ink/build/devtools-window-polyfill.js +0 -68
  245. package/vendor/ink/build/devtools-window-polyfill.js.map +0 -1
  246. package/vendor/ink/build/devtools.d.ts +0 -1
  247. package/vendor/ink/build/devtools.js +0 -36
  248. package/vendor/ink/build/devtools.js.map +0 -1
  249. package/vendor/ink/build/display-width.js +0 -96
  250. package/vendor/ink/build/dom.d.ts +0 -62
  251. package/vendor/ink/build/dom.js +0 -143
  252. package/vendor/ink/build/dom.js.map +0 -1
  253. package/vendor/ink/build/get-max-width.d.ts +0 -3
  254. package/vendor/ink/build/get-max-width.js +0 -10
  255. package/vendor/ink/build/get-max-width.js.map +0 -1
  256. package/vendor/ink/build/hooks/use-animation.d.ts +0 -49
  257. package/vendor/ink/build/hooks/use-animation.js +0 -87
  258. package/vendor/ink/build/hooks/use-animation.js.map +0 -1
  259. package/vendor/ink/build/hooks/use-app.d.ts +0 -5
  260. package/vendor/ink/build/hooks/use-app.js +0 -8
  261. package/vendor/ink/build/hooks/use-app.js.map +0 -1
  262. package/vendor/ink/build/hooks/use-box-metrics.d.ts +0 -59
  263. package/vendor/ink/build/hooks/use-box-metrics.js +0 -81
  264. package/vendor/ink/build/hooks/use-box-metrics.js.map +0 -1
  265. package/vendor/ink/build/hooks/use-cursor.d.ts +0 -12
  266. package/vendor/ink/build/hooks/use-cursor.js +0 -29
  267. package/vendor/ink/build/hooks/use-cursor.js.map +0 -1
  268. package/vendor/ink/build/hooks/use-focus-manager.d.ts +0 -43
  269. package/vendor/ink/build/hooks/use-focus-manager.js +0 -18
  270. package/vendor/ink/build/hooks/use-focus-manager.js.map +0 -1
  271. package/vendor/ink/build/hooks/use-focus.d.ts +0 -30
  272. package/vendor/ink/build/hooks/use-focus.js +0 -43
  273. package/vendor/ink/build/hooks/use-focus.js.map +0 -1
  274. package/vendor/ink/build/hooks/use-input.d.ts +0 -132
  275. package/vendor/ink/build/hooks/use-input.js +0 -126
  276. package/vendor/ink/build/hooks/use-input.js.map +0 -1
  277. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +0 -6
  278. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +0 -12
  279. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +0 -1
  280. package/vendor/ink/build/hooks/use-paste.d.ts +0 -35
  281. package/vendor/ink/build/hooks/use-paste.js +0 -62
  282. package/vendor/ink/build/hooks/use-paste.js.map +0 -1
  283. package/vendor/ink/build/hooks/use-stderr.d.ts +0 -5
  284. package/vendor/ink/build/hooks/use-stderr.js +0 -8
  285. package/vendor/ink/build/hooks/use-stderr.js.map +0 -1
  286. package/vendor/ink/build/hooks/use-stdin.d.ts +0 -7
  287. package/vendor/ink/build/hooks/use-stdin.js +0 -9
  288. package/vendor/ink/build/hooks/use-stdin.js.map +0 -1
  289. package/vendor/ink/build/hooks/use-stdout.d.ts +0 -5
  290. package/vendor/ink/build/hooks/use-stdout.js +0 -8
  291. package/vendor/ink/build/hooks/use-stdout.js.map +0 -1
  292. package/vendor/ink/build/hooks/use-window-size.d.ts +0 -18
  293. package/vendor/ink/build/hooks/use-window-size.js +0 -22
  294. package/vendor/ink/build/hooks/use-window-size.js.map +0 -1
  295. package/vendor/ink/build/index.d.ts +0 -42
  296. package/vendor/ink/build/index.js +0 -24
  297. package/vendor/ink/build/index.js.map +0 -1
  298. package/vendor/ink/build/ink.d.ts +0 -146
  299. package/vendor/ink/build/ink.js +0 -1287
  300. package/vendor/ink/build/ink.js.map +0 -1
  301. package/vendor/ink/build/input-parser.d.ts +0 -15
  302. package/vendor/ink/build/input-parser.js +0 -63
  303. package/vendor/ink/build/input-parser.js.map +0 -1
  304. package/vendor/ink/build/instances.d.ts +0 -3
  305. package/vendor/ink/build/instances.js +0 -8
  306. package/vendor/ink/build/instances.js.map +0 -1
  307. package/vendor/ink/build/kitty-keyboard.d.ts +0 -23
  308. package/vendor/ink/build/kitty-keyboard.js +0 -32
  309. package/vendor/ink/build/kitty-keyboard.js.map +0 -1
  310. package/vendor/ink/build/log-update.d.ts +0 -20
  311. package/vendor/ink/build/log-update.js +0 -320
  312. package/vendor/ink/build/log-update.js.map +0 -1
  313. package/vendor/ink/build/measure-element.d.ts +0 -20
  314. package/vendor/ink/build/measure-element.js +0 -13
  315. package/vendor/ink/build/measure-element.js.map +0 -1
  316. package/vendor/ink/build/measure-text.d.ts +0 -6
  317. package/vendor/ink/build/measure-text.js +0 -24
  318. package/vendor/ink/build/measure-text.js.map +0 -1
  319. package/vendor/ink/build/output.d.ts +0 -35
  320. package/vendor/ink/build/output.js +0 -567
  321. package/vendor/ink/build/output.js.map +0 -1
  322. package/vendor/ink/build/parse-keypress.d.ts +0 -20
  323. package/vendor/ink/build/parse-keypress.js +0 -495
  324. package/vendor/ink/build/parse-keypress.js.map +0 -1
  325. package/vendor/ink/build/reconciler.d.ts +0 -4
  326. package/vendor/ink/build/reconciler.js +0 -306
  327. package/vendor/ink/build/reconciler.js.map +0 -1
  328. package/vendor/ink/build/render-background.d.ts +0 -4
  329. package/vendor/ink/build/render-background.js +0 -25
  330. package/vendor/ink/build/render-background.js.map +0 -1
  331. package/vendor/ink/build/render-border.d.ts +0 -4
  332. package/vendor/ink/build/render-border.js +0 -84
  333. package/vendor/ink/build/render-border.js.map +0 -1
  334. package/vendor/ink/build/render-node-to-output.d.ts +0 -14
  335. package/vendor/ink/build/render-node-to-output.js +0 -207
  336. package/vendor/ink/build/render-node-to-output.js.map +0 -1
  337. package/vendor/ink/build/render-to-string.d.ts +0 -38
  338. package/vendor/ink/build/render-to-string.js +0 -116
  339. package/vendor/ink/build/render-to-string.js.map +0 -1
  340. package/vendor/ink/build/render.d.ts +0 -176
  341. package/vendor/ink/build/render.js +0 -84
  342. package/vendor/ink/build/render.js.map +0 -1
  343. package/vendor/ink/build/renderer.d.ts +0 -8
  344. package/vendor/ink/build/renderer.js +0 -67
  345. package/vendor/ink/build/renderer.js.map +0 -1
  346. package/vendor/ink/build/sanitize-ansi.d.ts +0 -2
  347. package/vendor/ink/build/sanitize-ansi.js +0 -27
  348. package/vendor/ink/build/sanitize-ansi.js.map +0 -1
  349. package/vendor/ink/build/selection-rect.js +0 -80
  350. package/vendor/ink/build/squash-text-nodes.d.ts +0 -3
  351. package/vendor/ink/build/squash-text-nodes.js +0 -36
  352. package/vendor/ink/build/squash-text-nodes.js.map +0 -1
  353. package/vendor/ink/build/styles.d.ts +0 -302
  354. package/vendor/ink/build/styles.js +0 -303
  355. package/vendor/ink/build/styles.js.map +0 -1
  356. package/vendor/ink/build/termio-keypress.js +0 -271
  357. package/vendor/ink/build/termio-tokenize.js +0 -188
  358. package/vendor/ink/build/utils.d.ts +0 -9
  359. package/vendor/ink/build/utils.js +0 -19
  360. package/vendor/ink/build/utils.js.map +0 -1
  361. package/vendor/ink/build/wrap-text.d.ts +0 -5
  362. package/vendor/ink/build/wrap-text.js +0 -204
  363. package/vendor/ink/build/wrap-text.js.map +0 -1
  364. package/vendor/ink/build/write-synchronized.d.ts +0 -4
  365. package/vendor/ink/build/write-synchronized.js +0 -9
  366. package/vendor/ink/build/write-synchronized.js.map +0 -1
  367. package/vendor/ink/license +0 -10
  368. package/vendor/ink/package.json +0 -137
  369. /package/src/runtime/office/{journal.mjs → core/journal.mjs} +0 -0
  370. /package/src/runtime/office/{office-documents.mjs → core/office-documents.mjs} +0 -0
  371. /package/src/runtime/office/{pagination.mjs → core/pagination.mjs} +0 -0
  372. /package/src/runtime/office/{snapshot-contract.mjs → core/snapshot-contract.mjs} +0 -0
  373. /package/src/runtime/office/{templates → design/library/templates}/mixdog-executive.pptx +0 -0
  374. /package/src/runtime/office/{templates → design/library/templates}/mixdog-executive.pptx.mixdog.json +0 -0
  375. /package/src/runtime/office/{pdf-security.mjs → pdf/pdf-security.mjs} +0 -0
  376. /package/src/runtime/office/{image-layout.mjs → portable/image-layout.mjs} +0 -0
  377. /package/src/runtime/office/{ooxml-validator.mjs → portable/ooxml-validator.mjs} +0 -0
  378. /package/src/runtime/office/{portable-docx-parts.mjs → portable/portable-docx-parts.mjs} +0 -0
  379. /package/src/runtime/office/{portable-docx-xml.mjs → portable/portable-docx-xml.mjs} +0 -0
  380. /package/src/runtime/office/{portable-docx.mjs → portable/portable-docx.mjs} +0 -0
  381. /package/src/runtime/office/{portable-ooxml.mjs → portable/portable-ooxml.mjs} +0 -0
  382. /package/src/runtime/office/{portable-opc.mjs → portable/portable-opc.mjs} +0 -0
  383. /package/src/runtime/office/{portable-pivot.mjs → portable/portable-pivot.mjs} +0 -0
  384. /package/src/runtime/office/{portable-pptx-chart.mjs → portable/portable-pptx-chart.mjs} +0 -0
  385. /package/src/runtime/office/{portable-pptx-charts.mjs → portable/portable-pptx-charts.mjs} +0 -0
  386. /package/src/runtime/office/{portable-pptx-core.mjs → portable/portable-pptx-core.mjs} +0 -0
  387. /package/src/runtime/office/{portable-pptx-deck.mjs → portable/portable-pptx-deck.mjs} +0 -0
  388. /package/src/runtime/office/{portable-pptx-package.mjs → portable/portable-pptx-package.mjs} +0 -0
  389. /package/src/runtime/office/{portable-pptx-shapes.mjs → portable/portable-pptx-shapes.mjs} +0 -0
  390. /package/src/runtime/office/{portable-pptx.mjs → portable/portable-pptx.mjs} +0 -0
  391. /package/src/runtime/office/{portable-sheet-parts.mjs → portable/portable-sheet-parts.mjs} +0 -0
  392. /package/src/runtime/office/{portable-sheet-xml.mjs → portable/portable-sheet-xml.mjs} +0 -0
  393. /package/src/runtime/office/{portable-snapshot.mjs → portable/portable-snapshot.mjs} +0 -0
  394. /package/src/runtime/office/{portable-soffice.mjs → portable/portable-soffice.mjs} +0 -0
  395. /package/src/runtime/office/{portable-validation.mjs → portable/portable-validation.mjs} +0 -0
  396. /package/src/runtime/office/{portable-xlsx.mjs → portable/portable-xlsx.mjs} +0 -0
  397. /package/src/runtime/office/{portable-xml.mjs → portable/portable-xml.mjs} +0 -0
  398. /package/src/runtime/office/{text-metrics.mjs → portable/text-metrics.mjs} +0 -0
  399. /package/src/runtime/office/{visual-diff.mjs → quality/visual-diff.mjs} +0 -0
package/LICENSES/MIT.txt CHANGED
@@ -25,7 +25,7 @@ component listed here. Each component keeps its own copyright notice.
25
25
  https://github.com/BurntSushi/ripgrep
26
26
  Copyright (c) 2015 Andrew Gallant
27
27
 
28
- Ink (vendored under vendor/ink, which keeps its own license file)
28
+ Ink (patched runtime dependency; its package retains the upstream license)
29
29
  https://github.com/vadimdemedes/ink
30
30
  Copyright (c) Vadym Demedes <vadimdemedes@hey.com>
31
31
  Copyright (c) Sindre Sorhus <sindresorhus@gmail.com>
package/NOTICE.md CHANGED
@@ -82,7 +82,8 @@ MIT terms. The upstream notice is preserved as `LICENSES/ripgrep-NOTICE.txt`.
82
82
 
83
83
  ### Ink — Copyright (c) Vadim Demedes
84
84
 
85
- Vendored under `vendor/ink` together with its own license file.
85
+ Installed from Mixdog's patched Ink runtime release asset. The package retains
86
+ the upstream MIT license.
86
87
 
87
88
  ## Apache License 2.0
88
89
 
package/README.md CHANGED
@@ -191,7 +191,6 @@ stdout; diagnostics remain on stderr.
191
191
  /mcp manage MCP servers and tools
192
192
  /skills choose a skill for the next request
193
193
  /plugins manage local plugin integrations
194
- /hooks manage before-tool hooks and events
195
194
  /setting open runtime settings
196
195
  /profile set your title and response language
197
196
  /update check for updates
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mixdog",
3
- "version": "0.9.158",
3
+ "version": "0.9.160",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Standalone mixdog coding-agent CLI/TUI workspace.",
@@ -32,6 +32,10 @@
32
32
  "!scripts/recall-bench-*.txt",
33
33
  "!scripts/*-test.mjs",
34
34
  "!scripts/*.test.mjs",
35
+ "!scripts/tool-contracts/",
36
+ "!scripts/provider-toolcall/",
37
+ "!scripts/session-transport/",
38
+ "!scripts/shellhardening/",
35
39
  "!scripts/*-smoke.mjs",
36
40
  "!scripts/smoke-loop*.mjs",
37
41
  "!scripts/*-bench.mjs",
@@ -42,8 +46,7 @@
42
46
  "src/",
43
47
  "!src/tui/dev",
44
48
  "!src/**/*.test.mjs",
45
- "!src/**/*.test.jsx",
46
- "vendor/"
49
+ "!src/**/*.test.jsx"
47
50
  ],
48
51
  "scripts": {
49
52
  "postinstall": "node scripts/prune-embedding-runtime.mjs && node scripts/prepare-native-assets.mjs",
@@ -54,33 +57,35 @@
54
57
  "smoke:all": "npm run smoke && npm run smoke:boot && npm run smoke:patch && npm run smoke:compact",
55
58
  "smoke:boot": "node scripts/boot-smoke.mjs",
56
59
  "smoke:compact": "node scripts/compact-smoke.mjs",
57
- "test:compact": "node --test scripts/suite-compact-test.mjs src/runtime/agent/orchestrator/session/token-estimate.test.mjs",
60
+ "test:compact": "node --test scripts/suite-compact-test.mjs src/runtime/agent/orchestrator/session/compact-fresh-context.test.mjs src/runtime/agent/orchestrator/session/compaction-read-reset.test.mjs src/runtime/agent/orchestrator/session/token-estimate.test.mjs",
58
61
  "test:markdown": "node --test scripts/markdown-surface-test.mjs",
59
62
  "smoke:loop": "node scripts/smoke-loop.mjs",
60
63
  "smoke:loop:final": "node scripts/smoke-loop-report.mjs --require-complete --min-elapsed 5h --min-iterations 400 --max-gap 60s --max-smoke-ms 10000 --max-avg-smoke-ms 8500 --max-step-ms smoke.mjs=4000 --max-step-ms boot-smoke.mjs=8000 --max-rss-mb 140 --max-rss-growth-mb 50",
61
64
  "smoke:loop:report": "node scripts/smoke-loop-report.mjs",
62
65
  "build:spawn:test": "cargo build --locked --manifest-path native/mixdog-spawn/Cargo.toml",
63
- "test:tool-contracts": "npm run build:spawn:test && node scripts/tool-smoke.mjs",
66
+ "test:tool-contracts": "npm run build:spawn:test && node --test --test-force-exit \"scripts/tool-contracts/*.test.mjs\"",
64
67
  "smoke:patch": "node scripts/apply-patch-edit-smoke.mjs",
65
- "test:shellhardening": "npm run build:spawn:test && node --test scripts/suite-shellhardening-test.mjs scripts/suite-shell-direct-exe-test.mjs",
66
- "test:providers": "node --test scripts/provider-toolcall-test.mjs scripts/provider-contract-test.mjs scripts/provider-stream-outcome-test.mjs scripts/cursor-provider-test.mjs src/runtime/agent/orchestrator/providers/openai-codex-identity.test.mjs src/runtime/agent/orchestrator/providers/openai-ws-delta-parity.test.mjs",
68
+ "test:shellhardening": "npm run build:spawn:test && node --test \"scripts/shellhardening/*.test.mjs\" scripts/suite-shell-direct-exe-test.mjs",
69
+ "test:providers": "node --test \"scripts/provider-toolcall/*.test.mjs\" scripts/provider-contract-test.mjs scripts/provider-stream-outcome-test.mjs scripts/cursor-provider-test.mjs src/runtime/agent/orchestrator/providers/openai-codex-identity.test.mjs src/runtime/agent/orchestrator/providers/openai-ws-delta-parity.test.mjs",
67
70
  "test:embedding-runtime:warmup": "node scripts/verify-embedding-runtime.mjs --warmup",
68
71
  "test:release-assets": "node --check scripts/verify-release-assets.mjs && node --check scripts/release-gate-test.mjs && node --check scripts/prepare-native-assets.mjs && node --test scripts/release-gate-test.mjs scripts/prepare-native-assets-test.mjs scripts/generate-voice-runtime-manifest.test.mjs",
69
72
  "test:native-edit-wire": "node scripts/native-edit-wire-test.mjs",
70
73
  "test:release-critical": "npm run test:release-assets && npm run smoke:patch && npm run test:providers",
71
74
  "test:spec-advisory": "node scripts/advisory-spec-test.mjs && npm run test:spec-advisory --prefix apps/desktop",
72
- "test:session-transport": "node --test scripts/session-transport-test.mjs scripts/daemon-bootstrap-test.mjs src/runtime/shared/child-spawn-remote.test.mjs src/standalone/session-runtime-agent-control-client.test.mjs src/standalone/session-runtime-dispatch-cancel.test.mjs src/standalone/session-runtime-host-factory.test.mjs src/standalone/session-runtime-inline-host.test.mjs src/standalone/session-runtime-provider-cooldown.test.mjs src/standalone/session-runtime-shard-host.test.mjs src/standalone/session-runtime-shard-router.test.mjs",
73
- "test:session": "node --test scripts/runtime-turn-contract-test.mjs scripts/session-save-fault-store-test.mjs scripts/turn-review-revert-test.mjs src/runtime/shared/tool-surface.test.mjs src/runtime/bridge-clients.test.mjs",
75
+ "test:session-transport": "node --test \"scripts/session-transport/*.test.mjs\" scripts/daemon-bootstrap-test.mjs src/runtime/shared/child-spawn-remote.test.mjs src/standalone/session-runtime-agent-control-client.test.mjs src/standalone/session-runtime-dispatch-cancel.test.mjs src/standalone/session-runtime-host-factory.test.mjs src/standalone/session-runtime-inline-host.test.mjs src/standalone/session-runtime-provider-cooldown.test.mjs src/standalone/session-runtime-shard-host.test.mjs src/standalone/session-runtime-shard-router.test.mjs",
76
+ "test:session": "node --test scripts/runtime-turn-contract-test.mjs scripts/session-save-fault-store-test.mjs scripts/turn-review-revert-test.mjs src/runtime/shared/tool-surface.test.mjs src/runtime/bridge-clients.test.mjs src/runtime/computer-bridge/client-semantic-error.test.mjs src/runtime/agent/orchestrator/session/tool-envelope.test.mjs src/runtime/agent/orchestrator/session/eager-dispatch.test.mjs",
74
77
  "test:quick": "npm run test:session && npm run test:session-transport && npm run test:desktop-main --prefix apps/desktop",
75
- "test:office": "node --test scripts/run-office-live-tests.test.mjs src/runtime/office/office-runtime.test.mjs src/runtime/office/office-assurance.test.mjs src/runtime/office/portable-authoring.test.mjs src/runtime/office/slide-quality.test.mjs && npm run test:office-approval --prefix apps/desktop",
78
+ "test:office": "node --test scripts/run-office-live-tests.test.mjs src/runtime/office/office-runtime-contract.test.mjs src/runtime/office/office-runtime-com.test.mjs src/runtime/office/office-runtime-portable.test.mjs src/runtime/office/office-runtime-pdf.test.mjs src/runtime/office/office-runtime-design.test.mjs src/runtime/office/office-freeform-pipeline.test.mjs src/runtime/office/office-assurance.test.mjs src/runtime/office/office-design-aesthetics.test.mjs src/runtime/office/portable-authoring.test.mjs src/runtime/office/slide-quality.test.mjs && npm run test:office-approval --prefix apps/desktop",
76
79
  "test:office:live": "node scripts/run-office-live-tests.mjs",
77
80
  "test:media": "node --test src/runtime/media/store.test.mjs src/runtime/media/renditions.test.mjs src/runtime/media/adapters/codex-image.test.mjs",
78
81
  "failures": "node scripts/tool-failures.mjs",
79
82
  "trace:llm": "node scripts/llm-trace-summary.mjs",
80
- "bench:office": "node src/runtime/office/benchmark.mjs",
81
- "bench:office:contract": "node src/runtime/office/contract-benchmark.mjs",
82
- "bench:office:assurance": "node src/runtime/office/assurance-benchmark.mjs",
83
- "bench:office:quality:live": "node src/runtime/office/quality-live-benchmark.mjs",
83
+ "bench:office": "node src/runtime/office/bench/benchmark.mjs",
84
+ "bench:office:contract": "node src/runtime/office/bench/contract-benchmark.mjs",
85
+ "bench:office:assurance": "node src/runtime/office/bench/assurance-benchmark.mjs",
86
+ "bench:office:polish": "node src/runtime/office/bench/polish-benchmark.mjs",
87
+ "bench:office:quality:live": "node src/runtime/office/bench/quality-live-benchmark.mjs",
88
+ "bench:office:freeform:live": "node src/runtime/office/bench/freeform-live-benchmark.mjs",
84
89
  "diag:sessions": "node scripts/session-diag.mjs",
85
90
  "diag:tools": "node scripts/tool-efficiency-diag.mjs",
86
91
  "diag:sweep": "node scripts/session-sweep.mjs",
@@ -91,6 +96,7 @@
91
96
  "bench:recall": "node scripts/recall-bench.mjs",
92
97
  "bench:recall:strict": "node scripts/recall-bench.mjs --strict",
93
98
  "test:recall-validator": "node --test scripts/recall-bench-test.mjs",
99
+ "test:suite-health": "node --test scripts/suite-health.test.mjs",
94
100
  "bench:tui-load": "node scripts/tui-runtime-load-bench.mjs",
95
101
  "bench:output-style": "node scripts/output-style-bench.mjs",
96
102
  "bench:session-context": "node scripts/session-context-bench.mjs",
@@ -133,7 +139,7 @@
133
139
  "chalk": "^5.6.2",
134
140
  "cli-highlight": "^2.1.11",
135
141
  "diff": "^9.0.0",
136
- "ink": "^7.1.0",
142
+ "ink": "https://github.com/tribgames/mixdog/releases/download/ink-runtime-v7.1.0-mixdog.1/ink-7.1.0.tgz",
137
143
  "jsdom": "^27.0.0",
138
144
  "jszip": "^3.10.1",
139
145
  "marked": "^14.1.4",
@@ -8,8 +8,7 @@
8
8
  *
9
9
  * What is bundled vs external:
10
10
  * - bundled: our JSX only.
11
- * - external: React and Mixdog's checked-in Ink renderer.
12
- * Ink is loaded from vendor/ink directly, never by rewriting node_modules.
11
+ * - external: React and Mixdog's patched Ink runtime dependency.
13
12
  *
14
13
  * Run: node scripts/build-tui.mjs (or `npm run build:tui`)
15
14
  */
@@ -19,17 +18,6 @@ import { fileURLToPath } from 'node:url';
19
18
 
20
19
  const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
21
20
  const SRC = join(ROOT, 'src', 'tui');
22
- const DIST_TO_VENDOR_INK = '../../../vendor/ink/build/index.js';
23
-
24
- const mixdogInkAliasPlugin = {
25
- name: 'mixdog-ink-alias',
26
- setup(build) {
27
- build.onResolve({ filter: /^ink$/ }, () => ({
28
- path: DIST_TO_VENDOR_INK,
29
- external: true,
30
- }));
31
- },
32
- };
33
21
 
34
22
  const sharedRuntimeExternalPlugin = {
35
23
  name: 'mixdog-shared-runtime-external',
@@ -65,8 +53,6 @@ await build({
65
53
  // helpers are bundled so relative paths stay valid from src/tui/dist/.
66
54
  // Process shutdown stays external so the CLI and checked-in TUI bundle use
67
55
  // the same process-global lifecycle state.
68
- // Only `ink` is redirected to Mixdog's checked-in renderer instead of
69
- // node_modules/ink.
70
56
  packages: 'external',
71
57
  // Bundled CJS helpers (e.g. src/lib/mixdog-debug.cjs) compile to esbuild's
72
58
  // __require shim, which throws "Dynamic require of ..." in plain ESM.
@@ -88,7 +74,6 @@ await build({
88
74
  '../../runtime/channels/lib/whisper-server.mjs',
89
75
  ],
90
76
  plugins: [
91
- mixdogInkAliasPlugin,
92
77
  sharedRuntimeExternalPlugin,
93
78
  sessionClientExternalPlugin,
94
79
  ],
@@ -0,0 +1,43 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { basename, resolve } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+
5
+ import { reviewRenderedOfficePages } from '../src/runtime/office/quality/assurance.mjs';
6
+
7
+ function argumentValue(name) {
8
+ const index = process.argv.indexOf(name);
9
+ return index >= 0 ? process.argv[index + 1] : '';
10
+ }
11
+
12
+ function pageFromPath(path, fallback) {
13
+ const match = basename(path).match(/(?:page|slide)[-_ ]?(\d+)/i);
14
+ return match ? Number(match[1]) : fallback;
15
+ }
16
+
17
+ export async function auditOfficeDesignImages(paths, {
18
+ format = 'pptx',
19
+ } = {}) {
20
+ const images = await Promise.all(paths.map(async (path, index) => {
21
+ const absolute = resolve(path);
22
+ const data = await readFile(absolute);
23
+ return {
24
+ page: pageFromPath(absolute, index + 1),
25
+ path: absolute,
26
+ mimeType: 'image/png',
27
+ data: data.toString('base64'),
28
+ };
29
+ }));
30
+ images.sort((left, right) => left.page - right.page);
31
+ return reviewRenderedOfficePages(images, { format });
32
+ }
33
+
34
+ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
35
+ const format = argumentValue('--format') || 'pptx';
36
+ const paths = process.argv.slice(2).filter((entry, index, values) => (
37
+ entry !== '--format' && values[index - 1] !== '--format'
38
+ ));
39
+ if (!paths.length) throw new Error('Pass rendered page image paths to audit.');
40
+ const report = await auditOfficeDesignImages(paths, { format });
41
+ process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
42
+ if (!report.ok) process.exitCode = 1;
43
+ }
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+ // Single source of truth for CI/CD path selection.
3
+ //
4
+ // Consumers:
5
+ // - .github/workflows/release-gate.yml → `node scripts/release-paths.mjs desktop-regex|runtime-regex`
6
+ // (grep -E patterns selecting which incremental gates a change requires)
7
+ // - .github/workflows/deploy.yml → `import { RELEASE_CRITICAL_PATHS }`
8
+ // (git diff paths whose change invalidates the previous release's
9
+ // critical verification)
10
+ //
11
+ // Adding or renaming a release-relevant script means editing THIS file only;
12
+ // the workflows derive their patterns from it at run time.
13
+
14
+ export const PACKAGE_MANIFESTS = ['package.json', 'package-lock.json'];
15
+
16
+ // This module governs gate selection itself, so changing it must re-run
17
+ // every gate it feeds.
18
+ const GATE_SELECTION_SOURCES = ['scripts/release-paths.mjs'];
19
+
20
+ // Prefixes whose changes require the desktop bundle gate.
21
+ export const DESKTOP_GATE_PREFIXES = ['apps/desktop/', 'src/', 'vendor/', 'LICENSES/'];
22
+ export const DESKTOP_GATE_FILES = ['README.md', 'NOTICE.md', ...PACKAGE_MANIFESTS];
23
+ // Desktop packaging/postinstall scripts; `.test` companions ride along.
24
+ export const DESKTOP_GATE_SCRIPT_BASES = [
25
+ 'scripts/prune-embedding-runtime',
26
+ 'scripts/native-binary-arch',
27
+ 'scripts/native-tool-download',
28
+ 'scripts/runtime-dependency-cache-key',
29
+ ];
30
+
31
+ // Prefixes whose changes require the runtime gate (the release-critical lane
32
+ // plus the tool-contract suites the gate also executes).
33
+ export const RUNTIME_GATE_PREFIXES = [
34
+ '.github/workflows/',
35
+ 'native/',
36
+ 'scripts/tool-contracts/',
37
+ 'src/runtime/agent/orchestrator/',
38
+ 'src/runtime/shared/',
39
+ ];
40
+
41
+ // Everything `npm run test:release-critical` executes
42
+ // (test:release-assets + smoke:patch + test:providers).
43
+ export const RELEASE_CRITICAL_SCRIPTS = [
44
+ 'scripts/verify-release-assets.mjs',
45
+ 'scripts/release-gate-test.mjs',
46
+ 'scripts/prepare-native-assets.mjs',
47
+ 'scripts/prepare-native-assets-test.mjs',
48
+ 'scripts/generate-voice-runtime-manifest.mjs',
49
+ 'scripts/generate-voice-runtime-manifest.test.mjs',
50
+ 'scripts/apply-patch-edit-smoke.mjs',
51
+ 'scripts/provider-contract-test.mjs',
52
+ 'scripts/provider-stream-outcome-test.mjs',
53
+ 'scripts/cursor-provider-test.mjs',
54
+ ];
55
+
56
+ // Directory-shaped suites the critical lane executes (test:providers runs
57
+ // scripts/provider-toolcall/*.test.mjs): deploy consumes these as git
58
+ // pathspecs, the gate regex as path prefixes.
59
+ export const RELEASE_CRITICAL_SUITE_DIRS = ['scripts/provider-toolcall'];
60
+
61
+ // Gate-only suite files the runtime job executes beyond the critical lane
62
+ // (test:compact); editing one must re-run the gate that executes it.
63
+ export const RUNTIME_GATE_SUITE_FILES = ['scripts/suite-compact-test.mjs'];
64
+
65
+ // deploy.yml plan: paths whose change since the published release tag marks
66
+ // the critical lane as unverified.
67
+ export const RELEASE_CRITICAL_PATHS = [
68
+ 'native',
69
+ 'src/runtime/agent/orchestrator',
70
+ 'src/runtime/shared',
71
+ ...RELEASE_CRITICAL_SCRIPTS,
72
+ ...RELEASE_CRITICAL_SUITE_DIRS,
73
+ ...PACKAGE_MANIFESTS,
74
+ ];
75
+
76
+ const escapeRegex = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
77
+
78
+ export function desktopGateRegex() {
79
+ return `^(${[
80
+ ...DESKTOP_GATE_PREFIXES.map(escapeRegex),
81
+ ...DESKTOP_GATE_FILES.map((file) => `${escapeRegex(file)}$`),
82
+ ...DESKTOP_GATE_SCRIPT_BASES.map((base) => `${escapeRegex(base)}(\\.test)?\\.mjs$`),
83
+ ...GATE_SELECTION_SOURCES.map((file) => `${escapeRegex(file)}$`),
84
+ ].join('|')})`;
85
+ }
86
+
87
+ export function runtimeGateRegex() {
88
+ return `^(${[
89
+ ...RUNTIME_GATE_PREFIXES.map(escapeRegex),
90
+ ...RELEASE_CRITICAL_SCRIPTS.map((file) => `${escapeRegex(file)}$`),
91
+ ...RELEASE_CRITICAL_SUITE_DIRS.map((dir) => `${escapeRegex(dir)}/`),
92
+ ...RUNTIME_GATE_SUITE_FILES.map((file) => `${escapeRegex(file)}$`),
93
+ ...DESKTOP_GATE_SCRIPT_BASES.map((base) => `${escapeRegex(base)}(\\.test)?\\.mjs$`),
94
+ ...PACKAGE_MANIFESTS.map((file) => `${escapeRegex(file)}$`),
95
+ ...GATE_SELECTION_SOURCES.map((file) => `${escapeRegex(file)}$`),
96
+ ].join('|')})`;
97
+ }
98
+
99
+ const mode = process.argv[2];
100
+ if (mode) {
101
+ if (mode === 'desktop-regex') process.stdout.write(`${desktopGateRegex()}\n`);
102
+ else if (mode === 'runtime-regex') process.stdout.write(`${runtimeGateRegex()}\n`);
103
+ else if (mode === 'critical-paths') process.stdout.write(`${RELEASE_CRITICAL_PATHS.join('\n')}\n`);
104
+ else {
105
+ process.stderr.write(`unknown mode: ${mode} (expected desktop-regex|runtime-regex|critical-paths)\n`);
106
+ process.exit(1);
107
+ }
108
+ }
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env node
2
+ // Weekly opt-out sweep: run every test:*/smoke:* npm script in the repository
3
+ // so no locally-registered suite can rot silently (docs/testing.md, "A
4
+ // contract suite runs in CI or it drifts"). New scripts join automatically;
5
+ // exclusions are explicit, reasoned, and fail closed when they go stale.
6
+ import { readFileSync, writeFileSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { pathToFileURL } from 'node:url';
9
+ import { spawnSync } from 'node:child_process';
10
+
11
+ export const WORKSPACES = [
12
+ {
13
+ dir: '.',
14
+ exclusions: {
15
+ 'smoke:all': 'aggregate; its components run individually',
16
+ 'smoke:loop': 'long-running local endurance harness',
17
+ 'smoke:loop:final': 'endurance-harness gate, needs hours of loop data',
18
+ 'smoke:loop:report': 'report reader, not a suite',
19
+ 'test:release-critical': 'aggregate; the release gate owns it',
20
+ 'test:quick': 'aggregate; its components run individually',
21
+ 'test:office:live': 'drives real Office COM on a desktop machine',
22
+ 'test:embedding-runtime:warmup': 'downloads the embedding runtime',
23
+ 'test:spec-advisory': 'advisory by design (MIXDOG_TEST_ADVISORY)',
24
+ },
25
+ },
26
+ {
27
+ dir: 'apps/desktop',
28
+ exclusions: {
29
+ 'test:renderer:full': 'aggregate; its components run individually',
30
+ 'test:fast-direct': 'dev-only deploy tool; real deploys are its verification',
31
+ 'test:office-approval': 'runs through the root test:office chain',
32
+ 'test:spec-advisory': 'advisory by design (MIXDOG_TEST_ADVISORY)',
33
+ 'test:browser-host:integration': 'live desktop integration harness',
34
+ 'test:browser-profile-import:integration': 'live desktop integration harness',
35
+ 'test:computer-host:integration': 'live desktop integration harness',
36
+ 'test:computer-host:scenarios': 'live desktop scenario harness',
37
+ 'test:computer-host:repeats': 'live desktop scenario harness',
38
+ },
39
+ },
40
+ ];
41
+
42
+ export function selectSuiteScripts(scripts, exclusions) {
43
+ const names = Object.keys(scripts).filter((name) => /^(test|smoke)(:|$)/.test(name));
44
+ const stale = Object.keys(exclusions).filter((name) => !names.includes(name));
45
+ if (stale.length) {
46
+ throw new Error(`stale exclusions (script no longer exists): ${stale.join(', ')}`);
47
+ }
48
+ return names.filter((name) => !(name in exclusions));
49
+ }
50
+
51
+ function runSweep() {
52
+ const failures = [];
53
+ const reportLines = [];
54
+ for (const ws of WORKSPACES) {
55
+ const pkg = JSON.parse(readFileSync(join(ws.dir, 'package.json'), 'utf8'));
56
+ const names = selectSuiteScripts(pkg.scripts || {}, ws.exclusions);
57
+ for (const name of names) {
58
+ const label = ws.dir === '.' ? name : `${ws.dir} ${name}`;
59
+ const started = Date.now();
60
+ const args = ['run', name, ...(ws.dir === '.' ? [] : ['--prefix', ws.dir])];
61
+ const child = spawnSync(process.platform === 'win32' ? 'npm.cmd' : 'npm', args, {
62
+ encoding: 'utf8',
63
+ shell: process.platform === 'win32',
64
+ maxBuffer: 64 * 1024 * 1024,
65
+ });
66
+ const seconds = ((Date.now() - started) / 1000).toFixed(1);
67
+ if (child.status === 0) {
68
+ reportLines.push(`- ${label}: OK (${seconds}s)`);
69
+ console.log(`${label}: OK (${seconds}s)`);
70
+ } else {
71
+ const tail = `${child.stdout || ''}\n${child.stderr || ''}`
72
+ .trim().split('\n').slice(-25).join('\n');
73
+ failures.push(`- ${label}: FAILED (${seconds}s)\n\n\`\`\`\n${tail}\n\`\`\``);
74
+ reportLines.push(`- ${label}: FAILED (${seconds}s)`);
75
+ console.error(`${label}: FAILED (${seconds}s)\n${tail}`);
76
+ }
77
+ }
78
+ }
79
+ console.log(`\n${reportLines.join('\n')}`);
80
+ if (failures.length > 0) {
81
+ const runUrl = process.env.GITHUB_RUN_ID
82
+ ? `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`
83
+ : '(local run)';
84
+ const report = [
85
+ '# Weekly suite health sweep failed',
86
+ '',
87
+ `Checked: ${new Date().toISOString()}`,
88
+ `Workflow run: ${runUrl}`,
89
+ '',
90
+ ...reportLines,
91
+ '',
92
+ ...failures,
93
+ '',
94
+ ].join('\n');
95
+ writeFileSync('suite-health-report.md', report);
96
+ process.exitCode = 1;
97
+ }
98
+ }
99
+
100
+ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
101
+ runSweep();
102
+ }
@@ -1,4 +1,4 @@
1
- // Mirror of vendor/ink/build/ink.js shouldClearTerminalForFrame, with the
1
+ // Mirror of patched Ink's shouldClearTerminalForFrame, with the
2
2
  // Windows branch parameterized so the harness can probe both platforms without
3
3
  // relying on process.platform. Kept byte-faithful to the source predicate so
4
4
  // the harness reflects real clear decisions.
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * scripts/tui-frame-harness.mjs — renderer-level frame-grid evidence harness.
4
4
  *
5
- * Drives vendor/ink log-update createIncremental(fakeStream) through the SAME
5
+ * Drives patched Ink log-update createIncremental(fakeStream) through the SAME
6
6
  * wrapper logic ink.js renderInteractiveFrame() applies (fullscreen detect +
7
7
  * trailing-newline normalization + shouldClearTerminalForFrame), replays the
8
8
  * emitted ANSI into a minimal VT grid interpreter, and asserts the absolute row
@@ -13,12 +13,17 @@
13
13
  *
14
14
  * Run: node scripts/tui-frame-harness.mjs
15
15
  */
16
+ import { dirname, join } from 'node:path';
17
+ import { fileURLToPath, pathToFileURL } from 'node:url';
18
+
16
19
  // [harness] log-update reads process.platform/WT_SESSION AT IMPORT to pick its
17
20
  // Windows-safe absolute-cursor branch. Force WT_SESSION on BEFORE importing it
18
21
  // so POSIX/CI runs exercise the same branch WT users hit. Must precede the
19
22
  // dynamic import below.
20
23
  process.env.WT_SESSION = process.env.WT_SESSION || '1';
21
- const { default: logUpdate } = await import('../vendor/ink/build/log-update.js');
24
+ const inkBuildDir = dirname(fileURLToPath(import.meta.resolve('ink')));
25
+ const logUpdateUrl = pathToFileURL(join(inkBuildDir, 'log-update.js')).href;
26
+ const { default: logUpdate } = await import(logUpdateUrl);
22
27
  const { shouldClearTerminalForFrameProbe } = await import('./tui-frame-harness-shim.mjs');
23
28
  const { default: ansiEscapes } = await import('ansi-escapes');
24
29
 
@@ -8,16 +8,6 @@ const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
8
8
  const entry = join(ROOT, 'scripts', 'tui-transcript-jitter-harness-entry.jsx');
9
9
  const outfile = join(ROOT, 'scripts', '.tui-transcript-jitter-harness.tmp.mjs');
10
10
 
11
- const inkAlias = {
12
- name: 'mixdog-ink-alias',
13
- setup(ctx) {
14
- ctx.onResolve({ filter: /^ink$/ }, () => ({
15
- path: '../vendor/ink/build/index.js',
16
- external: true,
17
- }));
18
- },
19
- };
20
-
21
11
  try {
22
12
  await build({
23
13
  entryPoints: [entry],
@@ -28,7 +18,6 @@ try {
28
18
  target: 'node22',
29
19
  jsx: 'automatic',
30
20
  packages: 'external',
31
- plugins: [inkAlias],
32
21
  banner: {
33
22
  js: "import { createRequire as __mixdogCreateRequire } from 'node:module';\nconst require = __mixdogCreateRequire(import.meta.url);",
34
23
  },
@@ -18,7 +18,7 @@ description: Use this skill only to inspect or modify a Mixdog user's persisted
18
18
  - 프로젝트 config: `<cwd>/.mixdog/hooks.json`
19
19
  - TUI 명령 목록: `src/tui/app/slash-commands.mjs`
20
20
  - TUI 설정 허브: `/setting` (별칭 `/settings`, `/config`) → `src/tui/app/settings-picker.mjs`
21
- - Desktop 설정: `Ctrl+,` → General / Context / Output style / Providers / Git / Skills / MCP / Plugins / Hooks / Connection / System / Shortcuts / About
21
+ - Desktop 설정: `Ctrl+,` → General / Context / Output style / Providers / Git / Skills / MCP / Plugins / Connection / System / Shortcuts / About
22
22
  - Desktop rail: **Projects / Workflows / Schedules / Webhooks / Utilities**
23
23
 
24
24
  사용자 경로와 지원 여부는 **현재 Desktop 구현을 최신 기준**으로 판정한다. TUI는 Desktop에 없는 고급 경로를 보완할 때만 사용하며, 저장만 왕복되고 실제 소비되지 않는 key는 사용자 옵션으로 설명하지 않는다.
@@ -219,7 +219,7 @@ API 키·토큰·OAuth 자격은 config에 쓰지 않는다.
219
219
 
220
220
  1. **확인**: `/setting → Auto-compact`, Desktop **Settings → Context**, 디스크 `agent.compaction`.
221
221
  2. **변경**: Auto-compact toggle → `setCompactionSettings({ auto })`.
222
- 3. **고정 계약**: Compact type`Fast-track (fixed)`이며 UI 변경 불가. memory recap이 꺼져도 recall-fasttrack은 유지된다.
222
+ 3. **고정 계약**: 모든 session하나의 fresh-context Compact를 사용한다. Main은 Memory handoff, Agent는 session-local handoff를 사용하며 type 선택 UI는 없다.
223
223
 
224
224
  ### Memory / Recap / Core Memory
225
225
 
@@ -260,7 +260,7 @@ TUI·Desktop interval 편집 UI는 없다.
260
260
 
261
261
  ---
262
262
 
263
- ## 4. MCP·Skills·Plugins·Hooks
263
+ ## 4. MCP·Skills·Plugins·Hooks(내부)
264
264
 
265
265
  ### MCP 추가
266
266
 
@@ -319,14 +319,13 @@ UI 생성 액션은 없다.
319
319
 
320
320
  Plugin toggle은 해당 Plugin의 Skills와 MCP를 전역으로 함께 활성화/비활성화한다. 개별 MCP와 Skill은 각 화면에서도 관리할 수 있다.
321
321
 
322
- ### Hooks
322
+ ### Hooks (사용자 설정 UI 없음)
323
323
 
324
- 1. **확인**: `/hooks` 또는 Desktop **Settings Hooks**, `hooksStatus()`.
325
- 2. **UI 범위**: 기존 rule의 Enable/Disable만 지원한다. UI에서 add/delete/edit은 하지 않는다.
326
- 3. **추가·수정·삭제**: hook config 파일을 편집하거나 runtime `addHookRule()` / `deleteHookRule()`을 사용한다.
327
- 4. **검색 경로**: `MIXDOG_HOOKS_FILE` 프로젝트 `.mixdog/hooks.json`·`.mixdog/hooks/hooks.json` 글로벌 `<mixdogData>/hooks.json`·`hooks/hooks.json` plugin hooks.
328
- 5. **형식**: 표준 `{ "hooks": { "<Event>": [{ "matcher": "...", "hooks": [...] }] } }`; 레거시 before-tool 배열도 읽는다.
329
- 6. **검증**: mtime 기반 자동 reload 후 Hooks 목록과 대상 event 발동을 확인한다.
324
+ 1. **범위**: hook은 plugin·내부 연동 전용이다. Desktop 설정 화면과 `/hooks` 슬래시 명령은 제공하지 않으므로 사용자 옵션으로 안내하지 않는다.
325
+ 2. **구성**: hook config 파일을 직접 편집하거나 runtime `addHookRule()` / `setHookRuleEnabled()` / `deleteHookRule()`을 사용한다.
326
+ 3. **검색 경로**: `MIXDOG_HOOKS_FILE` 프로젝트 `.mixdog/hooks.json`·`.mixdog/hooks/hooks.json` → 글로벌 `<mixdogData>/hooks.json`·`hooks/hooks.json` → plugin hooks.
327
+ 4. **형식**: 표준 `{ "hooks": { "<Event>": [{ "matcher": "...", "hooks": [...] }] } }`; 레거시 before-tool 배열도 읽는다.
328
+ 5. **검증**: mtime 기반 자동 reload `/doctor`의 hooks 행과 대상 event 발동을 확인한다.
330
329
 
331
330
  ---
332
331
 
@@ -415,7 +414,7 @@ Desktop과 현재 runtime에서 소비되지 않는 아래 key는 사용자 옵
415
414
  | `channels.webhook.ngrokDomain`, `channels.webhook.respectQuiet` | 제거; endpoint URL은 Desktop Webhooks가 발급 |
416
415
  | `agent.outputStyle` | 제거 (이관 없음; 루트 `outputStyle`만 유효) |
417
416
 
418
- 다음 항목은 레거시처럼 보여도 현행이므로 유지한다: 루트 `outputStyle`, `agent.shell`, `agent.modules`, compaction의 `type/compactType`과 recall tuning fields.
417
+ 다음 항목은 레거시처럼 보여도 현행이므로 유지한다: 루트 `outputStyle`, `agent.shell`, `agent.modules`, compaction의 `auto`, `summaryModel`, `timeoutMs`, `memoryTimeoutMs`, buffer/target fields.
419
418
 
420
419
  ---
421
420
 
@@ -23,22 +23,22 @@ import { resolveAgentSessionPermission } from '../internal-agents.mjs';
23
23
  import { loadConfig } from '../config.mjs';
24
24
  import { AGENT_OWNER } from '../agent-owner.mjs';
25
25
 
26
- import {
27
- COMPACT_TYPE_SEMANTIC,
28
- normalizeCompactType,
29
- } from '../session/compact.mjs';
30
-
31
26
  function normalizeAgentCompactionConfig(value = {}) {
32
27
  const raw = value && typeof value === 'object' ? value : {};
33
- const compactType = normalizeCompactType(
34
- raw.compactType ?? raw.compact_type ?? raw.type,
35
- COMPACT_TYPE_SEMANTIC,
36
- );
28
+ const next = { ...raw };
29
+ if (!next.summaryModel && raw.semanticModel) next.summaryModel = raw.semanticModel;
30
+ if (!next.memoryTimeoutMs && raw.recallMemoryTimeoutMs) next.memoryTimeoutMs = raw.recallMemoryTimeoutMs;
31
+ for (const key of [
32
+ 'type', 'compactType', 'compact_type', 'semantic', 'semanticModel', 'prune', 'tailTurns',
33
+ 'recallMemoryTimeoutMs', 'recallIngestLimit', 'recallChunkLimit', 'recallLimit',
34
+ 'recallCycle1BatchSize', 'recallRowsPerSession', 'recallWindowSize',
35
+ 'recallConcurrency', 'recallCycle1DeadlineMs',
36
+ ]) {
37
+ delete next[key];
38
+ }
37
39
  return {
38
- ...raw,
40
+ ...next,
39
41
  auto: raw.auto !== false && raw.enabled !== false,
40
- type: compactType,
41
- compactType,
42
42
  };
43
43
  }
44
44
 
@@ -67,8 +67,6 @@ function traceAgentCompact({
67
67
  iteration,
68
68
  stage,
69
69
  trigger,
70
- compact_type,
71
- prune_count,
72
70
  compact_changed,
73
71
  input_prefix_hash,
74
72
  before_count,
@@ -97,8 +95,6 @@ function traceAgentCompact({
97
95
  kind: 'compact_meta',
98
96
  stage: stage || null,
99
97
  trigger: trigger || null,
100
- compact_type: compact_type || null,
101
- prune_count: prune_count ?? 0,
102
98
  compact_changed: !!compact_changed,
103
99
  input_prefix_hash: input_prefix_hash || null,
104
100
  before_count: before_count ?? null,
@@ -290,14 +290,6 @@ function nonEmptyConfigObject(value) {
290
290
  return Object.keys(value).length > 0 ? value : undefined;
291
291
  }
292
292
 
293
- function normalizeStoredCompactionType(value) {
294
- const raw = String(value ?? '').trim().toLowerCase().replace(/_/g, '-');
295
- if (['1', 'type1', 'type-1', 'semantic', 'summary', 'default'].includes(raw)) return 'semantic';
296
- if (['2', 'type2', 'type-2', 'recall', 'recall-fast', 'recall-fasttrack',
297
- 'recall-fast-track', 'fasttrack', 'fast-track'].includes(raw)) return 'recall-fasttrack';
298
- return 'recall-fasttrack';
299
- }
300
-
301
293
  function canonicalizeAutoClearStorage(value) {
302
294
  const raw = configObject(value);
303
295
  const next = { ...raw };
@@ -331,15 +323,18 @@ function canonicalizeAutoClearStorage(value) {
331
323
  function canonicalizeCompactionStorage(value) {
332
324
  const raw = configObject(value);
333
325
  const next = { ...raw };
334
- const hasType = ['type', 'compactType', 'compact_type']
335
- .some((key) => Object.prototype.hasOwnProperty.call(raw, key));
336
- if (hasType) next.type = normalizeStoredCompactionType(raw.type ?? raw.compactType ?? raw.compact_type);
326
+ if (!next.summaryModel && raw.semanticModel) next.summaryModel = raw.semanticModel;
327
+ if (!next.memoryTimeoutMs && raw.recallMemoryTimeoutMs) next.memoryTimeoutMs = raw.recallMemoryTimeoutMs;
337
328
  if (Object.prototype.hasOwnProperty.call(raw, 'auto')
338
329
  || Object.prototype.hasOwnProperty.call(raw, 'enabled')) {
339
330
  next.auto = raw.auto !== false && raw.enabled !== false;
340
331
  }
341
- delete next.compactType;
342
- delete next.compact_type;
332
+ for (const key of [
333
+ 'type', 'compactType', 'compact_type', 'semantic', 'semanticModel', 'prune', 'tailTurns',
334
+ 'recallMemoryTimeoutMs', 'recallIngestLimit', 'recallChunkLimit', 'recallLimit',
335
+ 'recallCycle1BatchSize', 'recallRowsPerSession', 'recallWindowSize',
336
+ 'recallConcurrency', 'recallCycle1DeadlineMs',
337
+ ]) delete next[key];
343
338
  delete next.enabled;
344
339
  return nonEmptyConfigObject(next);
345
340
  }