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
@@ -0,0 +1,37 @@
1
+ // This Source Code Form is subject to the terms of the Mozilla Public
2
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+ /**
5
+ * The closest of a few known names to one that was typed, for a did-you-mean in
6
+ * an error: the unknown-flag and unknown-command paths, an improve scope's type,
7
+ * and a connection or harness that is not configured.
8
+ */
9
+ /** Single-row-at-a-time edit-distance DP (inputs are short flag/command names). */
10
+ function editDistance(a, b) {
11
+ let previous = Array.from({ length: b.length + 1 }, (_, j) => j);
12
+ for (let i = 1; i <= a.length; i += 1) {
13
+ const current = [i];
14
+ for (let j = 1; j <= b.length; j += 1) {
15
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
16
+ current.push(Math.min((previous[j] ?? 0) + 1, (current[j - 1] ?? 0) + 1, (previous[j - 1] ?? 0) + cost));
17
+ }
18
+ previous = current;
19
+ }
20
+ return previous[b.length] ?? 0;
21
+ }
22
+ /**
23
+ * Closest candidate within `threshold` edit distance, or undefined when
24
+ * nothing is close enough to be worth suggesting. Callers pick their own thresholds.
25
+ */
26
+ export function closestMatch(attempted, candidates, threshold) {
27
+ let best;
28
+ let bestDistance = Number.POSITIVE_INFINITY;
29
+ for (const candidate of candidates) {
30
+ const distance = editDistance(attempted, candidate);
31
+ if (distance < bestDistance) {
32
+ bestDistance = distance;
33
+ best = candidate;
34
+ }
35
+ }
36
+ return best !== undefined && bestDistance <= threshold ? best : undefined;
37
+ }
@@ -86,8 +86,9 @@ export function readTextFile(filePath, label = "File") {
86
86
  */
87
87
  /**
88
88
  * Strip JavaScript-style comments from a JSON string (JSONC support).
89
- * Handles `//` line comments and `/* *​/` block comments while preserving
90
- * comment-like sequences inside quoted strings.
89
+ * Handles `//` line comments, which end at a line feed or a carriage return,
90
+ * and `/* *​/` block comments while preserving comment-like sequences inside
91
+ * quoted strings.
91
92
  */
92
93
  export function stripJsonComments(text) {
93
94
  let result = "";
@@ -114,7 +115,7 @@ export function stripJsonComments(text) {
114
115
  continue;
115
116
  }
116
117
  if (text[i] === "/" && text[i + 1] === "/") {
117
- while (i < text.length && text[i] !== "\n")
118
+ while (i < text.length && text[i] !== "\n" && text[i] !== "\r")
118
119
  i++;
119
120
  continue;
120
121
  }
@@ -313,7 +314,7 @@ function readStashDirFromConfig() {
313
314
  if (typeof parsed !== "object" || parsed === null)
314
315
  return undefined;
315
316
  const raw = parsed;
316
- // 0.9.0 config-shape cutover (spec §10.1): the primary stash is the
317
+ // The primary stash is the
317
318
  // `defaultBundle`'s filesystem `path`. Read it directly (no config module
318
319
  // import) so the primary-stash location survives the stashDir → bundles
319
320
  // migration without a runtime rewire.
@@ -376,25 +377,6 @@ export function hasErrnoCode(error, code) {
376
377
  export function isChmodUnsupported(error) {
377
378
  return hasErrnoCode(error, "EPERM") || hasErrnoCode(error, "ENOTSUP") || hasErrnoCode(error, "EINVAL");
378
379
  }
379
- /**
380
- * True when `value` is a RELATIVE path that cannot leave its base directory:
381
- * no absolute form (POSIX `/`, Windows `\` or a `C:` drive prefix), no `~`
382
- * home expansion, and no `..` segment under either separator.
383
- *
384
- * This is the SYNTACTIC half of containment — cheap, string-only, usable at
385
- * authoring time before any directory exists. It is deliberately paired with
386
- * (never a substitute for) {@link isWithin}, which resolves symlinks against a
387
- * real base at use time. Workflow `exec` units run both: the parser and the
388
- * frozen-plan decoder reject uncontained spellings, and the executor re-checks
389
- * the resolved path before spawning.
390
- */
391
- export function isContainedRelativePath(value) {
392
- if (value === "" || value.startsWith("/") || value.startsWith("\\") || value.startsWith("~"))
393
- return false;
394
- if (/^[A-Za-z]:/.test(value))
395
- return false;
396
- return !value.split(/[/\\]+/).includes("..");
397
- }
398
380
  export function isWithin(candidate, root) {
399
381
  return isContainedResolvedPath(safeRealpath(candidate), safeRealpath(root));
400
382
  }
@@ -419,16 +401,11 @@ export function isAkmRegistryCachePath(filePath) {
419
401
  return isWithin(filePath, getRegistryCacheDir()) || isWithin(filePath, getRegistryIndexCacheDir());
420
402
  }
421
403
  /**
422
- * {@link isWithin} for callers that must not block the event loop (e.g. the
423
- * workflow exec dispatch path, which runs once per fan-out unit). Same
424
- * comparison, same normalization, same nearest-existing-ancestor fallback —
425
- * only the realpath syscalls are awaited.
404
+ * The containment comparison behind {@link isWithin}.
405
+ * Called directly with `path.resolve`d arguments it is a lexical check: it
406
+ * refuses `..` and absolute names without following symlinks.
426
407
  */
427
- export async function isWithinAsync(candidate, root) {
428
- return isContainedResolvedPath(await safeRealpathAsync(candidate), await safeRealpathAsync(root));
429
- }
430
- /** The containment comparison shared by {@link isWithin} and {@link isWithinAsync}. */
431
- function isContainedResolvedPath(resolvedCandidate, resolvedRoot) {
408
+ export function isContainedResolvedPath(resolvedCandidate, resolvedRoot) {
432
409
  const rel = path.relative(normalizeFsPathForComparison(resolvedRoot), normalizeFsPathForComparison(resolvedCandidate));
433
410
  if (rel === "")
434
411
  return true;
@@ -475,30 +452,6 @@ export function safeRealpath(p) {
475
452
  }
476
453
  }
477
454
  }
478
- /** {@link safeRealpath}'s async twin — awaited syscalls, identical walk-up. */
479
- export async function safeRealpathAsync(p) {
480
- const resolved = path.resolve(p);
481
- try {
482
- return await fs.promises.realpath(resolved);
483
- }
484
- catch {
485
- const suffix = [];
486
- let current = resolved;
487
- for (;;) {
488
- const parent = path.dirname(current);
489
- if (parent === current)
490
- return resolved;
491
- suffix.unshift(path.basename(current));
492
- current = parent;
493
- try {
494
- return path.join(await fs.promises.realpath(current), ...suffix);
495
- }
496
- catch {
497
- // parent also doesn't exist; keep walking up
498
- }
499
- }
500
- }
501
- }
502
455
  function normalizeFsPathForComparison(value) {
503
456
  return process.platform === "win32" ? value.toLowerCase() : value;
504
457
  }
@@ -938,6 +891,33 @@ export function isRecord(value) {
938
891
  export function asRecord(value) {
939
892
  return isRecord(value) ? value : undefined;
940
893
  }
894
+ /** Drop each comma that is followed, past whitespace, by `}` or `]`, outside string literals. */
895
+ function stripTrailingCommas(text) {
896
+ let result = "";
897
+ let inString = false;
898
+ for (let i = 0; i < text.length; i++) {
899
+ const char = text[i];
900
+ if (inString) {
901
+ result += char;
902
+ if (char === "\\")
903
+ result += text[++i] ?? "";
904
+ else if (char === '"')
905
+ inString = false;
906
+ continue;
907
+ }
908
+ if (char === '"')
909
+ inString = true;
910
+ else if (char === ",") {
911
+ let next = i + 1;
912
+ while (next < text.length && /\s/.test(text[next]))
913
+ next++;
914
+ if (text[next] === "}" || text[next] === "]")
915
+ continue;
916
+ }
917
+ result += char;
918
+ }
919
+ return result;
920
+ }
941
921
  /**
942
922
  * Parse JSONC: comments stripped by {@link stripJsonComments}, and trailing
943
923
  * commas (`[a, b,]`, `{"k": 1,}`) tolerated, as OpenCode's own `.jsonc` reader does.
@@ -948,7 +928,7 @@ export function parseJsonc(text) {
948
928
  return JSON.parse(stripped);
949
929
  }
950
930
  catch {
951
- return JSON.parse(stripped.replace(/,(\s*[}\]])/g, "$1"));
931
+ return JSON.parse(stripTrailingCommas(stripped));
952
932
  }
953
933
  }
954
934
  /** `JSON.parse` that returns `undefined` instead of throwing. */
@@ -83,6 +83,24 @@ const MAX_CONFIG_BACKUPS = 5;
83
83
  export function backupExistingConfig(configPath, now = new Date()) {
84
84
  if (!fs.existsSync(configPath))
85
85
  return undefined;
86
+ const timestamped = copyToConfigBackups(configPath, (stamp) => `config-${stamp}.json`, now);
87
+ const backupDir = path.dirname(timestamped);
88
+ const latest = path.join(backupDir, "config.latest.json");
89
+ fs.copyFileSync(configPath, latest);
90
+ // 08-F4: a config backup carries the same sensitive fields as the live config
91
+ // (endpoints, tokens). `copyFileSync` inherits the source's (often 0644) mode,
92
+ // so tighten the backups to owner-only — mirrors the env-cli 0600 write floor.
93
+ chmodIfSupported(latest, 0o600);
94
+ pruneOldBackups(backupDir);
95
+ return { timestamped, latest };
96
+ }
97
+ /**
98
+ * Copy `source` into `<cacheDir>/config-backups/` as `name(stamp)`, where `stamp` is the
99
+ * timestamp of `now` and gets a `-1`, `-2`, ... when that name is taken, and return where it
100
+ * went. The directory is owner-only (0700) and so is the copy (0600). The one place a backup is
101
+ * named, for the config file and the credential store alike.
102
+ */
103
+ export function copyToConfigBackups(source, name, now = new Date()) {
86
104
  const backupDir = path.join(getCacheDir(), "config-backups");
87
105
  // 08-F4: lock the backup dir owner-only up front (0700) — matching the
88
106
  // env.ts/secret.ts convention — so no other local user can traverse in during
@@ -90,29 +108,19 @@ export function backupExistingConfig(configPath, now = new Date()) {
90
108
  fs.mkdirSync(backupDir, { recursive: true, mode: 0o700 });
91
109
  chmodIfSupported(backupDir, 0o700);
92
110
  const timestamp = now.toISOString().replace(/[.:]/g, "-");
93
- let sequence = 0;
94
- let timestamped;
95
- while (true) {
96
- timestamped = path.join(backupDir, `config-${timestamp}${sequence === 0 ? "" : `-${sequence}`}.json`);
111
+ for (let sequence = 0;; sequence += 1) {
112
+ const target = path.join(backupDir, name(sequence === 0 ? timestamp : `${timestamp}-${sequence}`));
97
113
  try {
98
- fs.copyFileSync(configPath, timestamped, fs.constants.COPYFILE_EXCL);
99
- break;
114
+ fs.copyFileSync(source, target, fs.constants.COPYFILE_EXCL);
100
115
  }
101
116
  catch (error) {
102
- if (error.code !== "EEXIST")
103
- throw error;
104
- sequence++;
117
+ if (error.code === "EEXIST")
118
+ continue;
119
+ throw error;
105
120
  }
121
+ chmodIfSupported(target, 0o600);
122
+ return target;
106
123
  }
107
- const latest = path.join(backupDir, "config.latest.json");
108
- fs.copyFileSync(configPath, latest);
109
- // 08-F4: a config backup carries the same sensitive fields as the live config
110
- // (endpoints, tokens). `copyFileSync` inherits the source's (often 0644) mode,
111
- // so tighten the backups to owner-only — mirrors the env-cli 0600 write floor.
112
- chmodIfSupported(timestamped, 0o600);
113
- chmodIfSupported(latest, 0o600);
114
- pruneOldBackups(backupDir);
115
- return { timestamped, latest };
116
124
  }
117
125
  /** chmod, skipped on a filesystem without POSIX modes (CIFS), where the mount sets them. */
118
126
  function chmodIfSupported(target, mode) {
@@ -5,7 +5,7 @@
5
5
  * Zod schema for AkmConfig — the single source of truth for the on-disk shape.
6
6
  *
7
7
  * ASSEMBLY BARREL: the individual section schemas live under `./schema/*` (one
8
- * cohesive module per config area — engines, embedding, improve, sources/
8
+ * cohesive module per config area — connections, harnesses, embedding, improve, sources/
9
9
  * bundles, index, search, output, feedback, workflow, setup, plus shared
10
10
  * `primitives`). This file assembles them into the top-level {@link AkmConfigShape}
11
11
  * / {@link AkmConfigSchema}, owns the cross-field {@link AkmConfigSchema.superRefine},
@@ -31,7 +31,7 @@
31
31
  * silently dropping them would mask user data loss.
32
32
  * - UNKNOWN-KEY POLICY: portable descriptive sections generally use
33
33
  * passthrough so version skew round-trips newer settings. Small finite
34
- * authority/toggle sections (`scheduler`, `execution`, `experimental`, and
34
+ * authority/toggle sections (`scheduler`, `experimental`, and
35
35
  * reranker policy) are strict: a misspelling there must not silently turn a
36
36
  * safety decision off. The top level remains passthrough and warns on
37
37
  * unknown keys.
@@ -39,28 +39,28 @@
39
39
  * enforced at save time via `superRefine` on the top-level schema.
40
40
  */
41
41
  import { z } from "zod";
42
- import { HARNESS_MODEL_WORK_IDS } from "../../integrations/harnesses/index.js";
43
- import { BUILTIN_IMPROVE_STRATEGY_NAMES, IMPROVE_ENGINE_PROCESSES, REMOVED_IMPROVE_STRATEGY_NAMES, } from "./engine-semantics.js";
42
+ import { BUILTIN_IMPROVE_STRATEGY_NAMES, REMOVED_IMPROVE_STRATEGY_NAMES } from "./engine-semantics.js";
43
+ import { ConnectionsSchema } from "./schema/connections.js";
44
44
  import { EmbeddingConnectionConfigSchema } from "./schema/embedding.js";
45
- import { EnginesSchema } from "./schema/engines.js";
46
- import { ExecutionPolicyConfigSchema } from "./schema/execution.js";
47
45
  import { ExperimentalConfigSchema } from "./schema/experimental.js";
48
46
  import { FeedbackConfigSchema } from "./schema/feedback.js";
47
+ import { HarnessesSchema } from "./schema/harnesses.js";
49
48
  import { ImproveConfigSchema } from "./schema/improve.js";
50
49
  import { IndexConfigSchema } from "./schema/index-config.js";
51
50
  import { OutputConfigSchema } from "./schema/output.js";
52
- import { CURRENT_CONFIG_VERSION, engineName, nonEmptyString, nonNegativeNumber } from "./schema/primitives.js";
51
+ import { CURRENT_CONFIG_VERSION, nonEmptyString, nonNegativeNumber } from "./schema/primitives.js";
53
52
  import { SchedulerConfigSchema } from "./schema/scheduler.js";
54
53
  import { SearchConfigSchema } from "./schema/search.js";
55
54
  import { SetupConfigSchema } from "./schema/setup.js";
56
55
  import { BundlesConfigSchema, RegistryConfigEntrySchema } from "./schema/sources-bundles.js";
57
56
  import { WorkflowConfigSchema } from "./schema/workflow.js";
58
57
  // ── Section re-exports (keep every `./config-schema` import path working) ────
58
+ export { ConnectionSchema, ConnectionsSchema } from "./schema/connections.js";
59
59
  export { EmbeddingConnectionConfigSchema } from "./schema/embedding.js";
60
- export { EngineConfigSchema, EnginesSchema, LlmConnectionConfigSchema, LlmProfileConfigSchema } from "./schema/engines.js";
61
60
  export { ExperimentalConfigSchema } from "./schema/experimental.js";
62
61
  export { FeedbackConfigSchema } from "./schema/feedback.js";
63
- export { ImproveConfigSchema } from "./schema/improve.js";
62
+ export { HarnessesSchema } from "./schema/harnesses.js";
63
+ export { ImproveConfigSchema, ImproveWhereSchema } from "./schema/improve.js";
64
64
  export { ConsolidateProcessConfigSchema, DistillProcessConfigSchema, ExtractProcessConfigSchema, ImproveProcessConfigSchema, ImproveProfileConfigSchema, MemoryInferenceProcessConfigSchema, ProactiveMaintenanceProcessConfigSchema, ReflectProcessConfigSchema, TriageProcessConfigSchema, ValidationProcessConfigSchema, } from "./schema/improve-processes.js";
65
65
  export { IndexConfigSchema, IndexPassConfigSchema } from "./schema/index-config.js";
66
66
  export { OutputConfigSchema } from "./schema/output.js";
@@ -70,14 +70,6 @@ export { SearchConfigSchema } from "./schema/search.js";
70
70
  export { SetupConfigSchema } from "./schema/setup.js";
71
71
  export { BundleConfigEntrySchema, BundlesConfigSchema, RegistryConfigEntrySchema, SourceConfigEntrySchema, } from "./schema/sources-bundles.js";
72
72
  export { WorkflowConfigSchema } from "./schema/workflow.js";
73
- // ── Defaults ───────────────────────────────────────────────────────────────
74
- export const DefaultsSchema = z
75
- .object({
76
- engine: engineName.optional(),
77
- llmEngine: engineName.optional(),
78
- improveStrategy: engineName.optional(),
79
- })
80
- .passthrough();
81
73
  // ── Top-level AkmConfig ────────────────────────────────────────────────────
82
74
  /**
83
75
  * Base object schema used both as the top-level shape and as the source of
@@ -104,12 +96,10 @@ export const AkmConfigShape = {
104
96
  // `resolveExtendsChain` (./config.ts), not validated here (a bad ref
105
97
  // surfaces as a `ConfigError` at load, naming the ref).
106
98
  extends: nonEmptyString.optional(),
107
- engines: EnginesSchema.optional(),
108
- defaults: DefaultsSchema.optional(),
99
+ connections: ConnectionsSchema.optional(),
100
+ harnesses: HarnessesSchema.optional(),
109
101
  semanticSearchMode: z.enum(["off", "auto"]).default("off"),
110
102
  embedding: EmbeddingConnectionConfigSchema.optional(),
111
- // Host-local execution authority. Inherited layers are stripped.
112
- execution: ExecutionPolicyConfigSchema.optional(),
113
103
  index: IndexConfigSchema.optional(),
114
104
  registries: z.array(RegistryConfigEntrySchema).optional(),
115
105
  // `bundles` + `defaultBundle` are the only source configuration shape. The
@@ -197,103 +187,26 @@ export const AkmConfigSchema = AkmConfigBaseSchema.superRefine((config, ctx) =>
197
187
  });
198
188
  }
199
189
  }
200
- for (const [name, engine] of Object.entries(config.engines ?? {})) {
201
- if (engine.kind === "agent" && engine.llmEngine) {
202
- const fallback = config.engines?.[engine.llmEngine];
203
- if (!fallback || fallback.kind !== "llm") {
204
- ctx.addIssue({
205
- code: z.ZodIssueCode.custom,
206
- path: ["engines", name, "llmEngine"],
207
- message: "llmEngine must name an LLM engine",
208
- });
209
- }
210
- }
211
- }
212
- const defaultEngine = config.defaults?.engine;
213
- if (defaultEngine && !config.engines?.[defaultEngine]) {
214
- ctx.addIssue({
215
- code: z.ZodIssueCode.custom,
216
- path: ["defaults", "engine"],
217
- message: "engine does not name a configured engine",
218
- });
219
- }
220
- // One rule for every key unattended model work reads its engine from: the
221
- // engine must confine the model-work tool policy (an LLM, or an agent whose
222
- // harness does), because that work runs over generated content with no one
223
- // watching.
224
- const confining = [...HARNESS_MODEL_WORK_IDS];
225
- const confiningPlatforms = `${confining.slice(0, -1).join(", ")} or ${confining.at(-1)}`;
226
- const modelWorkEngine = (name, path) => {
227
- if (!name)
228
- return;
229
- const engine = config.engines?.[name];
230
- if (!engine) {
231
- ctx.addIssue({ code: z.ZodIssueCode.custom, path, message: "engine does not name a configured engine" });
232
- }
233
- else if (engine.kind !== "llm" && !HARNESS_MODEL_WORK_IDS.has(engine.platform)) {
234
- ctx.addIssue({
235
- code: z.ZodIssueCode.custom,
236
- path,
237
- message: `engine "${name}" (platform ${engine.platform}) cannot confine the model-work tool policy, which unattended model work requires. Use an LLM engine, or an agent engine on ${confiningPlatforms}.`,
238
- });
239
- }
240
- };
241
- modelWorkEngine(config.defaults?.llmEngine, ["defaults", "llmEngine"]);
242
- for (const [passName, pass] of Object.entries(config.index ?? {})) {
243
- const engine = pass?.engine;
244
- if (typeof engine === "string")
245
- modelWorkEngine(engine, ["index", passName, "engine"]);
246
- }
247
- const workflowJudge = config.workflow?.judgeEngine;
248
- if (workflowJudge && !config.engines?.[workflowJudge]) {
249
- ctx.addIssue({
250
- code: z.ZodIssueCode.custom,
251
- path: ["workflow", "judgeEngine"],
252
- message: "judgeEngine does not name a configured engine",
253
- });
254
- }
255
- const defaultStrategy = config.defaults?.improveStrategy;
256
- if (defaultStrategy &&
190
+ const improveStrategy = config.improve?.strategy;
191
+ if (improveStrategy &&
257
192
  // graph-refresh is exempt from this eager, config-load-time check: unlike
258
193
  // a plain typo, it is a specific, known retirement, and refusing it here
259
194
  // would fail every command's config load (including `akm migrate apply`,
260
195
  // the one that fixes this). `resolveImproveStrategy`
261
196
  // (src/commands/improve/improve-strategies.ts) refuses it lazily, at
262
197
  // improve-invocation time, with the same message either way.
263
- defaultStrategy !== "graph-refresh" &&
198
+ improveStrategy !== "graph-refresh" &&
264
199
  // The strategies removed in 0.10 (#1130) are exempt for the same reason:
265
200
  // `resolveImproveStrategy` refuses them lazily, naming `default`.
266
- !REMOVED_IMPROVE_STRATEGY_NAMES.includes(defaultStrategy) &&
267
- !BUILTIN_IMPROVE_STRATEGY_NAMES.includes(defaultStrategy) &&
268
- !config.improve?.strategies?.[defaultStrategy]) {
201
+ !REMOVED_IMPROVE_STRATEGY_NAMES.includes(improveStrategy) &&
202
+ !BUILTIN_IMPROVE_STRATEGY_NAMES.includes(improveStrategy) &&
203
+ !config.improve?.strategies?.[improveStrategy]) {
269
204
  ctx.addIssue({
270
205
  code: z.ZodIssueCode.custom,
271
- path: ["defaults", "improveStrategy"],
272
- message: "improveStrategy does not name a built-in or configured strategy",
206
+ path: ["improve", "strategy"],
207
+ message: "strategy does not name a built-in or configured improve strategy",
273
208
  });
274
209
  }
275
- for (const [strategyName, strategy] of Object.entries(config.improve?.strategies ?? {})) {
276
- const strategyPath = ["improve", "strategies", strategyName];
277
- modelWorkEngine(strategy.engine, [...strategyPath, "engine"]);
278
- for (const [processName, process] of Object.entries(strategy.processes ?? {})) {
279
- const processConfig = process;
280
- const processPath = [...strategyPath, "processes", processName];
281
- if (processConfig.engine && !IMPROVE_ENGINE_PROCESSES.includes(processName)) {
282
- ctx.addIssue({
283
- code: z.ZodIssueCode.custom,
284
- path: [...processPath, "engine"],
285
- message: `${processName} does not dispatch an engine`,
286
- });
287
- }
288
- else {
289
- modelWorkEngine(processConfig.engine, [...processPath, "engine"]);
290
- }
291
- if (processConfig.judgment?.enabled === true) {
292
- modelWorkEngine(processConfig.judgment.engine, [...processPath, "judgment", "engine"]);
293
- }
294
- modelWorkEngine(processConfig.qualityGate?.engine, [...processPath, "qualityGate", "engine"]);
295
- }
296
- }
297
210
  // #464.a: defaultWriteTarget must name a configured source. 0.9.0 (spec
298
211
  // §10.1): sources are `bundles` keys, so it must name a bundle. With no
299
212
  // bundles configured, error out instead of silently accepting (no implicit
@@ -117,7 +117,7 @@ function hashBundleSourceIdentity(identity) {
117
117
  }
118
118
  /**
119
119
  * The resolved primary stash path — the `defaultBundle`'s filesystem `path`
120
- * (spec §10.1) — or `undefined` when no filesystem primary is configured.
120
+ * — or `undefined` when no filesystem primary is configured.
121
121
  */
122
122
  export function primaryBundlePath(config) {
123
123
  const bundles = config.bundles;
@@ -212,12 +212,12 @@ export function bundleEntryToSourceEntry(key, bundle, isPrimary = false) {
212
212
  return undefined;
213
213
  }
214
214
  /**
215
- * Desired 0.9.0 bundle descriptor for a registry-installed source (spec §10.1).
215
+ * Desired 0.9.0 bundle descriptor for a registry-installed source.
216
216
  * Maps the install source kind onto the ONE source descriptor a bundle entry
217
217
  * carries: git/github → a provider-ready clone URL, npm → `{ npm: ref }`,
218
218
  * everything else (local/filesystem) → `{ path: stashRoot }`.
219
219
  *
220
- * CRITICAL (spec §10.2:453): the materialized cache root NEVER appears in the
220
+ * CRITICAL: the materialized cache root NEVER appears in the
221
221
  * descriptor for a git/npm bundle — the desired config carries only the source
222
222
  * descriptor; the install locator stays in `registryId` and the resolved root
223
223
  * belongs exclusively in the lock's `localRoot`. Callers layer
@@ -3,10 +3,10 @@
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  // Harness ids derive from the harness registry; nothing the registry imports
5
5
  // reaches `core/config` at runtime, so there is no cycle.
6
- import { HARNESS_AGENT_DISPATCH_IDS, VALID_HARNESS_IDS } from "../../integrations/harnesses/index.js";
6
+ import { VALID_HARNESS_IDS } from "../../integrations/harnesses/index.js";
7
7
  /**
8
8
  * Canonical list of valid agent harness / platform ids, derived from the harness
9
- * registry so the Zod `AgentPlatformSchema` enum, the agent-engine platform
10
- * union, and setup's `DetectedHarness` union cannot drift.
9
+ * registry so the harness `platform` check and setup's `DetectedHarness` union
10
+ * cannot drift.
11
11
  */
12
- export { HARNESS_AGENT_DISPATCH_IDS, VALID_HARNESS_IDS };
12
+ export { VALID_HARNESS_IDS };