akm-cli 0.9.0-rc.8 → 0.9.0

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 (450) hide show
  1. package/CHANGELOG.md +1063 -44
  2. package/README.md +51 -25
  3. package/SECURITY.md +14 -1
  4. package/STABILITY.md +497 -0
  5. package/dist/akm +148 -35
  6. package/dist/{akm-migrate-storage → akm-migrate} +6 -9
  7. package/dist/assets/hints/cli-hints-full.md +223 -95
  8. package/dist/assets/hints/cli-hints-short.md +85 -22
  9. package/dist/assets/improve-strategies/default.json +1 -1
  10. package/dist/assets/improve-strategies/reflect-distill.json +1 -1
  11. package/dist/assets/prompts/memory-infer-user.md +2 -3
  12. package/dist/assets/stash-skeleton/README.md +6 -5
  13. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +2 -0
  14. package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +2 -0
  15. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +2 -0
  16. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +2 -0
  17. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +2 -0
  18. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +2 -0
  19. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +2 -0
  20. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +2 -0
  21. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +2 -0
  22. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +2 -0
  23. package/dist/assets/stash-skeleton/facts/conventions/domains.md +2 -0
  24. package/dist/assets/stash-skeleton/facts/conventions/organization.md +20 -9
  25. package/dist/assets/tasks/core/extract.yml +1 -1
  26. package/dist/assets/tasks/core/version-check.yml +1 -1
  27. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
  28. package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
  29. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
  30. package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
  31. package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
  32. package/dist/assets/templates/html/health.html +1 -3
  33. package/dist/assets/workflows/workflow-template.md +32 -15
  34. package/dist/cli/invocation.js +40 -15
  35. package/dist/cli/parse-args.js +0 -22
  36. package/dist/cli/retired-commands.js +121 -0
  37. package/dist/cli/shared.js +154 -22
  38. package/dist/cli/unknown-flags.js +236 -0
  39. package/dist/cli-node.mjs +2 -1
  40. package/dist/cli.js +696 -258
  41. package/dist/commands/agent/agent-dispatch.js +14 -3
  42. package/dist/commands/agent/contribute-cli.js +73 -88
  43. package/dist/commands/completions.js +79 -22
  44. package/dist/commands/config-cli.js +17 -150
  45. package/dist/commands/env/env-cli.js +59 -143
  46. package/dist/commands/env/env.js +12 -163
  47. package/dist/commands/env/marker-path.js +6 -0
  48. package/dist/commands/env/secret-cli.js +36 -66
  49. package/dist/commands/env/secret.js +24 -57
  50. package/dist/commands/feedback-cli.js +141 -87
  51. package/dist/commands/health/accept-rate.js +58 -0
  52. package/dist/commands/health/advisories.js +3 -4
  53. package/dist/commands/health/checks.js +85 -23
  54. package/dist/commands/health/html-report.js +7 -10
  55. package/dist/commands/health/improve-metrics.js +25 -83
  56. package/dist/commands/health/md-report.js +5 -9
  57. package/dist/commands/health/metrics.js +62 -20
  58. package/dist/commands/health/renderers.js +47 -0
  59. package/dist/commands/health/report-view-model.js +4 -5
  60. package/dist/commands/health/stash-exposure.js +1 -1
  61. package/dist/commands/health/surfaces.js +3 -48
  62. package/dist/commands/health/task-runs.js +3 -67
  63. package/dist/commands/health/types-improve.js +7 -0
  64. package/dist/commands/health.js +99 -28
  65. package/dist/commands/improve/anti-collapse.js +2 -2
  66. package/dist/commands/improve/autonomy-gate.js +68 -0
  67. package/dist/commands/improve/collapse-detector.js +41 -40
  68. package/dist/commands/improve/consolidate/eligibility.js +1 -23
  69. package/dist/commands/improve/consolidate/merge.js +4 -0
  70. package/dist/commands/improve/consolidate.js +140 -1000
  71. package/dist/commands/improve/distill/promote-memory.js +12 -12
  72. package/dist/commands/improve/distill/quality-gate.js +6 -6
  73. package/dist/commands/improve/distill.js +58 -69
  74. package/dist/commands/improve/eligibility.js +105 -57
  75. package/dist/commands/improve/extract-cli.js +14 -133
  76. package/dist/commands/improve/improve-cli.js +98 -114
  77. package/dist/commands/improve/improve-result-file.js +1 -28
  78. package/dist/commands/improve/improve-strategies.js +8 -5
  79. package/dist/commands/improve/improve.js +128 -91
  80. package/dist/commands/improve/loop-stages.js +182 -20
  81. package/dist/commands/improve/memory/derived-ref.js +45 -43
  82. package/dist/commands/improve/memory/memory-belief.js +1 -1
  83. package/dist/commands/improve/memory/memory-contradiction-detect.js +4 -12
  84. package/dist/commands/improve/memory/memory-improve.js +6 -5
  85. package/dist/commands/improve/outcome-loop.js +22 -65
  86. package/dist/commands/improve/preparation.js +114 -123
  87. package/dist/commands/improve/proactive-maintenance.js +2 -5
  88. package/dist/commands/improve/reflect.js +56 -160
  89. package/dist/commands/improve/salience.js +11 -122
  90. package/dist/commands/improve/source-identity.js +10 -38
  91. package/dist/commands/lint/base-linter.js +20 -124
  92. package/dist/commands/lint/env-key-rules.js +31 -47
  93. package/dist/commands/lint/index.js +249 -43
  94. package/dist/commands/{events.js → log.js} +33 -38
  95. package/dist/commands/migrate-cli.js +92 -12
  96. package/dist/commands/migration-tool.js +46 -0
  97. package/dist/commands/observability-cli.js +70 -209
  98. package/dist/commands/proposal/drain.js +101 -29
  99. package/dist/commands/proposal/proposal-cli.js +76 -48
  100. package/dist/commands/proposal/proposal.js +54 -18
  101. package/dist/commands/proposal/propose-cli.js +88 -0
  102. package/dist/commands/proposal/propose.js +23 -15
  103. package/dist/commands/proposal/repository.js +701 -278
  104. package/dist/commands/proposal/validators/proposal-quality-validators.js +2 -8
  105. package/dist/commands/proposal/validators/proposal-validators.js +55 -7
  106. package/dist/commands/proposal/validators/proposals.js +4 -7
  107. package/dist/commands/read/curate.js +34 -53
  108. package/dist/commands/read/knowledge.js +150 -95
  109. package/dist/commands/read/registry-search.js +2 -2
  110. package/dist/commands/read/remember-cli.js +42 -15
  111. package/dist/commands/read/search-cli.js +180 -78
  112. package/dist/commands/read/search.js +58 -43
  113. package/dist/commands/read/show.js +197 -141
  114. package/dist/commands/registry-cli.js +12 -51
  115. package/dist/commands/remember.js +14 -57
  116. package/dist/commands/sources/add-cli.js +100 -31
  117. package/dist/commands/sources/bundle-cli.js +166 -0
  118. package/dist/commands/sources/bundle-config-ops.js +7 -2
  119. package/dist/commands/sources/info.js +18 -5
  120. package/dist/commands/sources/init.js +12 -12
  121. package/dist/commands/sources/installed-stashes.js +382 -98
  122. package/dist/commands/sources/schema-repair.js +3 -2
  123. package/dist/commands/sources/self-update.js +131 -38
  124. package/dist/commands/sources/source-add.js +72 -17
  125. package/dist/commands/sources/source-clone.js +129 -45
  126. package/dist/commands/sources/source-manage.js +43 -23
  127. package/dist/commands/sources/sources-cli.js +57 -208
  128. package/dist/commands/sources/stash-cli.js +46 -53
  129. package/dist/commands/tasks/tasks-cli.js +91 -97
  130. package/dist/commands/tasks/tasks.js +276 -421
  131. package/dist/commands/workflow-cli.js +175 -450
  132. package/dist/core/adapter/adapters/akm-adapter.js +47 -28
  133. package/dist/core/adapter/adapters/akm-lint.js +42 -27
  134. package/dist/core/adapter/adapters/akm-metadata.js +15 -44
  135. package/dist/core/adapter/adapters/akm-task-adapter.js +15 -13
  136. package/dist/core/adapter/adapters/akm-workflow-adapter.js +55 -71
  137. package/dist/core/adapter/adapters/dotenv-adapter.js +1 -1
  138. package/dist/core/adapter/adapters/generic-files-adapter.js +2 -0
  139. package/dist/core/adapter/adapters/index.js +6 -6
  140. package/dist/core/adapter/adapters/llm-wiki-adapter.js +14 -8
  141. package/dist/core/adapter/adapters/okf-adapter.js +187 -19
  142. package/dist/core/adapter/adapters/shared.js +3 -19
  143. package/dist/core/adapter/adapters/tool-dir-shared.js +8 -3
  144. package/dist/core/adapter/adapters/website-snapshot-adapter.js +1 -0
  145. package/dist/core/adapter/detect-adapter.js +17 -0
  146. package/dist/core/adapter/recognize-match.js +6 -4
  147. package/dist/core/adapter/validate-context.js +214 -0
  148. package/dist/core/asset/akm-markdown.js +63 -0
  149. package/dist/core/asset/asset-placement.js +20 -6
  150. package/dist/core/asset/asset-ref.js +11 -9
  151. package/dist/core/asset/frontmatter-lint.js +30 -0
  152. package/dist/core/asset/frontmatter.js +37 -9
  153. package/dist/core/asset/markdown.js +40 -51
  154. package/dist/core/asset/resolve-ref.js +89 -18
  155. package/dist/core/asset/stash-meta.js +1 -1
  156. package/dist/core/bundle-id.js +51 -0
  157. package/dist/core/common.js +152 -38
  158. package/dist/core/config/config-io.js +12 -1
  159. package/dist/core/config/config-schema.js +35 -8
  160. package/dist/core/config/config-sources.js +55 -11
  161. package/dist/core/config/config-walker.js +25 -9
  162. package/dist/core/config/config.js +9 -48
  163. package/dist/core/config/experimental.js +21 -0
  164. package/dist/core/config/schema/embedding.js +5 -1
  165. package/dist/core/config/schema/experimental.js +30 -0
  166. package/dist/core/config/schema/improve-processes.js +0 -6
  167. package/dist/core/config/schema/improve.js +21 -3
  168. package/dist/core/config/schema/index-config.js +8 -15
  169. package/dist/core/config/schema/output.js +4 -1
  170. package/dist/core/config/schema/setup.js +9 -18
  171. package/dist/core/config/schema/sources-bundles.js +49 -33
  172. package/dist/core/config/schema/workflow.js +3 -3
  173. package/dist/core/env-secret-ref.js +76 -46
  174. package/dist/core/errors.js +18 -12
  175. package/dist/core/events.js +46 -128
  176. package/dist/core/file-change.js +6 -5
  177. package/dist/core/fs-txn.js +83 -7
  178. package/dist/core/git-message.js +2 -2
  179. package/dist/core/improve-result.js +1 -100
  180. package/dist/core/lesson-lint.js +1 -17
  181. package/dist/core/logs-db.js +2 -1
  182. package/dist/core/migration-operation.js +16 -0
  183. package/dist/core/mutation-target.js +78 -0
  184. package/dist/core/parse.js +4 -1
  185. package/dist/core/paths.js +17 -20
  186. package/dist/core/recognition-util.js +12 -14
  187. package/dist/core/redaction.js +34 -0
  188. package/dist/core/standards/resolve-standards-context.js +2 -14
  189. package/dist/core/standards/resolve-stash-standards.js +2 -2
  190. package/dist/core/standards/resolve-type-conventions.js +2 -2
  191. package/dist/core/state/migrations.js +41 -18
  192. package/dist/core/state-db.js +5 -14
  193. package/dist/core/structured.js +1 -1
  194. package/dist/core/subprocess.js +6 -4
  195. package/dist/core/text-truncation.js +9 -5
  196. package/dist/core/type-presentation.js +3 -3
  197. package/dist/core/warn.js +0 -3
  198. package/dist/core/write-source.js +771 -95
  199. package/dist/indexer/bundle-identity-guard.js +3 -2
  200. package/dist/indexer/db/graph-db.js +0 -24
  201. package/dist/indexer/ensure-index.js +1 -0
  202. package/dist/indexer/graph/graph-boost.js +9 -34
  203. package/dist/indexer/graph/graph-extraction.js +8 -5
  204. package/dist/indexer/index-writer-lock.js +53 -17
  205. package/dist/indexer/index-written-assets.js +16 -22
  206. package/dist/indexer/indexer.js +497 -239
  207. package/dist/indexer/installations.js +14 -96
  208. package/dist/indexer/passes/dir-staleness.js +16 -9
  209. package/dist/indexer/passes/memory-inference.js +11 -9
  210. package/dist/indexer/passes/metadata.js +113 -47
  211. package/dist/indexer/scan/doc-to-entry.js +38 -1
  212. package/dist/indexer/scan/drain-dir.js +13 -23
  213. package/dist/indexer/search/db-search.js +99 -54
  214. package/dist/indexer/search/fts-query.js +47 -24
  215. package/dist/indexer/search/ranking-contributors.js +42 -20
  216. package/dist/indexer/search/ranking.js +18 -99
  217. package/dist/indexer/search/search-fields.js +7 -2
  218. package/dist/indexer/search/search-source.js +82 -93
  219. package/dist/indexer/usage/usage-events.js +0 -89
  220. package/dist/indexer/walk/file-context.js +2 -1
  221. package/dist/indexer/walk/matchers.js +30 -43
  222. package/dist/indexer/walk/path-resolver.js +7 -2
  223. package/dist/indexer/walk/walker.js +38 -12
  224. package/dist/integrations/agent/builders.js +0 -6
  225. package/dist/integrations/agent/config.js +2 -2
  226. package/dist/integrations/agent/detect.js +49 -19
  227. package/dist/integrations/agent/engine-fallback.js +76 -0
  228. package/dist/integrations/agent/profiles.js +14 -0
  229. package/dist/integrations/agent/prompts.js +12 -8
  230. package/dist/integrations/agent/runner-dispatch.js +4 -2
  231. package/dist/integrations/agent/runner.js +0 -1
  232. package/dist/integrations/agent/spawn.js +5 -6
  233. package/dist/integrations/github.js +1 -1
  234. package/dist/integrations/harnesses/aider/agent-builder.js +6 -4
  235. package/dist/integrations/harnesses/amazonq/agent-builder.js +7 -4
  236. package/dist/integrations/harnesses/claude/session-log.js +0 -10
  237. package/dist/integrations/harnesses/codex/agent-builder.js +5 -2
  238. package/dist/integrations/harnesses/copilot/agent-builder.js +5 -3
  239. package/dist/integrations/harnesses/gemini/agent-builder.js +5 -3
  240. package/dist/integrations/harnesses/index.js +3 -7
  241. package/dist/integrations/harnesses/opencode/agent-builder.js +21 -2
  242. package/dist/integrations/harnesses/opencode/session-log.js +0 -15
  243. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +13 -4
  244. package/dist/integrations/harnesses/openhands/agent-builder.js +9 -6
  245. package/dist/integrations/harnesses/pi/agent-builder.js +6 -4
  246. package/dist/integrations/lockfile.js +101 -6
  247. package/dist/integrations/session-logs/index.js +3 -28
  248. package/dist/llm/client.js +136 -100
  249. package/dist/llm/embedders/remote.js +13 -5
  250. package/dist/llm/feature-gate.js +4 -12
  251. package/dist/llm/graph-extract.js +5 -11
  252. package/dist/llm/memory-infer.js +144 -1
  253. package/dist/llm/metadata-enhance.js +5 -7
  254. package/dist/llm/structured-call.js +1 -1
  255. package/dist/llm/usage-persist.js +26 -5
  256. package/dist/llm/usage-telemetry.js +25 -2
  257. package/dist/output/cli-hints.js +1 -2
  258. package/dist/output/context.js +22 -7
  259. package/dist/output/format-exempt.js +80 -0
  260. package/dist/output/generic-render.js +259 -0
  261. package/dist/output/render-registry.js +57 -0
  262. package/dist/output/renderers.js +14 -36
  263. package/dist/output/shapes/curate.js +10 -1
  264. package/dist/output/shapes/events.js +12 -7
  265. package/dist/output/shapes/helpers.js +56 -83
  266. package/dist/output/shapes/migrate.js +8 -0
  267. package/dist/output/shapes/passthrough.js +7 -41
  268. package/dist/output/shapes/proposal/producer.js +15 -7
  269. package/dist/output/shapes.js +2 -9
  270. package/dist/output/text/{init.js → bundle-create.js} +3 -1
  271. package/dist/output/text/bundle-show.js +7 -0
  272. package/dist/output/text/command-format.js +164 -96
  273. package/dist/output/text/env.js +1 -3
  274. package/dist/output/text/events.js +8 -7
  275. package/dist/output/text/health-format.js +103 -0
  276. package/dist/output/text/health.js +7 -0
  277. package/dist/output/text/helpers.js +10 -8
  278. package/dist/output/text/lint-format.js +43 -0
  279. package/dist/output/text/{save.js → lint.js} +2 -2
  280. package/dist/output/text/migrate.js +88 -0
  281. package/dist/output/text/proposal/producer.js +4 -2
  282. package/dist/output/text/proposal-format.js +44 -72
  283. package/dist/output/text/registry-commands.js +1 -2
  284. package/dist/output/text/show-directives.js +15 -7
  285. package/dist/output/text/status-list.js +32 -0
  286. package/dist/output/text/sync.js +5 -0
  287. package/dist/output/text/workflow-format.js +24 -203
  288. package/dist/output/text/workflow.js +1 -7
  289. package/dist/output/text.js +16 -17
  290. package/dist/registry/factory.js +4 -6
  291. package/dist/registry/origin-resolve.js +16 -27
  292. package/dist/registry/providers/skills-sh.js +3 -3
  293. package/dist/registry/providers/static-index.js +13 -23
  294. package/dist/registry/resolve.js +42 -7
  295. package/dist/registry/semver.js +34 -84
  296. package/dist/runtime.js +2 -23
  297. package/dist/scripts/akm-migrate-node.js +60290 -0
  298. package/dist/scripts/akm-migrate.js +59628 -0
  299. package/dist/setup/detect.js +42 -15
  300. package/dist/setup/registry-stash-loader.js +2 -2
  301. package/dist/setup/setup.js +236 -136
  302. package/dist/setup/steps/connection.js +7 -9
  303. package/dist/setup/steps/platforms.js +9 -9
  304. package/dist/setup/steps/semantic.js +15 -3
  305. package/dist/setup/steps/sources.js +12 -13
  306. package/dist/setup/steps/stashdir.js +2 -3
  307. package/dist/setup/steps/tasks.js +237 -120
  308. package/dist/sources/freshness.js +1 -1
  309. package/dist/sources/provider-factory.js +11 -17
  310. package/dist/sources/providers/filesystem.js +2 -3
  311. package/dist/sources/providers/git-install.js +278 -34
  312. package/dist/sources/providers/git-provider.js +25 -23
  313. package/dist/sources/providers/git-stash.js +395 -106
  314. package/dist/sources/providers/git.js +2 -2
  315. package/dist/sources/providers/npm.js +16 -19
  316. package/dist/sources/providers/provider-utils.js +7 -4
  317. package/dist/sources/providers/sync-from-ref.js +3 -9
  318. package/dist/sources/providers/website.js +6 -1
  319. package/dist/sources/resolve.js +6 -5
  320. package/dist/sources/snapshot-fetchers/bluesky.js +146 -0
  321. package/dist/sources/snapshot-fetchers/content-extract.js +566 -0
  322. package/dist/sources/snapshot-fetchers/fetcher-util.js +41 -0
  323. package/dist/sources/snapshot-fetchers/github.js +100 -0
  324. package/dist/sources/snapshot-fetchers/host-guard.js +291 -0
  325. package/dist/sources/snapshot-fetchers/registry.js +17 -1
  326. package/dist/sources/snapshot-fetchers/robots.js +348 -0
  327. package/dist/sources/snapshot-fetchers/rss.js +282 -0
  328. package/dist/sources/snapshot-fetchers/secret-seam.js +42 -0
  329. package/dist/sources/snapshot-fetchers/website-ingest.js +566 -268
  330. package/dist/sources/snapshot-fetchers/x.js +910 -0
  331. package/dist/storage/database.js +7 -0
  332. package/dist/storage/engines/sqlite-migrations.js +23 -111
  333. package/dist/storage/managed-db.js +2 -2
  334. package/dist/storage/repositories/canaries-repository.js +1 -1
  335. package/dist/storage/repositories/events-repository.js +27 -11
  336. package/dist/storage/repositories/improve-runs-repository.js +6 -12
  337. package/dist/storage/repositories/index-connection.js +17 -6
  338. package/dist/storage/repositories/index-entries-repository.js +151 -240
  339. package/dist/storage/repositories/index-entry-mapper.js +15 -11
  340. package/dist/storage/repositories/index-fts-repository.js +5 -2
  341. package/dist/storage/repositories/index-llm-cache-repository.js +0 -1
  342. package/dist/storage/repositories/index-meta-repository.js +2 -3
  343. package/dist/storage/repositories/index-schema.js +10 -25
  344. package/dist/storage/repositories/index-utility-repository.js +15 -28
  345. package/dist/storage/repositories/index-vec-repository.js +6 -1
  346. package/dist/storage/repositories/outcome-repository.js +119 -0
  347. package/dist/storage/repositories/proposals-repository.js +296 -59
  348. package/dist/storage/repositories/registry-cache.js +19 -0
  349. package/dist/storage/repositories/salience-repository.js +172 -0
  350. package/dist/storage/repositories/task-history-repository.js +15 -13
  351. package/dist/storage/repositories/workflow-runs-repository.js +52 -40
  352. package/dist/tasks/backends/cron.js +105 -15
  353. package/dist/tasks/backends/index.js +1 -1
  354. package/dist/tasks/backends/launchd.js +85 -38
  355. package/dist/tasks/backends/schtasks.js +135 -15
  356. package/dist/tasks/embedded.js +56 -40
  357. package/dist/tasks/parser.js +7 -157
  358. package/dist/tasks/resolve-akm-bin.js +137 -59
  359. package/dist/tasks/runner.js +79 -42
  360. package/dist/tasks/scheduler-invocation.js +220 -10
  361. package/dist/tasks/schema.js +24 -1
  362. package/dist/tasks/task-id.js +1 -3
  363. package/dist/tasks/validator.js +20 -6
  364. package/dist/workflows/authoring/authoring.js +94 -143
  365. package/dist/workflows/authoring/scope-key.js +1 -1
  366. package/dist/workflows/exec/frozen-judge.js +28 -2
  367. package/dist/workflows/exec/native-executor.js +77 -57
  368. package/dist/workflows/exec/param-secrets.js +9 -9
  369. package/dist/workflows/exec/run-workflow.js +133 -79
  370. package/dist/workflows/exec/step-work.js +219 -346
  371. package/dist/{migrate-storage-node.mjs → workflows/exec/unit-dispatch.js} +1 -5
  372. package/dist/workflows/ir/compile.js +141 -270
  373. package/dist/workflows/ir/freeze.js +40 -30
  374. package/dist/workflows/ir/params.js +135 -11
  375. package/dist/workflows/ir/plan-hash.js +1 -1
  376. package/dist/workflows/ir/schema.js +25 -26
  377. package/dist/workflows/parser.js +872 -307
  378. package/dist/workflows/program/expressions.js +20 -208
  379. package/dist/workflows/program/schema.js +7 -10
  380. package/dist/workflows/renderer.js +95 -68
  381. package/dist/workflows/resource-limits.js +2 -0
  382. package/dist/workflows/runtime/checkin.js +3 -3
  383. package/dist/workflows/runtime/plan-classifier.js +16 -75
  384. package/dist/workflows/runtime/runs.js +186 -127
  385. package/dist/workflows/runtime/unit-checkin.js +1 -1
  386. package/dist/workflows/runtime/unit-phases.js +2 -2
  387. package/dist/workflows/runtime/workflow-asset-loader.js +232 -83
  388. package/dist/workflows/schema.js +1 -11
  389. package/dist/workflows/validate-summary.js +30 -36
  390. package/dist/workflows/validator.js +21 -62
  391. package/docs/README.md +68 -0
  392. package/docs/migration/README.md +8 -0
  393. package/docs/migration/release-notes/0.7.0.md +11 -11
  394. package/docs/migration/release-notes/0.9.0.md +208 -27
  395. package/docs/migration/v0.7-to-v0.8.md +46 -47
  396. package/docs/migration/v0.8-to-v0.9.md +564 -208
  397. package/docs/migration/v0.9.0-troubleshooting.md +561 -0
  398. package/docs/reference/README.md +12 -0
  399. package/docs/reference/cli.md +2253 -0
  400. package/docs/reference/configuration.md +358 -0
  401. package/docs/reference/data-and-telemetry.md +105 -42
  402. package/docs/reference/workflows.md +647 -0
  403. package/package.json +22 -11
  404. package/schemas/akm-asset-envelope.json +93 -0
  405. package/schemas/akm-config.json +81 -128
  406. package/schemas/akm-workflow.json +74 -73
  407. package/dist/assets/tasks/core/backup.yml +0 -5
  408. package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
  409. package/dist/cli/config-migrate.js +0 -1806
  410. package/dist/cli/config-validate.js +0 -41
  411. package/dist/commands/backup-cli.js +0 -56
  412. package/dist/commands/bundle/bundle-cli.js +0 -68
  413. package/dist/commands/bundle/bundle.js +0 -219
  414. package/dist/commands/graph/graph-cli.js +0 -124
  415. package/dist/commands/graph/graph.js +0 -489
  416. package/dist/commands/improve/extract-watch.js +0 -140
  417. package/dist/commands/mv-cli.js +0 -1221
  418. package/dist/commands/sources/history.js +0 -201
  419. package/dist/commands/tasks/default-tasks.js +0 -186
  420. package/dist/core/migration-backup.js +0 -1234
  421. package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -95
  422. package/dist/llm/memory-infer-impl.js +0 -138
  423. package/dist/migrate/legacy/config-source-migration.js +0 -223
  424. package/dist/migrate/legacy/content-migration.js +0 -305
  425. package/dist/migrate/legacy/legacy-layout.js +0 -779
  426. package/dist/migrate/legacy/legacy-paths.js +0 -25
  427. package/dist/migrate/legacy/legacy-stash-json.js +0 -72
  428. package/dist/migrate/legacy/proposal-fs-import.js +0 -168
  429. package/dist/migrate/legacy/task-target-ref-migration.js +0 -272
  430. package/dist/migrate/legacy/three-db-cutover.js +0 -841
  431. package/dist/migrate/legacy/workflow-migrations-bodies.js +0 -52
  432. package/dist/migrate/legacy/workflow-migrations-frozen.js +0 -21
  433. package/dist/migrate/legacy-ref-grammar.js +0 -214
  434. package/dist/output/shapes/distill.js +0 -14
  435. package/dist/output/shapes/history.js +0 -11
  436. package/dist/output/text/distill.js +0 -6
  437. package/dist/output/text/enable-disable.js +0 -8
  438. package/dist/output/text/history.js +0 -6
  439. package/dist/registry/build-index.js +0 -382
  440. package/dist/schemas/akm-config.json +0 -4704
  441. package/dist/schemas/akm-task.json +0 -87
  442. package/dist/schemas/akm-workflow.json +0 -372
  443. package/dist/scripts/migrate-storage.js +0 -3816
  444. package/dist/workflows/authoring/workflow-program-template.yaml +0 -31
  445. package/dist/workflows/cli.js +0 -53
  446. package/dist/workflows/exec/brief.js +0 -481
  447. package/dist/workflows/exec/report.js +0 -1460
  448. package/dist/workflows/exec/watch.js +0 -116
  449. package/dist/workflows/program/parser.js +0 -813
  450. package/dist/workflows/program/project.js +0 -104
