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,6 +1,6 @@
1
1
  # akm CLI
2
2
 
3
- You have access to a searchable library of scripts, skills, commands, agents, knowledge documents, workflows, and memories via `akm`. Search your sources first before writing something from scratch.
3
+ You have access to a searchable library of scripts, skills, commands, agents, knowledge documents, workflows, env files, secrets, lessons, and memories via `akm`. Search your sources first before writing something from scratch.
4
4
 
5
5
  ## Agent Task Loop
6
6
 
@@ -8,15 +8,15 @@ For any task, follow this loop:
8
8
  1. `akm curate "<task>"` — find the best matching asset
9
9
  2. `akm show <ref>` — read the schema (field names and structure)
10
10
  3. Edit the workspace file using schema field names + task-specific values from your README
11
- 4. `akm feedback <ref> --positive` — record success
11
+ 4. `akm feedback <ref> --positive` — record success; use `--negative --reason "..."` when it fails
12
12
 
13
13
  For workflow tasks:
14
- 1. `akm workflow next workflows/<name>` — get current step instructions
15
- 2. Do the step work in your workspace
16
- 3. `akm workflow complete <run-id> --step <step-id>` mark done, get next step
14
+ 1. `akm show workflows/<name>` — inspect the procedure before executing it
15
+ 2. `akm workflow run workflows/<name> --param_name=value` — execute every step and verification gate
16
+ 3. `akm workflow status <run-id> --units`inspect a stopped or failed run
17
17
 
18
18
  Workflow runs are scoped to your current project/worktree/directory. Ref-based
19
- commands like `workflow next workflows/<name>`, `workflow status workflows/<name>`,
19
+ commands like `workflow run workflows/<name>`, `workflow status workflows/<name>`,
20
20
  and `workflow list` operate within the current scope only.
21
21
 
22
22
  ## Quick Reference
@@ -25,27 +25,27 @@ and `workflow list` operate within the current scope only.
25
25
  akm search "<query>" # Search all sources
26
26
  akm curate "<task>" # Curate the best matches for a task
27
27
  akm search "<query>" --type workflow # Filter to workflow assets
28
- akm search "memory:projectA/" # List a typed subtree (ref-prefix query; trailing slash required)
29
- akm search "<query>" --source both # Also search registries
28
+ akm search "memories/projectA/" # List a subtree (conceptId prefix; trailing slash required)
29
+ akm search "<query>" --from all # Also search registries
30
30
  akm show <ref> # View asset details
31
- akm workflow next <ref> # Start or resume a workflow
32
- akm remember "Deployment needs VPN access" # Record a memory in your stash
33
- akm remember "note" --target my-stash # Route write to a named writable stash source
31
+ akm help <command> # Show a command's options and subcommands
32
+ akm workflow run <ref> # Start or resume and execute a workflow
33
+ akm remember "Deployment needs VPN access" # Record a memory in your bundle
34
+ akm remember "note" --bundle my-bundle # Route write to a named writable bundle source
34
35
  akm remember "note" --xref knowledge/auth-flow # Cite provenance in frontmatter xrefs (repeatable)
35
36
  akm remember "fix" --supersedes memories/old-note # Write a correction AND demote the superseded asset
36
- akm import ./notes/release-checklist.md # Import a knowledge doc into your stash
37
- akm import ./doc.md --target my-stash # Route import to a named writable stash source
37
+ akm import ./notes/release-checklist.md # Import a knowledge doc into your bundle
38
+ akm import ./doc.md --target my-bundle # Route import to a named writable bundle source
38
39
  akm proposal diff skills/akm-dream # Diff proposal by ref, UUID, or 8-char prefix
39
40
  akm proposal accept 7c115132 # Accept by UUID prefix
40
41
  akm proposal reject skills/my-skill --reason "..." # Reject by ref
41
42
  akm feedback <ref> --positive|--negative # Record whether an asset helped
42
- akm add <ref> # Add a source (npm, GitHub, git, local dir)
43
- akm clone <ref> # Copy an asset to the working stash (optional --dest arg to clone to specific location)
44
- akm mv memories/old-note new-note # Rename an asset: inbound refs rewritten, ranking history preserved
45
- akm sync # Commit (and push if writable remote) changes in the primary stash (--no-push to commit only)
43
+ akm bundle add <ref> # Add a source (npm, GitHub, git, local dir)
44
+ akm clone <ref> # Copy an asset to the working bundle (optional --dest arg to clone to specific location)
45
+ akm sync # Commit (and push if writable remote) changes in the primary bundle (--no-push to commit only)
46
46
  akm improve --no-sync # Run improve without the end-of-run auto-commit
