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
@@ -28,24 +28,12 @@ function refType(ref) {
28
28
  const body = ref.includes("//") ? ref.slice(ref.indexOf("//") + 2) : ref;
29
29
  // 0.9.0 conceptId `<stash-subdir>/<name>`: delegate to the D-R2 reverse table
30
30
  // so the leading stash subdir maps back to its asset type (the canonical path).
31
- const conceptType = typeNameFromConceptId(body)?.type;
32
- if (conceptType !== undefined)
33
- return conceptType;
34
- // DOCUMENTED EXCEPTION (ref-grammar decision D-R3 migration window): a tolerant
35
- // legacy `type:name` arm survives ONLY because live callers still hand this
36
- // recognition-only seam the old spelling — `propose.ts` builds
37
- // `${options.type}:${options.name}`, and a pre-migration stored ref may still
38
- // reach here before the 0.10.0 grammar removal. It never crosses a storage
39
- // boundary, so it stays until those feeders flip.
40
- const colon = body.indexOf(":");
41
- if (colon > 0)
42
- return body.slice(0, colon).trim() || undefined;
43
- return undefined;
31
+ return typeNameFromConceptId(body)?.type;
44
32
  }
45
33
  /**
46
34
  * Resolve the standards context for a write target identified by its asset ref.
47
35
  *
48
- * @param ref Canonical asset ref of the write target (e.g. `skill:foo`).
36
+ * @param ref Canonical asset ref of the write target (e.g. `skills/foo`).
49
37
  * When undefined, the target is a general authoring flow.
50
38
  * @param stashRoot Stash root directory.
51
39
  */
@@ -53,14 +53,14 @@ function collectMarkdownFiles(dir) {
53
53
  return results;
54
54
  }
55
55
  /**
56
- * Derive a fact ref (`fact:conventions/naming`) from an absolute markdown path
56
+ * Derive a fact ref (`facts/conventions/naming`) from an absolute markdown path
57
57
  * relative to the facts root. Mirrors the canonical-name derivation in
58
58
  * `asset-spec.ts` (POSIX separators, `.md` stripped).
59
59
  */
60
60
  function toFactRef(factsRoot, absPath) {
61
61
  const rel = path.relative(factsRoot, absPath).split(path.sep).join("/");
62
62
  const name = rel.endsWith(".md") ? rel.slice(0, -3) : rel;
63
- return `fact:${name}`;
63
+ return `${FACTS_SUBDIR}/${name}`;
64
64
  }
