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
@@ -2,8 +2,9 @@
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
- * `akm workflow` command family. `run` is the canonical start/resume/execute
6
- * surface; the former public `start`, `next`, and `complete` lifecycle is gone.
5
+ * `akm workflow` command family. `run` is the canonical start/execute surface
6
+ * (a ref starts a new run, a run id drives that run) and `resume` reopens a
7
+ * run; the former public `start`, `next`, and `complete` lifecycle is gone.
7
8
  * `create --print` emits Markdown, the only workflow source format. Validate
8
9
  * with `akm lint --type workflows`.
9
10
  */
@@ -13,7 +14,6 @@ import { armAbortDeadline } from "../core/abort-deadline.js";
13
14
  import { assertFlatAssetName, combineCreatePath, normalizeCreateSubPath } from "../core/asset/asset-create.js";
14
15
  import { NotFoundError, TransientError, UsageError } from "../core/errors.js";
15
16
  import { warn } from "../core/warn.js";
16
- import { akmIndex } from "../indexer/indexer.js";
17
17
  import { assertWorkflowMarkdownName, createWorkflowAsset, getWorkflowTemplate } from "../workflows/authoring/authoring.js";
18
18
  import { WORKFLOW_MAX_TIMEOUT_MS } from "../workflows/resource-limits.js";
19
19
  import { abandonWorkflowRun, getWorkflowStatus, listWorkflowRuns, resolveWorkflowRunTarget, resumeWorkflowRun, } from "../workflows/runtime/runs.js";