47
47
  akm improve --no-push # Auto-commit but skip push for this run
48
- akm registry search "<query>" # Search all registries
48
+ akm search "<query>" --from registry # Search all registries (registry search was folded into search)
49
49
  ```
50
50
 
51
51
  ## Primary Asset Types
@@ -56,13 +56,76 @@ akm registry search "<query>" # Search all registries
56
56
  | skill | Instructions to follow (read the full content) |
57
57
  | command | A prompt template with placeholders to fill in |
58
58
  | agent | A system prompt with model and tool hints |
59
- | knowledge | A reference doc (use `toc` or `section "..."` to navigate) |
59
+ | knowledge | A reference doc (append `#<heading-slug>` to the ref to read one section) |
60
60
  | workflow | Parsed steps plus workflow-specific execution commands |
61
61
  | memory | Recalled context (read the content for background information) |
62
- | env | A `.env` file of related CONFIGURATION (many vars; sensitive or not — all protected); key names only. Inject with `akm env run <ref> -- <cmd>` (the agent-safe path — values stay on disk). |
63
- | secret | A single sensitive value for AUTHENTICATION (token, key, cert); name only. Use `akm secret path` / `akm secret run`. |
62
+ | env | A `.env` file of configuration an app loads together (many vars; sensitive or not — all protected); key names only. Inject with `akm env run <ref> -- <cmd>` (the agent-safe path — values stay on disk). |
63
+ | secret | A single sensitive value for AUTHENTICATION (token, key, cert); name only. Inject with `akm secret run <ref> <VAR> -- <cmd>`. |
64
+ | lesson | A distilled feedback lesson: `content` plus `action` (rendered from the `when_to_use` frontmatter). Read both before applying a related skill. Generated by the improve pipeline and promoted through the proposal queue. |
64
65
 
65
66
  When an asset meaningfully helps or fails, record that with `akm feedback` so
66
67
  future search ranking can learn from real usage.
67
68
 
