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
@@ -0,0 +1,358 @@
1
+ # Configuration
2
+
3
+ AKM reads one user configuration file: `$XDG_CONFIG_HOME/akm/config.json`
4
+ (normally `~/.config/akm/config.json` on Linux and macOS, or
5
+ `%APPDATA%\akm\config.json` on Windows). Set `AKM_CONFIG_DIR` to override the
6
+ directory. Project `.akm/config.json` files are not merged.
7
+
8
+ ## Version 0.9
9
+
10
+ A present configuration file must set `configVersion` to exactly `"0.9.0"`.
11
+ Missing, older, newer, numeric, and malformed versions are rejected by ordinary
12
+ commands without rewriting the file. `akm migrate status` reports config and
13
+ database state independently; it exits nonzero when migration is blocked.
14
+ `akm migrate apply` installs an operator-prepared 0.9 config and applies pending
15
+ database migrations, but it never guesses profile-to-engine mappings. See [the
16
+ migration guide](../migration/v0.8-to-v0.9.md) before editing an existing
17
+ installation.
18
+
19
+ Canonical config and durable database access fail closed while a restore or
20
+ migration-apply operation is incomplete. Use `akm migrate status` to inspect it
21
+ and `akm migrate apply` to retry; do not delete migration control files manually.
22
+
23
+ AKM 0.8 does not provide these migration commands. To cross from 0.8 to 0.9,
24
+ prepare the target and an independent filesystem backup first, install or stage
25
+ the 0.9 binary manually, then invoke that new binary with `migrate apply
26
+ --config`. Do not use `upgrade --migration-config` from 0.8; that installed 0.8
27
+ code cannot enforce safeguards introduced by 0.9.
28
+
29
+ ```jsonc
30
+ {
31
+ "configVersion": "0.9.0",
32
+ "$schema": "https://itlackey.github.io/akm/schemas/akm-config.json",
33
+ "engines": {
34
+ "fast": {
35
+ "kind": "llm",
36
+ "endpoint": "http://localhost:11434/v1/chat/completions",
37
+ "model": "qwen3",
38
+ "apiKey": "${LOCAL_LLM_API_KEY}"
39
+ },
40
+ "reviewer": {
41
+ "kind": "agent",
42
+ "platform": "opencode",
43
+ "model": "anthropic/claude-sonnet-4-6"
44
+ }
45
+ },
46
+ "defaults": {
47
+ "engine": "reviewer",
48
+ "llmEngine": "fast",
49
+ "improveStrategy": "default"
50
+ },
51
+ "workflow": {
52
+ "maxConcurrency": 8,
53
+ "judgeEngine": "reviewer"
54
+ },
55
+ "improve": {
56
+ "strategies": {
57
+ "nightly": {
58
+ "engine": "fast",
59
+ "processes": {
60
+ "reflect": {},
61
+ "memoryInference": { "model": "qwen3-small", "llm": { "temperature": 0.1 } }
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ ```
68
+
69
+ ## Engines
70
+
71
+ `engines` is the only public execution map. An engine name is lowercase
72
+ kebab-case, at most 63 characters, and cannot start with `akm-`.
73
+
74
+ | Kind | Required fields | Use |
75
+ | --- | --- | --- |
76
+ | `llm` | `endpoint`, `model` | OpenAI-compatible chat completions |
77
+ | `agent` | `platform` | A registered dispatch-capable harness |
78
+
79
+ LLM endpoints must be complete `http://` or `https://` chat-completions URLs
80
+ ending in `/chat/completions`, without userinfo, query, or fragment. API keys
81
+ are symbolic only: `$VAR` or `${VAR}`. AKM resolves them only at dispatch.
82
+
83
+ An agent engine may set `bin`, `args`, `workspace`, `model`, `timeoutMs`, and
84
+ `modelAliases`. Only `platform: "opencode-sdk"` may set `llmEngine`; it names
85
+ the LLM engine used as that SDK engine's fallback connection.
86
+
87
+ `platform: "opencode-sdk"` needs the **`opencode` binary** on PATH (or a `bin`
88
+ pointing at it). akm bundles `@opencode-ai/sdk`, but that package is an HTTP
89
+ client with no dependencies — it spawns `opencode serve` and talks to it — so
90
+ the npm dependency alone does not make the platform usable. Install the binary
91
+ with `npm i -g opencode-ai` or opencode's own installer.
92
+
93
+ Config-root `modelAliases` resolve by exact engine/platform column first, then
94
+ the shared `llm` column for direct and fallback LLM engines, then `"*"`. The
95
+ resolved exact model is used consistently by direct dispatch, SDK fallback,
96
+ health evidence, and frozen workflow plans.
97
+
98
+ `defaults.engine` names an LLM or agent engine. `defaults.llmEngine` must name
99
+ an LLM engine. There is no first-engine fallback: an unset `defaults.engine`
100
+ never resolves to some arbitrary entry in `engines`. It resolves instead to a
101
+ synthesized, config-free `opencode-sdk` engine when the `opencode` binary is on
102
+ PATH — announced once per run, and preempted by any `opencode-sdk` engine you
103
+ configure yourself. Naming an engine that is not configured is always an error
104
+ and is never rescued by that fallback.
105
+
106
+ Index passes select engines through `index.defaults.engine` or
107
+ `index.<pass>.engine`. Per-pass `model`, `timeoutMs`, and `llm` fields are
108
+ invocation overrides; `enabled: false` disables that pass. Connection fields
109
+ such as `endpoint`, `provider`, and `apiKey` belong only on named engines.
110
+
111
+ `workflow.maxConcurrency` is the native workflow engine ceiling. An explicit
112
+ value is clamped to `1..64`. When absent, AKM derives the cap once from the CPU
113
+ count (`min(16, max(1, cores - 2))`) and freezes it into the run plan, so resume
114
+ does not change policy on a different host or after config edits.
115
+
116
+ `workflow.judgeEngine` names the LLM or agent engine used to verify every
117
+ non-empty workflow `### gate` rubric. It is required when a workflow declares
118
+ completion criteria and is frozen into each new run, so later config edits do
119
+ not change an in-flight run's verifier. Missing, failed, or malformed verifier
120
+ results reject the gate; criteria are never silently bypassed.
121
+
122
+ ## Strategies
123
+
124
+ Improve presets live under `improve.strategies`; invoke one with
125
+ `akm improve --strategy <name>`. The selection order is `--strategy`,
126
+ `defaults.improveStrategy`, then built-in `default`. A strategy and each process
127
+ can select `engine`, `model`, `timeoutMs`, and LLM request overrides:
128
+
129
+ ```jsonc
130
+ {
131
+ "improve": {
132
+ "strategies": {
133
+ "nightly": {
134
+ "engine": "fast",
135
+ "processes": {
136
+ "reflect": { "llm": { "temperature": 0.2 } },
137
+ "graphExtraction": { "model": "qwen3-small" }
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+ ```
144
+
145
+ LLM-only improve processes require an LLM engine; an explicit invalid or
146
+ incompatible engine never falls back to another engine. Built-in strategies
147
+ are complete presets. User-defined strategies inherit omitted fields from the
148
+ built-in `default` strategy before applying their own overrides.
149
+
150
+ The shipped `default` and `frequent` strategies keep improve-stage session
151
+ extraction off. `proactiveMaintenance` is off in `default` and
152
+ `reflect-distill`; run `akm improve --strategy proactive-maintenance` to use the
153
+ dedicated opt-in preset. Because strategies inherit from `default`, a preset
154
+ that omits either process also inherits the off value. User strategy overrides
155
+ are applied last, so an explicit `enabled: true` still opts the selected
156
+ strategy in.
157
+
158
+ These improve-stage defaults do not gate explicit standalone extraction through
159
+ `akm proposal extract --type <harness>` or `akm proposal extract --auto`. The interactive
160
+ scheduled-task step also continues to offer the bundled `core/extract` template
161
+ as an unselected opt-in; it is not installed merely because the template is
162
+ bundled.
163
+
164
+ ## Indexing
165
+
166
+ `index.indexBodyOpening` defaults to `false`. When enabled, AKM captures the
167
+ first prose paragraph of each Markdown asset body, capped at 280 characters,
168
+ into the lowest-weight search content and embedding text. Secret and env files
169
+ are never read for this field, and session-kind memories are excluded.
170
+
171
+ Changing this option changes indexed text. Run `akm index --full` after
172
+ toggling it so all entries and embeddings are rebuilt consistently. If the
173
+ setting differs from the state used to build the current index, AKM warns until
174
+ that full rebuild completes.
175
+
176
+ ## Semantic search
177
+
178
+ `semanticSearchMode` (top-level, `"off" | "auto"`, default `"off"`) gates
179
+ embedding-based search. `"auto"` lets AKM set up embeddings (which downloads
180
+ a local model unless you point `embedding` at a remote provider) and falls
181
+ back to keyword-only FTS if the embedding runtime is unavailable; `"off"`
182
+ disables semantic search outright and search is always keyword-only FTS.
183
+ The default is `"off"` so a bare or headless install (`akm bundle create`, `--yes`,
184
+ `--config`) never silently downloads the local embedding model on first
185
+ index.
186
+ The interactive `akm setup` wizard pre-selects semantic search **on**
187
+ regardless of this default, and warns that choosing it downloads the model
188
+ unless a remote `embedding` config is provided.
189
+
190
+ ```jsonc
191
+ { "semanticSearchMode": "off" }
192
+ ```
193
+
194
+ `embedding` configures the connection used for semantic search and
195
+ `akm improve`'s memory-inference/consolidate passes when they call an
196
+ embedding model: `provider`, `endpoint`, `model`, `apiKey` (symbolic
197
+ reference, same rules as engine `apiKey`), `dimension`, `localModel`,
198
+ `maxTokens`, `batchSize`, `chunkSize`, `contextLength`, and
199
+ `ollamaOptions.num_ctx`.
200
+
201
+ ## Search tuning
202
+
203
+ `search` tunes ranking, not behavior an ordinary user needs to touch:
204
+
205
+ | Key | Purpose |
206
+ | --- | --- |
207
+ | `search.minScore` | Drop results below this score |
208
+ | `search.defaultExcludeTypes` | Asset types excluded from results by default |
209
+
210
+ ### Graph boost search tuning
211
+
212
+ | Key | Purpose |
213
+ | --- | --- |
214
+ | `search.graphBoost.*` | Entity-graph relevance boost: `directBoostPerEntity`/`directBoostCap` (directly related entities), `hopBoostPerEntity`/`hopBoostCap` (multi-hop, capped at `maxHops` ≤ 3), `confidenceMode` (`off`\|`blend`\|`multiply`, default `blend`), `confidenceWeight` (0–1, default `0.2`) |
215
+
216
+ ## Feedback
217
+
218
+ `feedback` shapes the `akm feedback` taxonomy:
219
+
220
+ | Key | Purpose |
221
+ | --- | --- |
222
+ | `feedback.requireReason` | Whether `akm feedback --negative` without `--reason`/`--failure-mode` is a hard error. **Defaults to `true`** when unset — set `false` to downgrade the check to a warning instead |
223
+ | `feedback.allowedFailureModes` | Restrict `--failure-mode` values accepted by `akm feedback`. Curated set (also the default when unset): `incorrect`, `outdated`, `dangerous`, `incomplete`, `redundant` |
224
+
225
+ ## Bundles and write target
226
+
227
+ `bundles` (replacing the retired `stashDir`/`sources[]`/`installed[]` trio)
228
+ and `defaultBundle` are the 0.9 source configuration shape — see
229
+ [Concepts](https://github.com/itlackey/akm/blob/main/docs/guides/concepts.md) and the [CLI reference](cli.md) for the
230
+ full bundle model (`path`, `git`, `website`, `npm`, `writable`, `registryId`,
231
+ `components`). `defaultBundle` must name a key in `bundles` when set.
232
+
233
+ ### defaultWriteTarget
234
+
235
+ `defaultWriteTarget` names the bundle that write commands (`akm remember`,
236
+ `akm env`/`secret create`, `akm improve`, etc.) fall back to when no
237
+ explicit destination flag is given and the command isn't already scoped to a
238
+ specific source. It must name a configured bundle; setting it with no
239
+ `bundles` configured, or naming an unconfigured bundle, is rejected at
240
+ `config set` (or config load) time. The full write-target resolution order
241
+ is the command's destination flag (`--bundle` on `remember`/`clone`/
242
+ `improve`, `--target` on `env`/`secret create`) -> `defaultWriteTarget` ->
243
+ working bundle (`defaultBundle`) -> `ConfigError`.
244
+
245
+ ### Memory scope
246
+
247
+ `akm remember`'s scope flags (`--user`, `--agent`, `--run`, `--channel`)
248
+ write four canonical top-level frontmatter keys on the memory file:
249
+ `scope_user`, `scope_agent`, `scope_run`, `scope_channel` (one key per
250
+ non-empty scope value; string values). This is not a config-file setting —
251
+ it is documented here because it is the multi-tenant/multi-agent contract
252
+ that `akm search --filter` and `akm show --filter` read back:
253
+ `--filter user=<id>` / `--filter agent=<id>` / `--filter run=<id>` /
254
+ `--filter channel=<name>` (repeatable) narrow results/resolution to assets
255
+ whose frontmatter scope matches, without changing ranking. A memory with
256
+ only scope flags and no tags is valid — the tag-required check is
257
+ independent of scope. `--scope` was removed in 0.9.0 with no alias; use
258
+ `--filter`.
259
+
260
+ `archiveRetentionDays` (default `90` when unset) controls how long a pending
261
+ proposal is kept before `akm improve`'s maintenance pass archives it (status
262
+ `rejected`, reason `"expired: no action within retention window"`) — `akm
263
+ proposal` itself has no archive/expire verb. Setting it to `0` or less
264
+ disables expiry entirely.
265
+
266
+ ## Registries
267
+
268
+ `registries` (top-level array, distinct from `bundles`) lists remote package
269
+ registries `akm registry`/`akm bundle add` can search and install from.
270
+ Each entry is `{ url, name?, enabled?, provider?, options? }`; `provider`
271
+ defaults to `"static-index"`. See [Registries](https://github.com/itlackey/akm/blob/main/docs/reference/registry.md) for the full
272
+ field reference and provider list.
273
+
274
+ ## Output defaults
275
+
276
+ `output.format` (one of `json`\|`yaml`\|`text`\|`jsonl`\|`md`\|`html`,
277
+ default `json`) and `output.detail` (`brief`\|`normal`\|`full`, default
278
+ `brief`) set the CLI's default `--format`/`--detail` when the flags are
279
+ omitted. Per-command flags always override these.
280
+
281
+ ## Setup-derived recommendations
282
+
283
+ `setup` is reserved for configuration derived by `akm setup`. It currently
284
+ holds no keys — the `setup.taskSchedules` sub-key was removed in 0.9.0 after
285
+ nothing in the setup flow or the tasks subsystem was found to read or write
286
+ it. Scheduling lives in the tasks subsystem (`akm task`).
287
+
288
+ ## Experimental opt-ins
289
+
290
+ `experimental` holds explicit opt-ins for behavior outside the 0.9
291
+ stability contract (see [STABILITY.md](../../STABILITY.md) for full
292
+ classification). Every key defaults to **off**; an absent `experimental`
293
+ section, an absent key, and an explicit `false` all read identically as off.
294
+
295
+ ```jsonc
296
+ {
297
+ "experimental": {
298
+ "improveAutonomy": false
299
+ }
300
+ }
301
+ ```
302
+
303
+ - **`experimental.improveAutonomy`** — gates only the autonomous
304
+ `memoryInference`, `triagePromote`, and `memoryCleanup` lanes. `akm improve`
305
+ itself always runs; this only gates mutations without a human in the loop.
306
+ Consolidation is not gated: it remains advisory and emits reviewable
307
+ proposals. `sync.push` is deliberately **not** gated by this key.
308
+
309
+ ## Managing Config
310
+
311
+ ```sh
312
+ akm config list
313
+ akm config get engines.fast
314
+ akm config set engines.fast '{"kind":"llm","endpoint":"http://localhost:11434/v1/chat/completions","model":"qwen3"}'
315
+ akm config set engines.fast.apiKey '$LOCAL_LLM_API_KEY'
316
+ akm config unset engines.old
317
+ akm migrate status
318
+ akm migrate status --config ./prepared-0.9.json
319
+ akm migrate apply --config ./prepared-0.9.json --dry-run
320
+ akm migrate apply --config ./prepared-0.9.json
321
+ ```
322
+
323
+ Object values passed to `config set` deep-merge with their current value.
324
+ Arrays replace, `null` is only valid for nullable fields, and `config unset` is
325
+ the only deletion operation. `configVersion` cannot be set or unset with the
326
+ generic walker.
327
+
328
+ ## Environment
329
+
330
+ | Variable | Purpose |
331
+ | --- | --- |
332
+ | `AKM_CONFIG_DIR` | Override the user config directory (or set `XDG_CONFIG_HOME`) |
333
+ | `AKM_ENGINE_<NAME>_API_KEY` | Fallback credential for LLM engine `<name>` |
334
+ | `AKM_LLM_API_KEY` | Fallback only for the selected `defaults.llmEngine` |
335
+ | `AKM_EMBED_API_KEY` | Embedding credential |
336
+ | `AKM_BUNDLE_DIR` | Override the stash directory |
337
+ | `AKM_DATA_DIR` | Override the data directory — durable `index.db`/`workflow.db`/`state.db`, `akm.lock`, config backups (or set `XDG_DATA_HOME`) |
338
+ | `AKM_CACHE_DIR` | Override the cache directory — regenerable caches (or set `XDG_CACHE_HOME`) |
339
+ | `AKM_STATE_DIR` | Override the state directory — task-scheduler invocation state (or set `XDG_STATE_HOME`) |
340
+ | `AKM_SQLITE_JOURNAL_MODE` | SQLite journal mode: `WAL` (default), `DELETE`, or `TRUNCATE` |
341
+ | `AKM_VERBOSE` | Truthy value enables the same diagnostics as `--verbose` |
342
+ | `AKM_DEBUG` | `1` prints a stack trace on unexpected internal errors |
343
+
344
+ For an engine named `fast`, its fallback variable is
345
+ `AKM_ENGINE_FAST_API_KEY`. An explicit `apiKey` symbolic reference is
346
+ authoritative and does not fall through to another variable.
347
+
348
+ Use `AKM_SQLITE_JOURNAL_MODE=DELETE` or `TRUNCATE` when WAL is unavailable,
349
+ such as on some NFS/SMB mounts. With the default `WAL` setting, AKM detects a
350
+ network filesystem for the data directory and falls back to `DELETE`.
351
+
352
+ ## Retired Configuration
353
+
354
+ `profiles`, `llm`, `agent`, `features`, `stashes`, `defaults.llm`,
355
+ `defaults.agent`, and `defaults.improve` are rejected in 0.9. Recreate the
356
+ configuration using `engines`, `defaults.engine`, `defaults.llmEngine`, and
357
+ `improve.strategies`; AKM deliberately does not infer or rename ambiguous
358
+ profile identities.
@@ -16,6 +16,7 @@ AKM adds no network destinations of its own. The requests it *does* make all go
16
16
  2. **Registry metadata and stash packages** from sources you explicitly configure (GitHub, npm, git remotes, websites) — those hosts receive the fetch/clone/crawl requests, and website sources receive requests for the pages you crawl.
17
17
  3. **`akm upgrade`** — fetches the latest release from GitHub releases (GitHub sees the request).
18
18
  4. **`akm setup`** — a single DNS lookup for `github.com` to decide whether to skip network-dependent steps (Ollama detection, remote embedding probes) when offline. No HTTP request is made by this probe; if it succeeds, akm proceeds with the network-dependent steps you already configured.
19
+ 5. **`akm improve` dead-link checks** — a full-scope improve run (the default for a bare `akm improve`) sends best-effort `HEAD` requests (following redirects, with a short timeout and a hard cap on URL count) to URLs found in the bodies of the knowledge assets it is improving, to flag dead links. The hosts of those URLs see a `HEAD` request; no asset content is sent. Keep URLs you don't want probed out of knowledge-asset bodies, or run improve with an explicit narrower scope.
19
20
 
20
21
  In every case the receiving endpoint is one you configured or invoked; the data leaving your machine is the data you directed AKM to send there.
21
22
 
@@ -29,7 +30,7 @@ AKM writes to these locations on your machine. All paths follow [XDG Base Direct
29
30
 
30
31
  | Path | Contents | Safe to delete? |
31
32
  |---|---|---|
32
- | `config.json` | Your AKM configuration: engines, strategies, stash paths, and feature settings | **No** — deleting resets all settings |
33
+ | `config.json` | Your AKM configuration: engines, improve strategies, bundles (stash sources), and experimental opt-ins — see [Configuration](configuration.md) | **No** — deleting resets all settings |
33
34
 
34
35
  Override: set `AKM_CONFIG_DIR` or `XDG_CONFIG_HOME`.
35
36
 
@@ -39,6 +40,7 @@ Override: set `AKM_CONFIG_DIR` or `XDG_CONFIG_HOME`.
39
40
  |---|---|---|
40
41
  | `index.db` | Search index for all your stash assets (FTS5 + metadata) | Yes — rebuilds via `akm index --full` |
41
42
  | `state.db` | Events, local usage telemetry, proposals, task history, improve run results, and workflow run state/history (the former `workflow.db` was folded in during the 0.9.0 cutover) | **No** — deletes event/usage logs, proposal queue, improve history, and workflow run history |
43
+ | `logs.db` | Structured, high-volume task/run log lines (`{ts, task_id, run_id, stream, level, line}`), joined to `state.db`'s `task_history` rows by `task_id@started_at`. Kept separate from `state.db` because log lines are append-only and freely purgeable, unlike durable state | Yes — log lines are regenerable per run; deleting loses historical run output only |
42
44
  | `akm.lock` | Inter-process write lock | Yes — recreated automatically |
43
45
  | `akm.lock.lck` | Lock write sentinel | Yes — recreated automatically |
44
46
 
@@ -52,7 +54,7 @@ Everything in the cache is regenerable. It is safe to delete the entire cache di
52
54
  |---|---|---|
53
55
  | `config-backups/config-<timestamp>.json` | Pre-save config snapshots (5 retained; owner-only permissions — file `0600`, dir `0700`, since 08-F4) | Yes |
54
56
  | `config-backups/config.latest.json` | Latest backup alias (owner-only `0600`) | Yes |
55
- | `registry/` | Downloaded registry tarballs (stash packages from npm, GitHub, etc.) | Yes — re-downloaded on next `akm add` or `akm update` |
57
+ | `registry/` | Downloaded registry tarballs (stash packages from npm, GitHub, etc.) | Yes — re-downloaded on next `akm bundle add` or `akm bundle update` |
56
58
  | `registry-index/` | Legacy per-URL JSON cache (v0.7 artifact) | Yes — fully replaced by `index.db` in 0.8.0 |
57
59
  | `semantic-status.json` | Semantic index build status marker | Yes |
58
60
  | `bin/` | Downloaded AKM binary cache (used by `akm upgrade`) | Yes |
@@ -65,10 +67,10 @@ Override: set `AKM_CACHE_DIR` or `XDG_CACHE_HOME`.
65
67
 
66
68
  | Path | Contents | Safe to delete? |
67
69
  |---|---|---|
68
- | `<stash>/` | All your asset files: agents, skills, commands, knowledge, workflows, memories, env files, secrets, wikis, lessons, facts | **No** — this is YOUR data |
70
+ | `<stash>/` | All your asset files: agents, skills, commands, knowledge, instructions, workflows, scripts, memories, env files, secrets, lessons, tasks, sessions, facts, plus any bundle-adapter-owned content (e.g. `llm-wiki` bundle roots — not an AKM `PLACEMENT_SPECS` type) | **No** — this is YOUR data |
69
71
  | `<stash>/.akm/` | Hidden AKM metadata (v0.7 proposals, legacy runs) | Caution — check for pending proposals first |
70
72
 
71
- Override: set `AKM_STASH_DIR` (or configure `stashDir` in `config.json`).
73
+ Override: set `AKM_BUNDLE_DIR`, or configure `bundles`/`defaultBundle` in `config.json` (the top-level `stashDir` key from 0.8 is retired and rejected in 0.9 — see [Configuration](configuration.md#bundles-and-write-target)).
72
74
 
73
75
  ---
74
76
 
@@ -92,54 +94,118 @@ An append-only log of every mutating action you perform with AKM. Events are sto
92
94
  - API keys or secrets (config is not stored in events)
93
95
  - Personal information
94
96
 
95
- **Retention:** Events older than 90 days are purged automatically when `akm improve` runs its maintenance pass. Purge is controlled by `purgeOldEvents()` with a 90-day default.
97
+ **Retention:** Events older than 90 days are purged automatically when `akm improve` runs its maintenance pass. The window is `improve.eventRetentionDays` (default `90`; set `0` to disable), enforced by `purgeOldEvents()`.
96
98
 
97
- **Full event type list:**
99
+ **Full event type list.** `EventType` (`src/core/events.ts`) is an open
100
+ string union — new types can be added without a schema bump — so this is
101
+ the set of types the code actually emits at HEAD (verified against every
102
+ `appendEvent(...)` call site, 2026-07-27), grouped by area:
103
+
104
+ *Asset lifecycle*
98
105
 
99
106
  | Event type | When emitted | Key metadata fields |
100
107
  |---|---|---|
101
- | `add` | `akm add <source>` | `ref`, `provider` |
102
- | `remove` | `akm remove <source>` | `ref` |
103
- | `update` | `akm update [source]` | `ref` |
108
+ | `add` | `akm bundle add <source>` | `ref`, `provider` |
109
+ | `remove` | `akm bundle remove <source>` | `ref` |
110
+ | `update` | `akm bundle update [source]` | `ref` |
104
111
  | `remember` | `akm remember <text>` | `ref` |
105
112
  | `import` | `akm import <file>` | `ref` |
106
- | `save` | `akm sync` | `ref` |
107
- | `feedback` | `akm feedback <ref>` | `signal` (positive/negative) |
113
+ | `rekey` | `scripts/rekey-asset-ref.ts` moved at least one row onto a renamed asset's new ref — nothing is emitted on a no-op re-run | `ref` (the new ref); metadata `{from, to, changed}` (row counts only) |
114
+
115
+ *Search, retrieval, sync*
116
+
117
+ | Event type | When emitted | Key metadata fields |
118
+ |---|---|---|
108
119
  | `search` | `akm search <query>` | `query`, `source`, `signal` |
109
120
  | `curate` | `akm curate <prompt>` | `query`, `source` |
110
121
  | `show` | `akm show <ref>` | `ref`, `type`, `name` |
111
122
  | `select` | `akm show` after a search returning the same ref | `ref`, `entryId` |
123
+ | `feedback` | `akm feedback <ref>` | `signal` (positive/negative) |
124
+ | `sync` | `akm sync` (renamed from `save` in 0.9.0; historical rows keep `save`, and `akm log --type save`/`--type sync` are synonyms on read) | `ref` |
125
+ | `stash_synced` | `akm improve`'s internal auto-sync pass (the `sync.push` feature), **distinct from** the `akm sync` command above | `committed`, `pushed`, `skipped`, `reason` |
126
+ | `env_access` | `akm env run <name> -- <command>` (audit trail: key **names** only, values never recorded) | `ref`, `keys` |
127
+ | `secret_access` | `akm secret run <ref> <VAR> -- <command>` (audit trail: var **name** only, value never recorded) | `ref`, `var` |
128
+
129
+ *Proposals*
130
+
131
+ | Event type | When emitted | Key metadata fields |
132
+ |---|---|---|
112
133
  | `promoted` | `akm proposal accept <id>` | `ref` |
113
134
  | `rejected` | `akm proposal reject <id>` | `ref` |
135
+ | `proposal_reverted` | `akm proposal revert <id>` (undoes a previously-accepted proposal, restores prior content) | `ref` |
136
+ | `proposal_expired` | A pending proposal aged past the retention window and was auto-expired | `ref` |
137
+ | `proposal_expiration_pass` | Summary emitted once per `akm improve` maintenance run after per-proposal `proposal_expired` events | expiry counts |
138
+ | `proposal_orphan_purge` | Stale proposals whose target asset no longer exists on disk, pruned by improve maintenance | `checked`, `rejected` |
139
+ | `proposal_creation_rejected` | `createProposal()` validation failed before write | `ref`, `reason`, `source` |
140
+ | `triage_drained` | `akm proposal drain` run summary | `promoted`, `rejected`, `deferredByReason`, `skippedByCap`, `policy`, `applyMode` |
141
+ | `triage_deferred` | `akm proposal drain` left items unresolved after the (optional) judgment tier | `deferred`, `deferredByReason`, `reason` |
142
+
143
+ *`akm improve` pipeline*
144
+
145
+ | Event type | When emitted | Key metadata fields |
146
+ |---|---|---|
147
+ | `improve_invoked` | Start of an `akm improve` run | `ref` (scope); `strategy`, `scope`, `dryRun`, `eligibleCount` |
148
+ | `improve_completed` | `akm improve` run finished | run stats |
149
+ | `improve_failed` | `akm improve` run errored | error |
150
+ | `improve_skipped` | Asset skipped by cooldown or budget | `ref`, `reason` |
151
+ | `improve_lock_recovered` | Stale improve lock cleared at startup | |
152
+ | `improve_review_needed` | `akm feedback` pushed a high-utility asset's utility below the review threshold — a review-needed escalation is recorded (not a proposal, so it can't accidentally overwrite the asset) | `ref`, `previousUtility`, `nextUtility` |
114
153
  | `reflect_invoked` | Start of reflect phase in `akm improve` | `ref`, engine |
115
154
  | `reflect_completed` | Reflect phase produced a proposal | `ref` |
116
155
  | `improve_reflect_outcome` | Per-asset reflect result | `ref`, `ok`, `durationMs`, `reason` |
117
- | `propose_invoked` | `akm propose` | `ref` |
118
- | `distill_invoked` | `akm distill` | |
119
- | `improve_skipped` | Asset skipped by cooldown or budget | `ref`, `reason` |
120
- | `improve_completed` | `akm improve` run finished | run stats |
121
- | `improve_failed` | `akm improve` run errored | error |
122
- | `improve_lock_recovered` | Stale lock cleared at startup | |
123
- | `proposal_orphan_purge` | Stale proposals pruned | `checked`, `rejected` |
124
- | `proposal_creation_rejected` | `createProposal()` validation failed | `ref`, `reason`, `source` |
125
- | `proposal_expired` | Proposal expired | `ref` |
126
- | `events_purged` | Old events deleted by maintenance | `purgedCount`, `retentionDays` |
127
- | `workflow_started` | `akm workflow start <ref>` | `ref`, `runId` |
128
- | `workflow_step_completed` | `akm workflow next` (genuine `completed` transition only) | `ref`, `runId`, `stepId`, `status` |
129
- | `workflow_step_updated` | `akm workflow next` (non-`completed` transitions: `failed`/`skipped`/`blocked`) | `ref`, `runId`, `stepId`, `status` |
130
- | `workflow_finished` | `akm workflow complete` | `ref`, `runId` |
131
- | `schema_repair_invoked` | `akm lint --repair` triggered schema repair | `ref` |
132
- | `archive_cleanup` | Archive cleanup during consolidation | |
156
+ | `propose_invoked` | `akm proposal new` | `ref` |
157
+ | `distill_invoked` | Distill phase inside the `akm improve`/`akm proposal new` pipeline. **`akm distill` is not a CLI command** — there is no standalone verb by that name | `ref`, outcome |
158
+ | `consolidate_completed` | `akm improve`'s consolidate pass processed at least one memory | `ref` (`memories/_consolidation`) |
159
+ | `extract_invoked` | `akm proposal extract --type <harness>` / `--auto`, or improve-stage session extraction | `outcome`, `sessionId`, `harness` |
160
+ | `extract_triaged` | The pre-LLM extract triage gate evaluated at least one session | `evaluated`, `passed`, `triagedOut`, `sourceRun` (aggregated) |
161
+ | `schema_repair_invoked` | The schema-repair pass inside `akm improve` (`runSchemaRepairPass`) attempts to patch missing frontmatter on an asset that failed schema validation. **There is no `akm lint --repair` flag** — `lint` has `--fix`/`--auto-fix`, unrelated to this event | `ref`, outcome |
162
+ | `proactive_selected` | The proactive-maintenance selector runs (once per `akm improve` run) | `count`, `dueTotal`, `neverReflected` (aggregated) |
163
+ | `improve_replay_selected` | Bounded replay-budget selection ran | `count`, `budget`, `convergedSkipped`, `candidatePool` (aggregated) |
164
+ | `improve_salience_first_run` | First improve run with no pre-existing salience baseline to compare against | `candidateCount`, `note` |
165
+ | `improve_salience_rank_change` | Stash-wide rank-change report, from the second improve run onward | `stashSize`, `totalChanged`, `forgettingCandidates`, `topDrops` |
166
+ | `outcome_proxy_inverted` | Proxy-adequacy tripwire: `outcome_score` correlates *negatively* with accepted-change rate (corr < −0.3) | `correlation`, `n` |
167
+ | `outcome_proxy_dead` | Proxy-adequacy tripwire: `outcome_score` is statistically unrelated to accepted-change rate (\|corr\| < 0.1, n ≥ 500) | `correlation`, `n` |
168
+ | `collapse_detector_alert` | The collapse/churn detector trips an alert rule during an improve cycle | `kind` (collapse-recall\|collapse-entropy\|collapse-shrink\|churn\|merge-floor), `detail`, `metrics`, `canarySetId`, `runId` |
169
+ | `events_purged` | Old events deleted by improve maintenance (90-day default retention) | `purgedCount`, `retentionDays` |
170
+ | `improve_runs_purged` | Old `improve_runs` rows deleted by improve maintenance (same retention window as events) | `purgedCount`, `retentionDays` |
171
+ | `improve_cycle_metrics_purged` | Old `improve_cycle_metrics` rows (365-day retention) deleted by improve maintenance | `purgedCount`, `retentionDays` |
172
+ | `task_logs_purged` | Old scheduled-task log files purged by improve maintenance | |
173
+
174
+ *Workflows*
175
+
176
+ | Event type | When emitted | Key metadata fields |
177
+ |---|---|---|
178
+ | `workflow_started` | `akm workflow run <ref>` creates a run (including native workflow task execution) | `ref`, `runId` |
179
+ | `workflow_step_completed` | The run completion path records a genuine `completed` transition | `ref`, `runId`, `stepId`, `status` |
180
+ | `workflow_step_updated` | The run completion path records a non-`completed` transition (`failed`/`skipped`/`blocked`) | `ref`, `runId`, `stepId`, `status` |
181
+ | `workflow_finished` | A `run` transition makes the run terminal | `ref`, `runId` |
182
+ | `workflow_abandoned` | `akm workflow abandon` | `runId` only — never the workflow title |
183
+ | `workflow_unit_started` | A unit begins through `akm workflow run` | ids/status only — never unit instructions or results |
184
+ | `workflow_unit_finished` | A workflow unit terminates | ids/status/tokens only — never unit instructions or results |
185
+
186
+ *LLM usage and health*
187
+
188
+ | Event type | When emitted | Key metadata fields |
189
+ |---|---|---|
190
+ | `llm_usage` | Per-attempt LLM call usage telemetry (#576) | model provenance, terminal outcome, duration, optional token usage |
191
+ | `llm_usage_summary` | The owning LLM telemetry sink's terminal-record count marker | `expectedTerminalRecords` |
192
+ | `health_probe` | `akm health`'s state.db round-trip write/read probe. **Not durably retained**: the row is inserted then deleted within the same connection once the round trip is confirmed, so the net effect on the `events` table is always zero rows | n/a (ephemeral) |
133
193
 
134
194
  ### 2. Usage Events Table
135
195
 
136
- `usage_events` is the local analytical record behind `akm history`, utility
137
- ranking, retrieval-demand counts, GRR, and real-query eval generation. It stores
196
+ `usage_events` is the local analytical record behind utility ranking,
197
+ retrieval-demand counts, GRR, and real-query eval generation (0.9.0: its CLI
198
+ read surface, `akm history`, was removed — the table itself and everything
199
+ below still applies). It stores
138
200
  search/curate queries, per-entry search impressions, explicit show/curate
139
201
  engagement, feedback signals, stable refs, and timestamps. It never leaves the
140
202
  machine unless you explicitly copy the database or send derived content to a
141
203
  configured endpoint.
142
204
 
205
+ Successful `search`, `curate`, and `show` commands record usage by default.
206
+ Pass `--no-track-usage` to any of those commands to leave local usage events
207
+ and ranking signals unchanged.
208
+
143
209
  Every runtime writer stamps provenance as `user`, `improve`, `task`, `audit`, or
144
210
  `unknown`. Direct interactive CLI traffic defaults to `user`; internal improve,
145
211
  scheduled-task, and eval subprocesses preserve their stamp across nested
@@ -167,15 +233,15 @@ use `control: false` and may contain:
167
233
 
168
234
  Attribution metadata contains fully-qualified refs and graph identifiers, never
169
235
  asset bodies or provenance content. It is not added to `search`, `curate`, or
170
- `show` result payloads, but stored metadata is visible through
171
- `akm history --detail full`. The full index still applies its existing
236
+ `show` result payloads; there is no CLI surface that reads it back (0.9.0:
237
+ `akm history` was removed). The full index still applies its existing
172
238
  higher-priority-wins `(type, entry.name)` dedup across sources: attribution
173
239
  source-qualifies every indexed row but does not invent a lower-priority row for
174
240
  an identity that production indexing omitted.
175
241
 
176
242
  ### 3. Proposals Table
177
243
 
178
- The proposal queue: pending, accepted, and rejected improvement proposals for your stash assets. Generated by `akm improve`, `akm propose`, and related proposal-producing flows.
244
+ The proposal queue: pending, accepted, and rejected improvement proposals for your stash assets. Generated by `akm improve`, `akm proposal new`, and related proposal-producing flows.
179
245
 
180
246
  Contents:
181
247
  - Proposal UUID (primary key)
@@ -187,7 +253,7 @@ Contents:
187
253
 
188
254
  ### 4. Task History Table
189
255
 
190
- A record of scheduled task runs (from `akm tasks`):
256
+ A record of scheduled task runs (from `akm task`):
191
257
  - Task ID, status, start/end times
192
258
  - Log file path (the log content stays in `$CACHE/tasks/logs/`)
193
259
 
@@ -199,16 +265,13 @@ A record of scheduled task runs (from `akm tasks`):
199
265
 
200
266
  ```sh
201
267
  # List recent events
202
- akm log list
203
-
204
- # Stream live events (tail)
205
- akm log tail
268
+ akm log
206
269
 
207
270
  # Filter by type
208
- akm log list --type search --limit 20
271
+ akm log --type search --limit 20
209
272
 
210
273
  # Filter by asset ref
211
- akm log list --ref skills/code-review
274
+ akm log --ref skills/code-review
212
275
  ```
213
276
 
214
277
  ### Inspect proposals
@@ -234,8 +297,8 @@ rm -rf ~/.cache/akm/registry/
234
297
  rm -rf ~/.cache/akm/config-backups/
235
298
 
236
299
  # Delete the events log from state.db (non-reversible)
237
- # There is no akm CLI command to do this directly in 0.8.0.
238
- # Use SQLite directly:
300
+ # There is no akm CLI command to do this directly (`akm log` only exposes
301
+ # `list`/`tail`, no delete/purge verb). Use SQLite directly:
239
302
  sqlite3 ~/.local/share/akm/state.db "DELETE FROM events;"
240
303
 
241
304
  # Delete all proposals
@@ -264,7 +327,7 @@ You can redirect any AKM directory to a custom path:
264
327
  | `AKM_SQLITE_JOURNAL_MODE` | SQLite journal mode: `WAL` (default), `DELETE`, or `TRUNCATE`. Use `DELETE`/`TRUNCATE` on network filesystems (NFS/SMB) where WAL is impossible. When left at the `WAL` default, akm auto-detects a network FS for the data dir and falls back to `DELETE`. |
265
328
  | `AKM_STATE_DIR` | State directory (`~/.local/state/akm/`) |
266
329
  | `AKM_CACHE_DIR` | Cache directory (`~/.cache/akm/`) |
267
- | `AKM_STASH_DIR` | Default stash directory (`~/akm/`) |
330
+ | `AKM_BUNDLE_DIR` | Default stash directory (`~/akm/`) |
268
331
  | `XDG_CONFIG_HOME` | XDG base — akm appends `/akm` |
269
332
  | `XDG_DATA_HOME` | XDG base — akm appends `/akm` |
270
333
  | `XDG_STATE_HOME` | XDG base — akm appends `/akm` |