akm-cli 0.9.1 → 0.9.2-alpha.1

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 (341) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +3 -1
  3. package/SECURITY.md +1 -1
  4. package/STABILITY.md +1 -1
  5. package/dist/akm +2 -2
  6. package/dist/akm-migrate +2 -2
  7. package/dist/assets/hints/cli-hints-full.md +14 -9
  8. package/dist/assets/improve-strategies/proactive-maintenance.json +1 -1
  9. package/dist/assets/improve-strategies/reflect-distill.json +1 -1
  10. package/dist/assets/models.json +35 -0
  11. package/dist/assets/tasks/core/extract.yml +6 -5
  12. package/dist/assets/tasks/core/improve.yml +6 -5
  13. package/dist/assets/tasks/core/index-refresh.yml +6 -5
  14. package/dist/assets/tasks/core/sync.yml +6 -5
  15. package/dist/assets/tasks/core/version-check.yml +6 -5
  16. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +6 -5
  17. package/dist/assets/tasks/improve/akm-improve-catchup.yml +6 -5
  18. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +6 -5
  19. package/dist/assets/tasks/improve/akm-improve-frequent.yml +6 -5
  20. package/dist/assets/tasks/improve/akm-improve-nightly.yml +6 -5
  21. package/dist/cli/confirm.js +2 -2
  22. package/dist/cli/parse-args.js +3 -24
  23. package/dist/cli/retired-commands.js +1 -1
  24. package/dist/cli/shared.js +2 -2
  25. package/dist/cli.js +11 -9
  26. package/dist/commands/agent/agent-dispatch.js +55 -89
  27. package/dist/commands/agent/contribute-cli.js +12 -45
  28. package/dist/commands/command/builtin-action.js +32 -0
  29. package/dist/commands/command/command-cli.js +99 -0
  30. package/dist/commands/command/command-execution.js +308 -0
  31. package/dist/commands/command/execution-source-loader.js +176 -0
  32. package/dist/commands/command/portable-template.js +60 -0
  33. package/dist/commands/config-cli.js +10 -4
  34. package/dist/commands/env/env.js +4 -2
  35. package/dist/commands/feedback-cli.js +1 -1
  36. package/dist/commands/health/checks.js +241 -29
  37. package/dist/commands/health/html-report.js +0 -14
  38. package/dist/commands/health/report-view-model.js +0 -1
  39. package/dist/commands/health/surfaces.js +6 -7
  40. package/dist/commands/health/types.js +0 -2
  41. package/dist/commands/health.js +63 -18
  42. package/dist/commands/improve/collapse-detector.js +2 -2
  43. package/dist/commands/improve/consolidate.js +251 -214
  44. package/dist/commands/improve/distill/promote-memory.js +71 -34
  45. package/dist/commands/improve/distill/quality-gate.js +17 -5
  46. package/dist/commands/improve/distill.js +232 -155
  47. package/dist/commands/improve/eligibility.js +112 -79
  48. package/dist/commands/improve/execution.js +57 -0
  49. package/dist/commands/improve/extract-cli.js +5 -5
  50. package/dist/commands/improve/extract.js +521 -342
  51. package/dist/commands/improve/improve-strategies.js +43 -14
  52. package/dist/commands/improve/improve.js +249 -29
  53. package/dist/commands/improve/loop-stages.js +11 -17
  54. package/dist/commands/improve/memory/memory-contradiction-detect.js +90 -66
  55. package/dist/commands/improve/outcome-loop.js +22 -38
  56. package/dist/commands/improve/planner.js +134 -0
  57. package/dist/commands/improve/preparation.js +730 -409
  58. package/dist/commands/improve/reflect.js +386 -223
  59. package/dist/commands/improve/run-context.js +3 -4
  60. package/dist/commands/improve/salience.js +6 -58
  61. package/dist/commands/improve/session-asset.js +12 -12
  62. package/dist/commands/lint/index.js +101 -29
  63. package/dist/commands/migrate-cli.js +11 -69
  64. package/dist/commands/migration-tool.js +6 -9
  65. package/dist/commands/models-cli.js +27 -0
  66. package/dist/commands/proposal/drain.js +258 -186
  67. package/dist/commands/proposal/proposal-cli.js +32 -10
  68. package/dist/commands/proposal/proposal.js +2 -5
  69. package/dist/commands/proposal/propose.js +192 -172
  70. package/dist/commands/proposal/repository.js +54 -91
  71. package/dist/commands/proposal/validators/proposal-validators.js +9 -7
  72. package/dist/commands/read/curate.js +10 -0
  73. package/dist/commands/read/registry-search.js +25 -9
  74. package/dist/commands/read/remember-cli.js +14 -2
  75. package/dist/commands/read/search.js +10 -4
  76. package/dist/commands/read/show.js +139 -153
  77. package/dist/commands/registry-cli.js +16 -7
  78. package/dist/commands/remember.js +33 -18
  79. package/dist/commands/sources/add-cli.js +19 -178
  80. package/dist/commands/sources/bundle-cli.js +15 -3
  81. package/dist/commands/sources/dangerous-env-audit.js +135 -0
  82. package/dist/commands/sources/info.js +2 -1
  83. package/dist/commands/sources/installed-stashes.js +835 -152
  84. package/dist/commands/sources/schema-repair.js +174 -95
  85. package/dist/commands/sources/self-update.js +30 -74
  86. package/dist/commands/sources/source-add.js +3 -5
  87. package/dist/commands/sources/sources-cli.js +2 -15
  88. package/dist/commands/sources/update-transaction.js +220 -0
  89. package/dist/commands/tasks/tasks-cli.js +3 -3
  90. package/dist/commands/tasks/tasks.js +736 -317
  91. package/dist/commands/workflow-cli.js +2 -2
  92. package/dist/core/adapter/adapters/agent-skills-adapter.js +3 -0
  93. package/dist/core/adapter/adapters/akm-adapter.js +83 -34
  94. package/dist/core/adapter/adapters/akm-lint.js +54 -39
  95. package/dist/core/adapter/adapters/akm-metadata.js +45 -45
  96. package/dist/core/adapter/adapters/akm-task-adapter.js +32 -49
  97. package/dist/core/adapter/adapters/akm-workflow-adapter.js +38 -23
  98. package/dist/core/adapter/adapters/dotenv-adapter.js +30 -1
  99. package/dist/core/adapter/adapters/generic-files-adapter.js +11 -0
  100. package/dist/core/adapter/adapters/index.js +0 -9
  101. package/dist/core/adapter/adapters/llm-wiki-adapter.js +4 -0
  102. package/dist/core/adapter/adapters/okf-adapter.js +4 -0
  103. package/dist/core/adapter/adapters/opencode-adapter.js +5 -8
  104. package/dist/core/adapter/adapters/tool-dir-shared.js +63 -6
  105. package/dist/core/adapter/adapters/website-snapshot-adapter.js +4 -0
  106. package/dist/core/adapter/execution-source.js +308 -0
  107. package/dist/core/adapter/recognize-match.js +36 -13
  108. package/dist/core/adapter/registry.js +0 -9
  109. package/dist/core/asset/stash-meta.js +94 -4
  110. package/dist/core/common.js +6 -11
  111. package/dist/core/config/config-io.js +3 -3
  112. package/dist/core/config/config-schema.js +18 -40
  113. package/dist/core/config/config-sources.js +11 -21
  114. package/dist/core/config/config-walker.js +31 -13
  115. package/dist/core/config/config.js +21 -20
  116. package/dist/core/config/schema/engines.js +8 -7
  117. package/dist/core/config/schema/improve-processes.js +29 -5
  118. package/dist/core/config/schema/primitives.js +1 -23
  119. package/dist/core/config/schema/sources-bundles.js +13 -16
  120. package/dist/core/errors.js +2 -0
  121. package/dist/core/events.js +68 -32
  122. package/dist/core/extra-params.js +1 -0
  123. package/dist/core/improve-result.js +315 -0
  124. package/dist/core/lesson-lint.js +0 -6
  125. package/dist/core/maintenance-barrier.js +4 -4
  126. package/dist/core/network-policy.js +152 -0
  127. package/dist/core/paths.js +1 -1
  128. package/dist/core/recognition-util.js +4 -4
  129. package/dist/core/registry-url.js +456 -0
  130. package/dist/core/state/migrations.js +161 -47
  131. package/dist/core/state-db.js +453 -80
  132. package/dist/core/system-error.js +32 -0
  133. package/dist/core/time.js +2 -12
  134. package/dist/core/write-source.js +0 -18
  135. package/dist/execution/directory-identity.js +52 -0
  136. package/dist/execution/executable-identity.js +107 -0
  137. package/dist/execution/guarded-source.js +398 -0
  138. package/dist/execution/json.js +95 -0
  139. package/dist/{commands/health/types-session-log.js → execution/limits.js} +2 -1
  140. package/dist/execution/record.js +55 -0
  141. package/dist/execution/resolved-request.js +730 -0
  142. package/dist/execution/source.js +320 -0
  143. package/dist/indexer/bundle-identity-guard.js +5 -4
  144. package/dist/indexer/db/graph-db.js +33 -0
  145. package/dist/indexer/graph/graph-boost.js +3 -4
  146. package/dist/indexer/graph/graph-extraction.js +562 -373
  147. package/dist/indexer/index-written-assets.js +65 -34
  148. package/dist/indexer/indexer.js +443 -222
  149. package/dist/indexer/installations.js +6 -0
  150. package/dist/indexer/lookup/adapter-concept-owner.js +283 -0
  151. package/dist/indexer/passes/memory-inference.js +227 -174
  152. package/dist/indexer/scan/doc-to-entry.js +7 -9
  153. package/dist/indexer/scan/drain-dir.js +51 -23
  154. package/dist/indexer/search/db-search.js +98 -22
  155. package/dist/indexer/search/search-fields.js +1 -1
  156. package/dist/indexer/search/search-hit-enrichers.js +1 -1
  157. package/dist/indexer/search/search-source.js +7 -16
  158. package/dist/indexer/search/semantic-status.js +10 -1
  159. package/dist/indexer/usage/show-usage.js +105 -0
  160. package/dist/indexer/usage/usage-events.js +7 -2
  161. package/dist/indexer/walk/matchers.js +40 -10
  162. package/dist/indexer/walk/path-resolver.js +5 -2
  163. package/dist/indexer/walk/walker.js +20 -2
  164. package/dist/integrations/agent/builder-shared.js +3 -6
  165. package/dist/integrations/agent/conversation-fallback.js +16 -0
  166. package/dist/integrations/agent/engine-resolution.js +87 -87
  167. package/dist/integrations/agent/execution-cascade.js +566 -0
  168. package/dist/integrations/agent/execution-definitions.js +211 -0
  169. package/dist/integrations/agent/execution-lowering.js +811 -0
  170. package/dist/integrations/agent/execution-preparation.js +67 -0
  171. package/dist/integrations/agent/index.js +0 -2
  172. package/dist/integrations/agent/inline-execution.js +74 -0
  173. package/dist/integrations/agent/model-map.js +515 -0
  174. package/dist/integrations/agent/persona-fallback.js +30 -0
  175. package/dist/integrations/agent/request-lowering.js +186 -0
  176. package/dist/integrations/agent/runner-dispatch.js +230 -37
  177. package/dist/integrations/agent/runner.js +12 -83
  178. package/dist/integrations/harnesses/aider/agent-builder.js +8 -0
  179. package/dist/integrations/harnesses/aider/index.js +0 -1
  180. package/dist/integrations/harnesses/amazonq/agent-builder.js +8 -0
  181. package/dist/integrations/harnesses/amazonq/index.js +0 -1
  182. package/dist/integrations/harnesses/claude/agent-builder.js +14 -1
  183. package/dist/integrations/harnesses/claude/index.js +1 -5
  184. package/dist/integrations/harnesses/claude/session-log.js +3 -33
  185. package/dist/integrations/harnesses/codex/agent-builder.js +8 -0
  186. package/dist/integrations/harnesses/codex/index.js +0 -1
  187. package/dist/integrations/harnesses/copilot/agent-builder.js +8 -0
  188. package/dist/integrations/harnesses/copilot/index.js +0 -1
  189. package/dist/integrations/harnesses/gemini/agent-builder.js +8 -0
  190. package/dist/integrations/harnesses/gemini/index.js +0 -1
  191. package/dist/integrations/harnesses/index.js +4 -44
  192. package/dist/integrations/harnesses/opencode/agent-builder.js +16 -9
  193. package/dist/integrations/harnesses/opencode/index.js +0 -2
  194. package/dist/integrations/harnesses/opencode/session-log.js +14 -204
  195. package/dist/integrations/harnesses/opencode-sdk/harness.js +12 -1
  196. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +40 -42
  197. package/dist/integrations/harnesses/openhands/agent-builder.js +8 -0
  198. package/dist/integrations/harnesses/openhands/index.js +0 -1
  199. package/dist/integrations/harnesses/pi/agent-builder.js +8 -0
  200. package/dist/integrations/harnesses/pi/index.js +0 -1
  201. package/dist/integrations/harnesses/shared.js +0 -1
  202. package/dist/integrations/harnesses/types.js +1 -3
  203. package/dist/integrations/lockfile.js +82 -79
  204. package/dist/integrations/session-logs/index.js +6 -17
  205. package/dist/integrations/session-logs/provider-base.js +1 -29
  206. package/dist/llm/client.js +10 -5
  207. package/dist/llm/embedder.js +6 -7
  208. package/dist/llm/embedders/local.js +37 -88
  209. package/dist/llm/embedders/types.js +1 -1
  210. package/dist/llm/graph-extract.js +75 -50
  211. package/dist/llm/index-passes.js +43 -5
  212. package/dist/llm/memory-infer.js +8 -6
  213. package/dist/llm/metadata-enhance.js +5 -3
  214. package/dist/llm/structured-call.js +122 -25
  215. package/dist/output/format-exempt.js +1 -1
  216. package/dist/output/render-registry.js +0 -16
  217. package/dist/output/renderers.js +12 -7
  218. package/dist/output/shapes/curate.js +1 -0
  219. package/dist/output/shapes/helpers.js +10 -2
  220. package/dist/output/shapes/passthrough.js +2 -0
  221. package/dist/output/text/command-format.js +28 -32
  222. package/dist/output/text/health-format.js +1 -29
  223. package/dist/output/text/migrate.js +6 -56
  224. package/dist/output/text/proposal-format.js +16 -1
  225. package/dist/output/text/workflow-format.js +16 -0
  226. package/dist/registry/network.js +279 -0
  227. package/dist/registry/pinned-request-helper.js +247 -0
  228. package/dist/registry/pinned-transport.js +717 -0
  229. package/dist/registry/providers/skills-sh.js +18 -6
  230. package/dist/registry/providers/static-index.js +20 -7
  231. package/dist/registry/resolve.js +53 -28
  232. package/dist/scripts/akm-migrate-node.js +19122 -52218
  233. package/dist/scripts/akm-migrate.js +19064 -51567
  234. package/dist/setup/registry-stash-loader.js +64 -20
  235. package/dist/setup/semantic-assets.js +9 -34
  236. package/dist/setup/setup.js +12 -30
  237. package/dist/setup/source-identity.js +17 -0
  238. package/dist/setup/steps/sources.js +36 -15
  239. package/dist/setup/steps/tasks.js +39 -11
  240. package/dist/sources/providers/git-provider.js +3 -3
  241. package/dist/sources/providers/npm.js +2 -2
  242. package/dist/sources/providers/provider-utils.js +4 -3
  243. package/dist/sources/providers/website.js +11 -7
  244. package/dist/sources/snapshot-fetchers/host-guard.js +9 -136
  245. package/dist/sources/snapshot-fetchers/website-ingest.js +25 -109
  246. package/dist/sources/website-url.js +73 -0
  247. package/dist/storage/engines/sqlite-migrations.js +81 -26
  248. package/dist/storage/managed-db.js +27 -24
  249. package/dist/storage/repositories/events-repository.js +3 -0
  250. package/dist/storage/repositories/index-connection.js +42 -10
  251. package/dist/storage/repositories/index-entries-repository.js +167 -207
  252. package/dist/storage/repositories/index-entry-mapper.js +8 -12
  253. package/dist/storage/repositories/index-entry-schema.js +255 -0
  254. package/dist/storage/repositories/index-fts-repository.js +10 -10
  255. package/dist/storage/repositories/index-llm-cache-repository.js +8 -13
  256. package/dist/storage/repositories/index-meta-repository.js +0 -11
  257. package/dist/storage/repositories/index-schema.js +71 -342
  258. package/dist/storage/repositories/index-utility-repository.js +12 -17
  259. package/dist/storage/repositories/index-vec-repository.js +1 -1
  260. package/dist/storage/repositories/proposals-repository.js +4 -127
  261. package/dist/storage/repositories/registry-cache.js +2 -1
  262. package/dist/storage/repositories/task-history-repository.js +20 -40
  263. package/dist/storage/repositories/workflow-runs-repository.js +228 -129
  264. package/dist/storage/sqlite-read-snapshot.js +148 -0
  265. package/dist/tasks/backends/cron.js +170 -42
  266. package/dist/tasks/backends/index.js +1 -1
  267. package/dist/tasks/backends/launchd.js +787 -202
  268. package/dist/tasks/backends/schtasks.js +282 -83
  269. package/dist/tasks/embedded.js +7 -7
  270. package/dist/tasks/frozen-script.js +50 -0
  271. package/dist/tasks/resolve-akm-bin.js +5 -1
  272. package/dist/tasks/runner.js +239 -251
  273. package/dist/tasks/runtime-v3.js +281 -0
  274. package/dist/tasks/scheduler-binding.js +272 -0
  275. package/dist/tasks/scheduler-invocation.js +57 -43
  276. package/dist/tasks/scheduler-sync.js +654 -0
  277. package/dist/tasks/source-v3.js +752 -0
  278. package/dist/tasks/standalone-script-entry.js +5 -0
  279. package/dist/tasks/task-id.js +29 -0
  280. package/dist/workflows/authoring/authoring.js +15 -32
  281. package/dist/workflows/exec/dispatch-redaction.js +14 -8
  282. package/dist/workflows/exec/exec-unit.js +7 -28
  283. package/dist/workflows/exec/frozen-judge.js +57 -89
  284. package/dist/workflows/exec/lowering-notices.js +23 -0
  285. package/dist/workflows/exec/native-executor.js +301 -458
  286. package/dist/workflows/exec/param-secrets.js +4 -3
  287. package/dist/workflows/exec/run-workflow.js +26 -32
  288. package/dist/workflows/exec/step-work.js +105 -109
  289. package/dist/workflows/exec/unit-dispatch.js +103 -27
  290. package/dist/workflows/exec/unit-writer.js +3 -3
  291. package/dist/workflows/exec/worktree.js +2 -2
  292. package/dist/workflows/ir/compile.js +86 -72
  293. package/dist/workflows/ir/environment-v4.js +328 -0
  294. package/dist/workflows/ir/freeze-v4.js +122 -0
  295. package/dist/workflows/ir/plan-hash.js +13 -7
  296. package/dist/workflows/ir/schema-v4.js +525 -0
  297. package/dist/workflows/ir/schema.js +25 -284
  298. package/dist/workflows/ir/source-freeze-v4.js +506 -0
  299. package/dist/workflows/parser.js +27 -24
  300. package/dist/workflows/program/schema.js +1 -2
  301. package/dist/workflows/renderer.js +42 -29
  302. package/dist/workflows/resource-limits.js +4 -5
  303. package/dist/workflows/runtime/agent-identity.js +11 -13
  304. package/dist/workflows/runtime/plan-classifier.js +8 -8
  305. package/dist/workflows/runtime/runs.js +27 -43
  306. package/dist/workflows/runtime/workflow-asset-loader.js +45 -205
  307. package/dist/workflows/source-files.js +373 -0
  308. package/dist/workflows/source-ir/compile.js +196 -0
  309. package/dist/workflows/source-ir/github-yaml.js +577 -0
  310. package/dist/workflows/source-ir/ordering.js +38 -0
  311. package/dist/workflows/source-ir/program.js +50 -0
  312. package/dist/workflows/source-ir/result.js +26 -0
  313. package/dist/workflows/source-ir/schema.js +772 -0
  314. package/dist/workflows/source-ir/semantics.js +242 -0
  315. package/dist/workflows/source-ir/uses.js +14 -0
  316. package/docs/README.md +2 -0
  317. package/docs/migration/README.md +3 -1
  318. package/docs/migration/release-notes/0.9.2.md +55 -0
  319. package/docs/migration/release-notes/README.md +5 -0
  320. package/docs/migration/v0.8-to-v0.9.md +76 -1077
  321. package/docs/migration/v0.9.0-troubleshooting.md +104 -516
  322. package/docs/migration/v0.9.1-to-v0.9.2.md +150 -0
  323. package/docs/reference/README.md +1 -0
  324. package/docs/reference/cli.md +230 -98
  325. package/docs/reference/configuration.md +153 -27
  326. package/docs/reference/data-and-telemetry.md +19 -1
  327. package/docs/reference/supported-formats.md +23 -3
  328. package/docs/reference/tasks.md +182 -0
  329. package/docs/reference/workflow-schema.md +91 -40
  330. package/docs/reference/workflows.md +33 -6
  331. package/package.json +10 -6
  332. package/schemas/akm-config.json +372 -216
  333. package/schemas/akm-task.json +324 -80
  334. package/schemas/akm-workflow.json +6 -9
  335. package/dist/core/migration-operation.js +0 -75
  336. package/dist/integrations/agent/model-aliases.js +0 -74
  337. package/dist/tasks/parser.js +0 -380
  338. package/dist/tasks/schema.js +0 -123
  339. package/dist/tasks/validator.js +0 -80
  340. package/dist/workflows/ir/freeze.js +0 -320
  341. package/dist/workflows/runtime/document-cache.js +0 -13