68
- Run `akm -h` for the full command reference.
69
+ ## Error Shapes and Exit Codes
70
+
71
+ Every command returns JSON by default. On failure, the shape is always
72
+ emitted on **stderr** (stdout is normally left empty):
73
+
74
+ ```json
75
+ {"ok": false, "error": "<message>", "code": "<optional machine-readable code>", "hint": "<optional remediation hint>"}
76
+ ```
77
+
78
+ Exit codes:
79
+
80
+ | Code | Meaning |
81
+ | --- | --- |
82
+ | 0 | Success |
83
+ | 1 | Not found or command-reported failure |
84
+ | 2 | Usage / bad input |
85
+ | 4 | Health warning (`akm health` only) |
86
+ | 70 | Internal / unclassified error |
87
+ | 78 | Configuration error |
88
+
89
+ Check `ok === false` or a non-zero exit code to detect failure. The `hint`
90
+ field, when present, describes a corrective action. `search`/`curate`
91
+ success results also carry an additive `tip` field (a plain-text suggestion)
92
+ when the result set is empty.
93
+
94
+ `env run`, `secret run`, and `migrate` preserve the spawned process's exact
95
+ status. `task run` preserves configuration failures as exit 78; other failed
96
+ task results and failed `agent` dispatches map to exit 1 while retaining the
97
+ child status in their result envelope.
98
+
99
+ `akm lint` is the exception: it exits **0 on every successful run regardless
100
+ of findings**. Read `summary.flagged` to detect issues, or pass
101
+ `--fail-on-flagged` to opt into "exit 1 when findings exist":
102
+
103
+ ```sh
104
+ akm lint | jq '.summary.flagged' # always exit 0; read the count
105
+ akm lint --fail-on-flagged && deploy # exit 1 if any flagged issues
106
+ ```
107
+
108
+ ## Proposals & improvement (0.8.0+)
109
+
110
+ `akm` ships a proposal queue so reflective edits, new asset drafts, and
111
+ feedback-distilled lessons land out-of-band before they touch the live
112
+ bundle. None of these commands mutate bundle content directly — they always
113
+ go through `akm proposal accept`.
114
+
115
+ ```sh
116
+ akm improve <ref> # Produce an improvement proposal for an existing asset
117
+ akm improve <ref> --task "tighten the description"
118
+ akm proposal new <type> <name> --task "..." # Draft a new asset proposal from a description
119
+ akm proposal new lesson docker-cleanup --task "consolidate cleanup feedback"
120
+ akm proposal list # List pending proposals
121
+ akm proposal list --status pending|accepted|rejected|reverted
122
+ akm proposal show <id> # Render the proposal body
123
+ akm proposal diff <ref-or-id> # Diff by ref, UUID, or 8-char prefix
124
+ akm proposal accept 7c115132 # Accept by UUID prefix
125
+ akm proposal reject skills/my-skill --reason "not ready" # Reject by asset ref
126
+ akm search "<query>" --include-proposed # Surface proposal-queue entries in search
127
+ ```
128
+
129
+ Run `akm help <command>` for that command's options and subcommands. Run
130
+ `akm --help` for the command overview or `akm hints --detail full` for the
131
+ complete agent guide.
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "Standard improve pass — reflect, distill, consolidate, memory inference, graph extraction, and validation; improve-stage extract and proactive maintenance off.",
2
+ "description": "Standard improve pass — reflect, distill, advisory consolidation, graph extraction, and validation. Memory inference is listed below but only runs when experimental.improveAutonomy is set; improve-stage extract and proactive maintenance off.",
3
3
  "processes": {
4
4
  "reflect": {
5
5
  "enabled": true,
@@ -5,7 +5,7 @@
5
5
  "enabled": true,
6
6
  "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "workflow"]
7
7
  },
8
- "distill": { "enabled": true, "allowedTypes": ["memory"] },
8
+ "distill": { "enabled": true, "allowedTypes": ["memory"], "requirePlannedRefs": false },
9
9
  "consolidate": { "enabled": false },
10
10
  "memoryInference": { "enabled": true },
11
11
  "graphExtraction": { "enabled": false },
@@ -1,5 +1,4 @@
1
- Compress the memory below into one derived memory. Output ONLY JSON:
2
- {"title":"short title string","description":"one sentence summary string","tags":["tag1","tag2"],"searchHints":["search phrase 1","search phrase 2"],"content":"2-3 sentence compressed body preserving key facts verbatim"}
3
- Rules: be specific, no vague generalizations, preserve key facts (names/versions/paths/config keys verbatim), merge related points, 3-8 tags, 3-6 searchHints. The content field must be a plain string with 2-3 sentences.
1
+ Compress the memory below into one derived memory. Output ONLY a JSON object with exactly these fields: title, description, tags, searchHints, and content.
2
+ Rules: title must be specific and short; description must be one sentence; tags must contain 3-8 specific tags; searchHints must contain 3-6 useful retrieval phrases; content must be a plain string with 2-3 sentences. Avoid vague generalizations, preserve key facts (names/versions/paths/config keys verbatim), and merge related points. Never return field descriptions or placeholder values.
4
3
 
5
4
  Memory:
@@ -1,7 +1,7 @@
1
1
  # AKM Stash
2
2
 
3
3
  This is an **AKM stash** — a structured knowledge repository that stores reusable
4
- assets for you and your AI agents. AKM (Agent Knowledge Management) indexes, ranks,
4
+ assets for you and your AI agents. AKM (Agent Knowledge Manager) indexes, ranks,
5
5
  and surfaces these assets at the right moment during coding sessions, improving
6
6
  consistency and reducing repeated context-setting.
7
7
 
@@ -68,9 +68,10 @@ akm show knowledge/<name>
68
68
  akm show memories/<name>
69
69
  akm show commands/<name>
70
70
 
71
- # List available assets by type
72
- akm list --type skill
73
- akm list --type knowledge
71
+ # Browse available assets by type (a trailing slash lists the subtree)
72
+ akm search "skills/"
73
+ akm search "knowledge/"
74
+ akm search "<query>" --type skill
74
75
  ```
75
76
 
76
77
  ### Recording feedback and new knowledge
@@ -100,4 +101,4 @@ akm proposal accept <id>
100
101
 
101
102
  ---
102
103
 
103
- *Created by `akm init`. See `akm --help` for full command reference.*
104
+ *Created by `akm bundle create`. See `akm --help` for full command reference.*
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for agent assets using scoped role, tool, and maintenance rules.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise an agent asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for command assets using repeatable LLM operation patterns.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a command asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for fact assets using pinned-core and just-in-time context principles.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a fact asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for knowledge assets as compiled, on-demand reference documents.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a knowledge asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for lesson assets that capture compounding, hard-won judgment.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a lesson asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for memory assets using durable-context and provenance discipline.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a memory asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for script assets using agent-safe CLI helper principles.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a script asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for skill assets as reusable, just-in-time procedural rulebooks.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a skill asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for workflow assets using explicit operations, logging, and lintable steps.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a workflow asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: How to cross-link assets so retrieval compounds — a provenance xref when derived, sparse real associative xrefs, corrections as new assets, and canonical entity naming.
4
5
  when_to_use: Surfaced to authoring agents when they create or revise any asset that derives from, corrects, or relates to another asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: The closed vocabulary of domain prefixes for reuse-born assets (knowledge/skill/fact/script), plus canonical entity spellings. Edit this to match your stash.
4
5
  when_to_use: Surfaced to authoring agents alongside the other convention facts; consult it when picking a domain prefix for a knowledge, skill, fact, or script asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Where to place an asset in the stash — the one path partition axis, chosen by asset type, so refs stay stable and slug search (akm search "<slug>" --type <type>) co-locates related assets.
4
5
  when_to_use: Surfaced to authoring agents when they create or move any asset and must decide its subdirectory/name.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -99,19 +101,28 @@ cross-project reuse.
99
101
 
100
102
  ## Renames and evolution
101
103
 
102
- - **A ref is chosen once. Default to not renaming.** A manual rename dangles
104
+ - **A ref is chosen once. Default to not renaming.** A rename dangles
103
105
  inbound xrefs silently at write time — nothing catches the breakage until
104
106
  the next `akm lint` run flags the dead frontmatter refs (`missing-ref`) —
105
- while the dead ref string keeps scoring in FTS, and a manually renamed file
107
+ while the dead ref string keeps scoring in FTS, and a renamed file
106
108
  is a new index entry, so the asset's accumulated usage-ranking history
107
109
  resets.
108
- - If a rename is truly unavoidable, prefer `akm mv <ref> <new-name>`
109
- (Experimental): it moves the file, rewrites inbound references across the
110
- writable stash in the same pass, and keeps the asset's usage-ranking
111
- history. Citing files in read-only sources are reported for manual
112
- follow-up. On an older CLI without `akm mv`, treat the rename as an
113
- xref-fixing operation: grep the stash for the old ref string and fix every
114
- inbound reference in the same pass.
110
+ - **A rename is delete plus create, and you do it by hand.** There is no
111
+ `akm mv` moving the file strands every inbound ref and gives the
112
+ destination a fresh identity. If a rename is truly unavoidable:
113
+
114
+ ```sh
115
+ mv memories/old-note.md memories/new-note.md
116
+ # update any intentional refs (fully qualified: bundle//memories/old-note)
117
+ akm index
118
+ akm lint # confirms nothing dangles
119
+ ```
120
+
121
+ A memory's `.derived.md` twin must move with its base. Citing files in
122
+ read-only sources cannot be fixed at all — another reason not to rename. The
123
+ asset's accumulated usage-ranking history resets unless you carry it over
124
+ with `bun scripts/rekey-asset-ref.ts <old-ref> <new-ref>` (a maintainer
125
+ script, run from a source clone after the move and before `akm index`).
115
126
  - When a project-scoped note turns out to be domain-general, **append, don't
116
127
  promote**: write a new `knowledge/<domain>/…` asset that xrefs the originating
117
128
  memory. Never rename the memory up a rung — that breaks its ref. The atomic
@@ -1,5 +1,5 @@
1
1
  version: 2
2
2
  schedule: "*/30 * * * *"
3
- command: akm extract --auto
3
+ command: akm proposal extract --auto
4
4
  enabled: true
5
5
  description: Opt-in all-harness session extraction every 30 min
@@ -1,5 +1,5 @@
1
1
  version: 2
2
2
  schedule: "0 9 * * 1"
3
- command: akm info --check-version
3
+ command: akm upgrade --check
4
4
  enabled: true
5
5
  description: Weekly check for new akm releases
@@ -0,0 +1,5 @@
1
+ version: 2
2
+ schedule: "10 3 * * 0"
3
+ command: akm improve --strategy graph-refresh --skip-if-locked
4
+ enabled: true
5
+ description: Full-corpus graph rebuild (weekly Sunday 3:10am)
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ schedule: "0 4 * * *"
3
+ command: akm improve --strategy catchup --skip-if-locked
4
+ # Manual-recovery task: ships disabled (the retired registerDefaultTasks
5
+ # marked it enableMode: "manual"). `akm task run` works while disabled;
6
+ # opting into the schedule is `enabled: true` + `akm task sync`.
7
+ enabled: false
8
+ description: Manual recovery — consolidation + triage drain (run on demand via `akm task run akm-improve-catchup`)
@@ -0,0 +1,5 @@
1
+ version: 2
2
+ schedule: "20 */4 * * *"
3
+ command: akm improve --strategy consolidate --skip-if-locked
4
+ enabled: true
5
+ description: Consolidation-only pass (every 4h at :20)
@@ -0,0 +1,5 @@
1
+ version: 2
2
+ schedule: "40 * * * *"
3
+ command: akm improve --strategy frequent --skip-if-locked
4
+ enabled: true
5
+ description: Frequent inference pass (hourly at :40; improve-stage extract off)
@@ -0,0 +1,5 @@
1
+ version: 2
2
+ schedule: "15 2 * * *"
3
+ command: akm improve --strategy thorough --skip-if-locked
4
+ enabled: true
5
+ description: Full nightly quality sweep (daily 2:15am; suggested for server installs)
@@ -390,7 +390,7 @@
390
390
  <div class="table-wrap">
391
391
  <table>
392
392
  <thead>
393
- <tr><th>Started</th><th>Task</th><th>Strategy</th><th>Legacy Profile</th><th>Wall</th><th>Promoted</th><th>Merged</th><th>Contradicted</th><th>MI Written</th><th>Entities</th><th>Lint Fixed</th><th>Status</th></tr>
393
+ <tr><th>Started</th><th>Task</th><th>Strategy</th><th>Wall</th><th>Promoted</th><th>Merged</th><th>Contradicted</th><th>MI Written</th><th>Entities</th><th>Lint Fixed</th><th>Status</th></tr>
394
394
  </thead>
395
395
  <tbody id="lastRunsTable"></tbody>
396
396
  </table>
@@ -683,7 +683,6 @@ tbody.innerHTML = '';
683
683
  const dur = r.wallTimeMs ? (r.wallTimeMs / 60000).toFixed(1) + 'm' : '—';
684
684
  const task = r.taskId || 'manual';
685
685
  const strategy = r.strategy || '—';
686
- const legacyProfile = r.legacyProfile || '—';
687
686
  const badge = r.ok
688
687
  ? '<span class="badge-pill badge-pass" style="padding:2px 8px;font-size:11px;"><span class="dot dot-pass" style="width:6px;height:6px;"></span>&nbsp;ok</span>'
689
688
  : '<span class="badge-pill badge-fail" style="padding:2px 8px;font-size:11px;"><span class="dot dot-fail" style="width:6px;height:6px;"></span>&nbsp;failed</span>';
@@ -691,7 +690,6 @@ tbody.innerHTML = '';
691
690
  <td style="font-family:monospace;font-size:12px;">${ts}</td>
692
691
  <td><code>${task}</code></td>
693
692
  <td><code>${strategy}</code></td>
694
- <td><code>${legacyProfile}</code></td>
695
693
  <td>${dur}</td>
696
694
  <td style="color:var(--accent);font-weight:600;">${r.promoted || 0}</td>
697
695
  <td>${r.merged || 0}</td>
@@ -1,24 +1,41 @@
1
1
  ---
2
- description: Describe what this workflow accomplishes
3
- tags:
4
- - example
2
+ type: workflow
3
+ description: One-sentence summary of what this workflow accomplishes.
4
+ updated: 2026-01-01
5
+ tags: [example]
5
6
  params:
6
- example_param: Explain this parameter
7
+ example_param: { type: string, description: Explain this parameter }
8
+ steps:
9
+ - id: first-step
10
+ - id: second-step
11
+ inputs: [steps.first-step.output]
7
12
  ---
8
13
 
9
- # Workflow: {{TITLE}}
14
+ # {{TITLE}}
10
15
 
11
- ## Step: {{FIRST_STEP_TITLE}}
12
- Step ID: {{FIRST_STEP_ID}}
16
+ Free preamble prose describing what this workflow does. It is indexed for
17
+ search and shown in `akm show`, but it is never dispatched to a step.
13
18
 
14
- ### Instructions
15
- Describe what to do in this step.
19
+ ## first-step
16
20
 
17
- ### Completion Criteria
18
- - Confirm the first step is complete
21
+ Describe what to do in this step. Refer to run parameters in plain
22
+ language for example, "read the value given by the `example_param`
23
+ parameter" — never as a template expression like `{{ example_param }}`.
19
24
 
20
- ## Step: Second Step
21
- Step ID: second-step
25
+ ## second-step
22
26
 
23
- ### Instructions
24
- Describe what happens next.
27
+ Describe what happens next, using the first step's artifact — attached to
28
+ this unit as context because this step declares
29
+ `inputs: [steps.first-step.output]` above — referred to in prose as "the
30
+ first step's attached artifact."
31
+
32
+ ### gate
33
+
34
+ A `### gate` sub-heading is the step's completion rubric: the judge
35
+ receives this whole section byte-exact. Omit the heading or leave its text
36
+ empty to skip validation. A non-empty rubric requires
37
+ `workflow.judgeEngine`; verifier failures and malformed verdicts reject the
38
+ gate rather than silently skipping it.
39
+
40
+ - Confirm the step accomplished what it set out to do.
41
+ - Confirm nothing required was silently skipped.
@@ -7,11 +7,10 @@
7
7
  * Before this module, ~46 `process.argv` read sites were scattered across
8
8
  * `src/**` (32 outside `src/cli.ts`), each re-scanning the raw argv array for
9
9
  * repeated flags (`parseAllFlagValues`), `--`-passthrough tails (`env run`,
10
- * `secret run`), or first-occurrence flag values (`parseFlagValue`) — plus a
11
- * startup MUTATION of the global `process.argv` at `cli.ts:644`. This module
12
- * normalizes argv into one typed {@link ParsedInvocation} object, minted ONCE
13
- * by `src/cli.ts` right after its `normalizeShowArgv` rewrite, so every
14
- * downstream reader shares one parse instead of re-scanning the raw array.
10
+ * `secret run`), or first-occurrence flag values (`parseFlagValue`). This
11
+ * module normalizes argv into one typed {@link ParsedInvocation} object,
12
+ * minted ONCE by `src/cli.ts` at startup, so every downstream reader shares
13
+ * one parse instead of re-scanning the raw array.
15
14
  *
