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
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * A native akm workflow bundle: Markdown workflow sources.
8
8
  *
9
- * ── validate (spec §6 workflow row) ──
9
+ * ── validate ──
10
10
  *
11
11
  * Reuses the akm adapter's per-type workflow checks (shared base checks +
12
12
  * `placeholder-stub` + `invalid-workflow-structure`). Delegates to the SAME
@@ -37,8 +37,8 @@ function isReservedDocFile(fileName) {
37
37
  }
38
38
  /**
39
39
  * Recognition gate: any `.md` file in this bundle IS a workflow (this
40
- * adapter's entire domain is workflows — spec §2.5, "residence under
41
- * workflows/"), UNLESS its frontmatter declares a DIFFERENT non-empty
40
+ * adapter's entire domain is workflows), UNLESS its frontmatter declares a
41
+ * DIFFERENT non-empty
42
42
  * `type:` (an explicit opt-out, e.g. a README-shaped doc that wants to be
43
43
  * something else). No content sniffing.
44
44
  */
@@ -114,8 +114,8 @@ async function validate(c, changes, ctx) {
114
114
  * looksLikeRoot). Unlike `isWorkflowFile` (which admits an absent `type:` —
115
115
  * the lenient default ONCE a source is already known to be this bundle),
116
116
  * this requires an EXPLICIT `type: workflow` — the install-time probe is
117
- * choosing WHICH adapter owns an unconfigured root among several candidates
118
- * (spec §1.2), and an incidental `.md` with no frontmatter type at all
117
+ * choosing WHICH adapter owns an unconfigured root among several candidates,
118
+ * and an incidental `.md` with no frontmatter type at all
119
119
  * (common in an OKF or llm-wiki bundle) must not misclassify that root as
120
120
  * akm-workflow's.
121
121
  */
@@ -4,7 +4,7 @@
4
4
  /**
5
5
  * The `claude` tool-directory adapter — akm 0.9.0 format-family work item (#46).
6
6
  *
7
- * Recognizes a Claude Code `.claude` layout (spec §6/§7, real-world:
7
+ * Recognizes a Claude Code `.claude` layout (real-world:
8
8
  * https://code.claude.com/docs/en/claude-directory): a root `CLAUDE.md` →
9
9
  * `instruction`, `commands/*.md` → `command`, `agents/*.md` → `agent`,
10
10
  * `skills/<name>/SKILL.md` → `skill` (item = the dir; bundled resources abstain),
@@ -4,7 +4,7 @@
4
4
  /**
5
5
  * The `dotenv` adapter — akm 0.9.0 format-family work item (#46).
6
6
  *
7
- * A metadata-only env/secret bundle (spec §6/§7, normative §21.2). REDACTION IS
7
+ * A metadata-only env/secret bundle. REDACTION IS
8
8
  * A HARD CONTRACT keyed on the ADAPTER, never on the open `type` value (a
9
9
  * frontmatter `type:` cannot opt out):
10
10
  * - `env/*.env` → `type: env` — only the KEY NAMES are surfaced (on `hints`);
@@ -16,7 +16,7 @@
16
16
  * conceptId: env strips `.env`; secret keeps its natural path (including any
17
17
  * extension). Neither branch ever writes a value onto the emitted document.
18
18
  *
19
- * ── validate (spec §6 env/secret validation column) ──
19
+ * ── validate ──
20
20
  *
21
21
  * The dangerous-key scan (`dangerous-env-key`), reusing the akm adapter's
22
22
  * `dangerousEnvKeyDiagnostics` — which preserves the code-grounded narrowness:
@@ -31,6 +31,7 @@ import fs from "node:fs";
31
31
  import path from "node:path";
32
32
  import { assetPathCandidatesForName, typeForStashDir } from "../../asset/asset-placement.js";
33
33
  import { scanEnvKeyNames, toPosix } from "../../common.js";
34
+ import { sensitiveMarkerPath } from "../../sensitive-marker-path.js";
34
35
  import { dangerousEnvKeyDiagnostics } from "./akm-lint.js";
35
36
  import { hashContent } from "./shared.js";
36
37
  /** A dotenv bundle is single-component; its one component is `main`. */
@@ -39,7 +40,7 @@ const COMPONENT_ID = "main";
39
40
  const ENV_DIR = "env";
40
41
  /** The `secrets/` content subdir (whole-file secrets). */
41
42
  const SECRETS_DIR = "secrets";
42
- /** Non-secret marker suffixes under `secrets/` (spec §6 secret row). */
43
+ /** Non-secret marker suffixes under `secrets/`. */
43
44
  const SECRET_SKIP_SUFFIXES = [".lock", ".sensitive"];
44
45
  /** Classify a component-root-relative file as env / secret, or null (abstain). */