package/CHANGELOG.md CHANGED
@@ -6,6 +6,94 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.9.2-alpha.1] - 2026-08-24
10
+
11
+ ### Breaking changes & migration
12
+
13
+ - **Node.js 22 is no longer supported by the npm package.** `akm-cli` now
14
+ requires Node.js >= 24 to bootstrap its command. A working Bun >= 1.0 remains
15
+ optional and preferred for execution after that bootstrap; the standalone
16
+ binary remains runtime-free. Upgrade Node before installing or running the
17
+ npm package.
18
+ - The `inherit_env` option is a breaking removal: new durable-v4 workflow starts reject it.
19
+ Replace ambient whole-process inheritance with exact named environment bindings and
20
+ `exec.pass_env` names. Pre-v4 stored workflow plans are not executable in
21
+ 0.9.2; start a new run from current source.
22
+ - `improve.strategies.*.processes.triage.judgment` now accepts `true`/`false`
23
+ and honors `enabled` on object values; existing `{}` and configured objects
24
+ remain enabled. Unknown object keys are now rejected instead of ignored, so
25
+ correct typos such as `egnine`, `judgement`, or other unrecognized fields
26
+ before upgrading. Use `judgment: false` to disable the tier explicitly.
27
+
28
+ ### Added
29
+
30
+ - **WP0 — characterization and release contracts:** pinned direct-agent,
31
+ command, task, workflow-freeze, model-alias, and harness-lowering behavior;
32
+ added cross-entry-point equivalence fixtures and immutable release-surface
33
+ gates.
34
+ - **WP1 — shared execution contracts:** introduced adapter-rendered source
35
+ identity and one resolved-request representation carrying final content,
36
+ engine/model/inference selection, authorization, runtime settings, source
37
+ hashes, and structured lowering notices.
38
+ - **WP2 — layered model maps:** ship a versioned installed `models.json`, merge
39
+ an optional user overlay from the config directory, expand known aliases by
40
+ engine, pass unknown identifiers through exactly, and provide guarded model
41
+ map initialization.
42
+ - **WP3 — common cascade and authorization:** resolve far-to-near defaults once,
43
+ preserve explicit false/zero/empty values, authorize selected tools before
44
+ dispatch, and expose stable field-level provenance without resolved values.
45
+ - **WP4 — portable command execution:** added canonical
46
+ `akm command run <ref>`, implemented one-pass `$ARGUMENTS` substitution, and
47
+ reject unsupported native template constructs before dispatch. Stored
48
+ commands have one execution surface; `akm agent --command` is not retained.
49
+ - **WP6 — task v3:** added the strict shipped task schema, command/workflow/script
50
+ targets, closed shell and working-directory rules, portable schedules, and a
51
+ fail-closed task-v2 migrator with no-write preview, per-file status, backups,
52
+ validation, and blocked argv-array handling.
53
+ - **WP7 — peer workflow sources and durable v4:** compile Markdown and the
54
+ approved GitHub-shaped `.yml` subset through source IR v1; new runs atomically
55
+ persist immutable v4 targets, guarded source reads, symbolic environments,
56
+ and durable dispatch attempts. Pre-v4 stored plans are rejected rather than
57
+ maintaining a second runtime.
58
+ - **WP8 — release diagnostics:** added zero-write, secret-safe command dry-run
59
+ output, stderr-only verbose provenance, offline `selected-model-aliases` and
60
+ `configured-engines` health advisories, self-contained migration guidance,
61
+ and npm tar/install/link release gates.
62
+
63
+ ### Changed
64
+
65
+ - **WP5 — engine lowering convergence:** direct command/agent execution,
66
+ improve/proposal dispatch, tasks, and workflows now share the resolved-request
67
+ boundary and implementation-derived lowerers. Exact model and inference
68
+ settings reach registered harnesses; unsupported fields produce safe notices,
69
+ while provider capability rejection remains a runtime result.
70
+ - Scheduled workflow fires re-read the current peer source and create a fresh
71
+ durable-v4 freeze. Resume remains journaled replay, and crash recovery uses
72
+ at-least-once attempt semantics with stable reclaim identities.
73
+ - Task scheduler synchronization is transactional across supported adapters and
74
+ preserves exact ownership, rollback evidence, enabled state, parameters,
75
+ timeouts, redaction metadata, and resolver overrides.
76
+
77
+ ### Fixed
78
+
79
+ - Ordinary managed database opens no longer silently apply released migration
80
+ `018-drop-dead-lane-schema`, which drops retired tables and a column. Every
81
+ state migration now has an explicit safety classification; migration 002's
82
+ row-preserving table rebuild remains automatic, while migration 018 requires
83
+ a successful `akm upgrade` and a verified sibling SQLite snapshot created
84
+ immediately before its immutable SQL runs. The ledger recheck, WAL-inclusive
85
+ snapshot, and 018 transaction now share one writer-exclusion window; fresh
86
+ files and randomized backup paths are atomically reserved and inode-verified.
87
+ Pre-existing unversioned files—including an absent or empty migration
88
+ ledger—are rejected without writes by ordinary opens and snapshotted before
89
+ migration 001 by explicit upgrade. That snapshot, ledger initialization, and
90
+ migrations 001–002 share one writer-exclusion transaction, preventing an old
91
+ schema writer from landing data between the snapshot and the 002 rebuild.
92
+ Migration locks now reject phantom `BEGIN IMMEDIATE` results before running
93
+ SQL and fail clearly if the transaction disappears after a body. Snapshot
94
+ source and target handles are inode-bound, and failed reserved paths are
95
+ retained rather than removed by raced cleanup.
96
+
9
97
  ## [0.9.1] - 2026-08-18
