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
@@ -7,21 +7,26 @@ import { DEFAULT_SCHEDULED_TASK_TIMEOUT_MS } from "./run-workflow-task.js";
7
7
  import { appendHistory } from "./task-history.js";
8
8
  import { persistRunLog, scrubTaskOutput, streamLines } from "./task-log.js";
9
9
  export async function runPreparedCommandTask(input) {
10
- const { task, logPath, startedAt, now, agentOptions, provenance } = input;
10
+ const { task, logPath, startedAt, now, provenance } = input;
11
11
  const dispatchOptions = {
12
12
  ...(input.runAgentImpl ? { runAgent: input.runAgentImpl } : {}),
13
- ...(input.chatCompletionImpl ? { chat: input.chatCompletionImpl } : {}),
14
- ...(agentOptions ? { runOptions: agentOptions } : {}),
15
- // F-1 (R-07 fix, spec §5.2 point 3): threads the resolved event source
16
- // into the dispatched engine's child env and the recorded usage events.
13
+ // Threads the resolved event source into the dispatched harness's child env
14
+ // and the recorded usage events.
17
15
  eventSource: provenance.eventSource,
18
16
  };
19
- // Unset anywhere (task `timeout:`, command asset, engine) → the unattended
20
- // default; an explicit value or `null` (opt-out) already sits on the request.
21
- const { request, runner } = task.invocation;
22
- const unset = !Object.hasOwn(request.runtime, "timeoutMs") && runner.timeoutMs === undefined;
17
+ // Unset anywhere (task `timeout:`, command asset, connection or harness) → the
18
+ // unattended default; an explicit value or `null` (opt-out) was set by one of them.
19
+ const { runner, request, provenance: provenances } = task.invocation;
20
+ const unset = provenances["runtime.timeoutMs"]?.via === "default";
23
21
  const invocation = unset
24
- ? { ...task.invocation, runner: { ...runner, timeoutMs: DEFAULT_SCHEDULED_TASK_TIMEOUT_MS } }
22
+ ? {
23
+ ...task.invocation,
24
+ request: {
25
+ ...request,
26
+ runtime: { ...request.runtime, timeoutMs: DEFAULT_SCHEDULED_TASK_TIMEOUT_MS },
27
+ },
28
+ runner: { ...runner, timeoutMs: DEFAULT_SCHEDULED_TASK_TIMEOUT_MS },
29
+ }
25
30
  : task.invocation;
26
31
  const result = await dispatchPreparedCommandInvocation(invocation, dispatchOptions);
27
32
  const engineName = result.engine;
@@ -6,21 +6,15 @@
6
6
  * shell-command builders (`shellCommand`, `resolveLeadingBareAkmCommand`,
7
7
  * `quoteShellArgument`).
8
8
  *
9
- * Moved from src/tasks/runner.ts (spec docs/plans/specs/p1b-model-extraction.md
10
- * §5.1, §9, runner.ts:294-455).
9
+ * The child env's `AKM_EVENT_SOURCE` stamp reads `provenance.eventSource`
10
+ * (`"task"` under the default provenance context, run/provenance.ts).
11
11
  *
12
- * F-1 (spec §5.2 point 1): the child env's `AKM_EVENT_SOURCE` stamp now reads
13
- * `provenance.eventSource` instead of the hardcoded literal `"task"` — with
14
- * the default provenance context (run/provenance.ts) this is byte-equivalent
15
- * to before (P-06 stays green unchanged).
16
- *
17
- * F-2 (D8, spec §5.3): the result's `target` is now `{kind:"shell", cmd}` or
18
- * `{kind:"script", cmd}` — formerly one shared `{kind:"command", cmd}`.
12
+ * The result's `target` is `{kind:"shell", cmd}` or `{kind:"script", cmd}`.
19
13
  */
20
14
  import path from "node:path";
21
15
  import { assertNever } from "../../core/assert.js";
16
+ import { childProcessEnv } from "../../core/paths.js";
22
17
  import { runManagedSubprocess, streamCaptureFailure } from "../../core/subprocess.js";
23
- import { assertFrozenDirectoryContained } from "../../execution/directory-identity.js";
24
18
  import { cleanupFrozenScript, frozenScriptCommand, materializeFrozenScript } from "../frozen-script.js";
25
19
  import { resolveAkmInvocation } from "../resolve-akm-bin.js";
26
20
  import { finishAttempt } from "./attempt-lifecycle.js";
@@ -152,7 +146,7 @@ export async function runNativeTask(input) {
152
146
  // above) — a timeout or SIGTERM to the direct child would reap the whole
153
147
  // group, but nothing tied THIS process's own termination to that same
154
148
  // ladder, so a signal to the runner left its child running as an orphan.
155
- // Aborting `runManagedSubprocess` here runs its normal SIGTERM→SIGKILL
149
+ // Aborting `runManagedSubprocess` here runs its normal SIGINT→SIGTERM→SIGKILL
156
150
  // kill ladder against the child's process group.
157
151
  const abortController = new AbortController();
158
152
  const forwardTerminationSignal = (signal) => {
@@ -163,20 +157,13 @@ export async function runNativeTask(input) {
163
157
  process.once("SIGTERM", onSigterm);
164
158
  process.once("SIGINT", onSigint);
165
159
  try {
166
- // Re-resolve the authored root/cwd immediately before spawn so a
167
- // symlink, ancestor, bundle-root, or directory/file swap cannot redirect
168
- // execution outside that physical workspace. This is a live containment
169
- // check, not an identity comparison — it does not care whether the
170
- // underlying device/inode changed (e.g. a remount), only whether the
171
- // resolved cwd still lives inside its root.
172
- assertFrozenDirectoryContained(task.cwdIdentity);
173
160
  if (task.kind === "script") {
174
161
  materialized = materializeFrozenScript(task);
175
162
  cmd = frozenScriptCommand(task, materialized.file);
176
163
  }
177
164
  // Managed spawn (src/core/subprocess.ts): process-GROUP kill so a timeout
178
- // reaps the whole command tree (no orphans), and a SIGTERM→SIGKILL ladder
179
- // so a child that ignores SIGTERM can't wedge the run forever. `signal`
165
+ // reaps the whole command tree (no orphans), and a SIGINT→SIGTERM→SIGKILL
166
+ // ladder so a child that ignores both can't wedge the run forever. `signal`
180
167
  // ties that same ladder to a termination signal received by this
181
168
  // process itself (#956), not only to the timeout.
182
169
  const result = await runManagedSubprocess(cmd, {
@@ -187,7 +174,7 @@ export async function runNativeTask(input) {
187
174
  // A more specific stamp already in the environment (e.g. improve's
188
175
  // AKM_EVENT_SOURCE=improve on its child spawns) still wins in children.
189
176
  env: {
190
- ...process.env,
177
+ ...childProcessEnv(),
191
178
  ...task.environment,
192
179
  AKM_EVENT_SOURCE: process.env.AKM_EVENT_SOURCE ?? provenance.eventSource,
193
180
  },
@@ -6,22 +6,21 @@
6
6
  * scheduled moment.
7
7
  *
8
8
  * The durable boundary is intentional: id/bundle resolution, source read,
9
- * strict task source parsing, target resolution, command
10
- * authorization/lowering, workflow projectability, and frozen script-byte
9
+ * strict task source parsing, target resolution, command lowering, workflow
10
+ * projectability, and frozen script-byte
11
11
  * capture (load-task.ts) all finish before an attempt is reserved or a log is
12
12
  * created (attempt-lifecycle.ts). Once prepared, the runner dispatches the
13
13
  * immutable command, workflow, shell, or script projection to its own arm
14
14
  * module (run-command-task.ts, run-workflow-task.ts, run-native-task.ts) and
15
15
  * records that actual attempt. Task source v4 has no document-level disabled
16
- * state to skip at fire time (P4-N6) — a schedule binding that should not
16
+ * state to skip at fire time — a schedule binding that should not
17
17
  * fire is never installed with the OS scheduler in the first place
18
18
  * (scheduler-sync.ts), so every invocation that reaches `runTask` dispatches.
19
19
  *
20
20
  * Orchestration only.
21
21
  *
22
- * D5 (spec §1.2/§5.2, "Threading"): resolves `options.provenance` against the
23
- * default context (run/provenance.ts) ONCE per call, and threads the result
24
- * into every dispatch arm.
22
+ * Resolves `options.provenance` against the default context (run/provenance.ts)
23
+ * ONCE per call, and threads the result into every dispatch arm.
25
24
  */
26
25
  import { runWorkflowSteps } from "../../workflows/exec/run-workflow.js";
27
26
  import { recordTaskAttemptFailure, reserveTaskAttempt } from "./attempt-lifecycle.js";
@@ -67,8 +66,6 @@ export async function runTask(id, options) {
67
66
  historyReserved: attempt.historyReserved,
68
67
  provenance,
69
68
  runAgentImpl: options.runAgentImpl,
70
- agentOptions: options.agentOptions,
71
- chatCompletionImpl: options.chatCompletionImpl,
72
69
  });
73
70
  }
74
71
  options.beforeNativeDispatch?.(task);
@@ -7,18 +7,12 @@
7
7
  * (`DEFAULT_WORKFLOW_TASK_TIMEOUT_MS`, `DEFAULT_SCHEDULED_TASK_TIMEOUT_MS`)
8
8
  * every arm reads.
9
9
  *
10
- * Moved from src/tasks/runner.ts (spec docs/plans/specs/p1b-model-extraction.md
11
- * §5.1, §9, runner.ts:456-675).
12
- *
13
- * F-1 (spec §5.2 point 2): the global `process.env.AKM_EVENT_SOURCE` stamp
14
- * and its `finally` restore are DELETED outright — `process.env` is never
15
- * written by this arm any more. The resolved event source is instead passed
16
- * into `runWorkflowStepsImpl` via a new optional `eventSource` option,
17
- * `process.env.AKM_EVENT_SOURCE ?? provenance.eventSource` (ambient still
18
- * wins, matching the native arm's own precedence — D5 clause d). Threading
19
- * that option to an exec-unit child's env is owned by
20
- * src/workflows/exec/run-workflow.ts / step-work.ts / exec-unit.ts, not this
21
- * file.
10
+ * `process.env` is never written by this arm. The resolved event source is
11
+ * passed into `runWorkflowStepsImpl` via the optional `eventSource` option,
12
+ * `process.env.AKM_EVENT_SOURCE ?? provenance.eventSource` (ambient wins,
13
+ * matching the native arm's own precedence). Threading that option to an
14
+ * exec-unit child's env is owned by src/workflows/exec/run-workflow.ts /
15
+ * step-work.ts / exec-unit.ts, not this file.
22
16
  */
23
17
  import { armAbortDeadline } from "../../core/abort-deadline.js";
24
18
  import { assertNever } from "../../core/assert.js";
@@ -71,7 +65,7 @@ export async function runWorkflowTask(input) {
71
65
  // aborted by a timer. The engine reads `options.signal` at every step
72
66
  // boundary and breaks GRACEFULLY — in-flight units are cancelled, the journal
73
67
  // and the run lease are retained, and the run is left `active`, i.e.
74
- // resumable with `akm workflow resume`.
68
+ // continuable with `akm workflow run <run-id>`.
75
69
  const controller = new AbortController();
76
70
  const deadline = armAbortDeadline(controller, {
77
71
  timeoutMs,
@@ -85,13 +79,12 @@ export async function runWorkflowTask(input) {
85
79
  // The prompt path logs the engine-fallback announcement; a workflow-backed
86
80
  // task must leave the same trace rather than silently using a chosen engine.
87
81
  let runWarnings = [];
88
- // F-1 (D5, spec §5.2 point 2): thread the resolved event source through
89
- // explicitly instead of stamping process.env — this arm executes IN-PROCESS,
90
- // so a global stamp used to be how child akm invocations made by workflow
91
- // steps inherited it; the explicit eventSource option (threaded to
92
- // src/workflows/exec/run-workflow.ts -> step-work.ts -> exec-unit.ts's
93
- // childEnv) now does that job without ever mutating process.env. A more
94
- // specific ambient stamp already present still wins, matching the native arm.
82
+ // Thread the resolved event source through explicitly instead of stamping
83
+ // process.env — this arm executes IN-PROCESS, so the explicit eventSource option
84
+ // (threaded to src/workflows/exec/run-workflow.ts -> step-work.ts -> exec-unit.ts's
85
+ // childEnv) is how child akm invocations made by workflow steps inherit it,
86
+ // without ever mutating process.env. A more specific ambient stamp already
87
+ // present still wins, matching the native arm.
95
88
  const eventSource = process.env.AKM_EVENT_SOURCE ?? provenance.eventSource;
96
89
  try {
97
90
  const execution = await runWorkflowStepsImpl({
@@ -130,7 +123,7 @@ export async function runWorkflowTask(input) {
130
123
  const timeoutError = timedOutAfterMs === undefined
131
124
  ? undefined
132
125
  : new Error(`Workflow run timed out after ${timedOutAfterMs}ms and was aborted at a step boundary` +
133
- (detail?.id ? ` — resume it with \`akm workflow resume ${detail.id}\`.` : "."));
126
+ (detail?.id ? ` — continue it with \`akm workflow run ${detail.id}\`.` : "."));
134
127
  // One failure value for the three sinks below (status, log line, history
135
128
  // detail): a thrown error outranks a gate rejection, which outranks the
136
129
  // deadline. Re-laddering per sink is how a log line ends up naming a
@@ -5,24 +5,16 @@
5
5
  * The task_history read/write boundary: `appendHistory` (write) and
6
6
  * `readTaskHistory` / `taskHistoryRowToResult` (read).
7
7
  *
8
- * Moved from src/tasks/runner.ts (spec docs/plans/specs/p1b-model-extraction.md
9
- * §5.1, §9, runner.ts:1071-1158). `appendHistory` was module-private at head;
10
- * it is exported here because every dispatch arm (run-native-task.ts,
11
- * run-workflow-task.ts, run-command-task.ts), attempt-lifecycle.ts, and
12
- * run-task.ts's disabled-task path all call it (spec §5.1's module split
13
- * moves what was one file's internal call graph across several files).
8
+ * `appendHistory` is exported because every dispatch arm (run-native-task.ts,
9
+ * run-workflow-task.ts, run-command-task.ts) and attempt-lifecycle.ts call it.
14
10
  *
15
- * D8 result-vocabulary re-code (why, and the WRITE side's exact shape): see
16
- * docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md.
17
- * The READ side used to carry a permanent legacy-vocabulary mapping here
18
- * (row B-51 of docs/plans/specs/p4-deletions-closeout.md called deleting it
19
- * "review-blocking") — SUPERSEDED: `task_history` is DB-owned data, so the
20
- * remap is now a one-time schema migration
21
- * (`025-task-history-vocabulary-backfill` in src/core/state/migrations.ts)
22
- * instead of a read-side shim run forever. Every row this function sees now
23
- * carries the current vocabulary's `target_kind` strings; the P0-pinned null
24
- * fallbacks still apply (workflow `ref` falls back to `""`, the command
25
- * arm's `engine` falls back to `null`).
11
+ * The READ side carries no legacy-vocabulary mapping: `task_history` is
12
+ * DB-owned data, so the remap to the current vocabulary is a one-time schema
13
+ * migration (`025-task-history-vocabulary-backfill` in
14
+ * src/core/state/migrations.ts) rather than a read-side shim run forever.
15
+ * Every row this function sees carries the current vocabulary's `target_kind`
16
+ * strings; the null fallbacks still apply (workflow `ref` falls back to `""`,
17
+ * the command arm's `engine` falls back to `null`).
26
18
  *
27
19
  * A DAG leaf with respect to the rest of src/tasks/run/**: this module
28
20
  * imports TaskRunResult/TaskRunStatus's TYPE from ./task-result but no VALUE
@@ -6,14 +6,10 @@
6
6
  * structured logs.db rows, and the shared redaction pass both sinks go
7
7
  * through before either is written.
8
8
  *
9
- * Moved body-intact from src/tasks/runner.ts (spec
10
- * docs/plans/specs/p1b-model-extraction.md §5.1, runner.ts:779-968).
11
- *
12
9
  * A DAG leaf with respect to the rest of src/tasks/run/**: nothing here
13
10
  * imports ./task-result, ./task-history, or ./attempt-lifecycle, so every
14
11
  * other run/** module can depend on this one without risking an import
15
- * cycle (tests/architecture/import-cycle-ratchet.test.ts counts type-only
16
- * imports as real edges too).
12
+ * cycle.
17
13
  */
18
14
  import fs from "node:fs";
19
15
  import path from "node:path";
@@ -52,11 +52,7 @@ export const SCHEDULED_TASK_CONTEXT_KEYS = [
52
52
  * held their locks in a `locks/` directory no interactive command could see.
53
53
  */
54
54
  const EXPLICIT_CONTEXT_KEYS = ["AKM_CONFIG_DIR", "AKM_DATA_DIR", "AKM_CACHE_DIR", "AKM_STATE_DIR"];
55
- /**
56
- * The AKM directory context of the current process. Child environments that
57
- * are built from an allowlist must forward this closed set explicitly so
58
- * nested AKM commands stay in the same installation.
59
- */
55
+ /** The AKM directory context of the current process, so nested AKM commands stay in the same installation. */
60
56
  export function scheduledTaskContextEnv(env = process.env) {
61
57
  const out = {};
62
58
  for (const key of SCHEDULED_TASK_CONTEXT_KEYS) {
@@ -207,11 +203,10 @@ function parsePublicSchedulerInvocation(invocation) {
207
203
  }
208
204
  if (invocation[index] !== "--scheduled")
209
205
  return undefined;
210
- // P2b Lane B (spec §4.4, §1.7 B-N3): zero or more `--<name> <value>`
211
- // schedule-supplied input flags may follow `--scheduled` — the same
212
- // trailing tail `compileTaskSchedulerBindings` compiles from
213
- // `schedule[i].inputs`. Absent/empty is the pre-P2b shape, byte-identical
214
- // (B-03).
206
+ // Zero or more `--<name> <value>` schedule-supplied input flags may follow
207
+ // `--scheduled` — the same trailing tail `compileTaskSchedulerBindings`
208
+ // compiles from `schedule[i].inputs`. Absent/empty is the earlier,
209
+ // byte-identical shape.
215
210
  if (!isValidSchedulerInputFlagTail(invocation.slice(index + 1)))
216
211
  return undefined;
217
212
  return { invocation: [...invocation], ...(target !== undefined ? { target } : {}) };
@@ -233,23 +228,23 @@ function parsePublicSchedulerInvocation(invocation) {
233
228
  }
234
229
  }
235
230
  /**
236
- * Validate an OPTIONAL trailing schedule-input flag tail (spec §1.7 B-N3):
237
- * empty is valid (the pre-P2b shape). Otherwise the tail is a sequence of
231
+ * Validate an OPTIONAL trailing schedule-input flag tail: empty is valid
232
+ * (the earlier shape). Otherwise the tail is a sequence of
238
233
  * entries, each EITHER:
239
234
  *
240
- * - a single inline `--<name>=<value>` token (code-review finding,
241
- * scheduler-binding.ts:536 — the ONLY encoding a dash-leading value's
242
- * exact text can round-trip through, since `<value>` here is everything
243
- * after the first `=`, whatever its leading character); or
235
+ * - a single inline `--<name>=<value>` token (the ONLY encoding a
236
+ * dash-leading value's exact text can round-trip through, since `<value>`
237
+ * here is everything after the first `=`, whatever its leading character);
238
+ * or
244
239
  * - a `(--<name>, <value>)` pair, where `<value>` is a single non-flag
245
- * token (does not start with `-`) — the pre-P2b shape.
240
+ * token (does not start with `-`) — the earlier shape.
246
241
  *
247
242
  * In both forms `<name>` matches {@link INPUT_NAME_PATTERN} and no name
248
243
  * repeats. A bare flag, a repeated name, a flag-shaped value in the pair
249
244
  * form, or a malformed token are all refused. This validates SHAPE only;
250
245
  * the real materialization against the task's declared contract happens
251
246
  * through the same `parseTaskInputFlags` + `materializeInputFlags` path
252
- * `akm task run --<name>` already uses (B-48) — `parseTaskInputFlags`
247
+ * `akm task run --<name>` already uses — `parseTaskInputFlags`
253
248
  * accepts both forms natively (its inline-`=` branch never inspects the
254
249
  * value's leading character).
255
250
  */
@@ -49,7 +49,6 @@ async function compileTaskSources(input, desired, failures) {
49
49
  const parsed = parseTaskSource({
50
50
  yaml: fs.readFileSync(file, "utf8"),
51
51
  filePath: file,
52
- workspaceRoot: input.sourceRoot,
53
52
  });
54
53
  // A task with no `schedule:` is run by hand or by a workflow step; it
55
54
  // contributes no binding and is not sync's to validate.
@@ -3,48 +3,29 @@
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  /**
5
5
  * The bounded-document front end and field helpers both task source grammars
6
- * share (spec docs/plans/specs/p2a-task-source-v4.md §1.5 D2-N4, §3.1).
7
- *
8
- * This is the actual D2-N4 move, not a parallel reimplementation: every
9
- * helper below — including the `TASK_V3_MAX_*` resource bounds and
10
- * `assertBoundedTaskYamlDocument` — is now OWNED here, body-intact from
11
- * `src/tasks/source-v3.ts`. `source-v3.ts` imports every one of them (and
12
- * re-exports `assertBoundedTaskYamlDocument` / the `TASK_V3_MAX_*` constants
13
- * at their existing names, since those were already part of its public
14
- * surface) instead of declaring its own copies. §9's acceptance criterion is
15
- * structural: "src/tasks/source/bounded-document.ts exists and owns the
16
- * D2-N4 helpers; src/tasks/source-v3.ts imports them and contains no copy of
17
- * any of them" — `tests/tasks/bounded-document.test.ts`'s last describe
18
- * block pins this with an AST scan of `source-v3.ts`, not just a runtime
19
- * behavior check (a copy-instead-of-move implementation would pass every
20
- * OTHER test in that file and in `tests/tasks/source-v3.test.ts`, because
21
- * both files would still call functions they have in scope either way).
6
+ * share. Every helper below — including the `TASK_V3_MAX_*` resource bounds and
7
+ * `assertBoundedTaskYamlDocument` — is owned here. `source-v3.ts` imports every
8
+ * one of them (and re-exports `assertBoundedTaskYamlDocument` and the
9
+ * `TASK_V3_MAX_*` constants at their existing names, since those were already
10
+ * part of its public surface) and declares no copy of any of them.
11
+ * `tests/tasks/bounded-document.test.ts`'s last describe block pins this with
12
+ * an AST scan of `source-v3.ts`, not just a runtime behavior check (a copy
13
+ * would pass every other test in that file and in
14
+ * `tests/tasks/source-v3.test.ts`, because both files would still call
15
+ * functions they have in scope either way).
22
16
  *
23
17
  * This module deliberately imports NOTHING from `../source-v3` (not even a
24
- * type) — `tests/architecture/import-cycle-ratchet.test.ts` is an ABSOLUTE
25
- * no-cycle gate over all of `src/**` (its baseline emptied at chunk-8 and
26
- * counts type-only imports as real graph edges), and `source-v3.ts` now
27
- * imports from this file, so a reverse edge here would close a cycle. Where
28
- * a moved helper's signature referenced a v3-only type
29
- * (`TaskV3AkmOptions["tools"]`, `TaskV3Environment`) the return type is
30
- * inlined structurally instead — invisible at runtime, and TypeScript's
31
- * structural typing makes the inlined shape and the named alias
32
- * interchangeable at every call site.
18
+ * type): `source-v3.ts` imports from this file, so a reverse edge here would
19
+ * close an import cycle. Where a helper's signature referenced a v3-only type
20
+ * (`TaskV3Environment`) the return type is inlined structurally instead —
21
+ * invisible at runtime, and TypeScript's structural typing makes the inlined
22
+ * shape and the named alias interchangeable at every call site.
33
23
  *
34
- * `parseTimeout` and `parseTools` stay v3-only in the sense that they
35
- * hardcode the `["akm", …]` field path (byte-identical to v3's existing
36
- * behavior — that hardcoding is exactly what D2-N4's binding resolution asks
37
- * to preserve). Task source v4's top-level `timeout:`/`tools:` fields have
38
- * their own siblings in `src/tasks/source/task-source-v4.ts`
39
- * (`parseTimeoutTopLevel`/`parseToolsTopLevel`) with the same accept/reject
40
- * semantics at a different, un-prefixed field path — v3 imports the two
41
- * below rather than declaring them itself, purely because D2-N4 homes every
42
- * one of these named helpers here. `nullableSelector` is the same kind of
43
- * `["akm", …]`-hardcoding helper but is NOT in D2-N4's named list and stays
44
- * declared directly in `source-v3.ts`.
24
+ * `parseTimeout` hardcodes the `["akm", …]` field path. Task source v4's
25
+ * top-level `timeout:` field has its own sibling in
26
+ * `src/tasks/source/task-source-v4.ts` (`parseTimeoutTopLevel`) with the same
27
+ * accept/reject semantics at a different, un-prefixed field path.
45
28
  */
46
- import fs from "node:fs";
47
- import path from "node:path";
48
29
  import { types as utilTypes } from "node:util";
49
30
  import { isAlias, isMap, isScalar, isSeq, LineCounter, parseDocument } from "yaml";
50
31
  import { wellFormedUnicode } from "../../core/common.js";
@@ -238,63 +219,6 @@ export function parseTimeout(value, ctx) {
238
219
  }
239
220
  return value;
240
221
  }
241
- /**
242
- * `akm.tools` — v3-only (hardcodes the `["akm", "tools"]` field path, see
243
- * this module's header). Body-intact from `source-v3.ts`; the return type is
244
- * inlined (was `TaskV3AkmOptions["tools"]`) so this module imports nothing
245
- * from `../source-v3` (see header — the import-cycle ratchet is absolute).
246
- */
247
- export function parseTools(value, ctx) {
248
- if (value === null || typeof value === "string")
249
- return value;
250
- if (Array.isArray(value)) {
251
- if (value.some((entry) => typeof entry !== "string"))
252
- sourceError(ctx, ["akm", "tools"], "array values must be strings.");
253
- return value;
254
- }
255
- if (typeof value === "object")
256
- return value;
257
- sourceError(ctx, ["akm", "tools"], "must be a string, string array, mapping, or null.");
258
- }
259
- /**
260
- * `working-directory:` is already a top-level field in both grammars —
261
- * reused body-intact, field path unchanged (`source-v3.ts:677-714`).
262
- */
263
- export function validateWorkingDirectory(value, ctx) {
264
- if (value.trim().length === 0 ||
265
- value.includes("\0") ||
266
- path.posix.isAbsolute(value.replaceAll("\\", "/")) ||
267
- /^[A-Za-z]:[\\/]/.test(value) ||
268
- value.startsWith("\\\\")) {
269
- sourceError(ctx, ["working-directory"], "must be a non-empty relative path contained by the workspace root.");
270
- }
271
- const segments = value.replaceAll("\\", "/").split("/");
272
- if (segments.some((segment) => segment === ".." || segment.length === 0)) {
273
- sourceError(ctx, ["working-directory"], "must not contain empty or escaping path segments.");
274
- }
275
- if (!ctx.workspaceRoot) {
276
- sourceError(ctx, ["working-directory"], "requires a workspace root so physical containment can be verified.");
277
- }
278
- let realRoot;
279
- let realCandidate;
280
- try {
281
- realRoot = fs.realpathSync(ctx.workspaceRoot);
282
- const candidate = path.resolve(realRoot, value);
283
- const stat = fs.statSync(candidate);
284
- if (!stat.isDirectory())
285
- sourceError(ctx, ["working-directory"], "must resolve to a directory.");
286
- realCandidate = fs.realpathSync(candidate);
287
- }
288
- catch (cause) {
289
- if (cause instanceof UsageError)
290
- throw cause;
291
- sourceError(ctx, ["working-directory"], `cannot be physically verified: ${cause instanceof Error ? cause.message : String(cause)}.`);
292
- }
293
- const relative = path.relative(realRoot, realCandidate);
294
- if (relative.startsWith("..") || path.isAbsolute(relative)) {
295
- sourceError(ctx, ["working-directory"], "resolves outside the workspace root and is not physically contained.");
296
- }
297
- }
298
222
  export function yamlProblem(message) {
299
223
  return message.split("\n")[0]?.trim() || "invalid YAML";
300
224
  }
@@ -373,32 +297,22 @@ export function assertBoundedTaskYamlDocument(document, options) {
373
297
  }
374
298
  /**
375
299
  * Parse hostile YAML without aliases/tags/merges, then hand back the bounded
376
- * `{root, lineAt}` pair both grammars that read a task document consume —
377
- * originally lifted from the now-deleted `parseTaskV3Yaml`
378
- * (`source-v3.ts:894-952`), generalized only by `sourceLabel`.
300
+ * `{root, lineAt}` pair both grammars that read a task document consume,
301
+ * generalized by `sourceLabel`.
379
302
  *
380
- * P4 (docs/plans/specs/p4-deletions-closeout.md §3.2) deleted task v3
381
- * acceptance from `src` entirely — `parseTaskV3Yaml` and its `"task v3
382
- * source"` label no longer exist here (the grammar survives only in the
383
- * vendored, frozen `scripts/akm-migrate/migrate/task-source-v3-frozen.ts`
384
- * copy, which does not call this function). The two live `src` callers
385
- * today: `parseTaskSourceV4`'s standalone YAML-string entry
386
- * (`task-source-v4.ts:790`) passes `sourceLabel: "task source v4"`; the
387
- * version router (`parse-task-source.ts:61`) calls this directly with
388
- * `sourceLabel: "task source"` — not "task v3 source" — because its front
389
- * end runs before `root.version` is even read, so it cannot yet know which
390
- * schema version the document will turn out to be.
303
+ * The two live `src` callers: `parseTaskSourceV4`'s standalone YAML-string entry
304
+ * (`task-source-v4.ts`) passes `sourceLabel: "task source v4"`; the version
305
+ * router (`parse-task-source.ts`) calls this directly with
306
+ * `sourceLabel: "task source"` because its front end runs before
307
+ * `root.version` is even read, so it cannot yet know which schema version the
308
+ * document will turn out to be.
391
309
  */
392
310
  export function readBoundedTaskSourceYaml(input, options) {
393
311
  const sourceLabel = options.sourceLabel;
394
- // P4 (docs/plans/specs/p4-deletions-closeout.md §5.2, row R-R8): these six
395
- // throws used to omit their `code` argument and rely on the constructor's
396
- // `INVALID_FLAG_VALUE` default (a pre-P4 ratchet-gaming trick that kept the
397
- // literal string out of the grep-style count while the effective code
398
- // stayed generic). §5.2's target table closes that gap: every pre-version
399
- // failure in this bounded YAML front end (not a string, too large, YAML
400
- // parse/expansion) is a task-source defect, not a flag-parsing one, so each
401
- // now carries `TASK_SOURCE_INVALID` explicitly.
312
+ // Every pre-version failure in this bounded YAML front end (not a string, too
313
+ // large, YAML parse/expansion) is a task-source defect, not a flag-parsing
314
+ // one, so each throw carries `TASK_SOURCE_INVALID` explicitly instead of the
315
+ // constructor's `INVALID_FLAG_VALUE` default.
402
316
  if (typeof input.yaml !== "string") {
403
317
  throw new UsageError(`Invalid ${sourceLabel} at ${input.filePath}: source must be a string.`, "TASK_SOURCE_INVALID");
404
318
  }
@@ -75,7 +75,6 @@ export function parseTaskSource(input) {
75
75
  }
76
76
  const documentOptions = {
77
77
  filePath: input.filePath,
78
- ...(input.workspaceRoot ? { workspaceRoot: input.workspaceRoot } : {}),
79
78
  lineAt,
80
79
  };
81
80
  return Object.freeze({ version: 4, v4: parseTaskSourceV4Document(root, documentOptions) });
@@ -21,14 +21,16 @@ function projectAkm(document) {
21
21
  const execution = document.execution;
22
22
  if (execution.agent !== undefined)
23
23
  out.agent = execution.agent;
24
+ if (execution.connection !== undefined)
25
+ out.connection = execution.connection;
26
+ if (execution.harness !== undefined)
27
+ out.harness = execution.harness;
24
28
  if (execution.engine !== undefined)
25
29
  out.engine = execution.engine;
26
30
  if (execution.model !== undefined)
27
31
  out.model = execution.model;
28
32
  if (execution.inference !== undefined)
29
33
  out.inference = execution.inference;
30
- if (execution.tools !== undefined)
31
- out.tools = execution.tools;
32
34
  if (execution.timeout !== undefined)
33
35
  out.timeout = execution.timeout;
34
36
  if (execution.redact !== undefined)
@@ -41,7 +43,7 @@ function projectAkm(document) {
41
43
  out.outputSchema = document.output;
42
44
  return Object.keys(out).length > 0 ? Object.freeze(out) : undefined;
43
45
  }
44
- /** Project one parsed task source v4 document into the prepare seam's existing input shape (spec §3.5). */
46
+ /** Project one parsed task source v4 document into the prepare seam's existing input shape. */
45
47
  export function projectTaskSourceV4(document) {
46
48
  const akm = projectAkm(document);
47
49
  const schedules = Object.freeze(document.schedule.map((entry) => Object.freeze({ cron: entry.cron, source: entry.source, ordinal: entry.ordinal })));
@@ -3,8 +3,7 @@
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  /**
5
5
  * `TASK_INPUT_DIAGNOSTICS` — the task-side message/code vocabulary for
6
- * `materializeInputFlags` (spec docs/plans/specs/p2a-task-source-v4.md §1.5
7
- * D3-N3, §4.2, §5.1).
6
+ * `materializeInputFlags`.
8
7
  *
9
8
  * `materializeInputFlags` (`src/execution/input-contract.ts`) contains no
10
9
  * literal user-facing string of its own — every message/code it raises comes
@@ -13,8 +12,8 @@
13
12
  * is that same seam's task-side sibling, consumed by `akm task run`'s Stage 2
14
13
  * (`src/tasks/run/load-task.ts`). Mirrors `WORKFLOW_PARAMETER_DIAGNOSTICS`'s
15
14
  * shape exactly (`unknownFlag`'s declared-name enumeration in the SEPARATE
16
- * `hint`, not the message — `params.ts:65-72`) with task-flavored nouns and
17
- * the codes §5.1 binds: `UNKNOWN_FLAG` for an undeclared name,
15
+ * `hint`, not the message) with task-flavored nouns and
16
+ * the codes `UNKNOWN_FLAG` for an undeclared name,
18
17
  * `INPUT_BINDING_INVALID` for every value/contract failure.
19
18
  */
20
19
  import { UsageError } from "../../core/errors.js";