@@ -21,7 +21,7 @@ import { akmWorkflowPlan } from "./workflow/plan.js";
21
21
  const workflowStatusCommand = defineJsonCommand({
22
22
  meta: {
23
23
  name: "status",
24
- description: "Show full workflow run state for review or resume; workflow refs resolve within the current scope",
24
+ description: "Show full workflow run state for review or resume; a workflow ref shows its most recent run",
25
25
  },
26
26
  args: {
27
27
  target: { type: "positional", description: "Workflow run id or workflow ref (workflows/<name>)", required: true },
@@ -31,16 +31,17 @@ const workflowStatusCommand = defineJsonCommand({
31
31
  "diagnostic text). Diagnostics only — step evidence stays deterministic and is unaffected.",
32
32
  default: false,
33
33
  },
34
+ // Deprecated no-op, accepted through 0.10 so scripts that pass it do not
35
+ // fail with UNKNOWN_FLAG. Runs are no longer scoped to a directory.
34
36
  "all-scopes": {
35
37
  type: "boolean",
36
- description: "When resolving a workflow ref (not a run id), search every scope instead of only the current one (#942).",
38
+ description: "Deprecated, no effect: runs are host-wide, not scoped to a directory. Accepted through 0.10 for existing scripts.",
37
39
  default: false,
38
40
  },
39
41
  },
40
42
  async run({ args }) {
41
43
  const target = args.target;
42
44
  const includeUnits = args.units === true;
43
- const allScopes = args["all-scopes"] === true;
44
45
  const resolvedRunId = await resolveWorkflowRunTarget(target);
45
46
  if (resolvedRunId !== undefined) {
46
47
  const result = await getWorkflowStatus(resolvedRunId, { includeUnits });
@@ -48,9 +49,8 @@ const workflowStatusCommand = defineJsonCommand({
48
49
  return;
49
50
  }
50
51
  let runs;
51
- let scopeKey;
52
52
  try {
53
- ({ runs, scopeKey } = await listWorkflowRuns({ workflowRef: target, allScopes }));
53
+ ({ runs } = await listWorkflowRuns({ workflowRef: target }));
54
54
  }
55
55
  catch (error) {
56
56
  if (!target.includes(":") && !target.includes("/")) {
@@ -60,14 +60,6 @@ const workflowStatusCommand = defineJsonCommand({
60
60
  }
61
61
  const mostRecent = runs[0];
62
62
  if (!mostRecent) {
63
- // #942: name the scope actually searched and point at `--all-scopes`
64
- // rather than a bare "not found" — the ref-fallthrough lookup is
65
- // scope-local by default, so "no runs" here means "none in THIS
66
- // scope", not "none anywhere". Already searching every scope (or no
67
- // real scope was filtered on) has nothing more specific to suggest.
68
- if (!allScopes && scopeKey !== null) {
69
- throw new NotFoundError(`No workflow runs found for ${target} in scope ${scopeKey}.`, "WORKFLOW_NOT_FOUND", `Run 'akm workflow status ${target} --all-scopes' to search every scope.`);
70
- }
71
63
  throw new NotFoundError(`No workflow runs found for ${target}`, "WORKFLOW_NOT_FOUND");
72
64
  }
73
65
  const result = await getWorkflowStatus(mostRecent.id, { includeUnits });
@@ -77,9 +69,7 @@ const workflowStatusCommand = defineJsonCommand({
77
69
  const workflowListCommand = defineJsonCommand({
78
70
  meta: {
79
71
  name: "list",
80
- description: "List workflow runs in the current working scope. A scheduled task runs from the scheduler's cwd, so its runs " +
81
- "sit in another scope: get the run id from `akm task history <task-id> --limit 1` (detail.runId) and pass it " +
82
- "to `akm workflow status <run-id>`, which works from any directory, or pass --all-scopes.",
72
+ description: "List workflow runs on this host, most recently updated first",
83
73
  },
84
74
  args: {
85
75
  ref: { type: "string", description: "Filter to one workflow ref" },
@@ -89,11 +79,11 @@ const workflowListCommand = defineJsonCommand({
89
79
  description: "Also include child workflow runs (hidden by default, P3b)",
90
80
  default: false,
91
81
  },
82
+ // Deprecated no-op, accepted through 0.10 so scripts that pass it do not
83
+ // fail with UNKNOWN_FLAG. Runs are no longer scoped to a directory.
92
84
  "all-scopes": {
93
85
  type: "boolean",
94
- description: "Search every scope instead of only the current one (#942). The envelope's top-level `scopeKey` is " +
95
- "`null` with this flag, otherwise the scope that was searched — so an empty `runs: []` is never " +
96
- 'indistinguishable from "nothing anywhere".',
86
+ description: "Deprecated, no effect: runs are host-wide, not scoped to a directory. Accepted through 0.10 for existing scripts.",
97
87
  default: false,
98
88
  },
99
89
  },
@@ -102,7 +92,6 @@ const workflowListCommand = defineJsonCommand({
102
92
  workflowRef: args.ref,
103
93
  activeOnly: args.active,
104
94
  includeChildren: args.children,
105
- allScopes: args["all-scopes"],
106
95
  });
107
96
  output("workflow-list", result);
108
97
  },
@@ -158,12 +147,6 @@ const workflowCreateCommand = defineJsonCommand({
158
147
  from: args.from,
159
148
  force: args.force,
160
149
  });
161
- // Index the newly-written workflow so `akm workflow run` can resolve
162
- // a workflowEntryId without requiring an explicit `akm index` call
163
- // first. Uses the same incremental index path that `akm add` uses.
164
- // `result.bundleDir` — the indexer's own `IndexOptions.stashDir` field
165
- // name is unchanged (indexer vocabulary is out of scope, P4 row B-50).
166
- await akmIndex({ stashDir: result.bundleDir });
167
150
  output("workflow-create", { ok: true, ...result });
168
151
  },
169
152
  });
@@ -184,29 +167,34 @@ const WORKFLOW_RUN_SKIP_REASONS = {
184
167
  const workflowRunCommand = defineJsonCommand({
185
168
  meta: {
186
169
  name: "run",
187
- description: "Start or resume a workflow and execute it through completion, failure, a verification gate, or an explicit limit",
170
+ description: "Start a new run of a workflow ref, or drive an existing run by id, through completion, failure, a verification gate, or an explicit limit",
188
171
  },
189
172
  args: {
190
- target: { type: "positional", description: "Workflow run id or workflow ref (auto-starts a run)", required: true },
173
+ target: {
174
+ type: "positional",
175
+ description: "Workflow ref (starts a new run) or workflow run id (drives that run)",
176
+ required: true,
177
+ },
191
178
  "max-steps": { type: "string", description: "Stop after executing this many steps" },
192
179
  "max-retries": { type: "string", description: "Retry a failed workflow step this many additional times" },
193
180
  timeout: { type: "string", description: "Whole-run timeout: N, Nms, Ns, or Nm (bare N is milliseconds)" },
181
+ // Deprecated no-op, accepted through 0.10 so scripts that pass it do not
182
+ // fail with UNKNOWN_FLAG. A workflow ref always starts a new run now.
194
183
  new: {
195
184
  type: "boolean",
196
- description: "Start a fresh run even if one is already active for this ref, leaving the existing run untouched " +
197
- "(never abandons it). A workflow ref only — passing a run id with --new is a usage error.",
185
+ description: "Deprecated, no effect: a workflow ref always starts a new run. Accepted through 0.10 for existing scripts.",
198
186
  default: false,
199
187
  },
200
188
  "skip-if-locked": {
201
189
  type: "boolean",
202
- description: "If another akm process is already driving this run, or state.db is busy with another " +
203
- "writer, skip gracefully (exit 0) instead of failing (exit 75). Use for high-frequency scheduled runs " +
204
- "so they don't pile up failures while a longer-running invocation is in progress.",
190
+ description: "If another akm process is already driving this run (or, for a workflow ref, an active run of it), or " +
191
+ "state.db is busy with another writer, skip gracefully (exit 0) instead of failing (exit 75). Use for " +
192
+ "high-frequency scheduled runs so they don't pile up failures while a longer-running invocation is in progress.",
205
193
  default: false,
206
194
  },
207
195
  },
208
196
  async run({ args, rawArgs }) {
209
- const { runWorkflowSteps } = await import("../workflows/exec/run-workflow.js");
197
+ const { findLiveLockedRunOfRef, runWorkflowSteps } = await import("../workflows/exec/run-workflow.js");
210
198
  const parameterFlags = parseWorkflowParameterFlags(rawArgs, args.target);
211
199
  const maxSteps = parseIntegerFlag(getStringArg(args, "max-steps"), "--max-steps", 1);
212
200
  const maxRetries = parseIntegerFlag(getStringArg(args, "max-retries"), "--max-retries", 0);
@@ -228,15 +216,25 @@ const workflowRunCommand = defineJsonCommand({
228
216
  timeoutMs,
229
217
  reason: `Workflow run timed out after ${timeoutMs}ms.`,
230
218
  });
219
+ const skip = (reason, message) => {
220
+ warn(`[workflow] ${message} skipping (--skip-if-locked)`);
221
+ output("workflow-run", { ok: true, target: args.target, skipped: { reason, message } });
222
+ };
231
223
  try {
232
224
  let result;
233
225
  try {
226
+ // #1239: a ref start never conflicts with another run of the ref, so
227
+ // the one extra condition is an active run of it a live process is driving.
228
+ const held = skipIfLocked ? await findLiveLockedRunOfRef(args.target) : undefined;
229
+ if (held) {
230
+ skip("lock-held", `Workflow run ${held.runId} of ${args.target} is already being driven by another akm process (pid ${held.holder}).`);
231
+ return;
232
+ }
234
233
  result = await runWorkflowSteps({
235
234
  target: args.target,
236
235
  parameterFlags,
237
236
  ...(maxSteps !== undefined ? { maxSteps } : {}),
238
237
  ...(maxRetries !== undefined ? { maxRetries } : {}),
239
- newRun: args.new,
240
238
  signal: controller.signal,
241
239
  });
242
240
  }
@@ -247,9 +245,7 @@ const workflowRunCommand = defineJsonCommand({
247
245
  // off UsageError) — a bad flag or malformed input still fails loudly
248
246
  // even with the flag set.
249
247
  if (skipIfLocked && err instanceof TransientError && WORKFLOW_RUN_SKIP_REASONS[err.code]) {
250
- const reason = WORKFLOW_RUN_SKIP_REASONS[err.code];
251
- warn(`[workflow] ${err.message} skipping (--skip-if-locked)`);
252
- output("workflow-run", { ok: true, target: args.target, skipped: { reason, message: err.message } });
248
+ skip(WORKFLOW_RUN_SKIP_REASONS[err.code], err.message);
253
249
  return;
254
250
  }
255
251
  throw err;
@@ -371,10 +367,9 @@ function parseWorkflowTimeout(raw) {
371
367
  }
372
368
  return timeoutMs;
373
369
  }
374
- // P3b Lane B (spec docs/plans/specs/p3b-child-executor.md §4.6): read-only
375
- // compile+freeze introspection — zero durable writes, zero usage/event rows
376
- // (row B-48). `--json` is deliberately NOT a flag anywhere in this CLI
377
- // (B-N9); the global `--format json` is spliced on by `defineJsonCommand`.
370
+ // Read-only compile+freeze introspection — zero durable writes, zero
371
+ // usage/event rows. `--json` is deliberately NOT a flag anywhere in this CLI;
372
+ // the global `--format json` is spliced on by `defineJsonCommand`.
378
373
  const workflowPlanCommand = defineJsonCommand({
379
374
  meta: {
380
375
  name: "plan",
@@ -8,18 +8,18 @@
8
8
  * github.com/anthropics/skills): each `<name>/SKILL.md` is one `skill` item
9
9
  * whose conceptId is the package DIRECTORY (`<name>`); bundled resources under
10
10
  * the package (`<name>/reference/FORMS.md`) are part of the item, not standalone
11
- * concepts (item-scoped incrementality, spec §4). The SKILL.md codec is shared
12
- * with claude/opencode as functions (spec §8); this adapter differs in that the
11
+ * concepts (item-scoped incrementality). The SKILL.md codec is shared
12
+ * with claude/opencode as functions; this adapter differs in that the
13
13
  * package dir sits directly under the component root (no `skills/` prefix) and
14
- * that `validate` enforces the FULL Agent Skills contract (spec §4.5).
14
+ * that `validate` enforces the FULL Agent Skills contract.
15
15
  *
16
16
  * RECOGNITION ≠ VALIDATION: an invalid skill (bad name charset, over-long
17
17
  * description) is still RECOGNIZED as `type: skill` (the raw invalid `name` is
18
18
  * projected so it is inspectable downstream); the violations surface only in
19
- * `validate` (spec §4.5). This mirrors how `okf` recognizes content and defers
19
+ * `validate`. This mirrors how `okf` recognizes content and defers
20
20
  * leniency to validate.
21
21
  *
22
- * ── validate (spec §4.5, APPROVED codes — maintainer resolution 2026-07) ──
22
+ * ── validate ──
23
23
  *
24
24
  * - `skill-name-invalid` — name must be NFKC 1-64 chars matching
25
25
  * `^[a-z0-9]+(-[a-z0-9]+)*$`, carry no reserved word, and equal the parent
@@ -32,8 +32,7 @@
32
32
  * cannot reach it, because a change is always a file and a manifest-less
33
33
  * package contributes no SKILL.md change (issue #774).
34
34
  *
35
- * The two field codes are APPROVED-BUT-NOT-YET-CODED elsewhere and are
36
- * implemented here. Base checks are NOT run:
35
+ * The two field codes are implemented here. Base checks are NOT run:
37
36
  * a SKILL.md carries no `updated` field, so `missing-updated` would fire on
38
37
  * every conformant skill and contradict the lint golden.
39
38
  *
@@ -50,12 +49,12 @@ import { hashContent, nonEmptyString, readTags } from "./shared.js";
50
49
  const COMPONENT_ID = "main";
51
50
  /** The skill manifest basename (the item marker). */
52
51
  const SKILL_MANIFEST = "SKILL.md";
53
- /** Agent Skills hard limits (spec §4.5). */
52
+ /** Agent Skills hard limits. */
54
53
  const NAME_MAX = 64;
55
54
  const DESCRIPTION_MAX = 1024;
56
55
  /** Agent Skills reserved words a name must not contain (real-world source). */
57
56
  const RESERVED_NAME_WORDS = ["anthropic", "claude"];
58
- /** name charset/shape rule (spec §4.5). */
57
+ /** name charset/shape rule. */
59
58
  const NAME_RE = /^[a-z0-9]+(-[a-z0-9]+)*$/;
60
59
  /** conceptId + package-dir name for a `<name>/SKILL.md` file, or null when the file is not a skill manifest. */
61
60
  function skillPackage(relPath) {
@@ -111,7 +110,7 @@ function skillFieldDiagnostics(relPath, dirName, data) {
111
110
  file: relPath,
112
111
  issue: "skill-name-invalid",
113
112
  detail: `skill name '${name}' must match ^[a-z0-9]+(-[a-z0-9]+)*$ (NFKC, 1-${NAME_MAX} chars, ` +
114
- `no reserved word, == parent dir name '${dirName}') — Agent Skills hard rule (spec §4.5).`,
113
+ `no reserved word, == parent dir name '${dirName}') — Agent Skills hard rule.`,
115
114
  fixed: false,
116
115
  });
117
116
  }
@@ -120,7 +119,7 @@ function skillFieldDiagnostics(relPath, dirName, data) {
120
119
  diagnostics.push({
121
120
  file: relPath,
122
121
  issue: "skill-description-too-long",
123
- detail: `skill description is ${description.length} characters; the Agent Skills hard limit is 1-${DESCRIPTION_MAX} (spec §4.5).`,
122
+ detail: `skill description is ${description.length} characters; the Agent Skills hard limit is 1-${DESCRIPTION_MAX}.`,
124
123
  fixed: false,
125
124
  });
126
125
  }
@@ -2,19 +2,18 @@
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 AKM workspace's own `akm` adapter — akm 0.9.0 chunk-2, WI-B.
5
+ * The AKM workspace's own `akm` adapter.
6
6
  *
7
- * Implements `docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md` §5.1 (BINDING) +
8
- * §6 + §7 (the `akm` row) EXACTLY: a BEHAVIOR-PRESERVING PORT that reproduces
7
+ * A BEHAVIOR-PRESERVING PORT that reproduces
9
8
  * TODAY'S classification and placement VERBATIM by REUSING the existing matcher
10
9
  * stack. It is NOT re-derived onto frontmatter `type` (that is the sibling
11
- * `okf` adapter's job, §5), NOT split per-`type` (the 14 AKM formats are `type`
12
- * VALUES the single `akm` adapter emits, §6/§0.2), and introduces NO new
10
+ * `okf` adapter's job), NOT split per-`type` (the 14 AKM formats are `type`
11
+ * VALUES the single `akm` adapter emits), and introduces NO new
13
12
  * positional/directory heuristics of its own.
14
13
  *
15
- * ── recognize (§5.1): the sync `runMatchers` reproduction ──
14
+ * ── recognize: the sync `runMatchers` reproduction ──
16
15
  *
17
- * `file-context.ts#runMatchers` (`:242-265`) is async ONLY because of its lazy
16
+ * `file-context.ts#runMatchers` is async ONLY because of its lazy
18
17
  * `ensureBuiltinsRegistered()` dynamic import; its ARBITRATION is pure and
19
18
  * synchronous. We reproduce it here by importing the SAME four builtin matcher
20
19
  * functions (`matchers.ts` `extensionMatcher` / `directoryMatcher` /
@@ -31,10 +30,10 @@
31
30
  * same arbitration.
32
31
  *
33
32
  * The winning `MatchResult.renderer` is carried on `documentJson.renderer` so
34
- * WI-C can wire presentation via `TYPE_PRESENTATION` without a new
35
- * `IndexDocument` field (WI-C owns presentation).
33
+ * presentation can be wired via `TYPE_PRESENTATION` without a new
34
+ * `IndexDocument` field.
36
35
  *
37
- * ── conceptId (§5.1 + ref-grammar decision D-R2): the QUALIFIED spelling ──
36
+ * ── conceptId: the QUALIFIED spelling ──
38
37
  *
39
38
  * conceptId = `<stash-subdir>/<canonical-name>` — the placement stash-subdir
40
39
  * (`stashDirFor(type)`) followed by the winning type's canonical name
@@ -43,26 +42,26 @@
43
42
  * extension, env/task strip their ext, and secret/session keep the natural
44
43
  * path). For Markdown types this IS the OKF concept ID (path − `.md`); it is
45
44
  * the same spelling `readCandidates` consumes, so
46
- * recognize/read share one identity (D-R2 resolved the earlier split). The
47
- * `type` is carried separately on `IndexDocument.type`, per §0.2 (type ≠
45
+ * recognize/read share one identity. The
46
+ * `type` is carried separately on `IndexDocument.type` (type ≠
48
47
  * identity), and `entry.name` keeps the BARE canonical name for FTS parity.
49
48
  *
50
49
  * ── readCandidates / directoryList / looksLikeRoot: type-driven placement ──
51
50
  *
52
51
  * Placement is type-driven (`path-resolver.ts#buildDiskCandidates`: the primary
53
52
  * candidate is `assetPathForName(ref.type, join(root, stashDirFor(ref.type)),
54
- * ref.name)`). §5.1 removes `type` from the ref, so `readCandidates` recovers
53
+ * ref.name)`). A ref carries no `type`, so `readCandidates` recovers
55
54
  * it from the conceptId's LEADING path segment — the qualified `<stash-subdir>/
56
- * <name>` form of §1.3 — reverse-mapping that segment against the placement
55
+ * <name>` form — reverse-mapping that segment against the placement
57
56
  * stash-subdir map and then delegating to `assetPathCandidatesForName`.
58
57
  *
59
- * ── validate: base checks only (WI-B) ──
58
+ * ── validate ──
60
59
  *
61
- * Base validate checks only for this WI (shared `validateChangesWithBaseChecks`
62
- * — the ported unquoted-colon / missing-updated / stale-path / missing-ref).
63
- * The per-type linters (SkillLinter/WorkflowLinter/TaskLinter/…) are WI-C.
60
+ * Shared base checks (`validateChangesWithBaseChecks` — the ported
61
+ * unquoted-colon / missing-updated / stale-path / missing-ref), then the
62
+ * per-type linters (SkillLinter/WorkflowLinter/TaskLinter/…) in `akm-lint.ts`.
64
63
  *
65
- * ── Cycle-safety (chunk-3 cutover, baseline 18) ──
64
+ * ── Cycle-safety ──
66
65
  *
67
66
  * This module VALUE-imports `matchers.ts` (indexer/walk) for classification and
68
67
  * `asset-placement.ts` (core/asset) for placement — delegating to the existing
@@ -74,15 +73,14 @@
74
73
  * in production for the frozen `BUILTIN_ADAPTERS` list
75
74
  * (`installations.ts#detectAdapterId`, `provider-utils.ts#detectStashRoot`).
76
75
  * The adapter is still itself a leaf, since neither the barrel nor the
77
- * registry import anything that imports back into this file — verified: `bun
78
- * scripts/lint-import-cycles.ts` reports 0 cycle participants and this module
79
- * is NOT one.
76
+ * registry import anything that imports back into this file.
80
77
  */
81
78
  import fs from "node:fs";
82
79
  import path from "node:path";
83
80
  import { applyPostContributorFields, applyPreContributorFields, extractPackageMetadata, getMarkdownFragmentContent, hasMarkdownFragmentContent, setMarkdownFragmentContent, } from "../../../indexer/passes/metadata.js";
84
81
  import { assetPathCandidatesForName, deriveCanonicalAssetNameFromStashRoot, placementTypes, stashDirFor, stashDirNames, } from "../../asset/asset-placement.js";
85
82
  import { parseFrontmatter } from "../../asset/frontmatter.js";
83
+ import { sensitiveMarkerPath } from "../../sensitive-marker-path.js";
86
84
  import { executionDefaultsFromFrontmatter, renderMarkdownExecutionSource } from "../execution-source.js";
87
85
  import { recognizeMatch } from "../recognize-match.js";
88
86
  import { perTypeValidateChecks, skillDirectoryDiagnostics } from "./akm-lint.js";
@@ -95,15 +93,14 @@ import { hashContent, RESERVED_FILES, runBaseValidateChecks } from "./shared.js"
95
93
  // unaffected.
96
94
  export { recognizeMatch } from "../recognize-match.js";
97
95
  /**
98
- * OKF reserved structural files (ref-grammar decision D-R6, spec §5.1 /
99
- * adapter-spec §5.1/§6): `index.md` (directory listing) and `log.md` (update
96
+ * OKF reserved structural files: `index.md` (directory listing) and `log.md` (update
100
97
  * history) are bundle structure at EVERY depth — never a concept document. The
101
98
  * `okf` / `llm-wiki` adapters already exclude them (`shared.ts`'s
102
99
  * `RESERVED_FILES`); this brings the `akm` adapter into conformance so a
103
100
  * `knowledge/index.md` never classifies as a `knowledge` item. Case-insensitive,
104
101
  * matched on the bare filename so the exclusion holds at any depth.
105
102
  */
106
- /** True when `name` (a bare file name) is an OKF reserved file, case-insensitively (D-R6). */
103
+ /** True when `name` (a bare file name) is an OKF reserved file, case-insensitively. */
107
104
  function isReservedFileName(name) {
108
105
  return RESERVED_FILES.has(name.toLowerCase());
109
106
  }
@@ -136,7 +133,7 @@ function akmStashAbstains(root, absPath) {
136
133
  return true;
137
134
  // Skip env `.env` files that have a sibling `.sensitive` marker file.
138
135
  if (segments[0] === "env" && (absPath.endsWith(".env") || path.basename(absPath) === ".env")) {
139
- if (fs.existsSync(absPath.replace(/\.env$/, ".sensitive")))
136
+ if (fs.existsSync(sensitiveMarkerPath(absPath, "env")))
140
137
  return true;
141
138
  }
142
139
  // Skip secret files that are themselves a `.sensitive` marker, or that have a
@@ -145,7 +142,7 @@ function akmStashAbstains(root, absPath) {
145
142
  if (segments[0] === "secrets") {
146
143
  if (absPath.endsWith(".sensitive") || absPath.endsWith(".lock"))
147
144
  return true;
148
- if (fs.existsSync(`${absPath}.sensitive`))
145
+ if (fs.existsSync(sensitiveMarkerPath(absPath, "secret")))
149
146
  return true;
150
147
  }
151
148
  // Inside a `wikis/<name>/` directory, the root-level infrastructure files
@@ -166,11 +163,11 @@ function stashDirToType(stashDir) {
166
163
  }
167
164
  /**
168
165
  * The search-surface `IndexDocument` fields that have NO first-class `IndexDocument`
169
- * home (spec §3) and therefore ride `documentJson` so the persist-time fold
170
- * (`search-fields.ts:28-33`) can still reach them — the exact set
166
+ * home and therefore ride `documentJson` so the persist-time fold
167
+ * (`search-fields.ts`) can still reach them — the exact set
171
168
  * `buildSearchFields` folds into the `hints`/`content` FTS columns beyond the
172
169
  * first-class name/description/tags/aliases/searchHints, plus the provenance the
173
- * WI-C tests read (renderer/source). Kept as a named list so the fold surface and
170
+ * tests read (renderer/source). Kept as a named list so the fold surface and
174
171
  * the mapping stay in lockstep.
175
172
  */
176
173
  const DOCUMENT_JSON_CARRIED_FIELDS = [
@@ -203,11 +200,11 @@ const DOCUMENT_JSON_CARRIED_FIELDS = [
203
200
  ];
204
201
  /**
205
202
  * Map the fully-assembled `IndexDocument` (produced by the shared metadata
206
- * pipeline) onto an `IndexDocument` (spec §3). First-class ranking/embedding
203
+ * pipeline) onto an `IndexDocument`. First-class ranking/embedding
207
204
  * fields land on named IndexDocument fields; every other search-surface or
208
205
  * signal field rides `documentJson` (opaque adapter extras) so nothing the
209
- * ranking/embedding/filter inputs read is lost — the M-b shadow-parity gate.
210
- * The winning renderer name is carried on `documentJson.renderer` (WI-C contract).
206
+ * ranking/embedding/filter inputs read is lost.
207
+ * The winning renderer name is carried on `documentJson.renderer`.
211
208
  */
212
209
  function indexDocumentFromEntry(entry, base, rendererName) {
213
210
  const extras = { renderer: rendererName };
@@ -264,7 +261,7 @@ function conceptIdForRecognizedType(root, filePath, type) {
264
261
  return stashDir !== undefined ? `${stashDir}/${canonicalName}` : canonicalName;
265
262
  }
266
263
  function recognize(c, file) {
267
- // D-R6 (spec §5.1): `index.md` / `log.md` are OKF reserved structural files at
264
+ // `index.md` / `log.md` are OKF reserved structural files at
268
265
  // every depth — never items. Excluded BEFORE classification so a directory
269
266
  // listing or update log never becomes a `knowledge` (or other) concept.
270
267
  if (isReservedFileName(file.fileName))
@@ -294,12 +291,12 @@ function recognize(c, file) {
294
291
  // `skills/skills/x`. `entry.name` below keeps the BARE canonical name —
295
292
  // identity ≠ search text.
296
293
  const dirPath = path.dirname(file.absPath);
297
- // Chunk 5 M-b: recognize now carries the FULL index-time metadata surface
298
- // (spec §2/§3), reproducing `buildEntryFromFile`'s flat-walk metadata
294
+ // recognize carries the FULL index-time metadata surface,
295
+ // reproducing `buildEntryFromFile`'s flat-walk metadata
299
296
  // output by SHARING its P1/P2/P4 assembly and substituting the synchronous
300
297
  // `foldRecognizedMetadata` (+ `applyFoldedMetadata`, which replicates the
301
298
  // in-place contributor precedence) for the async P3 renderer contributors.
302
- // `entry.name` = the BARE canonical name (conceptId minus the D-R2 stash-subdir
299
+ // `entry.name` = the BARE canonical name (conceptId minus the stash-subdir
303
300
  // prefix) so the FTS `name` column
304
301
  // matches the pre-0.9.0 indexer (search-behavior parity), NOT the frontmatter
305
302
  // title. Parity is by construction — the two paths differ only in the P3 step,
@@ -347,14 +344,13 @@ function renderExecutionSource(c, file) {
347
344
  defaults: (data) => executionDefaultsFromFrontmatter(data, {
348
345
  kind: document.type === "command" ? "command" : "persona",
349
346
  allowTopLevelEngine: true,
350
- toolsKeys: ["tools"],
351
347
  }),
352
348
  });
353
349
  }
354
350
  /**
355
351
  * A read-only {@link FileContext} backed by an OVERLAY string (a pending
356
352
  * change's content) instead of the live filesystem — the `validate` contract
357
- * ({@link BundleAdapter.validate} doc comment / adapter-spec §12.1) forbids
353
+ * ({@link BundleAdapter.validate} doc comment) forbids
358
354
  * reading the live FS. It mirrors `buildFileContext`'s eager path-field
359
355
  * derivation exactly (so the matchers classify identically) and serves the
360
356
  * overlay bytes from `content()`/`frontmatter()`. `stat()` throws: no matcher
@@ -395,7 +391,7 @@ function buildOverlayContext(root, relPathInput, raw) {
395
391
  };
396
392
  }
397
393
  /**
398
- * `validate` (spec §6) = shared base checks + the winning `type`'s per-type
394
+ * `validate` = shared base checks + the winning `type`'s per-type
399
395
  * extra checks, reproducing today's `akmLint`/`getLinterForType` dispatch
400
396
  * byte-for-byte (the FROZEN `lint/all-types.json` `perType` golden is the gate).
401
397
  *
@@ -439,7 +435,6 @@ async function validate(c, changes, ctx) {
439
435
  body: parsed.content,
440
436
  ext: overlay.ext,
441
437
  ctx,
442
- workspaceRoot: c.root,
443
438
  })));
444
439
  diagnostics.push(...(await skillDirectoryDiagnostics(change.path, seenSkillDirs, ctx)));
445
440
  }
@@ -2,10 +2,9 @@
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
- * Per-`type` validate checks for the `akm` adapter — akm 0.9.0 chunk-2, WI-C,
6
- * implementing spec §6 (the per-`type` validation column) as a
7
- * behavior-preserving port of `src/commands/lint/*`'s type linters. The `akm`
8
- * adapter's `validate` = shared base checks (WI-A `shared.ts`) + these per-type
5
+ * Per-`type` validate checks for the `akm` adapter: a behavior-preserving
6
+ * port of `src/commands/lint/*`'s type linters. The `akm`
7
+ * adapter's `validate` = shared base checks (`shared.ts`) + these per-type
9
8
  * extra checks, keyed on the winning `type`, reproducing today's
10
9
  * `getLinterForType(subdir).lint(ctx)` dispatch. The FROZEN lint golden
11
10
  * (`tests/fixtures/goldens/lint/all-types.json`, `perType`) is the conformance
@@ -30,7 +29,7 @@
30
29
  * `ValidateContext` (the run snapshot + pending overlay) — the live linters'
31
30
  * `fs.existsSync` sibling/SKILL.md probes become `ctx.readFile` lookups.
32
31
  *
33
- * ── env/secret dangerous-key narrowness (PRESERVED, spec §6) ──
32
+ * ── env/secret dangerous-key narrowness (PRESERVED) ──
34
33
  *
35
34
  * Today's scan (`collectEnvFiles`) only visits `.env`-SUFFIXED files under
36
35
  * `env/` and `secrets/`, so `secrets/<bare-name>` is NOT scanned. This port
@@ -207,7 +206,7 @@ export async function skillDirectoryDiagnostics(relPath, seen, ctx, skillDirs =
207
206
  * routes through `ctx`.
208
207
  */
209
208
  export async function perTypeValidateChecks(args) {
210
- const { type, relPath, raw, data, frontmatter, body, ext, ctx, workspaceRoot } = args;
209
+ const { type, relPath, raw, data, frontmatter, body, ext, ctx } = args;
211
210
  switch (type) {
212
211
  case "command":
213
212
  return nameOrTypeDiagnostics(relPath, data, frontmatter, ["command"]);
@@ -216,7 +215,7 @@ export async function perTypeValidateChecks(args) {
216
215
  case "fact":
217
216
  return factDiagnostics(relPath, data);
218
217
  case "task":
219
- return taskDiagnostics(relPath, raw, workspaceRoot);
218
+ return taskDiagnostics(relPath, raw);
220
219
  case "workflow":
221
220
  return ext === ".md" ? workflowDiagnostics(relPath, raw, body) : [];
222
221
  case "memory":
@@ -255,9 +254,9 @@ export function factDiagnostics(relPath, data) {
255
254
  return [];
256
255
  }
257
256
  /**
258
- * Task validation has one semantic owner: the version-routed task source
259
- * parser (spec docs/plans/specs/p2a-task-source-v4.md §3.6) — `version: 3`
260
- * through the strict task-v3 grammar, `version: 4` through task source v4.
257
+ * Task validation has one semantic owner: the task source parser, which reads
258
+ * task source v4 and refuses an older `version` with
259
+ * `TASK_SCHEMA_VERSION_UNSUPPORTED`.
261
260
  * Keeping raw YAML at this boundary preserves duplicate-key, alias/tag,
262
261
  * source-location, descriptor, resource-bound, and migration-hint behavior.
263
262
  *
@@ -266,12 +265,11 @@ export function factDiagnostics(relPath, data) {
266
265
  * contract; the cron suits the local scheduler backend), so `akm lint --type
267
266
  * tasks` never reports clean a task that sync would refuse.
268
267
  */
269
- export function taskDiagnostics(relPath, raw, workspaceRoot) {
268
+ export function taskDiagnostics(relPath, raw) {
270
269
  try {
271
270
  const parsed = parseTaskSource({
272
271
  filePath: relPath,
273
272
  yaml: raw,
274
- ...(workspaceRoot ? { workspaceRoot } : {}),
275
273
  });
276
274
  assertTaskScheduleInputsSatisfyContract(parsed.v4, relPath);
277
275
  assertTaskScheduleCronValid(parsed.v4, backendNameForPlatform());
@@ -170,7 +170,7 @@ export function foldRecognizedMetadata(rendererName, file) {
170
170
  case "task-yaml": {
171
171
  out.tags = Array.from(new Set([...(out.tags ?? []), "task", "scheduled"]));
172
172
  try {
173
- const parsed = parseTaskSource({ yaml: file.content(), filePath: file.absPath, workspaceRoot: file.stashRoot });
173
+ const parsed = parseTaskSource({ yaml: file.content(), filePath: file.absPath });
174
174
  const v4 = parsed.v4;
175
175
  const target = v4.target;
176
176
  const hints = new Set();
@@ -261,7 +261,7 @@ export function foldRecognizedMetadata(rendererName, file) {
261
261
  // ── workflow-document-metadata (historical renderer id `workflow-md`, peer sources) ──
262
262
  case "workflow-md": {
263
263
  try {
264
- const result = compileWorkflowSource(file.content(), { path: file.relPath, workspaceRoot: file.stashRoot });
264
+ const result = compileWorkflowSource(file.content(), { path: file.relPath });
265
265
  if (!result.ok)
266
266
  return out;
267
267
  const plan = result.plan;
@@ -4,7 +4,7 @@
4
4
  /**
5
5
  * The `akm-task` adapter for task `.yml` sources.
6
6
  *
7
- * A native akm task-YAML bundle (spec §6/§7). A `.yml` file derives
7
+ * A native akm task-YAML bundle. A `.yml` file derives
8
8
  * `type: task`; conceptId strips the `.yml` extension. Tasks are AKM-native
9
9
  * YAML, NOT OKF markdown concepts. Recognition does NOT gate on validity — an
10
10
  * invalid task (e.g. `uses` plus `run`) is still RECOGNIZED; the `invalid-task-yaml`
@@ -14,16 +14,15 @@
14
14
  * is not a task spelling (nothing indexes or schedules it), so it is reported
15
15
  * as `invalid-task-yaml` rather than silently skipped (issue #760).
16
16
  *
17
- * ── validate (spec §6 task validation column) ──
17
+ * ── validate ──
18
18
  *
19
19
  * Validation enters the canonical task source parser (`parseTaskSource`,
20
20
  * which reads only task source v4 — a `version: 2` or `version: 3`
21
21
  * document fails closed with `TASK_SCHEMA_VERSION_UNSUPPORTED`, naming
22
22
  * `akm migrate apply`, which converts it). That parser owns the closed key sets,
23
23
  * the executable-selector XOR, hostile YAML policy, the `akm/command`
24
- * builtin, bounds, and physical `working-directory` containment. The
25
- * adapter only translates a parser failure into the format-family
26
- * diagnostic shape.
24
+ * builtin, and bounds. The adapter only translates a parser failure into
25
+ * the format-family diagnostic shape.
27
26
  *
28
27
  * Conformance oracle (authored, DO NOT modify): fixture
29
28
  * `tests/fixtures/bundles/akm-task/` + goldens
@@ -38,7 +37,7 @@ import { toPosix } from "../../common.js";
38
37
  import { hashContent } from "./shared.js";
39
38
  /** A native task bundle is single-component; its one component is `main`. */
40
39
  const COMPONENT_ID = "main";
41
- /** The task YAML extension (spec §6 task row). */
40
+ /** The task YAML extension. */
42
41
  const TASK_EXT = TASK_EXTENSION;
43
42
  function recognize(c, file) {
44
43
  if (file.ext !== TASK_EXT)
@@ -59,7 +58,7 @@ function recognize(c, file) {
59
58
  content: raw,
60
59
  };
61
60
  }
62
- async function validate(c, changes, ctx) {
61
+ async function validate(_c, changes, ctx) {
63
62
  const diagnostics = [];
64
63
  for (const change of changes) {
65
64
  if (change.op === "delete")
@@ -84,7 +83,7 @@ async function validate(c, changes, ctx) {
84
83
  continue;
85
84
  }
86
85
  try {
87
- parseTaskSource({ yaml: raw, filePath: relPath, workspaceRoot: c.root });
86
+ parseTaskSource({ yaml: raw, filePath: relPath });
88
87
  }
89
88
  catch (cause) {
90
89
  diagnostics.push({
@@ -145,7 +144,7 @@ export const akmTaskAdapter = {
145
144
  continue;
146
145
  }
147
146
  try {
148
- parseTaskSource({ yaml: raw, filePath: entry.name, workspaceRoot: root });
147
+ parseTaskSource({ yaml: raw, filePath: entry.name });
149
148
  return true;
150
149
  }
151
150
  catch {