@@ -2,49 +2,36 @@
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
- * Cross-cutting semantic checks over an assembled WorkflowDocument draft.
5
+ * Cross-cutting semantic checks over an assembled `WorkflowDocument` draft
6
+ * that need the whole document (not just one frontmatter key) at once.
6
7
  *
7
- * The parser handles per-line shape checks; this module runs rules that need
8
- * the whole document or the raw frontmatter at once: duplicate step IDs,
9
- * step-id format, and the frontmatter key whitelist.
8
+ * Per-key structural checks (unknown keys, id/param-name patterns, timeout
9
+ * format, retry taxonomy, route target ordering, duplicate ids, gate/body
10
+ * binding) all live in `parser.ts`, where line-anchored errors are cheapest to
11
+ * produce. The workflow-only closed frontmatter allowlist that used to live
12
+ * here (`ALLOWED_FRONTMATTER_KEYS`/`checkFrontmatterKeys`) is GONE —
13
+ * `schemas/akm-workflow.json` (`additionalProperties: false` over the shared
14
+ * asset envelope ∪ the workflow keys) is the closed-key authority now; this
15
+ * module only runs checks the schema cannot express (canonical xref shape,
16
+ * resource limits).
10
17
  */
11
- import { isBundleSlug } from "../core/asset/asset-ref.js";
12
- import { conceptIdFromTypeName, parseRefInput } from "../core/asset/resolve-ref.js";
18
+ import { bundleRefToString, parseBundleRef } from "../core/asset/asset-ref.js";
13
19
  import { utf8Bytes, WORKFLOW_MAX_INSTRUCTION_BYTES, WORKFLOW_MAX_PARAMS, WORKFLOW_MAX_STEPS } from "./resource-limits.js";
