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
@@ -1,201 +0,0 @@
1
- // This Source Code Form is subject to the terms of the Mozilla Public
2
- // License, v. 2.0. If a copy of the MPL was not distributed with this
3
- // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- /**
5
- * `akm history` — surfaces internal mutation/usage events for a single asset
6
- * (`--ref`) or stash-wide.
7
- *
8
- * Event sources:
9
- * - `usage_events` SQLite table: search, show, and feedback events recorded
10
- * by the local indexer during normal CLI use.
11
- * - `events.jsonl` append-only stream (opt-in via `--include-proposals`):
12
- * proposal lifecycle events (`promoted`, `rejected`) emitted by
13
- * `akm proposal accept` / `akm proposal reject`. Use this flag to see
14
- * the full proposal review trail alongside usage events.
15
- *
16
- * The two sources are merged and sorted chronologically (oldest first) so
17
- * consumers see a coherent lifecycle trail in a single output.
18
- */
19
- import { parseRefInput } from "../../core/asset/resolve-ref.js";
20
- import { UsageError } from "../../core/errors.js";
21
- import { readEvents } from "../../core/events.js";
22
- import { openStateDatabase } from "../../core/state-db.js";
23
- import { isoToSqlite, parseSinceToIso } from "../../core/time.js";
24
- import { getUsageEvents } from "../../indexer/usage/usage-events.js";
25
- import { listProposals } from "../proposal/repository.js";
26
- // Proposal lifecycle event types emitted by the proposal substrate (#225).
27
- const PROPOSAL_EVENT_TYPES = new Set(["promoted", "rejected"]);
28
- // ── Helpers ──────────────────────────────────────────────────────────────────
29
- function parseMetadata(raw) {
30
- if (!raw)
31
- return null;
32
- try {
33
- return JSON.parse(raw);
34
- }
35
- catch {
36
- return raw;
37
- }
38
- }
39
- function toEntry(row) {
40
- return {
41
- id: row.id,
42
- eventType: row.event_type,
43
- ref: row.entry_ref,
44
- entryId: row.entry_id,
45
- query: row.query,
46
- signal: row.signal,
47
- source: row.source,
48
- metadata: parseMetadata(row.metadata),
49
- createdAt: row.created_at,
50
- };
51
- }
52
- /**
53
- * Convert an ISO timestamp from events.jsonl ("2026-04-01T12:00:00.000Z")
54
- * to the SQLite-style format used in HistoryEntry.createdAt
55
- * ("2026-04-01 12:00:00") so entries sort consistently.
56
- */
57
- function isoToSqliteTimestamp(ts) {
58
- // Normalise to the "YYYY-MM-DD HH:MM:SS" format used by usage_events rows.
59
- return ts
60
- .replace("T", " ")
61
- .replace(/\.\d+Z$/, "")
62
- .replace("Z", "");
63
- }
64
- // ── Main ─────────────────────────────────────────────────────────────────────
65
- /**
66
- * Read mutation/usage history. When `ref` is provided, results are filtered to
67
- * that asset (validated via the ref parser). Always returns chronological
68
- * order (oldest first) so consumers can display a lifecycle trail.
69
- *
70
- * When `includeProposals` is true, proposal lifecycle events (`promoted`,
71
- * `rejected`) from events.jsonl are merged into the result set. This provides
72
- * one coherent view of both usage signals and proposal review decisions.
73
- */
74
- export async function akmHistory(options = {}) {
75
- let normalizedRef;
76
- if (options.ref !== undefined) {
77
- const trimmed = options.ref.trim();
78
- if (!trimmed) {
79
- throw new UsageError("--ref cannot be empty.", "INVALID_FLAG_VALUE");
80
- }
81
- // Validate the ref grammar with the DUAL stored-ref parser (accepting BOTH
82
- // the 0.9.0 `[bundle//]conceptId` and the legacy `[origin//]type:name`
83
- // forms); getUsageEvents bridges the stored entry_ref across both spellings,
84
- // so the user gets back exactly the asset they asked for regardless of which
85
- // grammar they typed.
86
- parseRefInput(trimmed);
87
- normalizedRef = trimmed;
88
- }
89
- const sinceNormalized = options.since !== undefined ? isoToSqlite(parseSinceToIso(options.since)) : undefined;
90
- // usage_events lives in state.db (Chunk-8 WI-8.3); getUsageEvents reads it
91
- // there (no entries join), so `history` opens state.db, not index.db.
92
- const db = options.db ?? openStateDatabase();
93
- const ownsDb = options.db === undefined;
94
- try {
95
- const rows = getUsageEvents(db, {
96
- entry_ref: normalizedRef,
97
- since: sinceNormalized,
98
- source: options.source,
99
- });
100
- const usageEntries = rows.map(toEntry);
101
- // ── Proposal lifecycle events (opt-in) ────────────────────────────────
102
- const sources = ["usage_events"];
103
- const proposalEntries = [];
104
- if (options.includeProposals === true) {
105
- sources.push("state.db");
106
- // Convert sinceNormalized ("YYYY-MM-DD HH:MM:SS") to ISO for readEvents
107
- // which uses `ts >= since` where `ts` is ISO-8601.
108
- const sinceIso = sinceNormalized !== undefined ? `${sinceNormalized.replace(" ", "T")}Z` : undefined;
109
- const { events } = readEvents({
110
- since: sinceIso,
111
- ref: normalizedRef,
112
- }, options.eventsCtx);
113
- // Keep only proposal lifecycle event types.
114
- let counter = -1_000_000; // negative ids mark proposal-stream entries
115
- for (const event of events) {
116
- if (!PROPOSAL_EVENT_TYPES.has(event.eventType))
117
- continue;
118
- const createdAt = event.ts ? isoToSqliteTimestamp(event.ts) : "";
119
- // Skip if before `since` (readEvents already filters by ts >= since,
120
- // but the isoToSqliteTimestamp conversion may introduce drift so we
121
- // guard again with the normalised form).
122
- if (sinceNormalized !== undefined && createdAt < sinceNormalized)
123
- continue;
124
- proposalEntries.push({
125
- id: counter--,
126
- eventType: event.eventType,
127
- ref: event.ref ?? null,
128
- entryId: null,
129
- query: null,
130
- signal: null,
131
- source: null,
132
- metadata: event.metadata ?? null,
133
- createdAt,
134
- });
135
- }
136
- }
137
- // ── Merge and sort ────────────────────────────────────────────────────
138
- const entries = [...usageEntries, ...proposalEntries].sort((a, b) => {
139
- // Primary sort: chronological by createdAt (string compare is safe for
140
- // "YYYY-MM-DD HH:MM:SS" format). Secondary sort: id ascending for ties.
141
- if (a.createdAt < b.createdAt)
142
- return -1;
143
- if (a.createdAt > b.createdAt)
144
- return 1;
145
- return a.id - b.id;
146
- });
147
- // ── Accept-rate-per-source (F-4 / #385) ─────────────────────────────────
148
- let acceptRateBySource;
149
- if (options.acceptRateBySource) {
150
- const stashDir = options.stashDir;
151
- if (stashDir) {
152
- const bySource = new Map();
153
- const countProposals = (statuses, includeArchive) => {
154
- for (const status of statuses) {
155
- const proposals = listProposals(stashDir, { status, includeArchive });
156
- for (const p of proposals) {
157
- const src = p.source || "(unknown)";
158
- const entry = bySource.get(src) ?? { accepted: 0, rejected: 0, pending: 0 };
159
- if (status === "accepted")
160
- entry.accepted++;
161
- else if (status === "rejected")
162
- entry.rejected++;
163
- else
164
- entry.pending++;
165
- bySource.set(src, entry);
166
- }
167
- }
168
- };
169
- countProposals(["pending"], false);
170
- countProposals(["accepted", "rejected"], true);
171
- acceptRateBySource = Array.from(bySource.entries())
172
- .map(([source, counts]) => {
173
- const decided = counts.accepted + counts.rejected;
174
- return {
175
- source,
176
- total: decided + counts.pending,
177
- accepted: counts.accepted,
178
- rejected: counts.rejected,
179
- pending: counts.pending,
180
- acceptRate: decided > 0 ? counts.accepted / decided : null,
181
- };
182
- })
183
- .sort((a, b) => b.total - a.total); // Most active source first
184
- }
185
- }
186
- const response = {
187
- schemaVersion: 1,
188
- ...(normalizedRef !== undefined ? { ref: normalizedRef } : {}),
189
- ...(sinceNormalized !== undefined ? { since: sinceNormalized } : {}),
190
- totalCount: entries.length,
191
- entries,
192
- sources,
193
- ...(acceptRateBySource !== undefined ? { acceptRateBySource } : {}),
194
- };
195
- return response;
196
- }
197
- finally {
198
- if (ownsDb)
199
- db.close();
200
- }
201
- }
@@ -1,186 +0,0 @@
1
- // This Source Code Form is subject to the terms of the Mozilla Public
2
- // License, v. 2.0. If a copy of the MPL was not distributed with this
3
- // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- /**
5
- * Default scheduled-task set for the improve pipeline (issue #552).
6
- *
7
- * Ships a well-tuned multi-cadence task set so a typical single-developer
8
- * install is correct with zero manual config. Registration is **idempotent**:
9
- * running `akm setup` / `akm tasks init` twice yields the same task set with no
10
- * duplicates. Each default task is a shell-command task (`akm improve --strategy
11
- * <name>`), so the strategy is overridable in `config.json` without editing the
12
- * task definition.
13
- *
14
- * The OS-scheduler-touching primitives (`add` / `setEnabled` / `list`) are
15
- * injected via {@link RegisterDefaultTasksDeps} so tests can supply fakes and
16
- * never mutate the host scheduler or a real stash — mirroring the
17
- * dependency-injection pattern used by `stepScheduledTasks` in setup.ts.
18
- */
19
- import fs from "node:fs";
20
- import os from "node:os";
21
- import { akmTasksAdd, akmTasksList } from "./tasks.js";
22
- /**
23
- * The canonical default improve task set. The `update-stashes` embedded core
24
- * template (nightly `akm update --all`) was retired in meta-review 06-M2:
25
- * third-party stash pulls are on-demand only now, not a scheduled cron.
26
- */
27
- export const DEFAULT_IMPROVE_TASKS = [
28
- {
29
- id: "akm-improve-frequent",
30
- strategy: "frequent",
31
- command: "akm improve --strategy frequent --skip-if-locked",
32
- schedule: "40 * * * *",
33
- description: "Frequent inference pass (hourly at :40; improve-stage extract off)",
34
- enableMode: "always",
35
- },
36
- {
37
- id: "akm-improve-consolidate",
38
- strategy: "consolidate",
39
- command: "akm improve --strategy consolidate --skip-if-locked",
40
- schedule: "20 */4 * * *",
41
- description: "Consolidation-only pass (every 4h at :20)",
42
- enableMode: "always",
43
- },
44
- {
45
- id: "akm-improve-nightly",
46
- strategy: "thorough",
47
- command: "akm improve --strategy thorough --skip-if-locked",
48
- schedule: "15 2 * * *",
49
- description: "Full nightly quality sweep (daily 2:15am)",
50
- enableMode: "server",
51
- },
52
- {
53
- id: "akm-improve-catchup",
54
- strategy: "catchup",
55
- command: "akm improve --strategy catchup --skip-if-locked",
56
- schedule: null,
57
- description: "Manual recovery — consolidation + triage drain (run on demand)",
58
- enableMode: "manual",
59
- },
60
- {
61
- id: "akm-graph-refresh-weekly",
62
- strategy: "graph-refresh",
63
- command: "akm improve --strategy graph-refresh --skip-if-locked",
64
- schedule: "10 3 * * 0",
65
- description: "Full-corpus graph rebuild (weekly Sunday 3:10am)",
66
- enableMode: "always",
67
- },
68
- ];
69
- /**
70
- * A schedule for the manual catch-up task. The scheduler requires a portable
71
- * expression even when the task is registered disabled, so we give it a
72
- * nominal daily cadence and leave it disabled. The documented entry point is
73
- * `akm tasks run akm-improve-catchup`.
74
- */
75
- const MANUAL_TASK_NOMINAL_SCHEDULE = "0 4 * * *";
76
- const DEFAULT_DEPS = {
77
- list: akmTasksList,
78
- add: akmTasksAdd,
79
- };
80
- let defaultTasksOverrides;
81
- /** TEST-ONLY. Swap the CI/server/register functions; pass undefined to restore. */
82
- export function _setDefaultTasksForTests(fakes) {
83
- defaultTasksOverrides = fakes;
84
- }
85
- /**
86
- * Decide whether `akm setup` is running in a CI environment, where it must
87
- * register NO scheduled tasks. Mirrors the common `CI=true` convention used by
88
- * GitHub Actions, GitLab CI, CircleCI, etc.
89
- */
90
- export function isCiEnvironment(env = process.env) {
91
- if (defaultTasksOverrides?.isCiEnvironment)
92
- return defaultTasksOverrides.isCiEnvironment(env);
93
- const ci = env.CI;
94
- if (ci === undefined || ci === null)
95
- return false;
96
- const v = String(ci).trim().toLowerCase();
97
- return v !== "" && v !== "0" && v !== "false";
98
- }
99
- /**
100
- * Platform-appropriate default for the "Is this a server install?" prompt:
101
- * - Linux without a battery → `true` (server).
102
- * - macOS / any host with a battery (laptop) → `false`.
103
- * Used as the default when setup is non-interactive (no TTY / --yes / CI).
104
- */
105
- export function detectServerDefault() {
106
- if (defaultTasksOverrides?.detectServerDefault)
107
- return defaultTasksOverrides.detectServerDefault();
108
- if (os.platform() !== "linux")
109
- return false;
110
- // A laptop exposes a battery under /sys/class/power_supply/BAT*. Absence of
111
- // any battery is our heuristic for "server / desktop".
112
- try {
113
- const entries = fs.readdirSync("/sys/class/power_supply");
114
- const hasBattery = entries.some((e) => /^BAT/i.test(e));
115
- return !hasBattery;
116
- }
117
- catch {
118
- // If we cannot read power-supply info, prefer the safe server default on
119
- // Linux (the nightly sweep is low-impact and re-runnable).
120
- return true;
121
- }
122
- }
123
- /**
124
- * Idempotently register the default improve task set.
125
- *
126
- * - Skips entirely when `CI` is set (returns `{ skipped: true, reason: "ci" }`).
127
- * - Creates any missing task; never duplicates an existing one.
128
- * - Re-aligns the enabled-state of existing tasks to the desired default only
129
- * when the install is fresh-creating them (existing tasks the user may have
130
- * toggled are left untouched — we only toggle tasks we just created, plus we
131
- * never re-disable a user-enabled task).
132
- */
133
- export async function registerDefaultTasks(options = {}) {
134
- if (defaultTasksOverrides?.registerDefaultTasks) {
135
- return defaultTasksOverrides.registerDefaultTasks(options);
136
- }
137
- if (isCiEnvironment()) {
138
- return { skipped: true, reason: "ci", created: [], existing: [], toggled: [] };
139
- }
140
- const deps = options.deps ?? DEFAULT_DEPS;
141
- const serverInstall = options.serverInstall ?? detectServerDefault();
142
- let installed = [];
143
- try {
144
- installed = (await deps.list()).tasks;
145
- }
146
- catch {
147
- installed = [];
148
- }
149
- const existingIds = new Set(installed.map((t) => t.id));
150
- const created = [];
151
- const existing = [];
152
- const toggled = [];
153
- for (const spec of DEFAULT_IMPROVE_TASKS) {
154
- const desiredEnabled = resolveDesiredEnabled(spec, serverInstall);
155
- if (existingIds.has(spec.id)) {
156
- // Idempotent: never re-create. Leave the existing task in place.
157
- existing.push(spec.id);
158
- continue;
159
- }
160
- const schedule = spec.schedule ?? MANUAL_TASK_NOMINAL_SCHEDULE;
161
- const addInput = {
162
- id: spec.id,
163
- schedule,
164
- command: spec.command,
165
- description: spec.description,
166
- // Manual + non-server-enabled tasks are written disabled so the
167
- // scheduler entry is inert until the user opts in / runs it manually.
168
- disabled: !desiredEnabled,
169
- };
170
- await deps.add(addInput);
171
- created.push(spec.id);
172
- if (desiredEnabled)
173
- toggled.push(spec.id);
174
- }
175
- return { skipped: false, created, existing, toggled };
176
- }
177
- function resolveDesiredEnabled(spec, serverInstall) {
178
- switch (spec.enableMode) {
179
- case "always":
180
- return true;
181
- case "server":
182
- return serverInstall;
183
- case "manual":
184
- return false;
185
- }
186
- }