akm-cli 0.10.261012-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 (518) hide show
  1. package/CHANGELOG.md +710 -3
  2. package/README.md +15 -0
  3. package/SECURITY.md +11 -10
  4. package/STABILITY.md +47 -51
  5. package/dist/assets/hints/cli-hints-full.md +21 -19
  6. package/dist/assets/hints/cli-hints-short.md +3 -4
  7. package/dist/assets/opencode/akm-plugin.js +177 -0
  8. package/dist/assets/stash-skeleton/README.md +1 -1
  9. package/dist/assets/tasks/core/improve.yml +1 -1
  10. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +1 -1
  11. package/dist/assets/ui/config.js +27 -10
  12. package/dist/assets/workflows/workflow-template.md +2 -2
  13. package/dist/cli/clack.js +3 -1
  14. package/dist/cli/selection.js +33 -0
  15. package/dist/cli/shared.js +14 -1
  16. package/dist/cli/unknown-flags.js +6 -37
  17. package/dist/cli.js +69 -48
  18. package/dist/commands/agent/agent-dispatch.js +17 -25
  19. package/dist/commands/agent/contribute-cli.js +9 -8
  20. package/dist/commands/command/command-cli.js +4 -8
  21. package/dist/commands/command/command-execution.js +25 -39
  22. package/dist/commands/command/execution-source-loader.js +10 -14
  23. package/dist/commands/completions.js +1 -1
  24. package/dist/commands/config-cli.js +14 -5
  25. package/dist/commands/env/child-env.js +12 -14
  26. package/dist/commands/env/env-binding.js +47 -58
  27. package/dist/commands/env/env-cli.js +22 -24
  28. package/dist/commands/env/env.js +10 -58
  29. package/dist/commands/env/secret-cli.js +11 -29
  30. package/dist/commands/env/secret.js +3 -10
  31. package/dist/commands/health/checks.js +10 -849
  32. package/dist/commands/health/connections-and-harnesses-check.js +109 -0
  33. package/dist/commands/health/egress.js +3 -3
  34. package/dist/commands/health/html-report.js +9 -10
  35. package/dist/commands/health/plugin-staleness.js +18 -11
  36. package/dist/commands/health/report-view-model.js +16 -12
  37. package/dist/commands/health/scheduler-binary.js +1 -1
  38. package/dist/commands/health/semantic-search-check.js +85 -0
  39. package/dist/commands/health/type-directory-check.js +0 -3
  40. package/dist/commands/health.js +30 -42
  41. package/dist/commands/improve/consolidate/pair-pass.js +10 -25
  42. package/dist/commands/improve/consolidate.js +10 -15
  43. package/dist/commands/improve/distill.js +5 -17
  44. package/dist/commands/improve/eligibility.js +1 -3
  45. package/dist/commands/improve/execution.js +37 -40
  46. package/dist/commands/improve/extract-cli.js +6 -11
  47. package/dist/commands/improve/extract-prompt.js +2 -2
  48. package/dist/commands/improve/extract.js +67 -97
  49. package/dist/commands/improve/improve-cli.js +22 -128
  50. package/dist/commands/improve/improve-report.js +1 -1
  51. package/dist/commands/improve/improve-strategies.js +25 -108
  52. package/dist/commands/improve/improve.js +10 -14
  53. package/dist/commands/improve/loop-stages.js +3 -0
  54. package/dist/commands/improve/memory/memory-improve.js +1 -1
  55. package/dist/commands/improve/preparation.js +8 -13
  56. package/dist/commands/improve/reflect.js +203 -332
  57. package/dist/commands/improve/retrieval-scope.js +1 -1
  58. package/dist/commands/improve/session-asset.js +3 -2
  59. package/dist/commands/improve/stage.js +87 -115
  60. package/dist/commands/lint/base-linter.js +3 -3
  61. package/dist/commands/lint/env-key-rules.js +7 -6
  62. package/dist/commands/lint/index.js +3 -3
  63. package/dist/commands/models-cli.js +103 -63
  64. package/dist/commands/proposal/drain.js +26 -39
  65. package/dist/commands/proposal/proposal-cli.js +14 -18
  66. package/dist/commands/proposal/propose-cli.js +4 -2
  67. package/dist/commands/proposal/propose.js +37 -64
  68. package/dist/commands/proposal/repository.js +17 -17
  69. package/dist/commands/proposal/validators/proposal-validators.js +3 -6
  70. package/dist/commands/read/curate.js +10 -6
  71. package/dist/commands/read/registry-search.js +2 -48
  72. package/dist/commands/read/search-cli.js +1 -8
  73. package/dist/commands/read/search.js +5 -6
  74. package/dist/commands/read/show.js +6 -29
  75. package/dist/commands/remember.js +25 -40
  76. package/dist/commands/sources/add-cli.js +8 -63
  77. package/dist/commands/sources/bundle-cli.js +8 -9
  78. package/dist/commands/sources/bundle-config-ops.js +2 -2
  79. package/dist/commands/sources/info.js +12 -1
  80. package/dist/commands/sources/init.js +1 -1
  81. package/dist/commands/sources/installed-stashes.js +119 -63
  82. package/dist/commands/sources/migration-help.js +1 -1
  83. package/dist/commands/sources/plugin-upgrade.js +8 -15
  84. package/dist/commands/sources/schema-repair.js +4 -10
  85. package/dist/commands/sources/source-add.js +2 -2
  86. package/dist/commands/sources/source-clone.js +31 -7
  87. package/dist/commands/sources/source-manage.js +4 -4
  88. package/dist/commands/targets.js +175 -0
  89. package/dist/commands/tasks/explain.js +104 -69
  90. package/dist/commands/tasks/tasks-cli.js +9 -11
  91. package/dist/commands/tasks/tasks.js +75 -97
  92. package/dist/commands/ui/api.js +11 -3
  93. package/dist/commands/ui/redact.js +5 -31
  94. package/dist/commands/ui/workspace-actions.js +1 -1
  95. package/dist/commands/workflow/plan.js +48 -9
  96. package/dist/commands/workflow-cli.js +40 -45
  97. package/dist/core/adapter/adapters/agent-skills-adapter.js +10 -11
  98. package/dist/core/adapter/adapters/akm-adapter.js +36 -41
  99. package/dist/core/adapter/adapters/akm-lint.js +10 -12
  100. package/dist/core/adapter/adapters/akm-metadata.js +2 -2
  101. package/dist/core/adapter/adapters/akm-task-adapter.js +8 -9
  102. package/dist/core/adapter/adapters/akm-workflow-adapter.js +5 -5
  103. package/dist/core/adapter/adapters/claude-adapter.js +1 -1
  104. package/dist/core/adapter/adapters/dotenv-adapter.js +7 -6
  105. package/dist/core/adapter/adapters/generic-files-adapter.js +5 -5
  106. package/dist/core/adapter/adapters/index.js +3 -4
  107. package/dist/core/adapter/adapters/llm-wiki-adapter.js +12 -14
  108. package/dist/core/adapter/adapters/okf-adapter.js +8 -10
  109. package/dist/core/adapter/adapters/opencode-adapter.js +1 -1
  110. package/dist/core/adapter/adapters/shared.js +3 -3
  111. package/dist/core/adapter/adapters/tool-dir-shared.js +7 -25
  112. package/dist/core/adapter/adapters/website-snapshot-adapter.js +3 -3
  113. package/dist/core/adapter/detect-adapter.js +1 -1
  114. package/dist/core/adapter/execution-source.js +13 -35
  115. package/dist/core/adapter/registry.js +1 -1
  116. package/dist/core/adapter/validate-context.js +2 -4
  117. package/dist/core/asset/asset-placement.js +1 -1
  118. package/dist/core/asset/asset-ref.js +3 -3
  119. package/dist/core/asset/resolve-ref.js +5 -0
  120. package/dist/core/bundle-rename.js +12 -4
  121. package/dist/core/closest-match.js +37 -0
  122. package/dist/core/common.js +37 -57
  123. package/dist/core/config/config-io.js +26 -18
  124. package/dist/core/config/config-schema.js +19 -106
  125. package/dist/core/config/config-sources.js +3 -3
  126. package/dist/core/config/config-types.js +4 -4
  127. package/dist/core/config/config-walker.js +50 -77
  128. package/dist/core/config/config.js +438 -109
  129. package/dist/core/config/convert-engine-references.js +114 -0
  130. package/dist/core/config/convert-engines-shared.js +40 -0
  131. package/dist/core/config/convert-engines.js +300 -0
  132. package/dist/core/config/convert-models-overlay.js +137 -0
  133. package/dist/core/config/credentials.js +304 -0
  134. package/dist/core/config/engine-semantics.js +3 -3
  135. package/dist/core/config/migrate-keys.js +222 -0
  136. package/dist/core/config/model-aliases.js +37 -0
  137. package/dist/core/config/models-file.js +34 -0
  138. package/dist/core/config/retired-engines.js +53 -0
  139. package/dist/core/config/schema/connections.js +41 -0
  140. package/dist/core/config/schema/embedding.js +2 -2
  141. package/dist/core/config/schema/harnesses.js +41 -0
  142. package/dist/core/config/schema/improve-processes.js +9 -28
  143. package/dist/core/config/schema/improve.js +36 -1
  144. package/dist/core/config/schema/index-config.js +18 -20
  145. package/dist/core/config/schema/primitives.js +42 -17
  146. package/dist/core/config/schema/search.js +6 -11
  147. package/dist/core/config/schema/sources-bundles.js +9 -9
  148. package/dist/core/config/schema/workflow.js +2 -6
  149. package/dist/core/config/unusable-entries.js +66 -0
  150. package/dist/core/content-safety.js +3 -6
  151. package/dist/core/endpoint-url.js +47 -0
  152. package/dist/core/env-secret-ref.js +84 -73
  153. package/dist/core/errors.js +10 -16
  154. package/dist/core/extra-params.js +3 -3
  155. package/dist/core/improve-result.js +8 -9
  156. package/dist/core/json-schema.js +1 -1
  157. package/dist/core/lesson-lint.js +1 -1
  158. package/dist/core/llm-inference.js +80 -0
  159. package/dist/core/parse.js +2 -2
  160. package/dist/core/paths.js +33 -10
  161. package/dist/core/recognition-util.js +8 -10
  162. package/dist/core/redaction.js +94 -55
  163. package/dist/core/ref-token.js +82 -0
  164. package/dist/core/secret-value.js +14 -0
  165. package/dist/core/state/migrations.js +17 -22
  166. package/dist/core/structured.js +2 -68
  167. package/dist/core/subprocess.js +63 -22
  168. package/dist/core/type-presentation.js +10 -14
  169. package/dist/core/write-source.js +20 -4
  170. package/dist/execution/input-contract.js +3 -6
  171. package/dist/execution/notices.js +49 -0
  172. package/dist/execution/resolved-request.js +24 -40
  173. package/dist/execution/source.js +21 -45
  174. package/dist/execution/target-ref.js +2 -2
  175. package/dist/indexer/bundle-identity-guard.js +6 -5
  176. package/dist/indexer/ensure-index.js +1 -1
  177. package/dist/indexer/index-writer-lock.js +1 -1
  178. package/dist/indexer/indexer.js +46 -42
  179. package/dist/indexer/installations.js +12 -22
  180. package/dist/indexer/lookup/adapter-concept-owner.js +40 -14
  181. package/dist/indexer/materialize-embeddings.js +20 -16
  182. package/dist/indexer/passes/memory-inference.js +21 -50
  183. package/dist/indexer/passes/metadata.js +5 -5
  184. package/dist/indexer/scan/doc-to-entry.js +1 -1
  185. package/dist/indexer/scan/drain-dir.js +9 -11
  186. package/dist/indexer/search/db-search.js +9 -7
  187. package/dist/indexer/search/search-source.js +42 -22
  188. package/dist/indexer/usage/usage-events.js +2 -3
  189. package/dist/indexer/walk/index-context.js +2 -1
  190. package/dist/indexer/walk/matchers.js +3 -11
  191. package/dist/indexer/walk/path-resolver.js +13 -68
  192. package/dist/indexer/walk/walker.js +32 -26
  193. package/dist/integrations/agent/akm-read-tools.js +81 -0
  194. package/dist/integrations/agent/config.js +1 -1
  195. package/dist/integrations/agent/detect.js +32 -36
  196. package/dist/integrations/agent/execution.js +130 -428
  197. package/dist/integrations/agent/index.js +1 -1
  198. package/dist/integrations/agent/profiles.js +24 -28
  199. package/dist/integrations/agent/prompts.js +17 -30
  200. package/dist/integrations/agent/request-lowering.js +67 -101
  201. package/dist/integrations/agent/resolution.js +332 -0
  202. package/dist/integrations/agent/runner-dispatch.js +156 -181
  203. package/dist/integrations/agent/runner.js +20 -70
  204. package/dist/integrations/agent/runtime-port.js +4 -0
  205. package/dist/integrations/agent/runtime.js +10 -0
  206. package/dist/integrations/agent/spawn.js +65 -190
  207. package/dist/integrations/harnesses/aider/index.js +19 -39
  208. package/dist/integrations/harnesses/amazonq/index.js +17 -32
  209. package/dist/integrations/harnesses/claude/index.js +59 -28
  210. package/dist/integrations/harnesses/claude/session-log.js +7 -5
  211. package/dist/integrations/harnesses/codex/index.js +19 -31
  212. package/dist/integrations/harnesses/copilot/index.js +17 -35
  213. package/dist/integrations/harnesses/gemini/index.js +18 -34
  214. package/dist/integrations/harnesses/harness.js +36 -0
  215. package/dist/integrations/harnesses/index.js +20 -51
  216. package/dist/integrations/harnesses/opencode/agent-builder.js +132 -100
  217. package/dist/integrations/harnesses/opencode/index.js +11 -33
  218. package/dist/integrations/harnesses/opencode/roots.js +50 -0
  219. package/dist/integrations/harnesses/opencode/runtime/binary.js +206 -0
  220. package/dist/integrations/harnesses/opencode/runtime/command.js +152 -0
  221. package/dist/integrations/harnesses/opencode/runtime/index.js +177 -0
  222. package/dist/integrations/harnesses/opencode/runtime/tar.js +107 -0
  223. package/dist/integrations/harnesses/opencode/session-log-v1.js +15 -7
  224. package/dist/integrations/harnesses/opencode/session-log-v2.js +72 -48
  225. package/dist/integrations/harnesses/opencode/session-log.js +58 -137
  226. package/dist/integrations/harnesses/opencode/version.js +34 -53
  227. package/dist/integrations/harnesses/openhands/index.js +13 -37
  228. package/dist/integrations/harnesses/pi/index.js +21 -32
  229. package/dist/integrations/lockfile.js +1 -1
  230. package/dist/integrations/session-logs/index.js +11 -31
  231. package/dist/llm/client.js +93 -111
  232. package/dist/llm/embedder.js +19 -34
  233. package/dist/llm/embedders/connection.js +31 -0
  234. package/dist/llm/embedders/local-model-files.js +56 -0
  235. package/dist/llm/embedders/local.js +146 -115
  236. package/dist/llm/embedders/remote.js +26 -23
  237. package/dist/llm/embedders/types.js +1 -1
  238. package/dist/llm/index-passes.js +33 -39
  239. package/dist/llm/memory-infer.js +67 -77
  240. package/dist/llm/model-list.js +35 -0
  241. package/dist/llm/rerank-client.js +8 -14
  242. package/dist/llm/structured-call.js +45 -99
  243. package/dist/llm/structured.js +60 -0
  244. package/dist/output/renderers.js +2 -8
  245. package/dist/output/shapes/helpers.js +18 -44
  246. package/dist/output/shapes/passthrough.js +1 -0
  247. package/dist/output/shapes.js +1 -7
  248. package/dist/output/text/command-format.js +41 -39
  249. package/dist/output/text/health-format.js +8 -2
  250. package/dist/output/text/helpers.js +1 -1
  251. package/dist/output/text/migrate.js +12 -0
  252. package/dist/output/text/models.js +3 -2
  253. package/dist/output/text/registry-commands.js +1 -2
  254. package/dist/output/text/show-directives.js +16 -28
  255. package/dist/output/text/show-format.js +0 -2
  256. package/dist/output/text/targets-table.js +70 -0
  257. package/dist/output/text/workflow-format.js +44 -15
  258. package/dist/output/text.js +1 -1
  259. package/dist/registry/providers/skills-sh.js +1 -28
  260. package/dist/registry/providers/static-index.js +1 -71
  261. package/dist/runtime.js +6 -2
  262. package/dist/scripts/akm-migrate-node.js +47095 -44905
  263. package/dist/scripts/akm-migrate.js +46946 -44755
  264. package/dist/setup/detect.js +28 -273
  265. package/dist/setup/endpoint.js +36 -0
  266. package/dist/setup/semantic-assets.js +13 -19
  267. package/dist/setup/setup-flags.js +77 -0
  268. package/dist/setup/setup-plan.js +144 -0
  269. package/dist/setup/setup.js +134 -358
  270. package/dist/setup/steps/connection-shared.js +49 -101
  271. package/dist/setup/steps/connection.js +121 -524
  272. package/dist/setup/steps/embeddings.js +151 -0
  273. package/dist/setup/steps/harnesses.js +118 -0
  274. package/dist/setup/steps/platforms.js +2 -81
  275. package/dist/setup/steps/tasks.js +1 -2
  276. package/dist/setup/steps.js +10 -0
  277. package/dist/setup/summary.js +67 -0
  278. package/dist/sources/freshness.js +16 -21
  279. package/dist/sources/providers/git-provider.js +2 -9
  280. package/dist/sources/providers/provider-utils.js +13 -5
  281. package/dist/sources/resolve.js +12 -16
  282. package/dist/sources/snapshot-fetchers/robots.js +11 -12
  283. package/dist/sources/snapshot-fetchers/secret-seam.js +2 -4
  284. package/dist/sources/snapshot-fetchers/website-ingest.js +8 -15
  285. package/dist/sources/snapshot-fetchers/x.js +1 -1
  286. package/dist/standalone/onnxruntime-library.js +52 -0
  287. package/dist/storage/repositories/improve-ledger-repository.js +1 -1
  288. package/dist/storage/repositories/improve-runs-repository.js +0 -13
  289. package/dist/storage/repositories/index-entries-repository.js +2 -2
  290. package/dist/storage/repositories/proposals-repository.js +2 -2
  291. package/dist/storage/repositories/task-history-repository.js +2 -2
  292. package/dist/storage/repositories/workflow-runs-repository.js +44 -129
  293. package/dist/storage/sqlite-read-snapshot.js +33 -29
  294. package/dist/tasks/embedded.js +1 -1
  295. package/dist/tasks/log-redaction.js +7 -119
  296. package/dist/tasks/prepare/prepare-support.js +8 -7
  297. package/dist/tasks/prepare/prepare.js +8 -9
  298. package/dist/tasks/prepare/script-capture.js +9 -25
  299. package/dist/tasks/run/attempt-lifecycle.js +17 -35
  300. package/dist/tasks/run/load-task.js +54 -27
  301. package/dist/tasks/run/run-command-task.js +15 -10
  302. package/dist/tasks/run/run-native-task.js +8 -21
  303. package/dist/tasks/run/run-task.js +5 -8
  304. package/dist/tasks/run/run-workflow-task.js +14 -21
  305. package/dist/tasks/run/task-history.js +9 -17
  306. package/dist/tasks/run/task-log.js +1 -5
  307. package/dist/tasks/scheduler-invocation.js +13 -18
  308. package/dist/tasks/scheduler-sync.js +0 -1
  309. package/dist/tasks/source/bounded-document.js +31 -117
  310. package/dist/tasks/source/parse-task-source.js +0 -1
  311. package/dist/tasks/source/project-v4.js +5 -3
  312. package/dist/tasks/source/task-input-diagnostics.js +3 -4
  313. package/dist/tasks/source/task-source-v4.js +48 -72
  314. package/dist/tasks/source-v3.js +2 -5
  315. package/dist/tasks/task-run-reserved-flags.js +1 -2
  316. package/dist/workflows/authoring/authoring.js +2 -7
  317. package/dist/workflows/compile.js +1 -15
  318. package/dist/workflows/concurrency-policy.js +4 -4
  319. package/dist/workflows/exec/child-workflow.js +1 -4
  320. package/dist/workflows/exec/dispatch-redaction.js +35 -86
  321. package/dist/workflows/exec/environment.js +13 -77
  322. package/dist/workflows/exec/exec-unit.js +14 -55
  323. package/dist/workflows/exec/frozen-judge.js +26 -28
  324. package/dist/workflows/exec/native-executor.js +126 -71
  325. package/dist/workflows/exec/run-workflow.js +38 -42
  326. package/dist/workflows/exec/step-work.js +13 -17
  327. package/dist/workflows/exec/unit-dispatch.js +7 -21
  328. package/dist/workflows/freeze/environment.js +14 -119
  329. package/dist/workflows/freeze/freeze.js +14 -33
  330. package/dist/workflows/freeze/step-values.js +6 -13
  331. package/dist/workflows/freeze/targets/child-workflow.js +3 -5
  332. package/dist/workflows/freeze/targets/command.js +9 -15
  333. package/dist/workflows/freeze/targets/shell.js +0 -3
  334. package/dist/workflows/freeze/task-bindings.js +0 -1
  335. package/dist/workflows/parser.js +50 -59
  336. package/dist/workflows/plan.js +8 -2
  337. package/dist/workflows/renderer.js +83 -9
  338. package/dist/workflows/resource-limits.js +2 -2
  339. package/dist/workflows/runtime/run-plan.js +38 -23
  340. package/dist/workflows/runtime/runs.js +55 -93
  341. package/dist/workflows/runtime/workflow-asset-loader.js +55 -86
  342. package/dist/workflows/source-files.js +7 -19
  343. package/docs/README.md +10 -16
  344. package/docs/architecture/README.md +2 -37
  345. package/docs/architecture/adapters.md +2 -2
  346. package/docs/architecture/akm-core-principles.md +256 -118
  347. package/docs/architecture/architecture.md +283 -99
  348. package/docs/architecture/improvement.md +8 -2
  349. package/docs/architecture/internals/classification.md +1 -3
  350. package/docs/architecture/internals/fresh-host-rebuild-runbook.md +7 -6
  351. package/docs/architecture/internals/health-advisories.md +35 -74
  352. package/docs/architecture/internals/improve-workflow.md +27 -26
  353. package/docs/architecture/internals/indexing.md +3 -3
  354. package/docs/architecture/internals/storage-locations.md +48 -15
  355. package/docs/architecture/persisted-data-compat.md +10 -6
  356. package/docs/architecture/specs/okf-support.md +9 -11
  357. package/docs/architecture/specs/ref.md +7 -9
  358. package/docs/architecture/testing/testing-workflow.md +172 -52
  359. package/docs/architecture/workflow-engine.md +51 -34
  360. package/docs/guides/README.md +0 -1
  361. package/docs/guides/author-bundles.md +15 -20
  362. package/docs/guides/author-workflows.md +93 -71
  363. package/docs/guides/bundles.md +20 -16
  364. package/docs/guides/discover-and-load.md +1 -1
  365. package/docs/guides/getting-started.md +49 -3
  366. package/docs/guides/improve-the-library.md +10 -4
  367. package/docs/guides/recipes/headless-install.md +11 -16
  368. package/docs/guides/run-workflows.md +29 -20
  369. package/docs/guides/scheduling.md +2 -2
  370. package/docs/guides/use-with-any-agent.md +20 -22
  371. package/docs/integration/bundling-akm.md +19 -9
  372. package/docs/maintainers/README.md +2 -6
  373. package/docs/maintainers/release-checklist.md +73 -126
  374. package/docs/migration/README.md +10 -3
  375. package/docs/migration/release-notes/0.10.0.md +81 -16
  376. package/docs/migration/release-notes/0.6.0.md +1 -1
  377. package/docs/migration/release-notes/0.7.0.md +1 -1
  378. package/docs/migration/release-notes/0.9.0.md +1 -1
  379. package/docs/migration/release-notes/README.md +1 -1
  380. package/docs/migration/v0.9-to-v0.10.md +300 -60
  381. package/docs/migration/v0.9.1-to-v0.9.2.md +6 -5
  382. package/docs/posts/config-v2-lessons-16.md +1 -1
  383. package/docs/posts/llm-mode-reflect-13.md +1 -1
  384. package/docs/posts/release-0.6.0.md +11 -11
  385. package/docs/posts/release-0.8.0.md +4 -4
  386. package/docs/posts/workflows-vaults-09.md +1 -1
  387. package/docs/reference/README.md +1 -1
  388. package/docs/reference/asset-types.md +2 -2
  389. package/docs/reference/cli.md +477 -388
  390. package/docs/reference/configuration.md +569 -550
  391. package/docs/reference/data-and-telemetry.md +9 -6
  392. package/docs/reference/env-and-secrets.md +72 -15
  393. package/docs/reference/refs.md +3 -20
  394. package/docs/reference/registry.md +12 -38
  395. package/docs/reference/supported-formats.md +1 -1
  396. package/docs/reference/tasks.md +22 -11
  397. package/docs/reference/ui-api.md +14 -9
  398. package/docs/reference/workflow-schema.md +199 -154
  399. package/docs/reference/workflows.md +4 -6
  400. package/package.json +9 -11
  401. package/schemas/akm-config.json +1696 -2922
  402. package/schemas/akm-task.json +4 -4
  403. package/schemas/akm-workflow.json +36 -9
  404. package/ROADMAP.md +0 -112
  405. package/dist/assets/models.json +0 -35
  406. package/dist/commands/health/engine-usage.js +0 -45
  407. package/dist/commands/sources/dangerous-env-audit.js +0 -134
  408. package/dist/core/activation-policy.js +0 -67
  409. package/dist/core/config/schema/engines.js +0 -160
  410. package/dist/core/config/schema/execution.js +0 -23
  411. package/dist/core/spawn-env.js +0 -268
  412. package/dist/execution/directory-identity.js +0 -78
  413. package/dist/integrations/agent/builder-shared.js +0 -33
  414. package/dist/integrations/agent/builders.js +0 -43
  415. package/dist/integrations/agent/engine-fallback.js +0 -59
  416. package/dist/integrations/agent/engine-resolution.js +0 -333
  417. package/dist/integrations/agent/model-map.js +0 -475
  418. package/dist/integrations/harnesses/aider/agent-builder.js +0 -107
  419. package/dist/integrations/harnesses/aider/result-extractor.js +0 -53
  420. package/dist/integrations/harnesses/amazonq/agent-builder.js +0 -138
  421. package/dist/integrations/harnesses/amazonq/result-extractor.js +0 -48
  422. package/dist/integrations/harnesses/claude/agent-builder.js +0 -106
  423. package/dist/integrations/harnesses/claude/config-import.js +0 -67
  424. package/dist/integrations/harnesses/claude/result-extractor.js +0 -67
  425. package/dist/integrations/harnesses/codex/agent-builder.js +0 -150
  426. package/dist/integrations/harnesses/codex/result-extractor.js +0 -110
  427. package/dist/integrations/harnesses/copilot/agent-builder.js +0 -117
  428. package/dist/integrations/harnesses/copilot/result-extractor.js +0 -178
  429. package/dist/integrations/harnesses/gemini/agent-builder.js +0 -114
  430. package/dist/integrations/harnesses/gemini/result-extractor.js +0 -149
  431. package/dist/integrations/harnesses/opencode/config-import.js +0 -149
  432. package/dist/integrations/harnesses/opencode/model-config.js +0 -33
  433. package/dist/integrations/harnesses/opencode/model-work-agent.js +0 -115
  434. package/dist/integrations/harnesses/opencode/session-log-types.js +0 -12
  435. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -44
  436. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +0 -1052
  437. package/dist/integrations/harnesses/opencode-sdk/v1-adapter.js +0 -199
  438. package/dist/integrations/harnesses/opencode-sdk/v2-adapter.js +0 -254
  439. package/dist/integrations/harnesses/opencode-sdk/wire.js +0 -66
  440. package/dist/integrations/harnesses/openhands/agent-builder.js +0 -120
  441. package/dist/integrations/harnesses/openhands/result-extractor.js +0 -135
  442. package/dist/integrations/harnesses/pi/agent-builder.js +0 -89
  443. package/dist/integrations/harnesses/pi/result-extractor.js +0 -168
  444. package/dist/integrations/harnesses/shared.js +0 -18
  445. package/dist/integrations/harnesses/types.js +0 -55
  446. package/dist/llm/feature-gate.js +0 -115
  447. package/dist/output/shapes/models-list.js +0 -16
  448. package/dist/output/shapes/registry-search.js +0 -10
  449. package/dist/setup/detected-engines.js +0 -136
  450. package/dist/setup/engine-config.js +0 -97
  451. package/dist/setup/harness-config-import.js +0 -47
  452. package/dist/setup/providers.js +0 -14
  453. package/dist/setup/steps/semantic.js +0 -39
  454. package/dist/workflows/authoring/scope-key.js +0 -79
  455. package/dist/workflows/exec/lowering-notices.js +0 -23
  456. package/dist/workflows/source-semantics.js +0 -110
  457. package/docs/architecture/0.10-process-rules.md +0 -832
  458. package/docs/architecture/akm-architecture-decision-history.md +0 -2055
  459. package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +0 -550
  460. package/docs/architecture/decisions/0001-no-interpolation-attached-structured-context.md +0 -72
  461. package/docs/architecture/decisions/0002-unit-reuse-and-input-hash-scope.md +0 -142
  462. package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +0 -189
  463. package/docs/architecture/decisions/0004-task-input-contract-and-flag-coercion.md +0 -97
  464. package/docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md +0 -108
  465. package/docs/architecture/decisions/0006-task-source-version-routing.md +0 -124
  466. package/docs/architecture/decisions/0007-workflow-composition-bounds.md +0 -83
  467. package/docs/architecture/decisions/0008-task-binding-normalization.md +0 -88
  468. package/docs/architecture/decisions/0009-child-run-publication-column-parity.md +0 -80
  469. package/docs/architecture/decisions/0010-driver-protocol-cut.md +0 -36
  470. package/docs/architecture/decisions/0011-engine-run-loop-invariants.md +0 -125
  471. package/docs/architecture/decisions/README.md +0 -62
  472. package/docs/architecture/internals/functional-contract-patterns.md +0 -340
  473. package/docs/architecture/internals/registry-network-boundary.md +0 -57
  474. package/docs/architecture/internals/search.md +0 -248
  475. package/docs/architecture/reviews/env-secret-access.md +0 -319
  476. package/docs/architecture/runtime-boundary-design.md +0 -153
  477. package/docs/architecture/specs/0.9.0-close-out-plan.md +0 -361
  478. package/docs/architecture/specs/0.9.0-decisions.md +0 -532
  479. package/docs/architecture/specs/0.9.0-docs-code-drift-register.md +0 -745
  480. package/docs/architecture/specs/0.9.0-open-items-register.md +0 -135
  481. package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +0 -740
  482. package/docs/architecture/specs/0.9.0-release-surface-review.md +0 -636
  483. package/docs/architecture/specs/agent-command-engine-model-design.md +0 -513
  484. package/docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md +0 -501
  485. package/docs/architecture/specs/akm-0.9.0-ref-grammar-decision.md +0 -291
  486. package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +0 -2059
  487. package/docs/architecture/specs/di-seams-plan.md +0 -539
  488. package/docs/architecture/specs/driver-protocol-keep-or-cut.md +0 -275
  489. package/docs/architecture/specs/fact-asset-type.md +0 -142
  490. package/docs/architecture/specs/improve-collapse-churn-detector-design.md +0 -634
  491. package/docs/architecture/specs/reviews/task-workflow-unification/README.md +0 -72
  492. package/docs/architecture/specs/reviews/task-workflow-unification/findings-consolidated.md +0 -152
  493. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-alternatives.md +0 -352
  494. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-bunqueue.md +0 -300
  495. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md +0 -402
  496. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-1.md +0 -758
  497. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-2.md +0 -645
  498. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-3.md +0 -602
  499. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-adversarial.md +0 -27
  500. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-architecture.md +0 -27
  501. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-coverage.md +0 -74
  502. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-security.md +0 -15
  503. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-adversarial.md +0 -132
  504. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-verification.md +0 -147
  505. package/docs/architecture/specs/stash-conventions-code-spec.md +0 -275
  506. package/docs/architecture/specs/stash-organization-conventions.md +0 -377
  507. package/docs/architecture/specs/task-workflow-format-unification.md +0 -721
  508. package/docs/architecture/specs/workflow-engine-buy-vs-build.md +0 -231
  509. package/docs/architecture/specs/workflow-format-unification.md +0 -432
  510. package/docs/architecture/testing/manual-testing-checklist.md +0 -3411
  511. package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +0 -924
  512. package/docs/architecture/testing/task-workflow-manual-tests.md +0 -1720
  513. package/docs/guides/claude-code-vs-akm-workflows.md +0 -29
  514. package/docs/guides/knowledge-management.md +0 -18
  515. package/docs/maintainers/curate-workmap.md +0 -335
  516. package/docs/migration/v0.5-to-v0.6.md +0 -759
  517. package/docs/migration/v0.7-to-v0.8.md +0 -1378
  518. 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: [
@@ -1074,8 +1064,6 @@ async function defaultLookup(ref, stashDir) {
1074
1064
  return resolveAssetPath(ref, {
1075
1065
  stashDir,
1076
1066
  mode: "disk-only",
1077
- directoryIndexNames: ["SKILL.md"],
1078
- preserveDirectNameFallback: true,
1079
1067
  honorOrigin: false,
1080
1068
  });
1081
1069
  }
@@ -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";
@@ -355,8 +355,6 @@ export async function findAssetFilePath(ref, stashDir, writableBundleIds) {
355
355
  stashDir,
356
356
  mode: "disk-only",
357
357
  writableBundleIds,
358
- directoryIndexNames: ["SKILL.md"],
359
- preserveDirectNameFallback: true,
360
358
  honorOrigin: true,
361
359
  });
362
360
  }
@@ -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
  * {