14
- const STEP_ID_REGEX = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
15
- const ALLOWED_FRONTMATTER_KEYS = new Set(["description", "tags", "params", "name", "updated", "when_to_use", "xrefs"]);
16
20
  export function runSemanticChecks(draft, frontmatterData, frontmatterEndLine, errors) {
17
- checkFrontmatterKeys(frontmatterData, frontmatterEndLine, errors);
18
21
  checkXrefs(frontmatterData.xrefs, frontmatterEndLine, errors);
19
- checkStepIdFormat(draft, errors);
20
- checkDuplicateStepIds(draft, errors);
21
22
  checkResourceLimits(draft, errors);
22
23
  }
23
24
  function checkXrefs(value, line, errors) {
24
25
  if (value === undefined)
25
26
  return;
26
- if (!Array.isArray(value)) {
27
- errors.push({ line, message: 'Workflow frontmatter "xrefs" must be an array of canonical asset refs.' });
28
- return;
29
- }
27
+ if (!Array.isArray(value))
28
+ return; // shape already flagged by parser.ts's checkXrefs
30
29
  for (const ref of value) {
31
30
  try {
32
31
  if (typeof ref !== "string")
33
32
  throw new Error("non-canonical ref");
34
- // Canonicity accepts BOTH grammars during the transition (WI-8.5a flipped
35
- // the content writers to the new grammar; existing content still carries
36
- // legacy xrefs — the dual-reader arm stays alive until WI-8.5b): the new
37
- // bare `conceptId` (or slug-clean `bundle//conceptId`) that lint/mv now
38
- // recognize, OR the legacy `[origin//]type:name` round-trip.
39
- const p = parseRefInput(ref);
40
- const conceptId = conceptIdFromTypeName(p.type, p.name);
41
- const newCanonical = p.origin !== undefined && p.origin !== "local" && p.origin !== "stash"
42
- ? isBundleSlug(p.origin)
43
- ? `${p.origin}//${conceptId}`
44
- : `${p.origin}//${p.type}:${p.name}`
45
- : conceptId;
46
- const legacyCanonical = p.origin ? `${p.origin}//${p.type}:${p.name}` : `${p.type}:${p.name}`;
47
- if (ref !== newCanonical && ref !== legacyCanonical)
33
+ const parsed = parseBundleRef(ref);
34
+ if (parsed.conceptId.includes(":") || ref !== bundleRefToString(parsed))
48
35
  throw new Error("non-canonical ref");
49
36
  }
50
37
  catch {
@@ -59,49 +46,21 @@ function checkResourceLimits(draft, errors) {
59
46
  if (draft.steps.length > WORKFLOW_MAX_STEPS) {
60
47
  errors.push({ line: 1, message: `Workflow must contain at most ${WORKFLOW_MAX_STEPS} steps.` });
61
48
  }
62
- if ((draft.parameters?.length ?? 0) > WORKFLOW_MAX_PARAMS) {
49
+ if (Object.keys(draft.params ?? {}).length > WORKFLOW_MAX_PARAMS) {
63
50
  errors.push({ line: 1, message: `Workflow must contain at most ${WORKFLOW_MAX_PARAMS} parameters.` });
64
51
  }
65
52
  for (const step of draft.steps) {
66
- if (utf8Bytes(step.instructions.text) > WORKFLOW_MAX_INSTRUCTION_BYTES) {
53
+ if (step.instructions && utf8Bytes(step.instructions.text) > WORKFLOW_MAX_INSTRUCTION_BYTES) {
67
54
  errors.push({
68
55
  line: step.instructions.source.start,
69
56
  message: `Step "${step.id}" instructions exceed the 256 KiB resource limit.`,
70
57
  });
71
58
  }
72
- }
73
- }
74
- function checkFrontmatterKeys(data, fmEndLine, errors) {
75
- for (const key of Object.keys(data)) {
76
- if (ALLOWED_FRONTMATTER_KEYS.has(key))
77
- continue;
78
- errors.push({
79
- line: fmEndLine,
80
- message: `Workflow frontmatter "${key}" is not supported. Use only: description, tags, params, name, updated, when_to_use, xrefs.`,
81
- });
82
- }
83
- }
84
- function checkStepIdFormat(draft, errors) {
85
- for (const step of draft.steps) {
86
- if (STEP_ID_REGEX.test(step.id))
87
- continue;
88
- errors.push({
89
- line: step.source.start,
90
- message: `Step ID "${step.id}" is invalid. Use letters, numbers, ".", "_" or "-" (e.g. "deploy-job").`,
91
- });
92
- }
93
- }
94
- function checkDuplicateStepIds(draft, errors) {
95
- const firstSeenLine = new Map();
96
- for (const step of draft.steps) {
97
- const previous = firstSeenLine.get(step.id);
98
- if (previous !== undefined) {
59
+ if (step.gateRubric && utf8Bytes(step.gateRubric.text) > WORKFLOW_MAX_INSTRUCTION_BYTES) {
99
60
  errors.push({
100
- line: step.source.start,
101
- message: `Step ID "${step.id}" is already used on line ${previous}. Step IDs must be unique within a workflow.`,
61
+ line: step.gateRubric.source.start,
62
+ message: `Step "${step.id}" gate rubric exceeds the 256 KiB resource limit.`,
102
63
  });
103
- continue;
104
64
  }
105
- firstSeenLine.set(step.id, step.source.start);
106
65
  }
107
66
  }
package/docs/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # Documentation
2
+
3
+ Each subdirectory has its own README indexing everything inside it.
4
+
5
+ ## [Guides](https://github.com/itlackey/akm/blob/main/docs/guides/README.md)
6
+
7
+ Task-oriented guides for using akm.
8
+
9
+ - [Getting Started](https://github.com/itlackey/akm/blob/main/docs/guides/getting-started.md) -- Quick setup guide
10
+ - [Concepts](https://github.com/itlackey/akm/blob/main/docs/guides/concepts.md) -- Bundles, adapters, asset types, and refs
11
+ - [Stash Maker's Guide](https://github.com/itlackey/akm/blob/main/docs/guides/stash-makers.md) -- Build and share a stash on GitHub, npm, or a network directory
12
+ - [Wikis](https://github.com/itlackey/akm/blob/main/docs/guides/wikis.md) -- Multi-wiki knowledge bases (Karpathy-style)
13
+ - [Local Development](https://github.com/itlackey/akm/blob/main/docs/guides/local-development.md) -- Dogfooding akm while editing its own source
14
+ - [Claude Code workflows vs. akm workflows](https://github.com/itlackey/akm/blob/main/docs/guides/claude-code-vs-akm-workflows.md) -- Comparing the two things that share a name
15
+ - Command tours: [search & discovery](https://github.com/itlackey/akm/blob/main/docs/guides/search-discovery.md), [sources & registries](https://github.com/itlackey/akm/blob/main/docs/guides/sources-registries.md), [knowledge management](https://github.com/itlackey/akm/blob/main/docs/guides/knowledge-management.md), [the improvement loop](https://github.com/itlackey/akm/blob/main/docs/guides/improvement-loop.md), [agent integration](https://github.com/itlackey/akm/blob/main/docs/guides/agent-integration.md)
16
+
17
+ ## [Reference](reference/README.md)
18
+
19
+ - [CLI](reference/cli.md) -- All `akm` commands and flags
20
+ - [Configuration](reference/configuration.md) -- Engines, strategies, bundles, and settings
21
+ - [Workflows](reference/workflows.md) -- Unified Markdown workflow schema, run state, and native orchestration engine
22
+ - [Wiki Snapshot Fetchers](https://github.com/itlackey/akm/blob/main/docs/reference/wiki-snapshot-fetchers.md) -- The pluggable fetcher API for URL-based knowledge reads
23
+ - [Registry](https://github.com/itlackey/akm/blob/main/docs/reference/registry.md) -- Registries, search, hosting, and managing sources
24
+ - [Data & Telemetry](reference/data-and-telemetry.md) -- Exactly what akm reads and writes on your machine (no remote telemetry)
25
+ - [akm-eval](https://github.com/itlackey/akm/blob/main/docs/reference/akm-eval.md) -- Standalone toolkit for measuring whether `akm improve` is working
26
+ - [Roadmap](https://github.com/itlackey/akm/blob/main/docs/reference/roadmap.md) -- High-level focus for the 0.9 and 1.0 releases
27
+
28
+ ## [Agents](https://github.com/itlackey/akm/blob/main/docs/agents/README.md)
29
+
30
+ - `akm help agents` (short guide by default; `akm help agents --full` for the complete guide) -- The CLI reference agents load to use akm; always the embedded corpus at `src/assets/hints/cli-hints-{full,short}.md`
31
+ - [Agent Install Guide](https://github.com/itlackey/akm/blob/main/docs/agents/agent-install.md) -- Step-by-step automated install for agents
32
+ - [Curate Workmap](https://github.com/itlackey/akm/blob/main/docs/agents/curate-workmap.md) -- Read before changing `akm curate` ranking or output
33
+
34
+ ## [Architecture](https://github.com/itlackey/akm/blob/main/docs/architecture/README.md)
35
+
36
+ System overview, normative specs, decision history, and subsystem internals.
37
+
38
+ - [Architecture](https://github.com/itlackey/akm/blob/main/docs/architecture/architecture.md) -- How akm's bundles, cache, index, and registries fit together
39
+ - [Core Principles](https://github.com/itlackey/akm/blob/main/docs/architecture/akm-core-principles.md) -- Design principles and constraints
40
+ - [Specs](https://github.com/itlackey/akm/blob/main/docs/architecture/README.md#specs-specs) -- Normative specifications (bundle/adapter model, ref grammar, stash conventions)
41
+ - [Internals](https://github.com/itlackey/akm/blob/main/docs/architecture/README.md#internals-internals) -- Current-truth subsystem references (storage, search, indexing, improve, health)
42
+ - [Testing](https://github.com/itlackey/akm/blob/main/docs/architecture/README.md#testing-testing) -- Testing workflow and pre-release checklist
43
+
44
+ ## [Migration](migration/README.md)
45
+
46
+ - [v0.8 -> v0.9 migration guide](migration/v0.8-to-v0.9.md) -- Current-cycle breaking changes
47
+ - [Release notes](migration/release-notes/) -- The short per-release notes `akm help migrate <version>` prints
48
+
49
+ ## [Posts](https://github.com/itlackey/akm/blob/main/docs/posts/README.md)
50
+
51
+ Source articles for the dev.to publishing pipeline (historical record).
52
+
53
+ ## Official Ecosystem Repositories
54
+
55
+ - [itlackey/akm-stash](https://github.com/itlackey/akm-stash) -- the official onboarding stash with ready-made assets you can install with `akm bundle add`
56
+ - [itlackey/akm-registry](https://github.com/itlackey/akm-registry) -- the official registry index that powers built-in discovery
57
+ - [itlackey/akm-plugins](https://github.com/itlackey/akm-plugins) -- optional integrations for tools like OpenCode
58
+ - [itlackey/akm-bench](https://github.com/itlackey/akm-bench) -- the standalone benchmark and evaluation repo for akm
59
+
60
+ ---
61
+
62
+ New docs, in five lines: keep one current-truth doc per subsystem, don't fork a
63
+ second one. Planning, review, and analysis material lives in the untracked
64
+ `.plans/` directory, never under `docs/` -- promote conclusions into the
65
+ current-truth doc or drop them. Normative specs live in
66
+ `docs/architecture/specs/`. Cite code by symbol and memories by search-terms --
67
+ not line numbers or exact refs, both rot. Nothing in `docs/` may reference
68
+ `.plans/`.
@@ -0,0 +1,8 @@
1
+ # Migration
2
+
3
+ Upgrade guides and per-release migration notes.
4
+
5
+ - [v0.8 -> v0.9 migration guide](v0.8-to-v0.9.md) -- Current-cycle breaking changes
6
+ - [v0.7 -> v0.8 migration guide](v0.7-to-v0.8.md) -- Task schema and 0.8-era changes
7
+ - [v0.5 -> v0.6 migration guide](https://github.com/itlackey/akm/blob/main/docs/migration/v0.5-to-v0.6.md) -- Terminology cut, registry schema v3, publisher changes
8
+ - [Release notes](release-notes/) -- The short per-release notes `akm help migrate <version>` prints (bundled with the npm package)
@@ -8,12 +8,12 @@ landed via PR #275.
8
8
 
9
9
  The CLI surface, configuration schema, provider interfaces, and ref
10
10
  grammar continue to match the v1 architecture spec
11
- ([`docs/technical/v1-architecture-spec.md`](../../technical/v1-architecture-spec.md)).
11
+ ([`docs/technical/v1-architecture-spec.md`](https://github.com/itlackey/akm/blob/v0.7.0/docs/technical/v1-architecture-spec.md)).
12
12
  0.7.0 commits to maintaining those surfaces through the 0.8.x / 0.9.x
13
13
  pre-releases — the formal freeze itself happens at 1.0 GA.
14
14
 
15
15
  If you are coming from 0.6.x, the
16
- [archived pre-1.0 migration plan](../../archive/pre-1.0-migration.md) covers the historical per-surface delta and is the
16
+ [archived pre-1.0 migration plan](https://github.com/itlackey/akm/blob/be3a6a632b0cbe7a63ce71b7d093d8ac266e857c/docs/archive/pre-1.0-migration.md) covers the historical per-surface delta and is the
17
17
  canonical upgrade reference. This file is the executive summary of
18
18
  what's new in 0.7.0.
19
19
 
@@ -55,9 +55,9 @@ writable source. See the archived pre-1.0 migration spec §11 at
55
55
  Three new commands produce proposals into the queue:
56
56
 
57
57
  ```sh
58
- akm reflect [ref] [--task ...] # reflection proposals
59
- akm propose <type> <name> --task "..." # generation proposals
60
- akm distill <ref> # bounded LLM → `lesson` proposal
58
+ akm reflect [ref] [--task ...] # reflection proposals — doclint:ignore (0.7.0-era, folded into `akm improve` later)
59
+ akm propose <type> <name> --task "..." # generation proposals — doclint:ignore (0.7.0-era spelling; moved to `akm proposal new` in 0.9.0)
60
+ akm distill <ref> # bounded LLM → `lesson` proposal — doclint:ignore (0.7.0-era, folded into `akm improve` later)
61
61
  ```
62
62
 
63
63
  `reflect` and `propose` shell out via the agent CLI (`agent.*` config,
@@ -131,7 +131,7 @@ Bench grows beyond the 0.6.x smoke run into a paired-utility framework:
131
131
  workflow that lands in 0.8.
132
132
 
133
133
  The bench technical reference lives in
134
- [`docs/technical/benchmark.md`](../../technical/benchmark.md).
134
+ [`docs/technical/benchmark.md`](https://github.com/itlackey/akm/blob/v0.7.0/docs/technical/benchmark.md).
135
135
 
136
136
  ### Removed legacy fields
137
137
 
@@ -142,7 +142,7 @@ The bench technical reference lives in
142
142
  - Earlier 0.7.x pre-release work (#220–#223) finalised the registry
143
143
  curation surface removal, classification pipeline rewrites, and
144
144
  error envelope shape that 0.7.0 ships. Operators upgrading from a
145
- 0.6.x baseline should read the [archived pre-1.0 plan](../../archive/pre-1.0-migration.md) for
145
+ 0.6.x baseline should read the [archived pre-1.0 plan](https://github.com/itlackey/akm/blob/be3a6a632b0cbe7a63ce71b7d093d8ac266e857c/docs/archive/pre-1.0-migration.md) for
146
146
  the per-surface migration recipe.
147
147
 
148
148
  ### CLI surface as of 0.7.0
@@ -251,17 +251,17 @@ If you want to use the new surfaces:
251
251
  akm setup # detects installed agent CLIs;
252
252
  # persists `agent.default`
253
253
  akm config set llm.features.feedback_distillation true
254
- akm distill memory:my-debugging-notes # produces a lesson proposal
254
+ akm distill memory:my-debugging-notes # produces a lesson proposal — doclint:ignore (0.7.0-era command + ref grammar, folded into `akm improve` / bundle refs later)
255
255
  akm proposal list
256
256
  akm proposal accept <id>
257
257
  ```
258
258
 
259
259
  ## Full migration guides
260
260
 
261
- - [Archived pre-1.0 migration plan](../../archive/pre-1.0-migration.md) — per-surface delta from any 0.6.x
261
+ - [Archived pre-1.0 migration plan](https://github.com/itlackey/akm/blob/be3a6a632b0cbe7a63ce71b7d093d8ac266e857c/docs/archive/pre-1.0-migration.md) — per-surface delta from any 0.6.x
262
262
  baseline. The canonical reference for upgrading.
263
- - [v0.5 → v0.6](../v0.5-to-v0.6.md) — the older terminology cut and
263
+ - [v0.5 → v0.6](https://github.com/itlackey/akm/blob/main/docs/migration/v0.5-to-v0.6.md) — the older terminology cut and
264
264
  registry schema v3.
265
- - [v1 architecture spec](../../archive/v1-architecture-spec.md) —
265
+ - [v1 architecture spec](https://github.com/itlackey/akm/blob/be3a6a632b0cbe7a63ce71b7d093d8ac266e857c/docs/archive/v1-architecture-spec.md) —
266
266
  the architecture contract that 0.7.0 commits to maintain through
267
267
  1.0 GA.
@@ -13,28 +13,71 @@ and minor releases. See STABILITY.md for the full policy.
13
13
 
14
14
  Key operator-facing changes:
15
15
 
16
- - **This release is the format-neutral bundle-adapter refactor.** The flat
17
- asset-type registry is replaced by per-format adapters, and refs move from the
18
- old `type:name` grammar to `[bundle//]conceptId` a subdir-qualified concept
19
- id such as `skills/code-review`, `memories/vpn-note`, or `env/prod`, with an
20
- optional `bundle//` installation prefix and an optional `#fragment`. Durable
21
- state is stored fully-qualified; the short bundle-omitted form is input sugar
16
+ - **This release is the format-neutral bundle-adapter refactor for
17
+ recognition, indexing, presentation, and validation.** The flat asset-type
18
+ registry is replaced by per-format adapters that decide what a file *is*
19
+ (11 adapters behind a static registry), how it is indexed and shown, and
20
+ how it validates. Refs move from the old `type:name` grammar to
21
+ `[bundle//]conceptId` a subdir-qualified concept id such as
22
+ `skills/code-review`, `memories/vpn-note`, or `env/prod`, with an optional
23
+ `bundle//` installation prefix and an optional `#fragment`. Durable state
24
+ is stored fully-qualified; the short bundle-omitted form is input sugar
22
25
  (resolved against `defaultBundle`, then installation-priority order).
23
- `akm migrate apply` re-keys all durable state, folds the former `workflow.db`
24
- into `state.db` (three databases: `state.db` / `index.db` / a separate
25
- `logs.db`, down from four), and migrates config from the flat `stashDir` /
26
- `sources` / `installed` / `wikiName` keys to `bundles` / `defaultBundle`.
27
- `index.md` / `log.md` are reserved structural files — never indexed as
28
- concepts and never valid write targets.
26
+ `akm migrate apply` re-keys all durable state, folds the former
27
+ `workflow.db` into `state.db` (three tracked databases: `state.db` /
28
+ `index.db` / a separate `logs.db`, down from four `logs.db` itself sits
29
+ outside migration control entirely, see
30
+ [the migration guide](../v0.8-to-v0.9.md#what-migration-control-does-not-cover)),
31
+ and migrates config from the flat `stashDir` / `sources` / `installed` /
32
+ `wikiName` keys to `bundles` / `defaultBundle`. In AKM stashes, `index.md` /
33
+ `log.md` are reserved structural files — never indexed as items and never
34
+ valid item-write targets. Other bundle formats use their adapter's own
35
+ structural-file rules.
36
+ **What this refactor does not (yet) touch: placement.**
37
+ `adapter.placeNew()` is defined on the interface
38
+ (`src/core/adapter/bundle-adapter.ts`) as an optional capability method and
39
+ already implemented by 8 of the built-in adapters, but nothing in the write
40
+ path calls it in 0.9.0 — writes still route through AKM's native flat
41
+ type→directory placement table (`stashDirFor` in
42
+ `src/core/asset/asset-placement.ts`). That wiring is deferred to 0.10 as
43
+ its own change (see
44
+ [STABILITY.md](../../../STABILITY.md#on-the-horizon) and
45
+ [D12](https://github.com/itlackey/akm/blob/main/docs/architecture/specs/0.9.0-decisions.md#d12--bundleadapterplacenew-stays-unwired-until-010));
46
+ placement is already correct for every existing bundle today, this only
47
+ changes which code computes it. `adapter.validate()`, by contrast, is a
48
+ REQUIRED interface member and each adapter owns its own checks in 0.9.0:
49
+ `akm lint` dispatches to the bundle's own adapter rather than
50
+ re-implementing its rules. One caveat worth knowing: the proposal
51
+ pre-commit path also runs `validate()`, but **advisory only** — it reports
52
+ findings via a warning and does not reject the write. Making it blocking
53
+ needs the adapter and legacy ref resolvers reconciled first, so a proposal
54
+ that trips an adapter diagnostic still applies in 0.9.0.
55
+ The adapter layer's `index()`/`affectedItems()` capability hooks also have
56
+ no implementors yet — every 0.9.0 adapter is scanned through the shared
57
+ core walk. None of this blocks normal use; it means "adapter-driven" in
58
+ this release now covers reading and validating a bundle, but not yet
59
+ writing to one.
29
60
  - **Installed non-akm bundles reclassify on your next `akm index`.** The
30
61
  indexer now dispatches each installed bundle's *detected* adapter instead of
31
62
  recognizing everything with the akm-stash adapter. No action needed — the
32
63
  index is a regenerable cache — but searches/saved refs into those bundles may
33
64
  resolve to new ref spellings afterwards.
65
+ - **OKF and llm-wiki are both consumer/read-only in 0.9.0.** Arbitrary OKF
66
+ `type` values remain searchable and showable with heading fragments, while
67
+ the selected adapter decides which types receive specialized behavior.
68
+ AKM-authored Markdown now emits its native `type` field and remains
69
+ OKF-compatible; commands, scripts, workflows, tasks, environments, and
70
+ secrets retain AKM's progressively enhanced native handling. Both the `okf`
71
+ adapter and the `llm-wiki` adapter are consumer-only in 0.9.0 — AKM-native
72
+ write commands (`akm remember`, `akm import`, proposal-accept, …) reject
73
+ OKF **and llm-wiki** targets before modifying them. Author llm-wiki `pages/`
74
+ content the way the Karpathy pattern always intended: your agent writes the
75
+ files directly, and akm indexes and serves the result.
34
76
  - The published npm package requires Node.js >= 22 as its cross-platform
35
- bootstrap. When a working Bun >= 1.0 is also on `PATH`, the launcher prefers
36
- Bun after bootstrap; old, unusable, or absent Bun installations fall back to
37
- Node.js. The standalone binaries are runtime-free.
77
+ bootstrap. The `akm` launcher prefers a working Bun >= 1.0 and otherwise
78
+ falls back to Node.js; `akm-migrate` follows the same model, with Bun optional
79
+ and preferred.
80
+ The standalone binaries are runtime-free.
38
81
  - The legacy `vault` asset type and `akm vault ...` command family are gone.
39
82
  Use `env/<name>` for whole `.env` groups and `secrets/<name>` for a single
40
83
  sensitive value.
@@ -42,12 +85,15 @@ Key operator-facing changes:
42
85
  pushes, and `akm events` is replaced by `akm log`.
43
86
  - The entire `akm wiki ...` command family and the `wiki` asset type are gone.
44
87
  The Karpathy-style LLM wiki structure (`schema.md` + `pages/`) is now a
45
- first-class **bundle format** recognized directly by `akm index`/`akm
46
- search`/`akm lint` — no dedicated verb surface needed.
47
- - `akm-migrate-storage` still ships and still performs the non-destructive
88
+ first-class **bundle format** recognized and indexed directly by `akm
89
+ index`/`akm search`/`akm show` — no dedicated verb surface needed. `akm
90
+ lint` still runs, now dispatching to the adapter's own wiki-shaped checks
91
+ through `validate()` (see above); it is a read surface in 0.9.0, not a
92
+ write target — placement isn't wired to the adapter until 0.10.
93
+ - `akm-migrate storage` performs the non-destructive
48
94
  `vaults/` -> `env/` copy for older stashes. Run it before indexing if you are
49
95
  upgrading from a stash that still stores `.env` files only under `vaults/`.
50
- - Proposal workflow is fully consolidated around `akm improve`, `akm propose`,
96
+ - Proposal workflow is fully consolidated around `akm improve`, `akm proposal new`,
51
97
  and `akm proposal ...`. Update any old `akm reflect`, `akm distill`,
52
98
  `akm accept`, `akm reject`, or `akm proposals` usage.
53
99
  - LLM-backed sustaining work is opt-in in the shipped presets: improve-stage
@@ -59,17 +105,83 @@ Key operator-facing changes:
59
105
  - Config, `state.db`, and `workflow.db` are now classified independently by the
60
106
  explicit `akm migrate` coordinator. Normal commands refuse old, future, or
61
107
  divergent durable schemas instead of attempting migration as a side effect.
108
+ - **`akm-migrate` derives the 0.9 config from your 0.8 keys** instead of
109
+ demanding a hand-authored one: the first `apply` with no `--config` writes a
110
+ validated starter config under the backup root and stops; a second `apply`
111
+ performs the cutover. Engine settings are never guessed — they are reported
112
+ in `droppedKeys` for you to re-add. Fresh 0.8 installs (whose configs carry
113
+ no `configVersion` key) now classify as `old` instead of being blocked, and
114
+ `migrate` reports `not-applicable` (exit 0) when there is nothing to migrate.
115
+ - **The experimental `akm workflow brief` / `akm workflow report`
116
+ external-driver protocol is removed.** `akm workflow run` is the single
117
+ execution surface. A legacy `experimental.workflowEngine` config key is
118
+ accepted and ignored; scripts calling `brief`/`report` must move to `run`.
119
+ - **Engine-less installs fall back to `opencode-sdk`** for `workflow run`,
120
+ prompt tasks, `akm agent`, `propose`, and `improve` reflect — when the
121
+ `opencode` binary is on PATH, akm synthesizes a config-free engine that
122
+ resolves provider, model, and auth from opencode's own configuration
123
+ instead of failing closed with exit 78. The fallback is always announced
124
+ (result `warnings`, task run log, or stderr). An operator-configured
125
+ engine always wins.
126
+ - **RSS, Bluesky, and X URLs are recognized by `akm bundle add`** and
127
+ snapshotted as knowledge assets instead of being crawled as ordinary web
128
+ pages. X needs `X_BEARER_TOKEN` (or `X_RSS_TEMPLATE`); store it as an akm
129
+ secret and inject it per-invocation with `akm secret run`. Website crawls
130
+ now respect `robots.txt` by default (`"respectRobots": false` opts out),
131
+ have a hard `crawlTimeoutMs` cap, and extract the page's main content —
132
+ existing website snapshots will get shorter and cleaner on their next
133
+ refresh.
62
134
 
63
135
  Primary public command family for 0.9.0:
64
136
 
65
137
  - `akm improve <ref> [--task "..."]`
66
- - `akm propose <type> <name> (--task "..." | --file <path>)`
138
+ - `akm proposal new <type> <name> (--task "..." | --file <path>)`
67
139
  - `akm proposal list`
68
140
  - `akm proposal show <id>`
69
141
  - `akm proposal diff <id>`
70
142
  - `akm proposal accept <id>`
71
143
  - `akm proposal reject <id> --reason "..."`
72
144
 
145
+ ## Release validation
146
+
147
+ > Unit/integration test counts below are point-in-time snapshots from the
148
+ > validation passes named next to each figure, not a promise about the count
149
+ > on any later commit — the suite keeps growing after each pass. Run
150
+ > `bun run check` yourself for the current count; do not treat a number below
151
+ > as still accurate.
152
+
153
+ Release validation was repeated on 2026-07-31. An isolated manual pass covered
154
+ 114 first-run, CLI, indexing, search/show, output-format, strict-flag,
155
+ tools-only agent classification, multi-bundle write/lint, workflow, task,
156
+ llm-wiki, env/secret, feedback/log, config/migration, health, upgrade, and
157
+ registry checks with no failures. `bun run release:check`, as run on
158
+ 2026-07-31, verified the packed npm installation, Node fallback and Bun
159
+ launcher paths, migration and task execution from published 0.8.14, the Linux
160
+ standalone scheduler artifact, its then-current unit/integration test counts,
161
+ and all seven Docker install targets. The gated semantic-search suite passed
162
+ 9 tests; Node 24 passed all 9 fallback smoke steps and 25 compatibility tests.
163
+
164
+ The post-release checklist audit added a separate 125-check deterministic pass
165
+ for cross-bundle identity, write fidelity, output destinations, lint/task
166
+ behavior, env secrecy, durable log cursors, workflow transitions, proposal
167
+ dry-runs, setup recovery, fresh health initialization, and source-install
168
+ safety. It passed 125/125 on Linux. The branch as of that same pass also
169
+ passed `bun run check` and `bun run build`.
170
+
171
+ A container-isolated follow-up passed 188 destructive crash/recovery checks,
172
+ including real `SIGKILL` windows across proposal, workflow, and lock journals,
173
+ plus deterministic interruption replay across phase-free migration sentinels.
174
+ The container also passed `release:check --skip-docker`, the seven-image
175
+ Docker install matrix, 9 semantic-search tests, all 9 Node 22 smoke steps, all
176
+ 25 Node compatibility tests, and the offline full gate. This pass exposed and
177
+ fixed host-scheduler and co-located Node/Bun assumptions in three tests; no
178
+ production behavior changed.
179
+
180
+ Live credential-backed agent/LLM calls and native macOS/Windows execution were
181
+ not run from this Linux host. Their deterministic paths remain covered by the
182
+ full unit/integration suite; release artifacts still require their normal
183
+ platform CI/release checks.
184
+
73
185
  Required upgrade checks:
74
186
 
75
187
  - Before crossing from 0.8 to 0.9, create an independent filesystem backup and
@@ -81,20 +193,89 @@ Required upgrade checks:
81
193
  the target.
82
194
  - Do not continue when status reports `blocked`. Preserve the reported backup
83
195
  run and resolve the named artifact or active-operation error first.
84
- - Restore is explicit and destructive: `akm backup restore --for 0.9.0 --run
196
+ - Restore is explicit and destructive: `akm-migrate restore --for 0.9.0 --run
85
197
  <backup-run-id> --confirm`. It creates and verifies a rescue backup before
86
198
  replacing current artifacts.
87
199
  - Run `akm help migrate 0.9.0` for the storage and command-surface checklist.
88
- - Run `akm-migrate-storage --yes` once if the stash ever used `vaults/`.
200
+ - Run `akm-migrate storage --yes` once if the stash ever used `vaults/`.
89
201
  - Rebuild derived search data with `akm index` only after migration status is
90
202
  `current`; indexing does not migrate config or durable schemas.
91
203
  - Review agent instructions and docs for old `vault`, `reflect`, and `distill`
92
204
  examples.
93
205
  - Review scheduled improve invocations if they relied on inherited extract or
94
- proactive-maintenance enablement. Standalone extraction remains available,
95
- but every command must select `--type <harness>` or `--auto`; bare
96
- `akm extract` is invalid. Update any installed bare extract task to
97
- `akm extract --auto` for all-harness discovery. The bundled template remains
98
- an unselected opt-in and now uses that valid command.
206
+ proactive-maintenance enablement. Standalone extraction remains available
207
+ as `akm proposal extract`, but every invocation must select
208
+ `--type <harness>` or `--auto`; a bare invocation is invalid. Update any
209
+ installed extract task to `akm proposal extract --auto` for all-harness
210
+ discovery. The bundled template remains an unselected opt-in and now uses
211
+ that valid command.
212
+
213
+ ## 0.9.0 command-surface overhaul (hard break, no aliases)
214
+
215
+ The 0.9.0 CLI surface was restructured in full. Known retired spellings fail
216
+ with `UNKNOWN_COMMAND` and a replacement hint. Update assets,
217
+ scripts, task YAML, prompts, and agent instructions (CLAUDE.md quick
218
+ references) using this table, then run `akm task sync --rebind` once so
219
+ installed schedules re-emit the new spellings. `akm hints` prints the complete
220
+ agent guide (`--detail brief` selects the compact version), while `akm help
221
+ agents` is short by default; the root `akm --help` groups the surviving surface
222
+ into AGENT LOOP / ASSETS / AUTOMATION / SYSTEM sections, including `migrate`
223
+ under SYSTEM. For migration usage details rather than the bare `--help`
224
+ listing, see [the migration guide](../v0.8-to-v0.9.md).
225
+
226
+ Command renames and moves:
227
+
228
+ | Old spelling | 0.9.0 replacement |
229
+ | --- | --- |
230
+ | `akm init` | `akm bundle create` |
231
+ | `akm add <source>` | `akm bundle add <source>` |
232
+ | `akm list` | `akm bundle list` |
233
+ | `akm remove <source>` | `akm bundle remove <source>` |
234
+ | `akm update` | `akm bundle update` (self-update stays `akm upgrade`) |
235
+ | `akm tasks <sub>` | `akm task add\|run\|sync\|doctor\|history` (singular; `list`, `show`, `remove`, `init`, `enable`, and `disable` are removed) |
236
+ | `akm extract` | `akm proposal extract` |
237
+ | `akm propose` | `akm proposal new` |
238
+ | `akm log list` | `akm log` (now a single command) |
239
+ | `akm registry search <q>` | `akm search <q> --from registry` |
240
+ | `akm workflow template` | `akm workflow create --print` |
241
+ | `akm workflow validate` | `akm lint --type workflows` (add `--fail-on-flagged` to keep CI-gate exit semantics) |
242
+ | `akm config show` | `akm config list` |
243
+
244
+ Removed outright (with the supported replacement procedure):
245
+
246
+ | Removed | Use instead |
247
+ | --- | --- |
248
+ | `akm history` | `akm log --ref <ref>` |
249
+ | `akm graph` (all subcommands) | counts in `akm health`; refresh via `akm improve --strategy graph-refresh` |
250
+ | `akm lessons coverage` / `strength` | lesson strength is indexed; `akm search --type lesson` |
251
+ | `akm mv` | move the file, then `akm index` + `akm lint`; optional `bun scripts/rekey-asset-ref.ts <old-ref> <new-ref>` (source checkout) carries ranking signal |
252
+ | `akm log tail` | poll `akm log --since @offset:<id>` (durable cursor) |
253
+ | `akm workflow watch` | `akm log --run <run-id>` |
254
+ | `akm env set` / `env unset` | edit the `.env` file directly; akm loads it as-is |
255
+ | `akm config validate` | config is validated on every load |
256
+ | `akm task enable` / `disable` | edit `enabled:` in the task YAML, then `akm task sync` |
257
+ | `akm task init` | `akm setup` seeds the default schedules |
258
+ | `akm improve canary` | `bun scripts/refresh-canary-set.ts [--refresh]` (from a source checkout — helper scripts are not shipped in the npm package) |
259
+ | `akm registry build-index` | `bun scripts/build-registry-index.ts` (maintainer tooling) |
260
+ | `akm index --background` | removed (the flag never backgrounded; use `--quiet`) |
261
+ | `akm setup --detect-only` / `--reset-recommended` | removed; environment detection runs inside `akm setup`, and `akm info` reports the *configured* capabilities |
262
+ | `extract --watch` / `--debounce-ms` | schedule `akm proposal extract --auto` as a task |
263
+
264
+ Flag and value renames:
265
+
266
+ | Old | New |
267
+ | --- | --- |
268
+ | `search`/`curate` `--source stash\|registry\|both` | `--from local\|registry\|all` |
269
+ | `remember`/`clone`/`improve`/the `task` group `--target <bundle>` | `--bundle <bundle>` (`import`, `proposal accept`, `env create`, `env remove`, `secret set` keep `--target`) |
270
+
271
+ Environment and JSON-payload renames ("stash" is retired; the noun is
272
+ "bundle" everywhere):
273
+
274
+ | Old | New |
275
+ | --- | --- |
276
+ | `AKM_STASH_DIR` | `AKM_BUNDLE_DIR` |
277
+ | `akm info` field `stashDir` | `bundleDir` |
278
+ | `akm config path --all` key `stash` | `bundle` |
279
+ | `bundle create` result `defaultStashUpdated` / `previousStashDir` | `defaultBundleUpdated` / `previousBundleDir` |
99
280
 
100
281
  Full changelog: https://github.com/itlackey/akm/blob/main/CHANGELOG.md