akm-cli 0.10.261013-beta → 0.10.261014-beta

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 (477) hide show
  1. package/CHANGELOG.md +494 -3
  2. package/README.md +15 -0
  3. package/SECURITY.md +9 -8
  4. package/STABILITY.md +45 -49
  5. package/dist/assets/hints/cli-hints-full.md +15 -12
  6. package/dist/assets/opencode/akm-plugin.js +177 -0
  7. package/dist/assets/stash-skeleton/README.md +1 -1
  8. package/dist/assets/tasks/core/improve.yml +1 -1
  9. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +1 -1
  10. package/dist/assets/ui/config.js +27 -10
  11. package/dist/assets/workflows/workflow-template.md +2 -2
  12. package/dist/cli/clack.js +3 -1
  13. package/dist/cli/selection.js +33 -0
  14. package/dist/cli/shared.js +14 -1
  15. package/dist/cli/unknown-flags.js +6 -37
  16. package/dist/cli.js +69 -48
  17. package/dist/commands/agent/agent-dispatch.js +17 -25
  18. package/dist/commands/agent/contribute-cli.js +9 -8
  19. package/dist/commands/command/command-cli.js +4 -8
  20. package/dist/commands/command/command-execution.js +25 -39
  21. package/dist/commands/completions.js +1 -1
  22. package/dist/commands/config-cli.js +14 -5
  23. package/dist/commands/env/child-env.js +12 -14
  24. package/dist/commands/env/env-cli.js +2 -2
  25. package/dist/commands/env/secret-cli.js +2 -2
  26. package/dist/commands/health/checks.js +10 -849
  27. package/dist/commands/health/connections-and-harnesses-check.js +109 -0
  28. package/dist/commands/health/egress.js +3 -3
  29. package/dist/commands/health/html-report.js +9 -10
  30. package/dist/commands/health/plugin-staleness.js +18 -11
  31. package/dist/commands/health/report-view-model.js +16 -12
  32. package/dist/commands/health/semantic-search-check.js +85 -0
  33. package/dist/commands/health/type-directory-check.js +0 -3
  34. package/dist/commands/health.js +30 -42
  35. package/dist/commands/improve/consolidate/pair-pass.js +10 -25
  36. package/dist/commands/improve/consolidate.js +10 -15
  37. package/dist/commands/improve/distill.js +5 -15
  38. package/dist/commands/improve/eligibility.js +1 -1
  39. package/dist/commands/improve/execution.js +37 -40
  40. package/dist/commands/improve/extract-cli.js +6 -11
  41. package/dist/commands/improve/extract-prompt.js +2 -2
  42. package/dist/commands/improve/extract.js +67 -97
  43. package/dist/commands/improve/improve-cli.js +22 -128
  44. package/dist/commands/improve/improve-report.js +1 -1
  45. package/dist/commands/improve/improve-strategies.js +25 -108
  46. package/dist/commands/improve/improve.js +10 -14
  47. package/dist/commands/improve/loop-stages.js +3 -0
  48. package/dist/commands/improve/memory/memory-improve.js +1 -1
  49. package/dist/commands/improve/preparation.js +8 -13
  50. package/dist/commands/improve/reflect.js +203 -332
  51. package/dist/commands/improve/retrieval-scope.js +1 -1
  52. package/dist/commands/improve/session-asset.js +3 -2
  53. package/dist/commands/improve/stage.js +87 -115
  54. package/dist/commands/lint/base-linter.js +3 -3
  55. package/dist/commands/lint/index.js +2 -2
  56. package/dist/commands/models-cli.js +103 -63
  57. package/dist/commands/proposal/drain.js +26 -39
  58. package/dist/commands/proposal/proposal-cli.js +14 -18
  59. package/dist/commands/proposal/propose-cli.js +4 -2
  60. package/dist/commands/proposal/propose.js +37 -64
  61. package/dist/commands/proposal/repository.js +17 -17
  62. package/dist/commands/proposal/validators/proposal-validators.js +2 -2
  63. package/dist/commands/read/curate.js +10 -6
  64. package/dist/commands/read/registry-search.js +2 -48
  65. package/dist/commands/read/search-cli.js +1 -8
  66. package/dist/commands/read/search.js +5 -6
  67. package/dist/commands/read/show.js +2 -4
  68. package/dist/commands/remember.js +25 -40
  69. package/dist/commands/sources/bundle-config-ops.js +2 -2
  70. package/dist/commands/sources/info.js +12 -1
  71. package/dist/commands/sources/init.js +1 -1
  72. package/dist/commands/sources/installed-stashes.js +2 -2
  73. package/dist/commands/sources/migration-help.js +1 -1
  74. package/dist/commands/sources/plugin-upgrade.js +8 -15
  75. package/dist/commands/sources/schema-repair.js +4 -8
  76. package/dist/commands/sources/source-add.js +2 -2
  77. package/dist/commands/sources/source-manage.js +4 -4
  78. package/dist/commands/targets.js +175 -0
  79. package/dist/commands/tasks/explain.js +103 -68
  80. package/dist/commands/tasks/tasks-cli.js +9 -11
  81. package/dist/commands/tasks/tasks.js +37 -41
  82. package/dist/commands/ui/api.js +11 -3
  83. package/dist/commands/ui/redact.js +1 -27
  84. package/dist/commands/ui/workspace-actions.js +1 -1
  85. package/dist/commands/workflow/plan.js +1 -1
  86. package/dist/commands/workflow-cli.js +3 -4
  87. package/dist/core/adapter/adapters/agent-skills-adapter.js +10 -11
  88. package/dist/core/adapter/adapters/akm-adapter.js +33 -38
  89. package/dist/core/adapter/adapters/akm-lint.js +7 -8
  90. package/dist/core/adapter/adapters/akm-task-adapter.js +3 -3
  91. package/dist/core/adapter/adapters/akm-workflow-adapter.js +5 -5
  92. package/dist/core/adapter/adapters/claude-adapter.js +1 -1
  93. package/dist/core/adapter/adapters/dotenv-adapter.js +3 -3
  94. package/dist/core/adapter/adapters/generic-files-adapter.js +5 -5
  95. package/dist/core/adapter/adapters/index.js +3 -4
  96. package/dist/core/adapter/adapters/llm-wiki-adapter.js +12 -14
  97. package/dist/core/adapter/adapters/okf-adapter.js +8 -10
  98. package/dist/core/adapter/adapters/opencode-adapter.js +1 -1
  99. package/dist/core/adapter/adapters/shared.js +3 -3
  100. package/dist/core/adapter/adapters/tool-dir-shared.js +7 -25
  101. package/dist/core/adapter/adapters/website-snapshot-adapter.js +3 -3
  102. package/dist/core/adapter/detect-adapter.js +1 -1
  103. package/dist/core/adapter/execution-source.js +13 -35
  104. package/dist/core/adapter/registry.js +1 -1
  105. package/dist/core/adapter/validate-context.js +2 -4
  106. package/dist/core/asset/asset-placement.js +1 -1
  107. package/dist/core/asset/asset-ref.js +3 -3
  108. package/dist/core/closest-match.js +37 -0
  109. package/dist/core/common.js +33 -5
  110. package/dist/core/config/config-io.js +26 -18
  111. package/dist/core/config/config-schema.js +19 -106
  112. package/dist/core/config/config-sources.js +3 -3
  113. package/dist/core/config/config-types.js +4 -4
  114. package/dist/core/config/config-walker.js +50 -77
  115. package/dist/core/config/config.js +385 -93
  116. package/dist/core/config/convert-engine-references.js +114 -0
  117. package/dist/core/config/convert-engines-shared.js +40 -0
  118. package/dist/core/config/convert-engines.js +300 -0
  119. package/dist/core/config/convert-models-overlay.js +137 -0
  120. package/dist/core/config/credentials.js +304 -0
  121. package/dist/core/config/engine-semantics.js +3 -3
  122. package/dist/core/config/migrate-keys.js +222 -0
  123. package/dist/core/config/model-aliases.js +37 -0
  124. package/dist/core/config/models-file.js +34 -0
  125. package/dist/core/config/retired-engines.js +53 -0
  126. package/dist/core/config/schema/connections.js +41 -0
  127. package/dist/core/config/schema/embedding.js +2 -2
  128. package/dist/core/config/schema/harnesses.js +41 -0
  129. package/dist/core/config/schema/improve-processes.js +9 -28
  130. package/dist/core/config/schema/improve.js +36 -1
  131. package/dist/core/config/schema/index-config.js +18 -20
  132. package/dist/core/config/schema/primitives.js +41 -22
  133. package/dist/core/config/schema/search.js +6 -11
  134. package/dist/core/config/schema/sources-bundles.js +7 -7
  135. package/dist/core/config/schema/workflow.js +2 -6
  136. package/dist/core/config/unusable-entries.js +66 -0
  137. package/dist/core/content-safety.js +3 -6
  138. package/dist/core/endpoint-url.js +47 -0
  139. package/dist/core/errors.js +9 -15
  140. package/dist/core/extra-params.js +3 -3
  141. package/dist/core/improve-result.js +8 -9
  142. package/dist/core/json-schema.js +1 -1
  143. package/dist/core/lesson-lint.js +1 -1
  144. package/dist/core/llm-inference.js +80 -0
  145. package/dist/core/parse.js +2 -2
  146. package/dist/core/paths.js +32 -4
  147. package/dist/core/recognition-util.js +8 -10
  148. package/dist/core/redaction.js +78 -52
  149. package/dist/core/state/migrations.js +17 -22
  150. package/dist/core/structured.js +2 -68
  151. package/dist/core/subprocess.js +63 -22
  152. package/dist/core/type-presentation.js +10 -14
  153. package/dist/execution/input-contract.js +3 -6
  154. package/dist/execution/notices.js +49 -0
  155. package/dist/execution/resolved-request.js +24 -40
  156. package/dist/execution/source.js +21 -45
  157. package/dist/execution/target-ref.js +2 -2
  158. package/dist/indexer/bundle-identity-guard.js +6 -5
  159. package/dist/indexer/ensure-index.js +1 -1
  160. package/dist/indexer/index-writer-lock.js +1 -1
  161. package/dist/indexer/indexer.js +19 -6
  162. package/dist/indexer/installations.js +11 -14
  163. package/dist/indexer/materialize-embeddings.js +20 -16
  164. package/dist/indexer/passes/memory-inference.js +21 -50
  165. package/dist/indexer/passes/metadata.js +5 -5
  166. package/dist/indexer/scan/doc-to-entry.js +1 -1
  167. package/dist/indexer/scan/drain-dir.js +6 -8
  168. package/dist/indexer/search/db-search.js +9 -7
  169. package/dist/indexer/search/search-source.js +40 -22
  170. package/dist/indexer/usage/usage-events.js +2 -3
  171. package/dist/indexer/walk/index-context.js +2 -1
  172. package/dist/indexer/walk/matchers.js +3 -11
  173. package/dist/indexer/walk/walker.js +14 -4
  174. package/dist/integrations/agent/akm-read-tools.js +81 -0
  175. package/dist/integrations/agent/config.js +1 -1
  176. package/dist/integrations/agent/detect.js +32 -36
  177. package/dist/integrations/agent/execution.js +130 -428
  178. package/dist/integrations/agent/index.js +1 -1
  179. package/dist/integrations/agent/profiles.js +24 -28
  180. package/dist/integrations/agent/prompts.js +17 -30
  181. package/dist/integrations/agent/request-lowering.js +67 -101
  182. package/dist/integrations/agent/resolution.js +332 -0
  183. package/dist/integrations/agent/runner-dispatch.js +154 -178
  184. package/dist/integrations/agent/runner.js +20 -72
  185. package/dist/integrations/agent/runtime-port.js +4 -0
  186. package/dist/integrations/agent/runtime.js +10 -0
  187. package/dist/integrations/agent/spawn.js +65 -190
  188. package/dist/integrations/harnesses/aider/index.js +19 -39
  189. package/dist/integrations/harnesses/amazonq/index.js +17 -32
  190. package/dist/integrations/harnesses/claude/index.js +59 -28
  191. package/dist/integrations/harnesses/claude/session-log.js +7 -5
  192. package/dist/integrations/harnesses/codex/index.js +19 -31
  193. package/dist/integrations/harnesses/copilot/index.js +17 -35
  194. package/dist/integrations/harnesses/gemini/index.js +18 -34
  195. package/dist/integrations/harnesses/harness.js +36 -0
  196. package/dist/integrations/harnesses/index.js +20 -51
  197. package/dist/integrations/harnesses/opencode/agent-builder.js +132 -100
  198. package/dist/integrations/harnesses/opencode/index.js +11 -33
  199. package/dist/integrations/harnesses/opencode/roots.js +50 -0
  200. package/dist/integrations/harnesses/opencode/runtime/binary.js +206 -0
  201. package/dist/integrations/harnesses/opencode/runtime/command.js +152 -0
  202. package/dist/integrations/harnesses/opencode/runtime/index.js +177 -0
  203. package/dist/integrations/harnesses/opencode/runtime/tar.js +107 -0
  204. package/dist/integrations/harnesses/opencode/session-log-v1.js +15 -7
  205. package/dist/integrations/harnesses/opencode/session-log-v2.js +72 -48
  206. package/dist/integrations/harnesses/opencode/session-log.js +58 -137
  207. package/dist/integrations/harnesses/opencode/version.js +34 -53
  208. package/dist/integrations/harnesses/openhands/index.js +13 -37
  209. package/dist/integrations/harnesses/pi/index.js +21 -32
  210. package/dist/integrations/lockfile.js +1 -1
  211. package/dist/integrations/session-logs/index.js +11 -31
  212. package/dist/llm/client.js +93 -111
  213. package/dist/llm/embedder.js +19 -34
  214. package/dist/llm/embedders/connection.js +31 -0
  215. package/dist/llm/embedders/local-model-files.js +56 -0
  216. package/dist/llm/embedders/local.js +146 -115
  217. package/dist/llm/embedders/remote.js +26 -24
  218. package/dist/llm/embedders/types.js +1 -1
  219. package/dist/llm/index-passes.js +33 -39
  220. package/dist/llm/memory-infer.js +67 -77
  221. package/dist/llm/model-list.js +35 -0
  222. package/dist/llm/rerank-client.js +8 -14
  223. package/dist/llm/structured-call.js +45 -99
  224. package/dist/llm/structured.js +60 -0
  225. package/dist/output/renderers.js +2 -7
  226. package/dist/output/shapes/helpers.js +18 -42
  227. package/dist/output/shapes/passthrough.js +1 -0
  228. package/dist/output/shapes.js +1 -7
  229. package/dist/output/text/command-format.js +29 -37
  230. package/dist/output/text/health-format.js +8 -2
  231. package/dist/output/text/helpers.js +1 -1
  232. package/dist/output/text/migrate.js +12 -0
  233. package/dist/output/text/models.js +3 -2
  234. package/dist/output/text/registry-commands.js +1 -2
  235. package/dist/output/text/show-format.js +0 -2
  236. package/dist/output/text/targets-table.js +70 -0
  237. package/dist/output/text/workflow-format.js +7 -8
  238. package/dist/output/text.js +1 -1
  239. package/dist/registry/providers/skills-sh.js +1 -28
  240. package/dist/registry/providers/static-index.js +1 -71
  241. package/dist/runtime.js +6 -2
  242. package/dist/scripts/akm-migrate-node.js +5280 -4263
  243. package/dist/scripts/akm-migrate.js +5280 -4263
  244. package/dist/setup/detect.js +28 -273
  245. package/dist/setup/endpoint.js +36 -0
  246. package/dist/setup/semantic-assets.js +13 -19
  247. package/dist/setup/setup-flags.js +77 -0
  248. package/dist/setup/setup-plan.js +144 -0
  249. package/dist/setup/setup.js +134 -358
  250. package/dist/setup/steps/connection-shared.js +49 -101
  251. package/dist/setup/steps/connection.js +121 -524
  252. package/dist/setup/steps/embeddings.js +151 -0
  253. package/dist/setup/steps/harnesses.js +118 -0
  254. package/dist/setup/steps/platforms.js +2 -81
  255. package/dist/setup/steps.js +10 -0
  256. package/dist/setup/summary.js +67 -0
  257. package/dist/sources/freshness.js +16 -21
  258. package/dist/sources/providers/git-provider.js +2 -9
  259. package/dist/sources/providers/provider-utils.js +1 -5
  260. package/dist/sources/snapshot-fetchers/robots.js +11 -12
  261. package/dist/sources/snapshot-fetchers/website-ingest.js +8 -15
  262. package/dist/standalone/onnxruntime-library.js +52 -0
  263. package/dist/storage/repositories/improve-ledger-repository.js +1 -1
  264. package/dist/storage/repositories/improve-runs-repository.js +0 -13
  265. package/dist/storage/repositories/index-entries-repository.js +2 -2
  266. package/dist/storage/repositories/workflow-runs-repository.js +8 -15
  267. package/dist/storage/sqlite-read-snapshot.js +33 -29
  268. package/dist/tasks/log-redaction.js +7 -119
  269. package/dist/tasks/prepare/prepare-support.js +5 -5
  270. package/dist/tasks/prepare/prepare.js +5 -5
  271. package/dist/tasks/prepare/script-capture.js +3 -5
  272. package/dist/tasks/run/attempt-lifecycle.js +17 -35
  273. package/dist/tasks/run/load-task.js +8 -13
  274. package/dist/tasks/run/run-command-task.js +15 -10
  275. package/dist/tasks/run/run-native-task.js +8 -13
  276. package/dist/tasks/run/run-task.js +5 -8
  277. package/dist/tasks/run/run-workflow-task.js +12 -19
  278. package/dist/tasks/run/task-history.js +9 -17
  279. package/dist/tasks/run/task-log.js +1 -5
  280. package/dist/tasks/scheduler-invocation.js +13 -18
  281. package/dist/tasks/source/bounded-document.js +31 -76
  282. package/dist/tasks/source/project-v4.js +5 -3
  283. package/dist/tasks/source/task-input-diagnostics.js +3 -4
  284. package/dist/tasks/source/task-source-v4.js +47 -68
  285. package/dist/tasks/source-v3.js +2 -5
  286. package/dist/tasks/task-run-reserved-flags.js +1 -2
  287. package/dist/workflows/authoring/authoring.js +2 -7
  288. package/dist/workflows/concurrency-policy.js +4 -4
  289. package/dist/workflows/exec/child-workflow.js +0 -2
  290. package/dist/workflows/exec/dispatch-redaction.js +14 -83
  291. package/dist/workflows/exec/environment.js +2 -3
  292. package/dist/workflows/exec/exec-unit.js +10 -59
  293. package/dist/workflows/exec/frozen-judge.js +10 -26
  294. package/dist/workflows/exec/native-executor.js +56 -45
  295. package/dist/workflows/exec/run-workflow.js +7 -24
  296. package/dist/workflows/exec/step-work.js +9 -14
  297. package/dist/workflows/exec/unit-dispatch.js +6 -13
  298. package/dist/workflows/freeze/freeze.js +14 -32
  299. package/dist/workflows/freeze/step-values.js +5 -11
  300. package/dist/workflows/freeze/targets/command.js +3 -6
  301. package/dist/workflows/freeze/task-bindings.js +0 -1
  302. package/dist/workflows/parser.js +44 -34
  303. package/dist/workflows/plan.js +3 -1
  304. package/dist/workflows/renderer.js +6 -5
  305. package/dist/workflows/resource-limits.js +2 -2
  306. package/dist/workflows/runtime/run-plan.js +2 -1
  307. package/dist/workflows/runtime/runs.js +14 -9
  308. package/docs/README.md +10 -16
  309. package/docs/architecture/README.md +2 -37
  310. package/docs/architecture/adapters.md +2 -2
  311. package/docs/architecture/akm-core-principles.md +256 -118
  312. package/docs/architecture/architecture.md +282 -98
  313. package/docs/architecture/improvement.md +8 -2
  314. package/docs/architecture/internals/classification.md +1 -3
  315. package/docs/architecture/internals/fresh-host-rebuild-runbook.md +7 -6
  316. package/docs/architecture/internals/health-advisories.md +35 -74
  317. package/docs/architecture/internals/improve-workflow.md +27 -26
  318. package/docs/architecture/internals/indexing.md +3 -3
  319. package/docs/architecture/internals/storage-locations.md +45 -12
  320. package/docs/architecture/persisted-data-compat.md +9 -6
  321. package/docs/architecture/specs/okf-support.md +9 -11
  322. package/docs/architecture/specs/ref.md +7 -9
  323. package/docs/architecture/testing/testing-workflow.md +164 -42
  324. package/docs/architecture/workflow-engine.md +17 -14
  325. package/docs/guides/README.md +0 -1
  326. package/docs/guides/author-bundles.md +1 -3
  327. package/docs/guides/author-workflows.md +61 -73
  328. package/docs/guides/bundles.md +4 -5
  329. package/docs/guides/discover-and-load.md +1 -1
  330. package/docs/guides/getting-started.md +49 -3
  331. package/docs/guides/improve-the-library.md +10 -4
  332. package/docs/guides/recipes/headless-install.md +11 -16
  333. package/docs/guides/run-workflows.md +6 -9
  334. package/docs/guides/scheduling.md +2 -2
  335. package/docs/guides/use-with-any-agent.md +20 -22
  336. package/docs/integration/bundling-akm.md +19 -9
  337. package/docs/maintainers/README.md +0 -3
  338. package/docs/migration/README.md +10 -3
  339. package/docs/migration/release-notes/0.10.0.md +81 -16
  340. package/docs/migration/release-notes/0.6.0.md +1 -1
  341. package/docs/migration/release-notes/0.7.0.md +1 -1
  342. package/docs/migration/release-notes/0.9.0.md +1 -1
  343. package/docs/migration/release-notes/README.md +1 -1
  344. package/docs/migration/v0.9-to-v0.10.md +295 -59
  345. package/docs/migration/v0.9.1-to-v0.9.2.md +6 -5
  346. package/docs/posts/config-v2-lessons-16.md +1 -1
  347. package/docs/posts/llm-mode-reflect-13.md +1 -1
  348. package/docs/posts/release-0.6.0.md +11 -11
  349. package/docs/posts/release-0.8.0.md +4 -4
  350. package/docs/posts/workflows-vaults-09.md +1 -1
  351. package/docs/reference/README.md +1 -1
  352. package/docs/reference/asset-types.md +2 -2
  353. package/docs/reference/cli.md +356 -279
  354. package/docs/reference/configuration.md +569 -557
  355. package/docs/reference/data-and-telemetry.md +8 -5
  356. package/docs/reference/env-and-secrets.md +11 -5
  357. package/docs/reference/refs.md +3 -20
  358. package/docs/reference/registry.md +6 -27
  359. package/docs/reference/supported-formats.md +1 -1
  360. package/docs/reference/tasks.md +11 -8
  361. package/docs/reference/ui-api.md +11 -6
  362. package/docs/reference/workflow-schema.md +106 -134
  363. package/docs/reference/workflows.md +4 -6
  364. package/package.json +9 -11
  365. package/schemas/akm-config.json +1696 -2922
  366. package/schemas/akm-task.json +2 -0
  367. package/schemas/akm-workflow.json +36 -9
  368. package/ROADMAP.md +0 -112
  369. package/dist/assets/models.json +0 -35
  370. package/dist/commands/health/engine-usage.js +0 -45
  371. package/dist/core/config/schema/engines.js +0 -160
  372. package/dist/core/config/schema/execution.js +0 -23
  373. package/dist/core/spawn-env.js +0 -268
  374. package/dist/integrations/agent/builder-shared.js +0 -33
  375. package/dist/integrations/agent/builders.js +0 -43
  376. package/dist/integrations/agent/engine-fallback.js +0 -59
  377. package/dist/integrations/agent/engine-resolution.js +0 -335
  378. package/dist/integrations/agent/model-map.js +0 -475
  379. package/dist/integrations/harnesses/aider/agent-builder.js +0 -107
  380. package/dist/integrations/harnesses/aider/result-extractor.js +0 -53
  381. package/dist/integrations/harnesses/amazonq/agent-builder.js +0 -138
  382. package/dist/integrations/harnesses/amazonq/result-extractor.js +0 -48
  383. package/dist/integrations/harnesses/claude/agent-builder.js +0 -106
  384. package/dist/integrations/harnesses/claude/config-import.js +0 -67
  385. package/dist/integrations/harnesses/claude/result-extractor.js +0 -67
  386. package/dist/integrations/harnesses/codex/agent-builder.js +0 -150
  387. package/dist/integrations/harnesses/codex/result-extractor.js +0 -110
  388. package/dist/integrations/harnesses/copilot/agent-builder.js +0 -117
  389. package/dist/integrations/harnesses/copilot/result-extractor.js +0 -178
  390. package/dist/integrations/harnesses/gemini/agent-builder.js +0 -114
  391. package/dist/integrations/harnesses/gemini/result-extractor.js +0 -149
  392. package/dist/integrations/harnesses/opencode/config-import.js +0 -149
  393. package/dist/integrations/harnesses/opencode/model-config.js +0 -33
  394. package/dist/integrations/harnesses/opencode/model-work-agent.js +0 -115
  395. package/dist/integrations/harnesses/opencode/session-log-types.js +0 -12
  396. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -44
  397. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +0 -1052
  398. package/dist/integrations/harnesses/opencode-sdk/v1-adapter.js +0 -199
  399. package/dist/integrations/harnesses/opencode-sdk/v2-adapter.js +0 -254
  400. package/dist/integrations/harnesses/opencode-sdk/wire.js +0 -66
  401. package/dist/integrations/harnesses/openhands/agent-builder.js +0 -120
  402. package/dist/integrations/harnesses/openhands/result-extractor.js +0 -135
  403. package/dist/integrations/harnesses/pi/agent-builder.js +0 -89
  404. package/dist/integrations/harnesses/pi/result-extractor.js +0 -168
  405. package/dist/integrations/harnesses/shared.js +0 -18
  406. package/dist/integrations/harnesses/types.js +0 -55
  407. package/dist/llm/feature-gate.js +0 -115
  408. package/dist/output/shapes/models-list.js +0 -16
  409. package/dist/output/shapes/registry-search.js +0 -10
  410. package/dist/setup/detected-engines.js +0 -136
  411. package/dist/setup/engine-config.js +0 -97
  412. package/dist/setup/harness-config-import.js +0 -47
  413. package/dist/setup/providers.js +0 -14
  414. package/dist/setup/steps/semantic.js +0 -39
  415. package/dist/workflows/exec/lowering-notices.js +0 -23
  416. package/docs/architecture/0.10-process-rules.md +0 -832
  417. package/docs/architecture/akm-architecture-decision-history.md +0 -2055
  418. package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +0 -544
  419. package/docs/architecture/decisions/0001-no-interpolation-attached-structured-context.md +0 -72
  420. package/docs/architecture/decisions/0002-unit-reuse-and-input-hash-scope.md +0 -142
  421. package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +0 -187
  422. package/docs/architecture/decisions/0004-task-input-contract-and-flag-coercion.md +0 -97
  423. package/docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md +0 -108
  424. package/docs/architecture/decisions/0006-task-source-version-routing.md +0 -124
  425. package/docs/architecture/decisions/0007-workflow-composition-bounds.md +0 -83
  426. package/docs/architecture/decisions/0008-task-binding-normalization.md +0 -88
  427. package/docs/architecture/decisions/0009-child-run-publication-column-parity.md +0 -80
  428. package/docs/architecture/decisions/0010-driver-protocol-cut.md +0 -36
  429. package/docs/architecture/decisions/0011-engine-run-loop-invariants.md +0 -125
  430. package/docs/architecture/decisions/README.md +0 -62
  431. package/docs/architecture/internals/functional-contract-patterns.md +0 -340
  432. package/docs/architecture/internals/registry-network-boundary.md +0 -57
  433. package/docs/architecture/internals/search.md +0 -248
  434. package/docs/architecture/reviews/env-secret-access.md +0 -319
  435. package/docs/architecture/runtime-boundary-design.md +0 -153
  436. package/docs/architecture/specs/0.9.0-close-out-plan.md +0 -361
  437. package/docs/architecture/specs/0.9.0-decisions.md +0 -532
  438. package/docs/architecture/specs/0.9.0-docs-code-drift-register.md +0 -745
  439. package/docs/architecture/specs/0.9.0-open-items-register.md +0 -135
  440. package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +0 -740
  441. package/docs/architecture/specs/0.9.0-release-surface-review.md +0 -636
  442. package/docs/architecture/specs/agent-command-engine-model-design.md +0 -513
  443. package/docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md +0 -501
  444. package/docs/architecture/specs/akm-0.9.0-ref-grammar-decision.md +0 -291
  445. package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +0 -2059
  446. package/docs/architecture/specs/di-seams-plan.md +0 -539
  447. package/docs/architecture/specs/driver-protocol-keep-or-cut.md +0 -275
  448. package/docs/architecture/specs/fact-asset-type.md +0 -142
  449. package/docs/architecture/specs/improve-collapse-churn-detector-design.md +0 -634
  450. package/docs/architecture/specs/reviews/task-workflow-unification/README.md +0 -72
  451. package/docs/architecture/specs/reviews/task-workflow-unification/findings-consolidated.md +0 -152
  452. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-alternatives.md +0 -352
  453. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-bunqueue.md +0 -300
  454. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md +0 -402
  455. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-1.md +0 -758
  456. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-2.md +0 -645
  457. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-3.md +0 -602
  458. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-adversarial.md +0 -27
  459. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-architecture.md +0 -27
  460. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-coverage.md +0 -74
  461. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-security.md +0 -15
  462. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-adversarial.md +0 -132
  463. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-verification.md +0 -147
  464. package/docs/architecture/specs/stash-conventions-code-spec.md +0 -275
  465. package/docs/architecture/specs/stash-organization-conventions.md +0 -377
  466. package/docs/architecture/specs/task-workflow-format-unification.md +0 -721
  467. package/docs/architecture/specs/workflow-engine-buy-vs-build.md +0 -231
  468. package/docs/architecture/specs/workflow-format-unification.md +0 -432
  469. package/docs/architecture/testing/manual-testing-checklist.md +0 -3379
  470. package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +0 -924
  471. package/docs/architecture/testing/task-workflow-manual-tests.md +0 -1702
  472. package/docs/guides/claude-code-vs-akm-workflows.md +0 -29
  473. package/docs/guides/knowledge-management.md +0 -18
  474. package/docs/maintainers/curate-workmap.md +0 -335
  475. package/docs/migration/v0.5-to-v0.6.md +0 -759
  476. package/docs/migration/v0.7-to-v0.8.md +0 -1378
  477. package/docs/plans/0.9.2-agent-command-workflow-plan.md +0 -423