65
65
  export function resolveStashStandards(stashRoot) {
66
66
  const factsRoot = path.join(stashRoot, FACTS_SUBDIR);
@@ -28,9 +28,9 @@ import { placementTypes } from "../asset/asset-placement.js";
28
28
  import { parseFrontmatter } from "../asset/frontmatter.js";
29
29
  /** Sub-path (under the stash root) for per-type SOFT convention facts. */
30
30
  export const TYPE_CONVENTIONS_SUBDIR = path.join("facts", "conventions", "assets");
31
- /** The `fact:` ref prefix for a per-type convention, e.g. `fact:conventions/assets/skill`. */
31
+ /** The slash conceptId for a per-type convention, e.g. `facts/conventions/assets/skill`. */
32
32
  export function typeConventionRef(type) {
33
- return `fact:conventions/assets/${type}`;
33
+ return `facts/conventions/assets/${type}`;
34
34
  }
35
35
  /**
36
36
  * Read the SOFT authoring-convention body for asset type `type`, if a stash
@@ -1,7 +1,7 @@
1
1
  // This Source Code Form is subject to the terms of the Mozilla Public
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
- import { runMigrations as runSqliteMigrations } from "../../storage/engines/sqlite-migrations.js";
4
+ import { assertMigrationRegistry, runMigrations as runSqliteMigrations, } from "../../storage/engines/sqlite-migrations.js";
5
5
  export const STATE_MIGRATIONS = [
6
6
  // ── Migration 001 — initial schema ──────────────────────────────────────────
7
7
  {
@@ -59,7 +59,7 @@ export const STATE_MIGRATIONS = [
59
59
  -- id TEXT PK — UUID (crypto.randomUUID()); stable directory name.
60
60
  -- stash_dir TEXT — absolute stash root; multi-stash installs need
61
61
  -- this to partition proposal lists per stash.
62
- -- ref TEXT — target asset ref (e.g. "lesson:alpha");
62
+ -- ref TEXT — target asset ref (e.g. "lessons/alpha");
63
63
  -- indexed for ref-scoped queue views.
64
64
  -- status TEXT — "pending" | "accepted" | "rejected"; indexed
65
65
  -- so pending-queue queries are fast.
@@ -76,7 +76,7 @@ export const STATE_MIGRATIONS = [
76
76
  -- metadata_json TEXT — JSON object for future proposal fields.
77
77
  -- Current fields stored here: sourceRun,
78
78
  -- review, confidence, gateDecision (#577),
79
- -- backupContent, eligibilitySource.
79
+ -- backupContent.
80
80
  --
81
81
  -- ADD COLUMN extension points (future migrations):
82
82
  -- ALTER TABLE proposals ADD COLUMN source_run TEXT DEFAULT NULL;
@@ -350,11 +350,12 @@ export const STATE_MIGRATIONS = [
350
350
  //
351
351
  // VESTIGIAL as of the Chunk-8 fold: the legacy `proposal.json` import moved
352
352
  // OUT of the live per-operation path and INTO the one-time migrator
353
- // (`src/migrate/legacy/proposal-fs-import.ts`, wired through `akm migrate apply`),
353
+ // (`scripts/akm-migrate/migrate/legacy/proposal-fs-import.ts`, wired through
354
+ // `akm-migrate apply`),
354
355
  // whose idempotency is INSERT OR IGNORE on the proposal UUID plus migrate-apply's
355
- // own journal — it no longer reads or writes this ledger. The CREATE TABLE
356
- // stays because the migration registry is APPEND-ONLY and checksum-sealed:
357
- // removing a released fragment would make the schema_migrations ledger of an
356
+ // incomplete sentinel — it no longer reads or writes this ledger. The CREATE TABLE
357
+ // stays because migration IDs are append-only: removing a released migration
358
+ // would make the schema_migrations ledger of an
358
359
  // already-migrated rc database stop being an exact ordered prefix, and the
359
360
  // runner would refuse to open it. The empty table is harmless.
360
361
  //
@@ -832,17 +833,17 @@ export const STATE_MIGRATIONS = [
832
833
  //
833
834
  // The state.db half of the three-DB merge (plan §3.2/§8, normative §11.4,
834
835
  // chunk-8 cutover design §1). This migration is PURE,
835
- // SEALABLE, IDEMPOTENT DDL ONLY — `CREATE TABLE IF NOT EXISTS` (+ indexes),
836
+ // IDEMPOTENT DDL ONLY — `CREATE TABLE IF NOT EXISTS` (+ indexes),
836
837
  // never a DROP or a data move. The actual data movement (the workflow.db merge,
837
838
  // the usage_events rescue from index.db, the full old-ref→item_ref re-key, and
838
- // the workflow.db delete / index.db quarantine) is CODE — a journaled step of
839
- // the migrate-apply flow (`src/cli/config-migrate.ts` `cutover-applied` phase),
840
- // driven by `src/migrate/legacy/three-db-cutover.ts`. See the no-DROP contract
841
- // carve-out note in `src/core/state-db.ts`.
839
+ // the workflow.db delete / index.db quarantine) is idempotent migrate-apply
840
+ // code driven by
841
+ // `scripts/akm-migrate/migrate/legacy/three-db-cutover.ts`. See the no-DROP
842
+ // contract carve-out note in `src/core/state-db.ts`.
842
843
  //
843
844
  // The three workflow tables are the 10 pre-cutover workflow migrations
844
- // (the frozen `src/migrate/legacy/workflow-migrations-bodies.ts` base schema +
845
- // 001–010) folded into one baseline at their FINAL post-010 shape — column
845
+ // (the frozen `scripts/akm-migrate/migrate/legacy/workflow-migrations-bodies.ts`
846
+ // base schema + 001–010) folded into one baseline at their FINAL post-010 shape — column
846
847
  // lists, CHECK constraints, and indexes copied verbatim. `usage_events` mirrors
847
848
  // index.db's former `ensureUsageEventsSchema` (`src/indexer/usage/usage-events.ts`),
848
849
  // its new durable home. `legacy_state` mirrors `ensureLegacyStateTable`
@@ -958,7 +959,32 @@ export const STATE_MIGRATIONS = [
958
959
  );
959
960
  `,
960
961
  },
962
+ // ── Migration 021 — asset_salience / asset_outcome: missing_since (#733) ────
963
+ //
964
+ // Orphan-GC grace clock (Workstream C / #733,
965
+ // docs/architecture/specs/0.9.0-close-out-plan.md). Neither table carries a
966
+ // column that records when a row's ref STOPPED resolving against
967
+ // `entries.item_ref` — `updated_at` is bumped by improve itself on every
968
+ // touch, so it cannot double as a "went missing" timestamp.
969
+ //
970
+ // `missing_since` is stamped by `runOrphanStateGcPass`
971
+ // (src/commands/improve/loop-stages.ts) the first time a row's ref fails to
972
+ // resolve against the live index, cleared the moment the ref resolves
973
+ // again, and used to gate deletion once `STATE_GC_GRACE_MS` (7 days) has
974
+ // elapsed — and ONLY when `improve.stateGc.collect` is true (default
975
+ // false). Mirrors the additive ADD-COLUMN style of migration 011.
976
+ //
977
+ // NULL = never missing (the steady-state default for every existing row —
978
+ // both a fresh row and a pre-migration row read back NULL here).
979
+ {
980
+ id: "021-asset-state-missing-since",
981
+ up: `
982
+ ALTER TABLE asset_salience ADD COLUMN missing_since INTEGER DEFAULT NULL;
983
+ ALTER TABLE asset_outcome ADD COLUMN missing_since INTEGER DEFAULT NULL;
984
+ `,
985
+ },
961
986
  ];
987
+ assertMigrationRegistry(STATE_MIGRATIONS);
962
988
  /**
963
989
  * Apply every pending migration in a single transaction per migration.
964
990
  *
@@ -968,8 +994,5 @@ export const STATE_MIGRATIONS = [
968
994
  * Called automatically by `openStateDatabase()`.
969
995
  */
970
996
  export function runMigrations(db, options) {
971
- runSqliteMigrations(db, STATE_MIGRATIONS, {
972
- applyPending: options?.applyPending,
973
- generationMarker: options?.generationMarker,
974
- });
997
+ runSqliteMigrations(db, STATE_MIGRATIONS, { applyPending: options?.applyPending });
975
998
  }
@@ -45,11 +45,10 @@
45
45
  * merge-target tables at their final shape. The one-time, filesystem-derived,
46
46
  * fail-closed DATA movement (the workflow.db merge, the usage_events rescue, the
47
47
  * full old-ref→item_ref re-key, and the workflow.db unlink / index.db quarantine
48
- * rename) is deliberately NOT a sealed SQL migration body: it is a journaled step
49
- * of the migrate-apply coordinator (`src/cli/config-migrate.ts` `cutover-applied`
50
- * phase `src/migrate/legacy/three-db-cutover.ts`). So the no-DROP contract here
51
- * is intact the physical workflow.db deletion happens outside the ledger DDL,
52
- * under the backup-verified-restorable fail-closed gate.
48
+ * rename) runs as idempotent code in the migrate-apply coordinator
49
+ * (`scripts/akm-migrate/migrate/legacy/three-db-cutover.ts`). So the no-DROP
50
+ * contract here is intact: physical workflow.db deletion happens outside the
51
+ * ledger DDL, after a verified backup and committed data transaction.
53
52
  *