10
98
 
11
99
  ### Fixed
package/README.md CHANGED
@@ -16,7 +16,7 @@ assistant, including [Claude Code](https://claude.ai/code),
16
16
 
17
17
  ## Install
18
18
 
19
- **Option 1 — npm package (recommended; requires [Node.js](https://nodejs.org) >= 22):**
19
+ **Option 1 — npm package (recommended; requires [Node.js](https://nodejs.org) >= 24):**
20
20
 
21
21
  ```sh
22
22
  npm install -g akm-cli
@@ -85,6 +85,8 @@ Full docs, CLI reference, and guides are available on [GitHub](https://github.co
85
85
  - [Getting Started](https://github.com/itlackey/akm/blob/main/docs/guides/getting-started.md)
86
86
  - [Supported Formats](https://github.com/itlackey/akm/blob/main/docs/reference/supported-formats.md)
87
87
  - [CLI Reference](https://github.com/itlackey/akm/blob/main/docs/reference/cli.md)
88
+ - [Task v3 Reference](https://github.com/itlackey/akm/blob/main/docs/reference/tasks.md)
89
+ - [0.9.2 Migration Guide](https://github.com/itlackey/akm/blob/main/docs/migration/v0.9.1-to-v0.9.2.md)
88
90
  - [Configuration](https://github.com/itlackey/akm/blob/main/docs/reference/configuration.md)
89
91
  - [Bundle Authoring Guide](https://github.com/itlackey/akm/blob/main/docs/guides/author-bundles.md)
90
92
  - [Registry](https://github.com/itlackey/akm/blob/main/docs/reference/registry.md)
package/SECURITY.md CHANGED
@@ -96,7 +96,7 @@ containing secrets or private notes.
96
96
 
97
97
  ## Known non-issues
98
98
 
99
- - **The `akm-cli` npm package requires Node.js >= 22 as its bootstrap.** A
99
+ - **The `akm-cli` npm package requires Node.js >= 24 as its bootstrap.** A
100
100
  working Bun >= 1.0 is preferred for execution when it is also on `PATH`; old,
101
101
  unusable, or absent Bun installations fall back to Node.js. Bun does not
102
102
  remove the package's Node.js requirement. Standalone binaries are
package/STABILITY.md CHANGED
@@ -218,7 +218,7 @@ enumeration of the whole `proposal` noun group.
218
218
  | `78` | Configuration error |
219
219
  - **Install scripts** — `install.sh` and `install.ps1` URLs; the `--prefix`
220
220
  / `AKM_INSTALL_DIR` environment override.
221
- - **Runtime** — the npm package requires Node.js >= 22 as its bootstrap and
221
+ - **Runtime** — the npm package requires Node.js >= 24 as its bootstrap and
222
222
  prefers a working Bun >= 1.0 for execution when both are available; old,
223
223
  unusable, or absent Bun installations fall back to Node.js. Standalone
224
224
  binaries are runtime-free.
package/dist/akm CHANGED
@@ -120,8 +120,8 @@ if (contextValid) {
120
120
 
121
121
  if (!process.versions.bun) {
122
122
  const [major = 0, minor = 0] = process.versions.node.split(".").map(Number);
123
- if (major < 22) {
124
- console.error("The akm-cli npm package requires Node.js >= 22 to bootstrap.");
123
+ if (major < 24) {
124
+ console.error("The akm-cli npm package requires Node.js >= 24 to bootstrap.");
125
125
  process.exit(1);
126
126
  }
127
127
  }
package/dist/akm-migrate CHANGED
@@ -8,8 +8,8 @@ import { fileURLToPath } from "node:url";
8
8
 
9
9
  if (!process.versions.bun) {
10
10
  const [major = 0, minor = 0] = process.versions.node.split(".").map(Number);
11
- if (major < 22) {
12
- console.error("The akm-cli npm package requires Node.js >= 22 to bootstrap.");
11
+ if (major < 24) {
12
+ console.error("The akm-cli npm package requires Node.js >= 24 to bootstrap.");
13
13
  process.exit(1);
14
14
  }
15
15
  }
@@ -92,7 +92,7 @@ akm import - --name scratch-notes < notes.md # Import stdin as a knowledge doc
92
92
  akm import https://example.com/docs/auth # Fetch one URL and import it as knowledge
93
93
  akm import ./doc.md --target my-other-bundle # Route import to a named writable bundle source
94
94
  akm workflow create ship-release # Create a workflow asset in the bundle
95
- akm lint --type workflows # Parse and compile every unified markdown workflow; list every error
95
+ akm lint --type workflows # Parse and compile every .md/.yml workflow source; list every error
96
96
  akm workflow run workflows/ship-release # Start or resume and execute the workflow
97
97
  akm feedback skills/code-review --positive # Record that an asset helped
98
98
  akm feedback agents/reviewer --negative --reason "wrong framework" # Record why an asset missed the mark
@@ -160,7 +160,9 @@ akm secret run secrets/deploy-token GITHUB_TOKEN -- gh release create v1.0.0 #
160
160
 
161
161
  ## Workflows
162
162
 
163
- Workflows live under `<bundle>/workflows/` as unified markdown assets.
163
+ Workflows live under `<bundle>/workflows/` as peer `.md` and `.yml` sources.
164
+ Both compile to the same source IR; see `docs/reference/workflow-schema.md` for
165
+ the bounded GitHub-shaped YAML subset.
164
166
 
165
167
  Ref-based workflow commands are scoped to the current project/worktree/directory,
166
168
  so one active run does not block unrelated directories from starting the same
@@ -269,6 +271,7 @@ akm bundle list --kind git # Filter by provider (files
269
271
  akm bundle remove <target> # Remove by id, ref, path, or name
270
272
  akm bundle update --all # Update all managed sources
271
273
  akm bundle update <target> --force # Force re-download
274
+ akm bundle update <target> --allow-insecure # Approve reviewed dangerous env keys
272
275
  ```
273
276
 
274
277
  ## Registries
@@ -336,7 +339,7 @@ akm proposal reject <id> --reason "..." # Archive with a reason
336
339
  akm proposal revert <id> # Restore the pre-promotion content
337
340
  akm proposal new <type> <name> --task "..." # Agent-author a NEW asset as a proposal
338
341
  akm proposal extract --auto # Mine native session files into proposals
339
- akm proposal extract --type claude-code # Restrict extraction to one harness
342
+ akm proposal extract --type claude # Restrict extraction to one harness
340
343
  ```
341
344
 
342
345
  The flat verbs `akm proposals` / `akm show proposal` / `akm accept` /
@@ -353,7 +356,7 @@ file plus one `sync` is a complete workflow.
353
356
 
354
357
  ```sh
355
358
  akm task add nightly-improve --schedule "@daily" --command "akm improve --strategy frequent"
356
- akm task add briefing --schedule "0 9 * * *" --prompt agents/briefer # Agent-target task
359
+ akm task add briefing --schedule "0 9 * * *" --prompt "Draft the morning briefing" # Inline command task
357
360
  akm task sync # Reconcile task files with the OS scheduler
358
361
  akm task sync --rebind # Also re-pin the scheduler's akm binary/spelling
359
362
  akm task doctor # Scheduler binding + runtime eligibility diagnosis
@@ -362,18 +365,20 @@ akm task run <id> # Run one task immediately (works
362
365
  akm search --type task # Enumerate task assets (there is no `task list`)
363
366
  ```
364
367
 
365
- To disable a task, set `enabled: false` in its YAML and run `akm task sync`
368
+ Task files use strict task v3 (`version: 3`). To disable one, set
369
+ `akm.enabled: false` and run `akm task sync`
366
370
  (the cron line stays, commented). To remove one, delete the YAML and run
367
- `akm task sync` — the scheduler entry is unbound. Per-task `timeoutMs` in
368
- the YAML may be `null` (disable the agent kill timer for long local-model
369
- runs) or a number of milliseconds overriding the selected engine invocation timeout.
371
+ `akm task sync` — the scheduler entry is unbound. Per-task `akm.timeout` may
372
+ be `null` (disable the invocation timer) or a duration/number overriding the
373
+ selected engine invocation timeout. Preview old task-v2 conversion with
374
+ `akm migrate apply --dry-run`.
370
375
 
371
376
  ## Agent Dispatch
372
377
 
373
378
  ```sh
374
379
  akm agent --prompt "summarize open proposals" # Dispatch the configured agent CLI
375
380
  akm agent agents/architect --prompt "..." # Embody a bundle agent asset (system prompt, model, tool policy)
376
- akm agent --workflow workflows/ship-release # Load the task from a workflow asset
381
+ akm command run commands/release # Canonical reusable-command dispatch
377
382
  akm agent --model sonnet --prompt "..." # Model override (aliases or exact IDs)
378
383
  ```
379
384
 
@@ -17,7 +17,7 @@
17
17
  "policy": "personal-stash",
18
18
  "maxAcceptsPerRun": 100,
19
19
  "maxDiffLines": 200,
20
- "judgment": {}
20
+ "judgment": true
21
21
  },
22
22
  "proactiveMaintenance": { "enabled": true, "dueDays": 30, "maxPerRun": 100 }
23
23
  },
@@ -22,7 +22,7 @@
22
22
  "policy": "personal-stash",
23
23
  "maxAcceptsPerRun": 15,
24
24
  "maxDiffLines": 200,
25
- "judgment": {}
25
+ "judgment": true
26
26
  },
27
27
  "proactiveMaintenance": { "enabled": false, "dueDays": 30, "maxPerRun": 15 }
28
28
  },
@@ -0,0 +1,35 @@
1
+ {
2
+ "version": 1,
3
+ "aliases": {
4
+ "fast": {
5
+ "claude": "claude-haiku-4-5-20251001",
6
+ "opencode": "opencode/claude-haiku-4-5",
7
+ "opencode-sdk": "anthropic/claude-haiku-4-5"
8
+ },
9
+ "balanced": {
10
+ "claude": "claude-sonnet-4-6",
11
+ "opencode": "opencode/claude-sonnet-4-6",
12
+ "opencode-sdk": "anthropic/claude-sonnet-4-6"
13
+ },
14
+ "reasoning": {
15
+ "claude": {
16
+ "model": "claude-opus-4-7",
17
+ "inference": {
18
+ "effort": "high"
19
+ }
20
+ },
21
+ "opencode": {
22
+ "model": "opencode/claude-opus-4-7",
23
+ "inference": {
24
+ "effort": "high"
25
+ }
26
+ },
27
+ "opencode-sdk": {
28
+ "model": "anthropic/claude-opus-4-7",
29
+ "inference": {
30
+ "effort": "high"
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
@@ -1,5 +1,6 @@
1
- version: 2
2
- schedule: "*/30 * * * *"
3
- command: akm proposal extract --auto
4
- enabled: true
5
- description: Opt-in all-harness session extraction every 30 min
1
+ version: 3
2
+ run: akm proposal extract --auto
3
+ akm:
4
+ schedule: "*/30 * * * *"
5
+ enabled: true
6
+ description: Opt-in all-harness session extraction every 30 min
@@ -1,5 +1,6 @@
1
- version: 2
2
- schedule: "0 2 * * *"
3
- command: akm improve
4
- enabled: true
5
- description: Run improve pipeline nightly
1
+ version: 3
2
+ run: akm improve
3
+ akm:
4
+ schedule: "0 2 * * *"
5
+ enabled: true
6
+ description: Run improve pipeline nightly
@@ -1,5 +1,6 @@
1
- version: 2
2
- schedule: "0 4 * * *"
3
- command: akm index
4
- enabled: true
5
- description: Nightly incremental index refresh
1
+ version: 3
2
+ run: akm index
3
+ akm:
4
+ schedule: "0 4 * * *"
5
+ enabled: true
6
+ description: Nightly incremental index refresh
@@ -1,5 +1,6 @@
1
- version: 2
2
- schedule: "*/15 * * * *"
3
- command: akm sync
4
- enabled: true
5
- description: Sync stash changes to git remote every 15 min
1
+ version: 3
2
+ run: akm sync
3
+ akm:
4
+ schedule: "*/15 * * * *"
5
+ enabled: true
6
+ description: Sync stash changes to git remote every 15 min
@@ -1,5 +1,6 @@
1
- version: 2
2
- schedule: "0 9 * * 1"
3
- command: akm upgrade --check
4
- enabled: true
5
- description: Weekly check for new akm releases
1
+ version: 3
2
+ run: akm upgrade --check
3
+ akm:
4
+ schedule: "0 9 * * 1"
5
+ enabled: true
6
+ description: Weekly check for new akm releases
@@ -1,5 +1,6 @@
1
- version: 2
2
- schedule: "10 3 * * 0"
3
- command: akm improve --strategy graph-refresh --skip-if-locked
4
- enabled: true
5
- description: Full-corpus graph rebuild (weekly Sunday 3:10am)
1
+ version: 3
2
+ run: akm improve --strategy graph-refresh --skip-if-locked
3
+ akm:
4
+ schedule: "10 3 * * 0"
5
+ enabled: true
6
+ description: Full-corpus graph rebuild (weekly Sunday 3:10am)
@@ -1,8 +1,9 @@
1
- version: 2
2
- schedule: "0 4 * * *"
3
- command: akm improve --strategy catchup --skip-if-locked
1
+ version: 3
2
+ run: akm improve --strategy catchup --skip-if-locked
3
+ akm:
4
+ schedule: "0 4 * * *"
4
5
  # Manual-recovery task: ships disabled (the retired registerDefaultTasks
5
6
  # marked it enableMode: "manual"). `akm task run` works while disabled;
6
7
  # opting into the schedule is `enabled: true` + `akm task sync`.
7
- enabled: false
8
- description: Manual recovery — consolidation + triage drain (run on demand via `akm task run akm-improve-catchup`)
8
+ enabled: false
9
+ description: Manual recovery — consolidation + triage drain (run on demand via `akm task run akm-improve-catchup`)
@@ -1,5 +1,6 @@
1
- version: 2
2
- schedule: "20 */4 * * *"
3
- command: akm improve --strategy consolidate --skip-if-locked
4
- enabled: true
5
- description: Consolidation-only pass (every 4h at :20)
1
+ version: 3
2
+ run: akm improve --strategy consolidate --skip-if-locked
3
+ akm:
4
+ schedule: "20 */4 * * *"
5
+ enabled: true
6
+ description: Consolidation-only pass (every 4h at :20)
@@ -1,5 +1,6 @@
1
- version: 2
2
- schedule: "40 * * * *"
3
- command: akm improve --strategy frequent --skip-if-locked
4
- enabled: true
5
- description: Frequent inference pass (hourly at :40; improve-stage extract off)
1
+ version: 3
2
+ run: akm improve --strategy frequent --skip-if-locked
3
+ akm:
4
+ schedule: "40 * * * *"
5
+ enabled: true
6
+ description: Frequent inference pass (hourly at :40; improve-stage extract off)
@@ -1,5 +1,6 @@
1
- version: 2
2
- schedule: "15 2 * * *"
3
- command: akm improve --strategy thorough --skip-if-locked
4
- enabled: true
5
- description: Full nightly quality sweep (daily 2:15am; suggested for server installs)
1
+ version: 3
2
+ run: akm improve --strategy thorough --skip-if-locked
3
+ akm:
4
+ schedule: "15 2 * * *"
5
+ enabled: true
6
+ description: Full nightly quality sweep (daily 2:15am; suggested for server installs)
@@ -32,8 +32,8 @@
32
32
  *
33
33
  * ## Safety exemptions
34
34
  *
35
- * `--quiet` NEVER suppresses the confirmation prompt it is safety-critical
36
- * output. The auto-migration banner is similarly exempt from `--quiet`.
35
+ * `--quiet` NEVER suppresses the confirmation prompt because it is
36
+ * safety-critical output.
37
37
  */
38
38
  import { UsageError } from "../core/errors.js";
39
39
  import * as p from "./clack.js";
@@ -45,9 +45,9 @@ export function parsePositiveIntFlag(raw, flagName = "--limit") {
45
45
  const trimmed = raw.trim();
46
46
  if (!trimmed)
47
47
  return undefined;
48
- // Strict digits, matching parseNonNegativeIntFlag below. parseInt stops at the
49
- // first non-digit, so "10x" silently became 10, "3.5" became 3, and
50
- // "5 apples" became 5 — accepted rather than rejected as invalid.
48
+ // Strict digits: parseInt stops at the first non-digit, so "10x" silently
49
+ // became 10, "3.5" became 3, and "5 apples" became 5 — accepted rather than
50
+ // rejected as invalid.
51
51
  if (!/^\d+$/.test(trimmed)) {
52
52
  throw new UsageError(`Invalid ${flagName} value: "${raw}". Must be a positive integer.`, "INVALID_FLAG_VALUE");
53
53
  }
@@ -57,27 +57,6 @@ export function parsePositiveIntFlag(raw, flagName = "--limit") {
57
57
  }
58
58
  return parsed;
59
59
  }
60
- /**
61
- * Parse a non-negative integer flag value (0 is allowed, unlike `parsePositiveIntFlag`).
62
- *
63
- * Returns `undefined` when `raw` is `undefined` or empty (flag not supplied).
64
- * Throws `UsageError` when the raw value is present but not a valid non-negative
65
- * integer (e.g. contains decimals, letters, or is negative).
66
- *
67
- * @param raw The raw string value (may be undefined).
68
- * @param flagName The flag name to include in the error message.
69
- */
70
- export function parseNonNegativeIntFlag(raw, flagName) {
71
- if (raw === undefined)
72
- return undefined;
73
- const trimmed = raw.trim();
74
- if (!trimmed)
75
- return undefined;
76
- if (!/^\d+$/.test(trimmed)) {
77
- throw new UsageError(`Invalid ${flagName} value: "${raw}". Must be a non-negative integer.`, "INVALID_FLAG_VALUE");
78
- }
79
- return parseInt(trimmed, 10);
80
- }
81
60
  // ── String flag parsing ──────────────────────────────────────────────────────
82
61
  /**
83
62
  * Extract a string value from a parsed citty argument object by key.
@@ -45,7 +45,7 @@ const RETIRED_COMMAND_HINTS = {
45
45
  mv: "`akm mv` was removed in 0.9 — move the file, then run `akm index` and `akm lint` (to carry ranking signal: `bun scripts/rekey-asset-ref.ts <old-ref> <new-ref>`).",
46
46
  // Pre-0.9 removals agents still trip over.
47
47
  wiki: "the `akm wiki` family was removed in 0.9 — wikis are ordinary knowledge assets; ingest with `akm import <url> --path <subdir>`.",
48
- backup: "`akm backup` was removed in 0.9 — backups belong to the standalone `akm-migrate backup` tool.",
48
+ backup: "`akm backup` was removed in 0.9 — stop writers and archive current config, data, state, and writable bundles with your normal backup tooling.",
49
49
  vault: "the `akm vault ...` family was removed in 0.9 — use `akm env list`/`akm env create` for a whole `.env` group, or `akm secret set <name>` for a single sensitive value.",
50
50
  // Group-scoped retirements.
51
51
  "env set": "`akm env set` was removed in 0.9 — edit the `.env` file directly; akm loads it as-is.",
@@ -172,8 +172,8 @@ export const GLOBAL_OUTPUT_ARGS = {
172
172
  type: "boolean",
173
173
  alias: "q",
174
174
  description: "Suppress non-essential stderr output (banners, spinners, progress info) (global flag). " +
175
- "Safety-critical output is never suppressed: errors, destructive-action confirmation prompts, " +
176
- "and auto-migration banners always appear regardless of --quiet.",
175
+ "Safety-critical output is never suppressed: errors and destructive-action confirmation prompts " +
176
+ "always appear regardless of --quiet.",
177
177
  default: false,
178
178
  },
179
179
  verbose: {
package/dist/cli.js CHANGED
@@ -2,22 +2,22 @@
2
2
  // This Source Code Form is subject to the terms of the Mozilla Public
3
3
  // License, v. 2.0. If a copy of the MPL was not distributed with this
4
4
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
- // Runtime guard: the akm-cli npm package bootstraps with Node.js >= 22
5
+ // Runtime guard: the akm-cli npm package bootstraps with Node.js >= 24
6
6
  // (#465, #560), then its launcher prefers a working Bun >= 1.0 when available.
7
7
  // The runtime boundary (src/runtime.ts, src/storage/database.ts) supports both.
8
8
  // Under Node the CLI must be launched via the
9
9
  // `dist/cli-node.mjs` wrapper, which registers the text-import loader hook
10
10
  // before this module graph loads; running `node dist/cli.js` directly still
11
11
  // works for code paths that touch no embedded text asset, but the wrapper is
12
- // the supported entry. The hard floor is Node 22 (Node 20 support dropped 2026-07; `@clack/core` imports
13
- // `node:util`'s `styleText` (added in Node 20.12) — Node 18 (EOL) throws at import.
12
+ // the supported entry. The hard floor is Node 24; Node 22 is no longer a
13
+ // supported npm bootstrap runtime.
14
14
  {
15
15
  const isBun = typeof globalThis.Bun !== "undefined";
16
16
  if (!isBun) {
17
17
  const [major = 0] = (process.versions.node ?? "0").split(".").map((part) => Number.parseInt(part, 10) || 0);
18
- const nodeOk = major >= 22;
18
+ const nodeOk = major >= 24;
19
19
  if (!nodeOk) {
20
- console.error("\n ERROR: the akm-cli npm package requires Node.js >= 22.\n" +
20
+ console.error("\n ERROR: the akm-cli npm package requires Node.js >= 24.\n" +
21
21
  ` Detected Node.js ${process.versions.node ?? "unknown"}.\n` +
22
22
  " Bun >= 1.0 is optional for execution; it does not replace the Node.js bootstrap.\n" +
23
23
  " Upgrade Node.js (https://nodejs.org), or install the runtime-free standalone binary:\n" +
@@ -62,6 +62,7 @@ import { retiredCommandHint } from "./cli/retired-commands.js";
62
62
  import { defineGroupCommand, EXIT_CODES, emitJsonError, GLOBAL_OUTPUT_ARGS, output, runWithJsonErrors, } from "./cli/shared.js";
63
63
  import { assertKnownFlags, closestMatch } from "./cli/unknown-flags.js";
64
64
  import { agentCommand, lintCommand } from "./commands/agent/contribute-cli.js";
65
+ import { commandCommand } from "./commands/command/command-cli.js";
65
66
  import { generateBashCompletions, installBashCompletions } from "./commands/completions.js";
66
67
  import { configCommand } from "./commands/config-cli.js";
67
68
  import { envCommand } from "./commands/env/env-cli.js";
@@ -72,6 +73,7 @@ import "./commands/health/renderers.js";
72
73
  import { parseWindowSpec } from "./commands/health/windows.js";
73
74
  import { improveCommand } from "./commands/improve/improve-cli.js";
74
75
  import { migrateCommand } from "./commands/migrate-cli.js";
76
+ import { modelsCommand } from "./commands/models-cli.js";
75
77
  import { logCommand } from "./commands/observability-cli.js";
76
78
  import { proposalCommand } from "./commands/proposal/proposal-cli.js";
77
79
  import { rememberCommand } from "./commands/read/remember-cli.js";
@@ -85,7 +87,6 @@ import { taskCommand } from "./commands/tasks/tasks-cli.js";
85
87
  import { workflowCommand } from "./commands/workflow-cli.js";
86
88
  import { DEFAULT_CONFIG, loadConfig } from "./core/config/config.js";
87
89
  import { UsageError } from "./core/errors.js";
88
- import { assertNoPendingMigrationOperation } from "./core/migration-operation.js";
89
90
  import { getConfigPath } from "./core/paths.js";
90
91
  import { DURATION_UNITS, parseDuration } from "./core/time.js";
91
92
  import { plainize } from "./core/tty.js";
@@ -449,6 +450,7 @@ const commands = {
449
450
  feedback: feedbackCommand,
450
451
  log: logCommand,
451
452
  agent: agentCommand,
453
+ command: commandCommand,
452
454
  lint: lintCommand,
453
455
  improve: improveCommand,
454
456
  proposal: proposalCommand,
@@ -456,6 +458,7 @@ const commands = {
456
458
  env: envCommand,
457
459
  secret: secretCommand,
458
460
  task: taskCommand,
461
+ models: modelsCommand,
459
462
  hints: hintsCommand,
460
463
  };
461
464
  function commandHelpTopic(name, command) {
@@ -730,7 +733,7 @@ const HELP_SECTIONS = [
730
733
  title: "ASSETS",
731
734
  commands: ["import", "clone", "bundle", "env", "secret", "sync", "proposal"],
732
735
  },
733
- { title: "AUTOMATION", commands: ["improve", "agent", "workflow", "task"] },
736
+ { title: "AUTOMATION", commands: ["improve", "agent", "command", "workflow", "task"] },
734
737
  {
735
738
  title: "SYSTEM",
736
739
  commands: [
@@ -739,6 +742,7 @@ const HELP_SECTIONS = [
739
742
  "lint",
740
743
  "health",
741
744
  "config",
745
+ "models",
742
746
  "registry",
743
747
  "info",
744
748
  "log",
@@ -927,8 +931,6 @@ async function runCli() {
927
931
  // rather than letting the raw exception escape with a stack trace.
928
932
  try {
929
933
  applyEarlyStderrFlags(process.argv);
930
- if (isTaskRunWithId(process.argv))
931
- assertNoPendingMigrationOperation();
932
934
  const bypassConfig = shouldBypassConfigStartup(process.argv);
933
935
  initOutputMode(process.argv, bypassConfig ? (DEFAULT_CONFIG.output ?? {}) : (loadConfig().output ?? {}));
934
936
  }