16
15
  * Deliberately import-free: this module must never join an import cycle
17
16
  * (cycle ratchet, plan §10.7 / chunk-9 D.3), so it depends on nothing but
@@ -20,11 +19,15 @@
20
19
  * of the same algorithms `output/context.ts`'s `parseFlagValue`/
21
20
  * `hasBooleanFlag` and (the now-retired) `cli/shared.ts` `parseAllFlagValues`
22
21
  * used, kept byte-identical so every converted call site is behavior-
23
- * preserving.
22
+ * preserving — with ONE deliberate exception (R-033a): `getAllFlagValuesFrom`
23
+ * now stops at a literal `--` separator instead of scanning past it, fixing a
24
+ * bug where a repeatable flag's value placed after `--` (meant to end flag
25
+ * parsing) was still read as a real flag occurrence. See that function's
26
+ * docstring.
24
27
  *
25
28
  * Singleton + fallback semantics (the design decision this module encodes):
26
- * - `setParsedInvocation(argv)` is called exactly once, by `src/cli.ts`,
27
- * immediately after `process.argv = normalizeShowArgv(process.argv)`. It
29
+ * - `setParsedInvocation(argv)` is called exactly once, by `src/cli.ts`, in
30
+ * its startup block before any command handler can run. It
28
31
  * snapshots that argv into an immutable {@link ParsedInvocation} that