54
53
  * ## Schema design: indexed columns vs. metadata_json
55
54
  *
@@ -73,7 +72,7 @@ import fs from "node:fs";
73
72
  import path from "node:path";
74
73
  import { openDatabase } from "../storage/database.js";
75
74
  import { assertCurrentMigrationLedger, assertMigrationLedger } from "../storage/engines/sqlite-migrations.js";
76
- import { openManagedDatabase, withManagedDb, withManagedDbAsync } from "../storage/managed-db.js";
75
+ import { openManagedDatabase, withManagedDb } from "../storage/managed-db.js";
77
76
  import { acquireMaintenanceActivitySync } from "./maintenance-barrier.js";
78
77
  import { assertNoPendingMigrationOperation } from "./migration-operation.js";
79
78
  import { getDataDir } from "./paths.js";
@@ -182,14 +181,6 @@ export function openStateDatabase(dbPath) {
182
181
  export function withStateDb(fn, opts) {
183
182
  return withManagedDb(() => openStateDatabase(opts?.path), fn, opts);
184
183
  }
185
- /**
186
- * Async sibling of {@link withStateDb} — for `fn`s that hold the handle across
187
- * an `await` (the sync version would close it too early). Same borrow/own +
188
- * optional `path` override semantics.
189
- */
190
- export function withStateDbAsync(fn, opts) {
191
- return withManagedDbAsync(() => openStateDatabase(opts?.path), fn, opts);
192
- }
193
184
  /**
194
185
  * Fire-and-forget telemetry write to state.db (Chunk-8 WI-8.3: usage_events'
195
186
  * durable home). Skips entirely when state.db does not exist yet (never
@@ -15,7 +15,7 @@
15
15
  *
16
16
  * Layering: this file lives in `core/` — NOT `llm/` — because the agent path
17
17
  * must be able to reach it and `agent/ ⇏ llm/` is an enforced invariant
18
- * (`tests/architecture/agent-no-llm-sdk-guard.test.ts`). The transport is
18
+ * (`tests/integration/architecture/agent-no-llm-sdk-guard.test.ts`). The transport is
19
19
  * always injected; this module never performs IO of its own.
20
20
  *
21
21
  * Retry semantics: only parse/validation misses are retried (with corrective
@@ -148,6 +148,7 @@ export async function readStream(stream, opts) {
148
148
  }
149
149
  }
150
150
  const EMPTY_READ = { text: "", timedOut: false };
151
+ const UNBOUNDED_STREAM_READ_SAFETY_MS = 60 * 60 * 1000;
151
152
  function toError(err) {
152
153
  return err instanceof Error ? err : new Error(String(err));
153
154
  }
@@ -238,10 +239,11 @@ export async function runManagedSubprocess(cmd, opts) {
238
239
  else
239
240
  abortSignal.addEventListener("abort", onAbort, { once: true });
240
241
  }
241
- // Stream-drain timeout: the wall budget plus a 2 s grace, or 30 s when there
242
- // is no kill timer. Ensures the caller never hangs past the budget even if a
243
- // killed child leaves a pipe write-end open in a background thread.
244
- const streamDrainTimeoutMs = timeoutMs !== null ? timeoutMs + 2_000 : 30_000;
242
+ // Stream-drain timeout: the wall budget plus a 2 s grace, or a one-hour
243
+ // safety bound when execution itself is unbounded. This timer starts with
244
+ // capture, so the null-timeout path must not impose a short hidden deadline
245
+ // on an otherwise healthy long-running process.
246
+ const streamDrainTimeoutMs = timeoutMs !== null ? timeoutMs + 2_000 : UNBOUNDED_STREAM_READ_SAFETY_MS;
245
247
  const stdoutPromise = capture
246
248
  ? readStream(proc.stdout ?? null, {
247
249
  timeoutMs: streamDrainTimeoutMs,
@@ -9,9 +9,11 @@
9
9
  * implementations historically maintained overlapping-but-not-identical
10
10
  * vocabularies of hanging-connector words, which was a maintenance trap.
11
11
  *
12
- * This module is the single source of truth. `distill` continues to layer its
13
- * own section-heading regex on top (those patterns are distill-specific and
14
- * intentionally stay local to that module).
12
+ * This module is the single source of truth. A separate section-heading regex
13
+ * (`HEADING_FRAGMENT_PATTERNS` in
14
+ * `src/commands/proposal/validators/proposal-quality-validators.ts`) layers on
15
+ * top of these heuristics and is shared across distill, consolidate, and
16
+ * reflect rather than staying local to any one of them.
15
17
  */
16
18
  /**
17
19
  * Words that, when ending a sentence, suggest the description was truncated
@@ -87,8 +89,10 @@ export const TRUNCATION_TRAILING_WORDS = new Set([
87
89
  * - Trailing ellipsis (`...` or `…`)
88
90
  * - Last word matches {@link TRUNCATION_TRAILING_WORDS}
89
91
  *
90
- * Does NOT detect section-heading fragments — that check is distill-specific
91
- * and lives in `src/commands/distill.ts` (`HEADING_FRAGMENT_PATTERNS`).
92
+ * Does NOT detect section-heading fragments — that check lives in
93
+ * `HEADING_FRAGMENT_PATTERNS` in
94
+ * `src/commands/proposal/validators/proposal-quality-validators.ts`, shared by
95
+ * distill, consolidate, and reflect.
92
96
  */
93
97
  export function detectTruncatedDescription(description) {
94
98
  const trimmed = description.trim();
@@ -38,7 +38,7 @@ function shellQuote(value) {
38
38
  }
39
39
  /** Reproduced from `output/renderers.ts#buildWorkflowAction` — the one function-valued `ACTION_BUILDERS.workflow` entry. */
40
40
  function buildWorkflowAction(ref) {
41
- return `Resume the active run or start a new run with \`akm workflow next ${shellQuote(ref)}\`.`;
41
+ return `Start or resume execution with \`akm workflow run ${shellQuote(ref)}\`.`;
42
42
  }
43
43
  /**
44
44
  * Exhaustive over {@link KnownType} — a HAND-WRITTEN literal, not derived
@@ -74,7 +74,7 @@ export const TYPE_PRESENTATION = {
74
74
  secret: {
75
75
  label: "Secret",
76
76
  renderer: "secret-file",
77
- action: (ref) => `akm show ${ref} -> name only (value never shown); akm secret path ${ref} -> file path; akm secret run ${ref} <VAR> -- <command> -> run with value injected into $VAR`,
77
+ action: (ref) => `akm show ${ref} -> name only (value never shown); akm secret run ${ref} <VAR> -- <command> -> run with value injected into $VAR`,
78
78
  },
79
79
  lesson: {
80
80
  label: "Lesson",
@@ -84,7 +84,7 @@ export const TYPE_PRESENTATION = {
84
84
  task: {
85
85
  label: "Task",
86
86
  renderer: "task-yaml",
87
- action: (ref) => `akm tasks show ${ref.replace(/^task:/, "")} -> inspect; akm tasks run <id> -> run now; akm tasks remove <id> -> unschedule`,
87
+ action: (ref) => `akm show ${ref} -> inspect; akm task run <id> -> run now; edit the file + akm task sync -> unschedule`,
88
88
  },
89
89
  session: {
90
90
  label: "Session",
package/dist/core/warn.js CHANGED
@@ -78,9 +78,6 @@ export function setLogFile(filePath) {
78
78
  export function clearLogFile() {
79
79
  logFilePath = undefined;
80
80
  }
81
- export function getLogFile() {
82
- return logFilePath;
83
- }
84
81
  function appendToLogFile(level, args) {
85
82
  if (!logFilePath)
86
83
  return;