45
46
  function classify(relPath) {
@@ -73,7 +74,7 @@ function classify(relPath) {
73
74
  * disagreed about a documented promise.
74
75
  */
75
76
  function hasSensitiveMarker(absPath, type) {
76
- const marker = type === "env" ? absPath.replace(/\.env$/i, ".sensitive") : `${absPath}.sensitive`;
77
+ const marker = sensitiveMarkerPath(absPath, type === "env" ? "env" : "secret");
77
78
  return marker !== absPath && fs.existsSync(marker);
78
79
  }
79
80
  function conceptIdForPath(type, relativePath) {
@@ -167,8 +168,8 @@ export const dotenvAdapter = {
167
168
  return [];
168
169
  const primaries = assetPathCandidatesForName(type, path.join(c.root, head), rest);
169
170
  const expanded = primaries.flatMap((primary) => type === "env"
170
- ? [primary, primary.replace(/\.env$/i, ".sensitive")]
171
- : [primary, `${primary}.sensitive`, `${primary}.lock`]);
171
+ ? [primary, sensitiveMarkerPath(primary, "env")]
172
+ : [primary, sensitiveMarkerPath(primary, "secret"), `${primary}.lock`]);
172
173
  return expanded.map((candidatePath) => ({ path: candidatePath, conceptId: posix }));
173
174
  },
174
175
  /** The dotenv bundle owns its `env/` + `secrets/` dirs. */
@@ -4,16 +4,16 @@
4
4
  /**
5
5
  * The `generic-files` adapter — akm 0.9.0 format-family work item (#46).
6
6
  *
7
- * The AKM-native FALLBACK family (spec §7). Any leftover file is classified by
8
- * extension (open-question-5, RESOLVED — maintainer 2026-07):
7
+ * The AKM-native FALLBACK family. Any leftover file is classified by
8
+ * extension:
9
9
  * - a SCRIPT_EXTENSIONS extension → `script` (conceptId KEEPS the extension);
10
10
  * - markdown / plain-text → `document` (conceptId STRIPS the extension);
11
11
  * - everything else → `file` (conceptId keeps the extension).
12
12
  * Placement is IDENTITY: `document` appends `.md`, `script`/`file` keep their
13
- * natural path. D-R6 reserved files (`index.md`/`log.md`) are excluded from the
13
+ * natural path. Reserved files (`index.md`/`log.md`) are excluded from the
14
14
  * catch-all so a structural listing is never indexed as a `document`.
15
15
  *
16
- * EXPLICIT-CONFIG ONLY: `generic-files` is never in the §1.2 auto-probe order —
16
+ * EXPLICIT-CONFIG ONLY: `generic-files` is never in the auto-probe order —
17
17
  * a user opts in deliberately — so `looksLikeRoot` NEVER fires. It has no
18
18
  * type-specific validators (`validate` runs base checks only).
19
19
  *
@@ -83,7 +83,7 @@ async function validate(c, changes, ctx) {
83
83
  const raw = change.after ?? (await ctx.readFile(change.path));
84
84
  if (typeof raw !== "string")
85
85
  continue;
86
- // No type-specific validators — base checks only (spec §6 script/document/file rows).
86
+ // No type-specific validators — base checks only.
87
87
  diagnostics.push(...(await runBaseValidateChecks(toPosix(change.path), parseFrontmatter(raw), c.root, ctx)));
88
88
  }
89
89
  return diagnostics;
@@ -39,12 +39,11 @@ export { okfAdapter } from "./okf-adapter.js";
39
39
  export { opencodeAdapter } from "./opencode-adapter.js";
40
40
  export { websiteSnapshotAdapter } from "./website-snapshot-adapter.js";
41
41
  /**
42
- * Every built-in adapter, frozen in the §1.2 install-time probe order: the first
42
+ * Every built-in adapter, frozen in the install-time probe order: the first
43
43
  * adapter whose `looksLikeRoot` fires claims a root, so MORE-SPECIFIC probes
44
44
  * come FIRST. This ARRAY ORDER is the executable probe order (`getAdapters()`
45
45
  * returns it verbatim) and is pinned by the conformance suite's ordered-owner
46
- * matrix — it, not the spec §1.2(3) 5-adapter prose listing, is authoritative
47
- * for the implemented 11-family set.
46
+ * matrix, and is authoritative for the implemented 11-family set.
48
47
  *
49
48
  * Probe-precedence rationale (grounds "cannot shadow the existing three"):
50
49
  *
@@ -63,7 +62,7 @@ export { websiteSnapshotAdapter } from "./website-snapshot-adapter.js";
63
62
  * package), `akm-workflow` (a workflow-shaped top-level file), and `akm-task`
64
63
  * (a schedule-bearing top-level `.yml`) carry disjoint, specific markers that
65
64
  * fire on none of the other roots; they come at the front for clarity.
66
- * - `generic-files` is EXPLICIT-CONFIG ONLY (§1.2) — its `looksLikeRoot` never
65
+ * - `generic-files` is EXPLICIT-CONFIG ONLY — its `looksLikeRoot` never
67
66
  * fires — so it is LAST and can never shadow anything.
68
67
  */
69
68
  export const BUILTIN_ADAPTERS = Object.freeze([
@@ -2,14 +2,12 @@
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  /**
5
- * The first-class `llm-wiki` adapter — akm 0.9.0 chunk-4 (DEV-7 restore).
5
+ * The first-class `llm-wiki` adapter.
6
6
  *
7
- * The `wiki` ASSET-TYPE dies in chunk 4 (plan §11 Chunk 4 / §7.4), but the LLM
8
- * Wiki structure stays first-class as its OWN adapter. This relocates the
9
- * native wiki semantics from the retired `src/wiki/` module into a
10
- * `BundleAdapter` implementing `docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md` §7
11
- * (llm-wiki row), §6 (wiki-page row), §0.2 (the `wiki` asset-type is retired;
12
- * the adapter is first-class), §1.2 (probe = schema.md + pages/), §9 (links).
7
+ * The `wiki` ASSET-TYPE is retired, but the LLM Wiki structure stays first-class
8
+ * as its OWN adapter: a `BundleAdapter` carrying the native wiki semantics
9
+ * (probe = schema.md + pages/, wiki-page recognition, links) that the retired
10
+ * `src/wiki/` module used to own.
13
11
  *
14
12
  * Conformance oracle (authored, DO NOT modify): fixture
15
13
  * `tests/fixtures/bundles/llm-wiki/` + goldens
@@ -17,7 +15,7 @@
17
15
  * The adapter is built to MATCH those goldens (driven by
18
16
  * `tests/core/adapter/llm-wiki-adapter.test.ts`).
19
17
  *
20
- * ── Structure (spec §7, wiki.ts canonical-content contract) ──
18
+ * ── Structure ──
21
19
  *
22
20
  * - `schema.md` / `index.md` / `log.md` at the wiki ROOT are RESERVED
23
21
  * (recognized, never indexed as concepts) — analogous to OKF's index.md/log.md.
@@ -31,24 +29,24 @@
31
29
  * - Anything else (root README, stray root `.md`, other dirs) is NOT a wiki
32
30
  * asset (`recognize` abstains) — pages live under `pages/`.
33
31
  *
34
- * ── Links / citations (spec §9) ──
32
+ * ── Links / citations ──
35
33
  *
36
34
  * A page's `IndexDocument.links` = its resolved `xrefs:` frontmatter (the
37
35
  * `wiki:<name>/<conceptId>` form, stripped to the target conceptId) PLUS its
38
36
  * body bundle-relative markdown links, deduped, first-appearance order. Its
39
37
  * `sources:` frontmatter resolves to the cited raw conceptIds (citation edges),
40
- * carried on `documentJson` (adapter extras — plan §4.3) and consumed by the
38
+ * carried on `documentJson` (adapter extras) and consumed by the
41
39
  * uncited-raw lint check.
42
40
  *
43
- * ── validate (spec §6/§7, §9) — native wiki checks ONLY ──
41
+ * ── validate — native wiki checks ONLY ──
44
42
  *
45
43
  * The native structural checks ported from the retired `src/wiki/` module's
46
44
  * `lintWiki`: `broken-xref`
47
45
  * (an xref target that does not resolve to an existing page), `uncited-raw`
48
46
  * (a `raw/` source not cited by any page's `sources:`), `missing-description`
49
47
  * (a page with no description), and `broken-source` (a page `sources:` entry
50
- * with no matching raw file). Broken xrefs are TOLERATED (warning, non-blocking,
51
- * spec §9). The shared `runBaseValidateChecks` (unquoted-colon / missing-updated
48
+ * with no matching raw file). Broken xrefs are TOLERATED (warning, non-blocking).
49
+ * The shared `runBaseValidateChecks` (unquoted-colon / missing-updated
52
50
  * / stale-path / missing-ref) is NOT run: wiki files never carry an `updated`
53
51
  * field, so `missing-updated` would fire on every page/reserved file and
54
52
  * contradict the lint golden's clean result — the native checks are the wiki's
@@ -82,7 +80,7 @@ const WIKI_COMPONENT_ID = "main";
82
80
  const WIKI_SOURCE_TYPE = "wiki-source";
83
81
  /** Default open `type` for a `pages/` file whose frontmatter carries no `pageKind`. */
84
82
  const DEFAULT_PAGE_KIND = "note";
85
- /** Reserved wiki files (case-insensitive) at the wiki ROOT — recognized, never indexed as concepts (spec §7). */
83
+ /** Reserved wiki files (case-insensitive) at the wiki ROOT — recognized, never indexed as concepts. */
86
84
  const RESERVED_ROOT_FILES = new Set(["schema.md", "index.md", "log.md"]);
87
85
  /** Content subdirectory holding immutable ingested sources. */
88
86
  const RAW_SUBDIR = "raw";
@@ -2,30 +2,28 @@
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  /**
5
- * The reference `okf` adapter — akm 0.9.0 chunk-2, WI-A.
5
+ * The reference `okf` adapter.
6
6
  *
7
- * Implements `docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md` §5 (the reference
8
- * OKF adapter) + §5.1 (BINDING: `okf` reads `type` FROM FRONTMATTER, with NO
9
- * directory gate) EXACTLY. This is pure OKF: `type` from frontmatter, identity
10
- * from path, no directory routing anywhere.
7
+ * Pure OKF: `type` is read FROM FRONTMATTER, with NO directory gate; identity
8
+ * is from path; there is no directory routing anywhere.
11
9
  *
12
- * - recognize (§5): any `.md` NOT named `index.md`/`log.md` (case-insensitive,
10
+ * - recognize: any `.md` NOT named `index.md`/`log.md` (case-insensitive,
13
11
  * reserved) → one concept. `type` = frontmatter `type` when a non-empty
14
12
  * string, else the `knowledge` default. conceptId = the concept's path
15
- * within the component root minus `.md`. The OKF field projection (§0.1/§3):
13
+ * within the component root minus `.md`. The OKF field projection:
16
14
  * name ← title (fallback: last path segment), description ← description,
17
15
  * tags ← tags, updated ← timestamp. The directory a file sits in NEVER
18
16
  * affects `type`.
19
- * - links (§9): BOTH OKF link forms — `/`-rooted bundle-relative and standard
17
+ * - links: BOTH OKF link forms — `/`-rooted bundle-relative and standard
20
18
  * relative — resolve deterministically into target conceptIds, stored on
21
19
  * `IndexDocument.links`. Unresolvable / out-of-component links are dropped
22
20
  * (tolerant).
23
- * - validate (§5, LENIENT): base checks only; unknown frontmatter never fails;
21
+ * - validate (LENIENT): base checks only; unknown frontmatter never fails;
24
22
  * `missing-type` is INFO; `missing-ref` on OKF links is a non-blocking
25
23
  * WARNING (consumers tolerate broken links). Reads go through
26
24
  * `ctx.readFile`; ref existence via `ctx.resolveRef`. Never touches the live
27
25
  * filesystem.
28
- * - directoryList / looksLikeRoot per §5 / §1.2. Authoring is deliberately
26
+ * - directoryList / looksLikeRoot. Authoring is deliberately
29
27
  * absent; AKM-native writers fail before mutating an OKF bundle.
30
28
  */
31
29
  import fs from "node:fs";
@@ -5,7 +5,7 @@
5
5
  * The `opencode` tool-directory adapter — akm 0.9.0 format-family work item
6
6
  * (#46).
7
7
  *
8
- * Recognizes an OpenCode `.opencode` layout (spec §6/§7, real-world:
8
+ * Recognizes an OpenCode `.opencode` layout (real-world:
9
9
  * https://opencode.ai/docs/{commands,agents,skills,rules}/): a root `AGENTS.md`
10
10
  * → `instruction`, `commands/*.md` → `command`, `agents/*.md` → `agent`,
11
11
  * `skills/<name>/SKILL.md` → `skill`, and ABSTAINS on `opencode.json` runtime
@@ -99,11 +99,11 @@ function stripFencedBlocksSimple(body) {
99
99
  return out.join("\n");
100
100
  }
101
101
  // Ref-token grammar — copied from `base-linter.ts`'s `BUNDLE_REF_RE`
102
- // (`core/asset/asset-ref.ts`, spec §11.1 / ref-grammar decision D-R3) as a VALUE,
102
+ // (`core/asset/asset-ref.ts`) as a VALUE,
103
103
  // not an import (same cycle-avoidance rationale as the file header — the source
104
104
  // string is duplicated so no new `core/adapter` -> `core/asset` edge is added for
105
105
  // this scan). Recognizes the 0.9.0 FULLY-QUALIFIED `<bundle>//<concept-id>
106
- // [#fragment]` prose body-ref anchored form ONLY. Per D-R3, a bare short
106
+ // [#fragment]` prose body-ref anchored form ONLY. A bare short
107
107
  // conceptId in prose is NOT a ref, so it is never flagged here (it is a ref only
108
108
  // in the ref-LIST channels — {@link refTokenFromListValue}). The pre-0.9.0
109
109
  // `<type>:<slug>` colon grammar is gone from every recognition surface.
@@ -178,7 +178,7 @@ function readRefStringOrArray(value) {
178
178
  }
179
179
  /**
180
180
  * Port of `BaseLinter.runBaseChecks`, adapted to the read-only
181
- * `ValidateContext`/`Diagnostic` shapes (adapter spec §12.1). Reproduces
181
+ * `ValidateContext`/`Diagnostic` shapes. Reproduces
182
182
  * unquoted-colon / missing-updated / stale-path / missing-ref for ONE file's
183
183
  * already-parsed content.
184
184
  *
@@ -5,24 +5,24 @@
5
5
  * Shared recognition / placement / validation for the two AGENT TOOL-DIRECTORY
6
6
  * adapters — `claude` (`.claude`) and `opencode` (`.opencode`) — akm 0.9.0
7
7
  * format-family work item (#46). Both translate a foreign tool layout into the
8
- * open AKM `type` vocabulary (spec §6/§7): a root instruction file
8
+ * open AKM `type` vocabulary: a root instruction file
9
9
  * (CLAUDE.md / AGENTS.md) → `instruction`, `commands/*.md` → `command`,
10
10
  * `agents/*.md` → `agent`, `skills/<name>/SKILL.md` → `skill` (item = the dir).
11
11
  * They differ only in two parameters carried on {@link ToolDirLayout}:
12
12
  * - the instruction basename + its concept id,
13
13
  * - the adapter id + component id.
14
14
  *
15
- * The SKILL.md codec is shared with the `agent-skills` adapter as functions
16
- * (spec §8): a skill's conceptId is its DIRECTORY, and its `name` is the
17
- * frontmatter `name` (== the dir name per the Agent Skills §4.5 hard rule).
15
+ * The SKILL.md codec is shared with the `agent-skills` adapter as functions:
16
+ * a skill's conceptId is its DIRECTORY, and its `name` is the
17
+ * frontmatter `name` (== the dir name per the Agent Skills hard rule).
18
18
  *
19
- * ── D-R6 (reserved files) ──
19
+ * ── reserved files ──
20
20
  *
21
21
  * `index.md` / `log.md` are OKF structural files at EVERY depth — never a
22
22
  * concept. `classify` excludes them up front so a stray `commands/index.md`
23
23
  * never becomes a `command` (mirrors okf/akm/llm-wiki `RESERVED_FILES`).
24
24
  *
25
- * ── validate leniency (spec §6 skill row) ──
25
+ * ── validate leniency ──
26
26
  *
27
27
  * The tool-dir adapters TOLERATE the tools' native frontmatter (argument-hint,
28
28
  * allowed-tools, tools, model, mode, temperature, agent, …) — the strict
@@ -47,7 +47,6 @@
47
47
  * Node builtins.
48
48
  */
49
49
  import path from "node:path";
50
- import { createAdapterExtensions, } from "../../../execution/source.js";
51
50
  import { parseFrontmatter } from "../../asset/frontmatter.js";
52
51
  import { toPosix } from "../../common.js";
53
52
  import { executionDefaultsFromFrontmatter, renderMarkdownExecutionSource } from "../execution-source.js";
@@ -149,7 +148,7 @@ export function readCandidatesToolDir(layout, c, conceptId) {
149
148
  function nameOrSignalDiagnostics(type, relPath, data, body) {
150
149
  if (nonEmptyString(data.name) !== undefined || nonEmptyString(data.description) !== undefined)
151
150
  return [];
152
- // command-shaped body/frontmatter signals (spec §6 command row): $ARGUMENTS / $1 / an `agent` frontmatter key.
151
+ // command-shaped body/frontmatter signals: $ARGUMENTS / $1 / an `agent` frontmatter key.
153
152
  if (type === "command" &&
154
153
  (/\$ARGUMENTS\b/.test(body) || /\$\d/.test(body) || nonEmptyString(data.agent) !== undefined)) {
155
154
  return [];
@@ -193,21 +192,6 @@ export async function validateToolDir(layout, c, changes, ctx) {
193
192
  }
194
193
  return diagnostics;
195
194
  }
196
- function nativeExecutionExtensions(layout, cls, data) {
197
- const values = {};
198
- if (layout.adapterId === "claude" && cls.type === "command" && Object.hasOwn(data, "argument-hint")) {
199
- if (typeof data["argument-hint"] !== "string") {
200
- throw new TypeError("frontmatter.argument-hint must be a string");
201
- }
202
- values.argumentHint = data["argument-hint"];
203
- }
204
- if (layout.adapterId === "opencode" && Object.hasOwn(data, "mode")) {
205
- if (typeof data.mode !== "string")
206
- throw new TypeError("frontmatter.mode must be a string");
207
- values.mode = data.mode;
208
- }
209
- return Object.keys(values).length > 0 ? createAdapterExtensions(layout.adapterId, values) : undefined;
210
- }
211
195
  /** Translate a native Claude/OpenCode command or agent without exposing raw frontmatter. */
212
196
  export function renderToolDirExecutionSource(layout, c, file) {
213
197
  const cls = classify(file.relPath, layout);
@@ -225,9 +209,7 @@ export function renderToolDirExecutionSource(layout, c, file) {
225
209
  },
226
210
  defaults: (data) => executionDefaultsFromFrontmatter(data, {
227
211
  kind: cls.type === "command" ? "command" : "persona",
228
- toolsKeys: layout.adapterId === "claude" && cls.type === "command" ? ["allowed-tools", "tools"] : ["tools"],
229
212
  }),
230
- extensions: (data) => nativeExecutionExtensions(layout, cls, data),
231
213
  });
232
214
  }
233
215
  /** Build the concrete `BundleAdapter` from a layout + a `looksLikeRoot` probe (claude/opencode share everything else). */
@@ -5,10 +5,10 @@
5
5
  * The `website-snapshot` adapter — akm 0.9.0 format-family work item (#46).
6
6
  *
7
7
  * A READ-ONLY (Mode A) view over a materialized crawl snapshot written by
8
- * `src/sources/snapshot-fetchers/website-ingest.ts` (spec §6/§7). The on-disk
8
+ * `src/sources/snapshot-fetchers/website-ingest.ts`. The on-disk
9
9
  * pages are KNOWLEDGE-shaped markdown under `stash/knowledge/**` with no `type:`
10
- * field; this adapter RE-TYPES them to the open `type: website`. Per
11
- * open-question-3 (RESOLVED, maintainer 2026-07) the re-type is GATED — it
10
+ * field; this adapter RE-TYPES them to the open `type: website`. The re-type
11
+ * is GATED — it
12
12
  * applies only to a page carrying the `website` tag / a `sourceUrl` (a page
13
13
  * lacking both is not re-typed); the document KEEPS its `sourceUrl` (surfaced as
14
14
  * `sourceRef` on `documentJson`); and the conceptId STRIPS the
@@ -27,7 +27,7 @@ const SHADOWABLE_ADAPTER_IDS = new Set(["agent-skills", "claude", "opencode"]);
27
27
  /**
28
28
  * True when `root` — already claimed by `winnerId` (one of
29
29
  * {@link SHADOWABLE_ADAPTER_IDS}) — ALSO carries a top-level directory the
30
- * `akm` adapter's own probe recognizes as its workspace shape (spec §1.2) and
30
+ * `akm` adapter's own probe recognizes as its workspace shape and
31
31
  * that `winnerId` does not own (its `directoryList()`, or — for `agent-skills`,
32
32
  * which owns no fixed directory names — a root-level `<name>/SKILL.md`
33
33
  * package) but which holds at least one real file. Cheap by design: only
@@ -5,7 +5,7 @@ import { createHash } from "node:crypto";
5
5
  import { isMap, isScalar, parseDocument, visit } from "yaml";
6
6
  import { cloneExecutionJson, cloneExecutionJsonObject, } from "../../execution/json.js";
7
7
  import { snapshotStrictRecord } from "../../execution/record.js";
8
- import { cloneToolSelection, createAdapterRenderedExecutionSource, } from "../../execution/source.js";
8
+ import { createAdapterRenderedExecutionSource, warnRetiredEngineKey, } from "../../execution/source.js";
9
9
  import { UsageError } from "../errors.js";
10
10
  import { warnOnce } from "../warn.js";
11
11
  function nextLine(text, start) {
@@ -145,12 +145,6 @@ export function executionDefaultsFromFrontmatter(data, options) {
145
145
  if (typeof allowTopLevelEngine !== "boolean") {
146
146
  throw new TypeError("execution frontmatter projection options.allowTopLevelEngine must be a boolean");
147
147
  }
148
- const configuredToolsKeys = Object.hasOwn(options, "toolsKeys")
149
- ? cloneExecutionJson(options.toolsKeys, "execution frontmatter projection options.toolsKeys")
150
- : ["tools"];
151
- if (!Array.isArray(configuredToolsKeys) || configuredToolsKeys.some((key) => typeof key !== "string" || !key)) {
152
- throw new TypeError("execution frontmatter projection options.toolsKeys must be an array of non-empty strings");
153
- }
154
148
  const namespace = own(frontmatter, "akm")
155
149
  ? requireMetadataMapping(frontmatter.akm, "frontmatter.akm")
156
150
  : snapshotStrictRecord({}, "frontmatter.akm");
@@ -161,36 +155,27 @@ export function executionDefaultsFromFrontmatter(data, options) {
161
155
  ? `frontmatter.akm.${key}`
162
156
  : undefined;
163
157
  if (location) {
164
- throw new TypeError(`${location} is host-controlled and cannot be declared by an executable asset; configure the selected engine or workflow execution environment instead`);
158
+ throw new TypeError(`${location} is host-controlled and cannot be declared by an executable asset; configure the selected harness or workflow execution environment instead`);
165
159
  }
166
160
  }
167
161
  const out = Object.create(null);
168
162
  if (kind === "command" && own(frontmatter, "agent")) {
169
163
  out.agent = nullableString(frontmatter.agent, "frontmatter.agent");
170
164
  }
171
- const namespacedEngine = own(namespace, "engine")
172
- ? nullableString(namespace.engine, "frontmatter.akm.engine")
173
- : undefined;
174
- const topLevelEngine = allowTopLevelEngine && own(frontmatter, "engine")
175
- ? nullableString(frontmatter.engine, "frontmatter.engine")
176
- : undefined;
177
- if (topLevelEngine !== undefined)
178
- out.engine = topLevelEngine;
179
- else if (namespacedEngine !== undefined)
180
- out.engine = namespacedEngine;
165
+ // `engine` is the retired spelling of `connection` / `harness`; the resolver reads it as whichever it names.
166
+ for (const key of ["connection", "harness", "engine"]) {
167
+ const topLevel = allowTopLevelEngine && own(frontmatter, key) ? nullableString(frontmatter[key], `frontmatter.${key}`) : undefined;
168
+ const namespaced = own(namespace, key) ? nullableString(namespace[key], `frontmatter.akm.${key}`) : undefined;
169
+ if (topLevel !== undefined)
170
+ out[key] = topLevel;
171
+ else if (namespaced !== undefined)
172
+ out[key] = namespaced;
173
+ if (key === "engine" && out.engine !== undefined)
174
+ warnRetiredEngineKey();
175
+ }
181
176
  if (own(frontmatter, "model")) {
182
177
  out.model = nullableString(frontmatter.model, "frontmatter.model");
183
178
  }
184
- let toolsSelected = false;
185
- for (const key of configuredToolsKeys) {
186
- if (!own(frontmatter, key))
187
- continue;
188
- const selection = cloneToolSelection(frontmatter[key], `frontmatter.${key}`);
189
- if (!toolsSelected) {
190
- out.tools = selection;
191
- toolsSelected = true;
192
- }
193
- }
194
179
  let inferenceEntries;
195
180
  if (own(namespace, "inference")) {
196
181
  if (namespace.inference === null)
@@ -283,12 +268,6 @@ export function renderMarkdownExecutionSource(input) {
283
268
  if (hasDefaults && defaults === undefined) {
284
269
  throw new TypeError("adapter execution source defaults must be omitted or resolve to an object");
285
270
  }
286
- const extensionsProjection = input.extensions;
287
- const extensionsAreProjected = typeof extensionsProjection === "function";
288
- const extensions = extensionsAreProjected ? extensionsProjection(parsed.data) : extensionsProjection;
289
- if (Object.hasOwn(input, "extensions") && !extensionsAreProjected && extensions === undefined) {
290
- throw new TypeError("adapter execution source extensions must be omitted or be an adapter-owned extension object");
291
- }
292
271
  return createAdapterRenderedExecutionSource({
293
272
  kind,
294
273
  content: parsed.content,
@@ -300,6 +279,5 @@ export function renderMarkdownExecutionSource(input) {
300
279
  hash: createHash("sha256").update(raw, "utf8").digest("hex"),
301
280
  },
302
281
  ...(hasDefaults ? { defaults } : {}),
303
- ...(extensions === undefined ? {} : { extensions }),
304
282
  });
305
283
  }
@@ -41,7 +41,7 @@ const BY_ID = new Map(BUILTIN_ADAPTERS.map((a) => [a.id, a]));
41
41
  export function getAdapters() {
42
42
  return [...BUILTIN_ADAPTERS];
43
43
  }
44
- /** Look up an adapter by its own `id` (matches `BundleComponent.adapter`); `undefined` for an unknown id (spec §4 — caller skips + warns). */
44
+ /** Look up an adapter by its own `id` (matches `BundleComponent.adapter`); `undefined` for an unknown id (the caller skips + warns). */
45
45
  export function adapterForId(id) {
46
46
  return BY_ID.get(id);
47
47
  }
@@ -2,12 +2,10 @@
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  /**
5
- * The ONE core {@link ValidateContext} implementation — akm 0.9.0 chunk-2/lint
6
- * follow-up ("make `validate()` genuinely load-bearing").
5
+ * The ONE core {@link ValidateContext} implementation.
7
6
  *
8
7
  * `BundleAdapter.validate()` (`./bundle-adapter.ts`) is a REQUIRED interface
9
- * method whose contract is explicit and normative (`./bundle-adapter.ts:96-100`
10
- * / the format-neutral spec §12.1): the adapter MUST NOT write and MUST NOT
8
+ * method whose contract is explicit: the adapter MUST NOT write and MUST NOT
11
9
  * read the live filesystem — `ctx` serves the run's on-disk SNAPSHOT WITH the
12
10
  * caller's pending {@link FileChange}s overlaid, plus a read-only `resolveRef`
13
11
  * for link/xref existence. That overlay is meant to be built ONCE, centrally —
@@ -138,7 +138,7 @@ const BUILTIN_PLACEMENT_SPECS = {
138
138
  toCanonicalName: (typeRoot, filePath) => toPosix(path.relative(typeRoot, filePath)),
139
139
  toAssetPath: (typeRoot, name) => path.join(typeRoot, name),
140
140
  },
141
- // v1 spec §13 — `lesson` asset type. Required frontmatter fields are
141
+ // `lesson` asset type. Required frontmatter fields are
142
142
  // `description` and `when_to_use`; lint enforces both.
143
143
  lesson: { stashDir: "lessons", ...markdownSpec },
144
144
  // Scheduled tasks. A task file pairs a cron-style schedule with a target
@@ -29,14 +29,14 @@ function normalizeName(name) {
29
29
  return path.posix.normalize(name.replace(/\\/g, "/"));
30
30
  }
31
31
  /**
32
- * Bundle slug charset (spec §3.4): non-empty, and excluding `:`/`.`/`#`/`/`
32
+ * Bundle slug charset: non-empty, and excluding `:`/`.`/`#`/`/`
33
33
  * plus whitespace. Excluding `:`/`.` is what keeps `bundle//conceptId` lexically
34
34
  * distinguishable from a URL in prose; excluding `/` is what makes the first
35
35
  * `//` an unambiguous bundle boundary; excluding `#` reserves it for fragments.
36
36
  */
37
37
  const BUNDLE_SLUG_RE = /^[^\s:.#/]+$/;
38
38
  /**
39
- * True when `s` is a legal bundle slug (spec §11.1 / D-R5 charset: non-empty,
39
+ * True when `s` is a legal bundle slug (charset: non-empty,
40
40
  * no `:`/`.`/`#`/`/` or whitespace). Exported for input boundaries that need
41
41
  * to distinguish bundle-qualified refs from source locators.
42
42
  */
@@ -45,7 +45,7 @@ export function isBundleSlug(s) {
45
45
  }
46
46
  /**
47
47
  * Body-ref recognition (prose): the FULLY-QUALIFIED anchored form ONLY
48
- * (`<bundle>//<concept-id>[#<fragment>]`, spec §11.1 — the short form is never
48
+ * (`<bundle>//<concept-id>[#<fragment>]` — the short form is never
49
49
  * recognized in prose). `g`/`m` for scanning; group 1 = the whole ref token.
50
50
  *
51
51
  * The leading `//` must be preceded by a bundle slug, so a URL (`https://…`,
@@ -12,6 +12,11 @@
12
12
  * against an injected {@link RefContext}. This is the "the short
13
13
  * form is input sugar" rule (§11.1) made structural: only a
14
14
  * `ResolvedRef` ever crosses a storage boundary.
15
+ * It answers "which bundle" against an injected index snapshot;
16
+ * it does not find files. "Where is the file for this ref right
17
+ * now" has one answer, `resolveConceptOwner`
18
+ * (`src/indexer/lookup/adapter-concept-owner.ts`), which
19
+ * every resolver that needs a path calls.
15
20
  * - serialize — `bundleRefToString` (`asset-ref.ts`); serializing a
16
21
  * `ResolvedRef` always emits the fully-qualified form.
17
22
  *
@@ -6,7 +6,7 @@
6
6
  * bundle's key. A bundle id is a mass identity prefix: every durable ref this
7
7
  * tool minted (`entries.item_ref`/`bundle_id`, `proposals.ref`, a pending
8
8
  * proposal's `proposedTarget.source`, a workflow task_history row's
9
- * `target_ref`, `scheduler.enabled[].ref`) carries it, and a hand-edited
9
+ * `target_ref`, a `workflow_runs.workflow_ref`, `scheduler.enabled[].ref`) carries it, and a hand-edited
10
10
  * `bundles` key strands all of it (see `src/indexer/bundle-identity-guard.ts`
11
11
  * §11.5). This module is the rekey transaction that guard's docstring points
12
12
  * to.
@@ -32,6 +32,7 @@ import { closeDatabase, openIndexDatabase, openReadonlyExistingDatabase, } from
32
32
  import { getFilePathsByBundle, renameEntriesBundleId } from "../storage/repositories/index-entries-repository.js";
33
33
  import { countProposalsForBundleRename, renameProposalsBundleRef } from "../storage/repositories/proposals-repository.js";
34
34
  import { countTaskHistoryTargetRefs, renameTaskHistoryTargetRefs, } from "../storage/repositories/task-history-repository.js";
35
+ import { countWorkflowRunRefsForRename, renameWorkflowRunRefs } from "../storage/repositories/workflow-runs-repository.js";
35
36
  import { selectBackend } from "../tasks/backends/index.js";
36
37
  import { bundleRefToString, parseBundleRef } from "./asset/asset-ref.js";
37
38
  import { validateExplicitBundleName } from "./bundle-id.js";
@@ -152,12 +153,17 @@ async function buildPlan(config, oldId, newId, sched) {
152
153
  let proposalRefs = 0;
153
154
  let proposalTargets = 0;
154
155
  let taskHistoryRefs = 0;
156
+ let workflowRunRefs = 0;
157
+ let activeWorkflowRuns = [];
155
158
  if (fs.existsSync(getStateDbPath())) {
156
159
  withStateDb((db) => {
157
160
  const counts = countProposalsForBundleRename(db, oldId);
158
161
  proposalRefs = counts.refs;
159
162
  proposalTargets = counts.targets;
160
163
  taskHistoryRefs = countTaskHistoryTargetRefs(db, oldId);
164
+ const runs = countWorkflowRunRefsForRename(db, oldId);
165
+ workflowRunRefs = runs.refs;
166
+ activeWorkflowRuns = runs.active;
161
167
  });
162
168
  }
163
169
  return {
@@ -170,7 +176,8 @@ async function buildPlan(config, oldId, newId, sched) {
170
176
  },
171
177
  lock: { present: lockPresent },
172
178
  index: { entries: indexEntries },
173
- state: { proposalRefs, proposalTargets, taskHistoryRefs },
179
+ state: { proposalRefs, proposalTargets, taskHistoryRefs, workflowRunRefs },
180
+ activeWorkflowRuns,
174
181
  contentRefs,
175
182
  nativeSchedulerRows,
176
183
  };
@@ -254,12 +261,13 @@ export async function renameBundle(oldId, newId, options = {}, deps) {
254
261
  closeDatabase(writeIndexDb);
255
262
  }
256
263
  }
257
- // State: proposals.ref, a pending proposal's proposedTarget.source, and
258
- // workflow task_history.target_ref.
264
+ // State: proposals.ref, a pending proposal's proposedTarget.source,
265
+ // workflow task_history.target_ref, and workflow_runs.workflow_ref.
259
266
  if (fs.existsSync(getStateDbPath())) {
260
267
  withStateDb((db) => {
261
268
  renameProposalsBundleRef(db, oldId, newId);
262
269
  renameTaskHistoryTargetRefs(db, oldId, newId);
270
+ renameWorkflowRunRefs(db, oldId, newId);
263
271
  });
264
272
  }
265
273
  // Scheduler: remove native rows still naming `<old>//` (see