29
32
  * every subsequent `getParsedInvocation()` call returns unchanged for the
30
33
  * rest of the process lifetime — "normalize argv exactly once at entry".
@@ -58,8 +61,7 @@
58
61
  * search-cli, stash-cli, cli.ts) is unaffected.
59
62
  * - `findCittyTopLevelCommand`/`findCittyTopLevelCommandIndex` (moved from
60
63
  * `cli/parse-args.ts`, which had zero internal imports for this cluster) —
61
- * re-exported from `cli/parse-args.ts` for `tests/tasks-embedded.test.ts`
62
- * and `commands/read/show.ts`.
64
+ * re-exported from `cli/parse-args.ts` for `tests/tasks-embedded.test.ts`.
63
65
  * - `resolveHelpMigrateVersionArg` (moved from `cli.ts`, where it was
64
66
  * private) — the `akm help migrate <version>` positional/flag
65
67
  * disambiguation guard.
@@ -69,6 +71,8 @@
69
71
  function getFlagValueFrom(argv, flag) {
70
72
  for (let i = 0; i < argv.length; i++) {
71
73
  const arg = argv[i];
74
+ if (arg === "--")
75
+ break;
72
76
  if (arg === flag)
73
77
  return argv[i + 1];
74
78
  if (arg.startsWith(`${flag}=`))
@@ -77,12 +81,32 @@ function getFlagValueFrom(argv, flag) {
77
81
  return undefined;
78
82
  }
79
83
  function hasFlagIn(argv, flag) {
80
- return argv.some((arg) => arg === flag || arg === `${flag}=true`);
84
+ for (const arg of argv) {
85
+ if (arg === "--")
86
+ return false;
87
+ if (arg === flag || arg === `${flag}=true`)
88
+ return true;
89
+ }
90
+ return false;
81
91
  }
92
+ /**
93
+ * Collect every `--flag value` / `--flag=value` occurrence, stopping at a
94
+ * literal `--` separator (R-033a). `--` conventionally ends flag parsing —
95
+ * everything after it is positional/passthrough, never a flag akm should
96
+ * interpret. Before this fix, a token like `--tag leaked:yes` placed AFTER
97
+ * `--` (e.g. `akm feedback <ref> --positive -- --tag leaked:yes`) was still
98
+ * picked up as a real `--tag` value, letting argv content past the boundary
99
+ * leak into structured output. This is a deliberate BEHAVIOR CHANGE from the
100
+ * pre-WI-9.9 per-site implementation this module otherwise keeps
101
+ * byte-identical (see the module docstring) — every caller of
102
+ * `parseAllFlagValues`/`getAllFlagValues` inherits the fix for free.
103
+ */
82
104
  function getAllFlagValuesFrom(argv, flag) {
83
105
  const values = [];
84
106
  for (let i = 0; i < argv.length; i++) {
85
107
  const arg = argv[i];
108
+ if (arg === "--")
109
+ break;
86
110
  if (arg === flag && i + 1 < argv.length) {
87
111
  values.push(argv[i + 1]);
88
112
  // BUG-M4: skip the value index so `--tag --tag` (literal `--tag` value)
@@ -122,8 +146,8 @@ function createParsedInvocation(argv) {
122
146
  let _invocation;
123
147
  /**
124
148
  * Mint the process-wide {@link ParsedInvocation} singleton. Called exactly
125
- * once, by `src/cli.ts`, right after `normalizeShowArgv` — "normalize argv
126
- * exactly once at entry" (plan §10.7).
149
+ * once, by `src/cli.ts`, at startup — "normalize argv exactly once at entry"
150
+ * (plan §10.7).
127
151
  */
128
152
  export function setParsedInvocation(argv) {
129
153
  _invocation = createParsedInvocation(argv);
@@ -157,10 +181,11 @@ export function _resetParsedInvocationForTests() {
157
181
  export function parseAllFlagValues(flag) {
158
182
  return getParsedInvocation().getAllFlagValues(flag);
159
183
  }
160
- function cittyComparableName(name) {
184
+ /** citty compares `foo-bar` and `fooBar` as the same arg name. */
185
+ export function cittyComparableName(name) {
161
186
  return name.replace(/[-_]+([a-zA-Z0-9])/g, (_match, char) => char.toUpperCase());
162
187
  }
163
- function toAliasArray(alias) {
188
+ export function toAliasArray(alias) {
164
189
  if (Array.isArray(alias))
165
190
  return alias;
166
191
  return typeof alias === "string" ? [alias] : [];