@@ -38,8 +38,6 @@ import { parseEmbeddedJsonResponse } from "../../../core/parse.js";
38
38
  import { DERIVED_SUFFIX } from "../../../core/recognition-util.js";
39
39
  import { warnOnce } from "../../../core/warn.js";
40
40
  import { sameScope, scopeFromFrontmatter } from "../../../indexer/passes/metadata.js";
41
- import { runnerLlmConnection } from "../../../integrations/agent/runner.js";
42
- import { assertRunnerCredentials } from "../../../integrations/agent/runner-dispatch.js";
43
41
  import { runGit } from "../../../sources/providers/git-install.js";
44
42
  import { closeDatabase, openExistingDatabase, openReadonlyExistingDatabase, } from "../../../storage/repositories/index-connection.js";
45
43
  import { getAllEntries, getEntryById } from "../../../storage/repositories/index-entries-repository.js";
@@ -542,15 +540,12 @@ function checkSection(label, side) {
542
540
  */
543
541
  async function confirmNothingLost(ctx, retired, successor) {
544
542
  const outcome = await callStage({
545
- feature: "memory_consolidation",
546
543
  runner: ctx.llmRunner,
547
544
  system: consolidatePairCheckPrompt,
548
545
  prompt: `${checkSection("X (to delete)", retired)}\n${checkSection("Y (kept)", successor)}\n${termHints([`Tokens only in X: ${exclusiveTerms(retired, successor)}`])}${Date.parse(retired.createdIso) === Date.parse(successor.createdIso) ? `\n${consolidatePairSameAge}` : ""}`,
549
- gate: { config: ctx.config, enabled: true },
550
546
  request: {
551
547
  responseSchema: PAIR_CHECK_JSON_SCHEMA,
552
548
  enableThinking: false,
553
- ...(Object.hasOwn(ctx.llmRunner, "timeoutMs") ? { timeoutMs: ctx.llmRunner.timeoutMs } : {}),
554
549
  signal: ctx.opts.signal,
555
550
  ...(ctx.chat ? { chat: ctx.chat } : {}),
556
551
  },
@@ -592,15 +587,12 @@ async function judgeOne(ctx, candidate) {
592
587
  }
593
588
  const { older, newer } = orderByAge(initiatorSide, otherSide);
594
589
  const outcome = await callStage({
595
- feature: "memory_consolidation",
596
590
  runner: ctx.llmRunner,
597
591
  system: consolidatePairPrompt,
598
592
  prompt: buildPairUserPrompt(older, newer),
599
- gate: { config: ctx.config, enabled: true },
600
593
  request: {
601
594
  responseSchema: PAIR_JUDGE_JSON_SCHEMA,
602
595
  enableThinking: false,
603
- ...(Object.hasOwn(ctx.llmRunner, "timeoutMs") ? { timeoutMs: ctx.llmRunner.timeoutMs } : {}),
604
596
  signal: ctx.opts.signal,
605
597
  ...(ctx.chat ? { chat: ctx.chat } : {}),
606
598
  },
@@ -647,7 +639,7 @@ async function judgeOne(ctx, candidate) {
647
639
  // durable half).
648
640
  const retiredKey = stripBundle(retired.asset.ref);
649
641
  const successorKey = stripBundle(successor.asset.ref);
650
- // Must-fix 1 (third review round): a retire-worthy verdict the same-run
642
+ // A retire-worthy verdict the same-run
651
643
  // chain guard drops is not a settled "no action" — a LATER run, once the
652
644
  // conflicting retirement has been reviewed, may well mint it. Counted as
653
645
  // failed so its initiator gets no row (real data: night 1 alone judged 177
@@ -731,7 +723,7 @@ async function judgeOne(ctx, candidate) {
731
723
  }
732
724
  catch (error) {
733
725
  ctx.warnings.push(`Pair pass: could not mint a retire proposal for ${retired.asset.ref}: ${error instanceof Error ? error.message : String(error)}`);
734
- // Must-fix 1: a mint failure is transient (a lock, a disk error, a
726
+ // A mint failure is transient (a lock, a disk error, a
735
727
  // validation hiccup) — treated the same as a same-run drop, so no row is
736
728
  // written and the pair is retried next run instead of abandoned.
737
729
  return { failed: true };
@@ -748,8 +740,8 @@ const emptyLabelCounts = () => ({
748
740
  /**
749
741
  * The pair pass (alpha.9): initiators -> candidates -> one judge call per
750
742
  * pair -> retire proposals for the calibrated classes. Runs alongside the
751
- * promote pass, sharing its gate, its frozen LLM runner and its engine
752
- * concurrency. `bundleId` is the target bundle's id (`undefined` skips the
743
+ * promote pass, sharing its gate, its frozen LLM runner and its
744
+ * connection's concurrency. `bundleId` is the target bundle's id (`undefined` skips the
753
745
  * pass — nothing to scope candidates to).
754
746
  */
755
747
  export async function runConsolidatePairPass(opts, config, stashDir, bundleId, warnings,
@@ -811,7 +803,7 @@ seams = {}) {
811
803
  }
812
804
  const isPendingBlocked = (c) => pendingRetireRefs.has(stripBundle(c.initiator.ref)) || pendingRetireRefs.has(stripBundle(c.other.ref));
813
805
  const rejectedPairKeys = loadRejectedPairKeys(stashDir, opts.proposalsCtx);
814
- // Blocker 2: admit WHOLE initiators under MAX_PAIRS_PER_RUN, never
806
+ // Admit WHOLE initiators under MAX_PAIRS_PER_RUN, never
815
807
  // individual pairs — the old flat "top 300 candidates by cosine" cap let a
816
808
  // pending-blocked pair spend a budget slot doing nothing, and left
817
809
  // whichever initiators landed past slot 300 partially judged forever (no
@@ -869,21 +861,14 @@ seams = {}) {
869
861
  continuitySearch: seams.continuitySearch ?? createContinuitySearch(stashDir, config),
870
862
  };
871
863
  let failedJudgments = 0;
872
- // Should-fix 3: an initiator with any failed (or never-sent) judge call
864
+ // An initiator with any failed (or never-sent) judge call
873
865
  // gets no ledger row — a failure attempted nothing conclusive, so writing
874
866
  // one would mean the pair is never retried.
875
867
  const failedInitiators = new Set();
876
868
  if (judgeable.length > 0) {
877
- // The promote pass validates opts.llmRunner's credentials once, but only
878
- // when it has memories to dispatch — the pair pass can still have work
879
- // when that pool is empty, so it validates independently before its
880
- // first real dispatch. A test-injected chat seam bypasses the transport
881
- // entirely and needs no credential.
882
- if (!seams.chat)
883
- assertRunnerCredentials(llmRunner);
884
- const results = await concurrentMap(judgeable, (candidate) => judgeOne(ctx, candidate), runnerLlmConnection(llmRunner)?.concurrency ?? 1, { signal: opts.signal });
869
+ const results = await concurrentMap(judgeable, (candidate) => judgeOne(ctx, candidate), (llmRunner.kind === "connection" ? llmRunner.concurrency : undefined) ?? 1, { signal: opts.signal });
885
870
  results.forEach((r, idx) => {
886
- // Must-fix 3: `concurrentMap` leaves an entry `undefined` for a call an
871
+ // `concurrentMap` leaves an entry `undefined` for a call an
887
872
  // aborted run never sent at all — `r?.failed === true` reads that as
888
873
  // `undefined === true` (false), so an unsent call counted as a clean
889
874
  // "no action" verdict. Explicit `undefined` check closes that gap.
@@ -897,7 +882,7 @@ seams = {}) {
897
882
  // candidates were admitted (whole-initiator admission above makes this a
898
883
  // simple membership check: judgeable either has every one of an
899
884
  // initiator's candidates, or none of them) and none of them failed
900
- // (should-fix 3) — including an initiator with zero candidates, which
885
+ // — including an initiator with zero candidates, which
901
886
  // trivially satisfies both. One left out by the cap or a pending-proposal
902
887
  // collision gets no row at all, so the next run reconsiders it rather
903
888
  // than treating it as settled.
@@ -928,7 +913,7 @@ seams = {}) {
928
913
  initiators: initiators.length,
929
914
  initiatorsBacklog,
930
915
  pairsConsidered: candidates.length,
931
- // Must-fix 3: parsed verdicts only — judgeable.length counted pairs that
916
+ // Parsed verdicts only — judgeable.length counted pairs that
932
917
  // were admitted, not pairs a verdict actually came back for.
933
918
  pairsJudged: judgeable.length - failedJudgments,
934
919
  labelCounts: ctx.labelCounts,
@@ -33,12 +33,12 @@ import { parseEmbeddedJsonResponse } from "../../core/parse.js";
33
33
  import { openStateDatabase } from "../../core/state-db.js";
34
34
  import { warn, warnVerbose } from "../../core/warn.js";
35
35
  import { resolveWriteTarget } from "../../core/write-source.js";
36
+ import { noticeSet } from "../../execution/notices.js";
36
37
  import { deriveInstallations } from "../../indexer/installations.js";
37
38
  import { resolveSourceEntries } from "../../indexer/search/search-source.js";
38
39
  import { USAGE_EVENT_RETENTION_DAYS } from "../../indexer/usage/usage-events.js";
39
- import { runnerLlmConnection } from "../../integrations/agent/runner.js";
40
- import { assertRunnerCredentials } from "../../integrations/agent/runner-dispatch.js";
41
40
  import { cosineSimilarity, embedBatch, resolveEmbeddingModelId } from "../../llm/embedder.js";
41
+ import { effectiveEmbedding } from "../../llm/embedders/connection.js";
42
42
  import { getBodyEmbeddings, upsertBodyEmbeddings } from "../../storage/repositories/embeddings-repository.js";
43
43
  import { closeDatabase, openExistingDatabase, openReadonlyExistingDatabase, } from "../../storage/repositories/index-connection.js";
44
44
  import { getAllEntries } from "../../storage/repositories/index-entries-repository.js";
@@ -52,7 +52,7 @@ import { contentHash } from "./content-hash.js";
52
52
  import { resolveImproveStrategy, resolveProcessEnabled } from "./improve-strategies.js";
53
53
  import { isContentDrivenRow, isLedgerBlocked, ledgerKey, loadLedgerSnapshot, recordLedgerAttempt } from "./ledger.js";
54
54
  import { isInRetrievalScope, loadRetrievalScope } from "./retrieval-scope.js";
55
- import { callStage, mintProposal, noticeSet, stageRunner } from "./stage.js";
55
+ import { callStage, mintProposal, stageRunner } from "./stage.js";
56
56
  function parsePlan(raw) {
57
57
  const plan = parseEmbeddedJsonResponse(raw);
58
58
  return plan && Array.isArray(plan.operations) ? { ...plan, operations: plan.operations } : undefined;
@@ -122,9 +122,10 @@ export const CONSOLIDATE_PLAN_JSON_SCHEMA = {
122
122
  */
123
123
  async function clusterMemoriesBySimilarity(memories, config, stateDb, signal) {
124
124
  const telemetry = { embedMs: 0, cacheHits: 0, cacheMisses: 0 };
125
- if (memories.length < 3 || !config.embedding)
125
+ const embedding = effectiveEmbedding(config);
126
+ if (memories.length < 3 || !embedding)
126
127
  return { ordered: memories, embedTelemetry: telemetry };
127
- const modelId = resolveEmbeddingModelId(config.embedding);
128
+ const modelId = resolveEmbeddingModelId(embedding);
128
129
  const texts = memories.map((m) => [m.description, m.tags.join(" ")].filter(Boolean).join(". ") || m.name);
129
130
  const hashes = texts.map((t) => contentHash(t));
130
131
  let cached = new Map();
@@ -144,7 +145,7 @@ async function clusterMemoriesBySimilarity(memories, config, stateDb, signal) {
144
145
  const embedStart = Date.now();
145
146
  let missVecs;
146
147
  try {
147
- missVecs = await embedBatch(missIndices.map((i) => texts[i]), config.embedding, signal);
148
+ missVecs = await embedBatch(missIndices.map((i) => texts[i]), embedding, signal);
148
149
  }
149
150
  catch {
150
151
  return { ordered: memories, embedTelemetry: telemetry };
@@ -335,7 +336,7 @@ export async function akmConsolidate(opts = {}) {
335
336
  const stashDir = writeTarget.source.path;
336
337
  const notices = noticeSet(opts.onNotices);
337
338
  const enabled = resolveProcessEnabled("consolidate", profile);
338
- const runner = enabled ? stageRunner(opts, config, profile, "consolidate", notices.add) : undefined;
339
+ const runner = enabled ? stageRunner(opts, config, "consolidate", notices.add) : undefined;
339
340
  opts = {
340
341
  ...opts,
341
342
  target: writeTarget.source.name,
@@ -520,7 +521,7 @@ const ABORT_FAILURE_RATE = 0.5;
520
521
  * into exactly one accounting bucket.
521
522
  */
522
523
  async function judgeConsolidationChunks(args) {
523
- const { chunks, opts, config, warnings, acc } = args;
524
+ const { chunks, opts, warnings, acc } = args;
524
525
  const llmRunner = opts.llmRunner ?? undefined;
525
526
  const memRef = (m) => conceptIdFromTypeName("memory", m.name);
526
527
  const failChunk = (message, chunk) => {
@@ -563,15 +564,12 @@ async function judgeConsolidationChunks(args) {
563
564
  }
564
565
  // The transport already retries once; a failed chunk is not retried here.
565
566
  const outcome = await callStage({
566
- feature: "memory_consolidation",
567
567
  runner: llmRunner,
568
568
  system: consolidateSystemPrompt,
569
569
  prompt: buildChunkPrompt(args.sourceName, chunk, chunkIdx, chunks.length, args.bodyTruncation, args.pendingProposalBodyHashes),
570
- gate: { config, enabled: true },
571
570
  request: {
572
571
  responseSchema: CONSOLIDATE_PLAN_JSON_SCHEMA,
573
572
  enableThinking: false,
574
- ...(Object.hasOwn(llmRunner, "timeoutMs") ? { timeoutMs: llmRunner.timeoutMs } : {}),
575
573
  signal: opts.signal,
576
574
  },
577
575
  parse: parsePlan,
@@ -626,7 +624,7 @@ async function planConsolidation(opts, config, stashDir, memories, warnings, sta
626
624
  const llmRunner = opts.llmRunner ?? undefined;
627
625
  // 500 body chars per memory keep the judgement useful; chunk size varies instead.
628
626
  const bodyTruncation = 500;
629
- const chunkSize = computeSafeChunkSize((llmRunner && runnerLlmConnection(llmRunner)?.contextLength) ?? DEFAULT_CONTEXT_LENGTH_TOKENS, bodyTruncation, opts.maxChunkSize);
627
+ const chunkSize = computeSafeChunkSize((llmRunner?.kind === "connection" ? llmRunner.contextLength : undefined) ?? DEFAULT_CONTEXT_LENGTH_TOKENS, bodyTruncation, opts.maxChunkSize);
630
628
  const sourceName = opts.target ?? stashDir;
631
629
  let budgeted = memories;
632
630
  const budgetMs = opts.signal?.remainingBudgetMs;
@@ -642,8 +640,6 @@ async function planConsolidation(opts, config, stashDir, memories, warnings, sta
642
640
  }
643
641
  }
644
642
  const slice = (list) => Array.from({ length: Math.ceil(list.length / chunkSize) }, (_, i) => list.slice(i * chunkSize, (i + 1) * chunkSize));
645
- if (llmRunner && budgeted.length > 0)
646
- assertRunnerCredentials(llmRunner);
647
643
  const { ordered, embedTelemetry } = await clusterMemoriesBySimilarity(budgeted, config, stateDb, opts.signal);
648
644
  const chunks = slice(ordered);
649
645
  const pendingProposalBodyHashes = loadPendingConsolidateProposalHashes(stashDir, opts.proposalsCtx);
@@ -652,7 +648,6 @@ async function planConsolidation(opts, config, stashDir, memories, warnings, sta
652
648
  const planned = await judgeConsolidationChunks({
653
649
  chunks,
654
650
  opts,
655
- config,
656
651
  sourceName,
657
652
  bodyTruncation,
658
653
  pendingProposalBodyHashes,
@@ -33,8 +33,8 @@ import { resolveStandardsContext } from "../../core/standards/resolve-standards-
33
33
  import { withStateDb } from "../../core/state-db.js";
34
34
  import { warn, warnVerbose } from "../../core/warn.js";
35
35
  import { recordWrittenPath } from "../../core/write-provenance.js";
36
+ import { noticeSet } from "../../execution/notices.js";
36
37
  import { resolveAssetPath } from "../../indexer/walk/path-resolver.js";
37
- import { assertRunnerCredentials } from "../../integrations/agent/runner-dispatch.js";
38
38
  import { closeDatabase, openReadonlyExistingDatabase } from "../../storage/repositories/index-connection.js";
39
39
  import { getAllEntries } from "../../storage/repositories/index-entries-repository.js";
40
40
  import { listProposals } from "../proposal/repository.js";
@@ -48,7 +48,7 @@ import { buildRefVocabulary, scoreEncodingSalience } from "./encoding-salience.j
48
48
  import { resolveImproveStrategy, resolveProcessEnabled } from "./improve-strategies.js";
49
49
  import { recordLedgerAttempt } from "./ledger.js";
50
50
  import { computeSalience, upsertAssetSalience } from "./salience.js";
51
- import { callStage, LESSON_REJECT_MAX_SCORE, mintProposal, noticeSet, rejectedProposalContext, resolveQualityGateJudge, runLessonQualityJudge, stageRunner, } from "./stage.js";
51
+ import { callStage, LESSON_REJECT_MAX_SCORE, mintProposal, rejectedProposalContext, resolveQualityGateJudge, runLessonQualityJudge, stageRunner, } from "./stage.js";
52
52
  /**
53
53
  * Input types distill structurally refuses: a lesson is the distilled form
54
54
  * (distilling one would mint `lessons/lesson-…-lesson`), and env/secret bytes
@@ -355,8 +355,8 @@ export async function akmDistill(options) {
355
355
  stash,
356
356
  config,
357
357
  profile,
358
- runner: stageRunner(options, config, profile, "distill", notices.add),
359
- judgeRunner: resolveQualityGateJudge(config, profile, "distill", notices.add),
358
+ runner: stageRunner(options, config, "distill", notices.add),
359
+ judgeRunner: resolveQualityGateJudge(config, profile, "distill", notices.add, options.run),
360
360
  notices,
361
361
  eligMeta,
362
362
  asset,
@@ -372,11 +372,6 @@ async function distill(run, targetKind, kind, outputRef, feedbackEvents) {
372
372
  // A reinforced memory graduates to knowledge without a generation call.
373
373
  const promotion = targetKind === "lesson" ? null : await planPromotion(run, feedbackEvents);
374
374
  if (promotion) {
375
- if (run.runner && promotion.existing)
376
- assertRunnerCredentials(run.runner);
377
- const judge = run.judgeRunner ?? run.runner;
378
- if (judge && qualityGateEnabled(run))
379
- assertRunnerCredentials(judge);
380
375
  const promoted = await promoteToKnowledge(run, promotion);
381
376
  stampInputSalience(run);
382
377
  return promoted;
@@ -394,11 +389,9 @@ async function distill(run, targetKind, kind, outputRef, feedbackEvents) {
394
389
  const { system, prompt } = await buildDistillMessages(run, feedback, kind, outputRef);
395
390
  const call = run.runner
396
391
  ? await callStage({
397
- feature: "distill",
398
392
  runner: run.runner,
399
393
  system,
400
394
  prompt,
401
- gate: { config: run.config, enabled: true },
402
395
  // NONE is an answer: a parser that rejected it would ask for a lesson again.
403
396
  parse: (raw) => (answeredNone(raw) ? raw : parseEmbeddedJsonResponse(raw)),
404
397
  // The injected test transport never sees the schema.
@@ -504,7 +497,7 @@ function assembleDistilledContent(run, raw, kind, outputRef) {
504
497
  });
505
498
  throw new UsageError(`Distilled ${kind} failed validation:\n${structural.map((f) => f.message).join("\n")}`, "MISSING_REQUIRED_ARGUMENT", kind === "knowledge"
506
499
  ? "Knowledge proposals require a non-empty markdown body."
507
- : "Lessons require non-empty `description` and `when_to_use` frontmatter fields. See v1 spec §13.");
500
+ : "Lessons require non-empty `description` and `when_to_use` frontmatter fields.");
508
501
  }
509
502
  // Heuristic quality findings go to a human, not the bin.
510
503
  const quality = kind === "lesson" ? collectLessonQualityFindings(content, run.inputRef) : [];
@@ -655,11 +648,9 @@ async function proposeLessonUpdate(run, feedback, finding, related) {
655
648
  if (candidates.length === 0)
656
649
  return undefined;
657
650
  const call = await callStage({
658
- feature: "distill",
659
651
  runner: run.runner,
660
652
  system: "Return only valid JSON. No prose.",
661
653
  prompt: buildLessonUpdatePrompt(memory, feedback, candidates),
662
- gate: { config: run.config, enabled: true },
663
654
  request: {
664
655
  ...(run.options.chat === undefined
665
656
  ? { responseSchema: DISTILL_LESSON_UPDATE_JSON_SCHEMA }
@@ -862,7 +853,6 @@ async function promoteToKnowledge(run, plan) {
862
853
  let content = plan.content;
863
854
  if (plan.existing && run.runner) {
864
855
  const merged = await callStage({
865
- feature: "distill",
866
856
  runner: run.runner,
867
857
  system: "Return only valid JSON. No prose.",
868
858
  prompt: [
@@ -4,10 +4,10 @@
4
4
  /** The refs an improve run may consider, read from the index, and the small predicates over them. */
5
5
  import fs from "node:fs";
6
6
  import path from "node:path";
7
- import { closestMatch } from "../../cli/unknown-flags.js";
8
7
  import { parseBundleRef } from "../../core/asset/asset-ref.js";
9
8
  import { parseFrontmatter } from "../../core/asset/frontmatter.js";
10
9
  import { conceptIdFromTypeName, parseRefInput, resolveRef, typeNameFromConceptId } from "../../core/asset/resolve-ref.js";
10
+ import { closestMatch } from "../../core/closest-match.js";
11
11
  import { loadConfig } from "../../core/config/config.js";
12
12
  import { ConfigError, NotFoundError, rethrowIfTestIsolationError, UsageError } from "../../core/errors.js";
13
13
  import { isPathAbsent } from "../../core/path-access.js";
@@ -1,47 +1,44 @@
1
1
  // This Source Code Form is subject to the terms of the Mozilla Public
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- import { deepMergeConfig } from "../../core/config/deep-merge.js";
5
- import { buildExecution, resolveExecution } from "../../integrations/agent/execution.js";
6
- function own(value, key) {
7
- return value !== undefined && Object.hasOwn(value, key);
8
- }
9
- function cascadeDefaults(layer) {
10
- if (!layer)
11
- return {};
12
- return {
13
- ...(own(layer, "engine") ? { engine: layer.engine } : {}),
14
- ...(own(layer, "model") ? { model: layer.model } : {}),
15
- ...(own(layer, "llm") ? { inference: layer.llm } : {}),
16
- ...(own(layer, "timeoutMs") ? { timeout: layer.timeoutMs ?? null } : {}),
17
- };
18
- }
19
- function mergeDefaults(farther, nearer) {
20
- return deepMergeConfig(farther, nearer);
21
- }
4
+ import { IMPROVE_ENGINE_PROCESSES } from "../../core/config/engine-semantics.js";
5
+ import { ConfigError } from "../../core/errors.js";
6
+ import { executionDefaultsOf } from "../../execution/source.js";
7
+ import { buildExecution, currentLayer, resolveExecution, shippedAlias } from "../../integrations/agent/execution.js";
22
8
  /**
23
- * Resolve improve-owned model work through the canonical execution cascade:
24
- * defaults.llmEngine -> strategy -> index.<pass> -> process -> current invocation.
25
- * The engine may be of any kind that confines the model-work tool policy: one
26
- * that cannot, chosen with `--engine` say, is refused here, before any work.
9
+ * Resolve improve-owned model work: `improve.connection` / `improve.harness`
10
+ * -> index.<pass> -> `improve.processes.<name>` -> the call's own settings ->
11
+ * the run's selection, nearest wins, over the default by name. A strategy adds no layer: it says which
12
+ * processes run, never where. `null` when no connection or harness is
13
+ * configured for it.
27
14
  */
28
15
  export function resolveImproveExecution(options) {
29
- const defaultEngine = options.config.defaults?.llmEngine;
30
- const profileDefaults = cascadeDefaults(options.profile);
31
- const indexDefaults = cascadeDefaults(options.index);
32
- const processDefaults = cascadeDefaults(options.process);
33
- const currentDefaults = cascadeDefaults(options.current);
34
- const selectedEngine = currentDefaults.engine ?? processDefaults.engine ?? indexDefaults.engine ?? profileDefaults.engine ?? defaultEngine;
35
- if (selectedEngine === undefined || selectedEngine === null)
36
- return null;
37
- const invocationDefaults = mergeDefaults(mergeDefaults(defaultEngine ? { engine: defaultEngine } : {}, profileDefaults), indexDefaults);
38
- const prepared = resolveExecution({
39
- content: `improve ${options.processName} execution selection`,
40
- config: options.config,
41
- invocationDefaults,
42
- current: mergeDefaults(processDefaults, currentDefaults),
43
- modelWork: true,
44
- });
45
- const lowered = buildExecution(prepared.request, prepared.runner);
46
- return Object.freeze({ runner: lowered.runner, notices: lowered.notices });
16
+ const processKey = options.process ?? options.processName;
17
+ const processes = options.config.improve?.processes;
18
+ try {
19
+ const prepared = resolveExecution({
20
+ content: `improve ${options.processName} execution selection`,
21
+ config: options.config,
22
+ layers: [
23
+ shippedAlias(options.alias),
24
+ { id: "improve", kind: "invocation-defaults", values: executionDefaultsOf(options.config.improve) },
25
+ { id: "index", kind: "invocation-defaults", values: executionDefaultsOf(options.index) },
26
+ {
27
+ id: `improve.processes.${processKey}`,
28
+ kind: "invocation-defaults",
29
+ values: executionDefaultsOf(IMPROVE_ENGINE_PROCESSES.includes(processKey) ? processes?.[processKey] : undefined),
30
+ },
31
+ currentLayer(executionDefaultsOf(options.current)),
32
+ { id: "run", kind: "current", values: executionDefaultsOf(options.run) },
33
+ ],
34
+ modelWork: true,
35
+ });
36
+ const lowered = buildExecution(prepared.request, prepared.runner);
37
+ return Object.freeze({ runner: lowered.runner, notices: lowered.notices });
38
+ }
39
+ catch (error) {
40
+ if (error instanceof ConfigError && error.code === "LLM_NOT_CONFIGURED")
41
+ return null;
42
+ throw error;
43
+ }
47
44
  }
@@ -18,6 +18,7 @@
18
18
  * `--auto` runs multiple harnesses).
19
19
  */
20
20
  import { getStringArg } from "../../cli/parse-args.js";
21
+ import { RETIRED_ENGINE_ARG, SELECTION_ARGS, selectionFromArgs } from "../../cli/selection.js";
21
22
  import { defineJsonCommand, EXIT_CODES, output } from "../../cli/shared.js";
22
23
  import { loadConfig } from "../../core/config/config.js";
23
24
  import { UsageError } from "../../core/errors.js";
@@ -62,15 +63,13 @@ export const extractCommand = defineJsonCommand({
62
63
  },
63
64
  "timeout-ms": {
64
65
  type: "string",
65
- description: "Per-session LLM timeout in ms (default 600000).",
66
- },
67
- engine: {
68
- type: "string",
69
- description: "Named LLM engine for this invocation. Mutually exclusive with --strategy.",
66
+ description: "Per-session LLM timeout in ms. Default: the engine's own timeout.",
70
67
  },
68
+ ...SELECTION_ARGS,
69
+ ...RETIRED_ENGINE_ARG,
71
70
  strategy: {
72
71
  type: "string",
73
- description: "Improve strategy supplying extract behavior and engine. Mutually exclusive with --engine.",
72
+ description: "Improve strategy supplying extract behavior.",
74
73
  },
75
74
  },
76
75
  async run({ args }) {
@@ -81,7 +80,6 @@ export const extractCommand = defineJsonCommand({
81
80
  const auto = args.auto === true;
82
81
  const dryRun = args["dry-run"] === true;
83
82
  const force = args.force === true;
84
- const engine = getStringArg(args, "engine");
85
83
  const strategy = getStringArg(args, "strategy");
86
84
  const timeoutMs = typeof args["timeout-ms"] === "string" && args["timeout-ms"] !== ""
87
85
  ? Number.parseInt(args["timeout-ms"], 10)
@@ -89,9 +87,6 @@ export const extractCommand = defineJsonCommand({
89
87
  if (timeoutMs !== undefined && (!Number.isFinite(timeoutMs) || timeoutMs <= 0)) {
90
88
  throw new UsageError(`--timeout-ms must be a positive integer (got "${args["timeout-ms"]}").`, "INVALID_FLAG_VALUE");
91
89
  }
92
- if (engine && strategy) {
93
- throw new UsageError("--engine and --strategy are mutually exclusive. Pick one.", "INVALID_FLAG_VALUE");
94
- }
95
90
  if (auto && type) {
96
91
  throw new UsageError("--auto and --type are mutually exclusive. Pick one.", "INVALID_FLAG_VALUE");
97
92
  }
@@ -100,7 +95,7 @@ export const extractCommand = defineJsonCommand({
100
95
  }
101
96
  const config = loadConfig();
102
97
  const resolvedPlan = resolveStandaloneExtractPlan(config, {
103
- ...(engine ? { engine } : {}),
98
+ ...selectionFromArgs(args),
104
99
  ...(strategy ? { strategy } : {}),
105
100
  ...(timeoutMs !== undefined ? { timeoutMs } : {}),
106
101
  });
@@ -19,8 +19,8 @@ import { escapeJsonStringControls, stripCodeFences, stripThinkBlocks } from "../
19
19
  const EXTRACT_CANDIDATE_NAME_PATTERN = "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:/[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)?$";
20
20
  const EXTRACT_CANDIDATE_NAME_RE = new RegExp(EXTRACT_CANDIDATE_NAME_PATTERN);
21
21
  /**
22
- * JSON Schema for the structured extract output. Passed to `chatCompletion`
23
- * unless the configured LLM connection sets `supportsJsonSchema: false`.
22
+ * JSON Schema for the structured extract output. Passed to `chatCompletion`,
23
+ * which drops it once for a provider that rejects it.
24
24
  *
25
25
  * Shape:
26
26
  * {