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
@@ -13,11 +13,10 @@ import fs from "node:fs";
13
13
  import path from "node:path";
14
14
  import { listKeys as listVaultKeys } from "../commands/env/env.js";
15
15
  import { parseFrontmatter } from "../core/asset/frontmatter.js";
16
- import { extractFrontmatterOnly, extractLineRange, extractSection, formatToc, parseMarkdownToc, } from "../core/asset/markdown.js";
17
16
  import { asNonEmptyString, hasErrnoCode } from "../core/common.js";
18
17
  import { extractCommentMetadata } from "../indexer/passes/metadata.js";
19
18
  import { registerRenderer } from "../indexer/walk/file-context.js";
20
- import { buildWorkflowAction, workflowMdRenderer, workflowProgramRenderer } from "../workflows/renderer.js";
19
+ import { buildWorkflowAction, workflowMdRenderer } from "../workflows/renderer.js";
21
20
  // ── Interpreter auto-detection map ───────────────────────────────────────────
22
21
  const INTERPRETER_MAP = {
23
22
  ".sh": "bash",
@@ -219,39 +218,19 @@ const agentMdRenderer = {
219
218
  },
220
219
  };
221
220
  // ── 4. knowledge-md ──────────────────────────────────────────────────────────
222
- const KNOWLEDGE_ACTION = "Reference material - read the content below. Use 'toc' view for large documents.";
221
+ const KNOWLEDGE_ACTION = "Reference material - read the content below. For a large document, read one section with `akm show <ref>#fragment` " +
222
+ "(an unmatched #fragment lists the available slugs).";
223
223
  const knowledgeMdRenderer = {
224
224
  name: "knowledge-md",
225
225
  buildShowResponse(ctx) {
226
- const type = "knowledge";
227
- const name = deriveName(ctx);
228
- const v = ctx.matchResult.meta?.view ?? { mode: "full" };
229
- const content = ctx.content();
230
- const action = KNOWLEDGE_ACTION;
231
- switch (v.mode) {
232
- case "toc": {
233
- const toc = parseMarkdownToc(content);
234
- return { type, name, path: ctx.absPath, action, content: formatToc(toc) };
235
- }
236
- case "frontmatter": {
237
- const fm = extractFrontmatterOnly(content);
238
- return { type, name, path: ctx.absPath, action, content: fm ?? "(no frontmatter)" };
239
- }
240
- case "section": {
241
- const section = extractSection(content, v.heading);
242
- if (!section) {
243
- const notFoundMsg = `Section "${v.heading}" not found in ${name}. Try \`akm show <ref> toc\` to discover available headings.`;
244
- return { type, name, path: ctx.absPath, action, content: notFoundMsg };
245
- }
246
- return { type, name, path: ctx.absPath, action, content: section.content };
247
- }
248
- case "lines": {
249
- return { type, name, path: ctx.absPath, action, content: extractLineRange(content, v.start, v.end) };
250
- }
251
- default: {
252
- return { type, name, path: ctx.absPath, action, content };
253
- }
254
- }
226
+ const instruction = ctx.matchResult.type === "instruction";
227
+ return {
228
+ type: instruction ? "instruction" : "knowledge",
229
+ name: deriveName(ctx),
230
+ path: ctx.absPath,
231
+ action: instruction ? "Project instructions — read and follow the content below." : KNOWLEDGE_ACTION,
232
+ content: ctx.content(),
233
+ };
255
234
  },
256
235
  };
257
236
  // ── 4c. lesson-md ────────────────────────────────────────────────────────────
@@ -384,12 +363,12 @@ const secretFileRenderer = {
384
363
  type: "secret",
385
364
  name,
386
365
  path: ctx.absPath,
387
- action: "Secret — name only; the file contents are the value and are never written to akm's stdout. Use `akm secret path <ref>` for the file path, or `akm secret run <ref> <VAR> -- <command>` to run with the value injected into $VAR.",
366
+ action: "Secret — name only; the file contents are the value and are never written to akm's stdout. Use `akm secret run <ref> <VAR> -- <command>` to run with the value injected into $VAR.",
388
367
  };
389
368
  },
390
369
  };
391
370
  // ── 7. task-md ───────────────────────────────────────────────────────────────
392
- const TASK_PAGE_ACTION = "Scheduled task — `akm tasks show <id>` for parsed details, `akm tasks run <id>` to invoke now.";
371
+ const TASK_PAGE_ACTION = "Scheduled task — `akm show tasks/<id>` for parsed details, `akm task run <id>` to invoke now.";
393
372
  const taskMdRenderer = {
394
373
  name: "task-yaml",
395
374
  buildShowResponse(ctx) {
@@ -497,7 +476,6 @@ const builtinRenderers = [
497
476
  lessonMdRenderer,
498
477
  memoryMdRenderer,
499
478
  workflowMdRenderer,
500
- workflowProgramRenderer,
501
479
  scriptSourceRenderer,
502
480
  envFileRenderer,
503
481
  secretFileRenderer,
@@ -515,4 +493,4 @@ export function registerBuiltinRenderers() {
515
493
  }
516
494
  }
517
495
  // ── Named exports for testing ────────────────────────────────────────────────
518
- export { agentMdRenderer, commandMdRenderer, envFileRenderer, factMdRenderer, INTERPRETER_MAP, knowledgeMdRenderer, lessonMdRenderer, memoryMdRenderer, SETUP_SIGNALS, scriptSourceRenderer, secretFileRenderer, skillMdRenderer, workflowMdRenderer, workflowProgramRenderer, };
496
+ export { agentMdRenderer, commandMdRenderer, envFileRenderer, factMdRenderer, INTERPRETER_MAP, knowledgeMdRenderer, lessonMdRenderer, memoryMdRenderer, SETUP_SIGNALS, scriptSourceRenderer, secretFileRenderer, skillMdRenderer, workflowMdRenderer, };
@@ -11,6 +11,9 @@ const NORMAL_FIELDS = [
11
11
  "type",
12
12
  "name",
13
13
  "ref",
14
+ "path",
15
+ "editable",
16
+ "editHint",
14
17
  "id",
15
18
  "description",
16
19
  "preview",
@@ -28,6 +31,9 @@ const AGENT_FIELDS = [
28
31
  "type",
29
32
  "name",
30
33
  "ref",
34
+ "path",
35
+ "editable",
36
+ "editHint",
31
37
  "id",
32
38
  "description",
33
39
  "supportRefs",
@@ -37,7 +43,10 @@ const AGENT_FIELDS = [
37
43
  ];
38
44
  function shapeCurateItem(item, detail, shape) {
39
45
  if (shape === "agent") {
40
- return capDescription(pickFields(item, AGENT_FIELDS), NORMAL_DESCRIPTION_LIMIT);
46
+ const shaped = pickFields(item, AGENT_FIELDS);
47
+ if (shaped.editable !== false)
48
+ delete shaped.editHint;
49
+ return capDescription(shaped, NORMAL_DESCRIPTION_LIMIT);
41
50
  }
42
51
  if (detail === "brief") {
43
52
  return pickFields(item, BRIEF_FIELDS);
@@ -1,12 +1,17 @@
1
1
  // This Source Code Form is subject to the terms of the Mozilla Public
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- // Output shape registration for `akm events list` and `akm events tail` (#204).
5
- // Both share the same envelope; the renderer in text.ts uses distinct command
6
- // names so it can format streaming differently.
4
+ // Output shape registration for `akm log` (#204).
5
+ //
6
+ // R-060: renamed from `events-list` (the command group used to be `akm
7
+ // events`) to `log-list`, matching the current `akm log` command name
8
+ // (src/commands/observability-cli.ts). This string is an internal registry
9
+ // key only — `shapeEventsOutput` builds its own envelope and never stamps a
10
+ // `shape` field on the wire, so the rename does not require a schemaVersion
11
+ // bump.
12
+ //
13
+ // 0.9.0 CLI overhaul (S3): `log tail` (and its `log-tail` shape entry) was
14
+ // dropped along with the command.
7
15
  import { shapeEventsOutput } from "./helpers.js";
8
16
  const handler = (result, detail) => shapeEventsOutput(result, detail);
9
- export const eventsShapes = [
10
- { command: "events-list", handler },
11
- { command: "events-tail", handler },
12
- ];
17
+ export const eventsShapes = [{ command: "log-list", handler }];
@@ -16,7 +16,7 @@ export function shapeProposalProducerOutput(result, detail) {
16
16
  };
17
17
  if (detail === "full") {
18
18
  return {
19
- schemaVersion: result.schemaVersion ?? 1,
19
+ schemaVersion: result.schemaVersion,
20
20
  ...base,
21
21
  ...(result.stdout !== undefined ? { stdout: result.stdout } : {}),
22
22
  ...(result.stderr !== undefined ? { stderr: result.stderr } : {}),
@@ -24,16 +24,16 @@ export function shapeProposalProducerOutput(result, detail) {
24
24
  }
25
25
  return base;
26
26
  }
27
- const proposal = result.proposal ?? {};
27
+ const proposal = result.proposal;
28
28
  const base = {
29
- ok: true,
29
+ ok: result.ok,
30
30
  ref: result.ref,
31
31
  ...(result.engine !== undefined ? { engine: result.engine } : {}),
32
32
  ...(typeof result.durationMs === "number" ? { durationMs: result.durationMs } : {}),
33
33
  proposal: shapeProposalEntry(proposal, detail === "brief" ? "normal" : detail),
34
34
  };
35
35
  if (detail === "full") {
36
- return { schemaVersion: result.schemaVersion ?? 1, ...base };
36
+ return { schemaVersion: result.schemaVersion, ...base };
37
37
  }
38
38
  return base;
39
39
  }
@@ -43,8 +43,7 @@ export function shapeProposalEntry(entry, detail) {
43
43
  }
44
44
  if (detail === "normal") {
45
45
  // `confidence` and `gateDecision` (#577) explain why a proposal is pending,
46
- // so they are projected at `normal` for `akm proposal list/show` both are
47
- // optional and absent on legacy proposals.
46
+ // so they are projected at `normal` for `akm proposal list/show` when present.
48
47
  return pickFields(entry, [
49
48
  "id",
50
49
  "ref",
@@ -74,74 +73,54 @@ export function shapeProposalEntry(entry, detail) {
74
73
  ]);
75
74
  }
76
75
  export function shapeProposalListOutput(result, detail) {
77
- const proposals = Array.isArray(result.proposals) ? result.proposals : [];
76
+ const proposals = result.proposals;
78
77
  const shaped = proposals.map((p) => shapeProposalEntry(p, detail));
79
78
  const base = {
80
- totalCount: result.totalCount ?? shaped.length,
79
+ totalCount: result.totalCount,
81
80
  proposals: shaped,
82
81
  };
83
82
  if (detail === "full") {
84
- return { schemaVersion: result.schemaVersion ?? 1, ...base };
83
+ return { schemaVersion: result.schemaVersion, ...base };
85
84
  }
86
85
  return base;
87
86
  }
88
87
  export function shapeProposalShowOutput(result, detail) {
89
- const proposal = result.proposal ?? {};
88
+ const proposal = result.proposal;
90
89
  const validation = result.validation;
91
90
  const base = {
92
91
  proposal: shapeProposalEntry(proposal, detail === "brief" ? "normal" : detail),
93
92
  ...(validation ? { validation } : {}),
94
93
  };
95
94
  if (detail === "full") {
96
- return { schemaVersion: result.schemaVersion ?? 1, ...base };
95
+ return { schemaVersion: result.schemaVersion, ...base };
97
96
  }
98
97
  return base;
99
98
  }
100
99
  export function shapeProposalAcceptOutput(result, detail) {
101
- const proposal = result.proposal ?? {};
100
+ const proposal = result.proposal;
102
101
  const base = {
103
- ok: result.ok ?? true,
102
+ ok: result.ok,
104
103
  id: result.id,
105
104
  ref: result.ref,
106
105
  assetPath: result.assetPath,
107
106
  proposal: shapeProposalEntry(proposal, detail === "brief" ? "normal" : detail),
108
107
  };
109
108
  if (detail === "full") {
110
- return { schemaVersion: result.schemaVersion ?? 1, ...base };
109
+ return { schemaVersion: result.schemaVersion, ...base };
111
110
  }
112
111
  return base;
113
112
  }
114
113
  export function shapeProposalRejectOutput(result, detail) {
115
- const proposal = result.proposal ?? {};
114
+ const proposal = result.proposal;
116
115
  const base = {
117
- ok: result.ok ?? true,
116
+ ok: result.ok,
118
117
  id: result.id,
119
118
  ref: result.ref,
120
119
  ...(result.reason !== undefined ? { reason: result.reason } : {}),
121
120
  proposal: shapeProposalEntry(proposal, detail === "brief" ? "normal" : detail),
122
121
  };
123
122
  if (detail === "full") {
124
- return { schemaVersion: result.schemaVersion ?? 1, ...base };
125
- }
126
- return base;
127
- }
128
- export function shapeDistillOutput(result, detail) {
129
- const proposal = result.proposal;
130
- if (detail === "brief") {
131
- return pickFields(result, ["ok", "outcome", "inputRef", "lessonRef", "proposalId", "message"]);
132
- }
133
- const base = {
134
- ok: result.ok ?? true,
135
- outcome: result.outcome,
136
- inputRef: result.inputRef,
137
- lessonRef: result.lessonRef,
138
- ...(result.proposalId !== undefined ? { proposalId: result.proposalId } : {}),
139
- ...(result.message !== undefined ? { message: result.message } : {}),
140
- ...(Array.isArray(result.findings) && result.findings.length > 0 ? { findings: result.findings } : {}),
141
- ...(proposal ? { proposal: shapeProposalEntry(proposal, detail) } : {}),
142
- };
143
- if (detail === "full") {
144
- return { schemaVersion: result.schemaVersion ?? 1, ...base };
123
+ return { schemaVersion: result.schemaVersion, ...base };
145
124
  }
146
125
  return base;
147
126
  }
@@ -154,7 +133,7 @@ export function shapeProposalDiffOutput(result, detail) {
154
133
  ...(result.targetPath !== undefined ? { targetPath: result.targetPath } : {}),
155
134
  };
156
135
  if (detail === "full") {
157
- return { schemaVersion: result.schemaVersion ?? 1, ...base };
136
+ return { schemaVersion: result.schemaVersion, ...base };
158
137
  }
159
138
  return base;
160
139
  }
@@ -164,8 +143,14 @@ export function shapeEventsOutput(result, detail) {
164
143
  const base = {
165
144
  ...(result.ref !== undefined ? { ref: result.ref } : {}),
166
145
  ...(result.type !== undefined ? { type: result.type } : {}),
146
+ ...(result.run !== undefined ? { run: result.run } : {}),
167
147
  ...(result.since !== undefined ? { since: result.since } : {}),
168
148
  ...(typeof result.sinceOffset === "number" ? { sinceOffset: result.sinceOffset } : {}),
149
+ // D-38: echo `--limit` through the shaped envelope too — `akmEventsList`
150
+ // already conditionally includes it in its raw result (see
151
+ // src/commands/events.ts) only when the caller passed it, so this mirrors
152
+ // that same "present only if requested" convention.
153
+ ...(typeof result.limit === "number" ? { limit: result.limit } : {}),
169
154
  totalCount: result.totalCount ?? shapedEvents.length,
170
155
  events: shapedEvents,
171
156
  };
@@ -190,45 +175,6 @@ export function shapeEventEntry(entry, detail) {
190
175
  // full: project everything the reader emits.
191
176
  return pickFields(entry, ["id", "schemaVersion", "eventType", "ref", "ts", "metadata"]);
192
177
  }
193
- export function shapeHistoryOutput(result, detail) {
194
- const entries = Array.isArray(result.entries) ? result.entries : [];
195
- const shapedEntries = entries.map((entry) => shapeHistoryEntry(entry, detail));
196
- if (detail === "full") {
197
- return {
198
- schemaVersion: result.schemaVersion ?? 1,
199
- ...(result.ref !== undefined ? { ref: result.ref } : {}),
200
- ...(result.since !== undefined ? { since: result.since } : {}),
201
- totalCount: result.totalCount ?? shapedEntries.length,
202
- entries: shapedEntries,
203
- // `sources` lists the event sources included in this response.
204
- // Always contains "usage_events"; also "events.jsonl" when
205
- // --include-proposals was specified.
206
- ...(Array.isArray(result.sources) ? { sources: result.sources } : {}),
207
- ...(Array.isArray(result.warnings) && result.warnings.length > 0 ? { warnings: result.warnings } : {}),
208
- };
209
- }
210
- return {
211
- ...(result.ref !== undefined ? { ref: result.ref } : {}),
212
- ...(result.since !== undefined ? { since: result.since } : {}),
213
- totalCount: result.totalCount ?? shapedEntries.length,
214
- entries: shapedEntries,
215
- ...(Array.isArray(result.sources) ? { sources: result.sources } : {}),
216
- ...(Array.isArray(result.warnings) && result.warnings.length > 0 ? { warnings: result.warnings } : {}),
217
- };
218
- }
219
- export function shapeHistoryEntry(entry, detail) {
220
- if (detail === "brief") {
221
- // signal is load-bearing for feedback rows (positive/negative) so we
222
- // project it even at brief — without it the entry is ambiguous.
223
- // source lets callers verify filter correctness (e.g. --source user).
224
- return pickFields(entry, ["eventType", "ref", "signal", "source", "createdAt"]);
225
- }
226
- if (detail === "normal") {
227
- return pickFields(entry, ["eventType", "ref", "signal", "source", "query", "createdAt"]);
228
- }
229
- // full: return everything the reader emits.
230
- return pickFields(entry, ["id", "eventType", "ref", "entryId", "query", "signal", "source", "metadata", "createdAt"]);
231
- }
232
178
  export function shapeSearchOutput(result, detail, shape = "human") {
233
179
  const forAgent = shape === "agent";
234
180
  const hits = Array.isArray(result.hits) ? result.hits : [];
@@ -249,11 +195,10 @@ export function shapeSearchOutput(result, detail, shape = "human") {
249
195
  if (detail === "full") {
250
196
  return {
251
197
  schemaVersion: result.schemaVersion,
252
- stashDir: result.stashDir,
198
+ bundleDir: result.bundleDir,
253
199
  source: result.source,
254
200
  hits: shapedHits,
255
201
  ...(shapedRegistryHits.length > 0 ? { registryHits: shapedRegistryHits } : {}),
256
- ...(result.semanticSearch ? { semanticSearch: result.semanticSearch } : {}),
257
202
  ...(result.tip ? { tip: result.tip } : {}),
258
203
  ...(result.warnings ? { warnings: result.warnings } : {}),
259
204
  ...(result.timing ? { timing: result.timing } : {}),
@@ -331,7 +276,21 @@ export function shapeSearchHit(hit, detail) {
331
276
  }
332
277
  /** Agent-optimized search hit: only fields an LLM agent needs to decide and act */
333
278
  export function shapeSearchHitForAgent(hit) {
334
- const picked = pickFields(hit, ["name", "ref", "type", "description", "action", "score", "estimatedTokens", "keys"]);
279
+ const picked = pickFields(hit, [
280
+ "name",
281
+ "ref",
282
+ "type",
283
+ "path",
284
+ "editable",
285
+ "editHint",
286
+ "description",
287
+ "action",
288
+ "score",
289
+ "estimatedTokens",
290
+ "keys",
291
+ ]);
292
+ if (picked.editable !== false)
293
+ delete picked.editHint;
335
294
  return capDescription(picked, NORMAL_DESCRIPTION_LIMIT);
336
295
  }
337
296
  export function capDescription(hit, limit) {
@@ -350,9 +309,13 @@ export function truncateDescription(description, limit) {
350
309
  }
351
310
  export function shapeShowOutput(result, detail, shape = "human") {
352
311
  if (shape === "agent") {
353
- return pickFields(result, [
312
+ const shaped = pickFields(result, [
354
313
  "type",
355
314
  "name",
315
+ "ref",
316
+ "path",
317
+ "editable",
318
+ "editHint",
356
319
  "description",
357
320
  "action",
358
321
  "content",
@@ -372,11 +335,18 @@ export function shapeShowOutput(result, detail, shape = "human") {
372
335
  "keys",
373
336
  "related",
374
337
  ]);
338
+ if (shaped.editable !== false)
339
+ delete shaped.editHint;
340
+ return shaped;
375
341
  }
376
342
  if (shape === "summary") {
377
343
  return pickFields(result, [
378
344
  "type",
379
345
  "name",
346
+ // ref is present on every show shape (human/summary/agent) — it is the
347
+ // canonical identity of the asset, not an agent-only convenience field
348
+ // (R-020).
349
+ "ref",
380
350
  "description",
381
351
  "tags",
382
352
  "parameters",
@@ -391,6 +361,8 @@ export function shapeShowOutput(result, detail, shape = "human") {
391
361
  const base = pickFields(result, [
392
362
  "type",
393
363
  "name",
364
+ // ref is always projected, same as path/editable below (R-020).
365
+ "ref",
394
366
  "origin",
395
367
  "action",
396
368
  "description",
@@ -411,8 +383,9 @@ export function shapeShowOutput(result, detail, shape = "human") {
411
383
  "activeRun",
412
384
  "keys",
413
385
  "related",
414
- // path and editable are always projected so JSON consumers can locate and
415
- // edit the asset without needing --detail full (QA #7).
386
+ // ref, path, and editable are always projected at every --detail level,
387
+ // not just --detail full so JSON consumers can locate and edit the
388
+ // asset without needing --detail full (QA #7 / D-14).
416
389
  "path",
417
390
  "editable",
418
391
  ]);
@@ -0,0 +1,8 @@
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
+ const identity = (result) => result;
5
+ export const migrateShapes = [
6
+ { command: "migrate-status", handler: identity },
7
+ { command: "migrate-apply", handler: identity },
8
+ ];
@@ -21,81 +21,47 @@ function makeStampHandler(command) {
21
21
  const PASSTHROUGH_COMMANDS = [
22
22
  "add",
23
23
  "agent-result",
24
- "backup",
25
- "bundle-items",
26
- "bundle-list",
24
+ "bundle-create",
27
25
  "bundle-show",
28
26
  "clone",
29
27
  "config",
30
- "disable",
31
- "enable",
32
28
  "env-create",
33
29
  "env-export",
34
30
  "env-remove",
35
- "env-set",
36
- "env-unset",
37
31
  "feedback",
38
- "graph-entities",
39
- "graph-entity",
40
- "graph-export",
41
- "graph-orphans",
42
- "graph-related",
43
- "graph-relations",
44
- "graph-summary",
45
- "graph-update",
46
32
  "extract",
47
33
  "health",
48
34
  "improve",
49
- "improve-canary",
50
- "lessons-coverage",
51
35
  "import",
52
36
  "index",
53
37
  "info",
54
- "init",
55
38
  "lint",
56
39
  "list",
57
- "mv",
58
40
  "proposal-accept-batch",
59
41
  "proposal-drain",
60
42
  "proposal-reject-batch",
61
43
  "proposal-revert",
62
44
  "registry-add",
63
- "registry-build-index",
64
45
  "registry-list",
65
46
  "registry-remove",
66
47
  "remember",
67
48
  "remove",
68
- "save",
69
49
  "secret-set",
70
- "secret-remove",
71
50
  "setup",
72
- "tasks-add",
73
- "tasks-disable",
74
- "tasks-doctor",
75
- "tasks-enable",
76
- "tasks-history",
77
- "tasks-init",
78
- "tasks-list",
79
- "tasks-remove",
80
- "tasks-run",
81
- "tasks-show",
82
- "tasks-sync",
51
+ "sync",
52
+ "task-add",
53
+ "task-doctor",
54
+ "task-history",
55
+ "task-run",
56
+ "task-sync",
83
57
  "update",
84
58
  "upgrade",
85
59
  "workflow-abandon",
86
- "workflow-brief",
87
- "workflow-complete",
88
- "workflow-complete-rejected",
89
60
  "workflow-create",
90
61
  "workflow-list",
91
- "workflow-next",
92
- "workflow-report",
93
62
  "workflow-resume",
94
63
  "workflow-run",
95
- "workflow-start",
96
64
  "workflow-status",
97
- "workflow-validate",
98
- "workflow-watch",
99
65
  ];
100
66
  export const passthroughShapes = PASSTHROUGH_COMMANDS.map((command) => ({
101
67
  command,
@@ -1,12 +1,20 @@
1
1
  // This Source Code Form is subject to the terms of the Mozilla Public
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- // Output shape registration for `akm reflect` and `akm propose` (#226).
5
- // Both share the proposal-producer envelope shape (success carries a proposal
6
- // entry; failure carries an AgentFailureReason discriminant).
4
+ // Output shape registration for `akm proposal new` (#226; formerly the
5
+ // top-level `akm propose`, moved under `proposal` in the 0.9 CLI overhaul, S8).
6
+ // Shares the proposal-producer envelope shape (success carries a proposal
7
+ // entry; failure carries an AgentFailureReason discriminant) with the
8
+ // internal `akmReflect` result shape — but `reflect` has no standalone CLI
9
+ // verb and never reaches the output() chokepoint (reflect.ts is called
10
+ // directly by the improve loop, not through this registry), so only
11
+ // `proposal new` is registered here.
12
+ //
13
+ // Deliberately phrased WITHOUT the literal call spelling: the registry
14
+ // completeness scanner (tests/integration/output-shape-registry-completeness.ts)
15
+ // greps sources for that exact pattern to find commands needing a shape, and
16
+ // it does not skip comments — so writing the spelling here to explain the
17
+ // absence would re-summon the very registration this comment says is gone.
7
18
  import { shapeProposalProducerOutput } from "../helpers.js";
8
19
  const handler = (result, detail) => shapeProposalProducerOutput(result, detail);
9
- export const proposalProducerShapes = [
10
- { command: "reflect", handler },
11
- { command: "propose", handler },
12
- ];
20
+ export const proposalProducerShapes = [{ command: "proposal-new", handler }];
@@ -19,10 +19,9 @@
19
19
  */
20
20
  import { UsageError } from "../core/errors.js";
21
21
  import { curateShapes } from "./shapes/curate.js";
22
- import { distillShapes } from "./shapes/distill.js";
23
22
  import { envListShapes } from "./shapes/env-list.js";
24
23
  import { eventsShapes } from "./shapes/events.js";
25
- import { historyShapes } from "./shapes/history.js";
24
+ import { migrateShapes } from "./shapes/migrate.js";
26
25
  import { passthroughShapes } from "./shapes/passthrough.js";
27
26
  import { proposalAcceptShapes } from "./shapes/proposal/accept.js";
28
27
  import { proposalDiffShapes } from "./shapes/proposal/diff.js";
@@ -35,11 +34,6 @@ import { registrySearchShapes } from "./shapes/registry-search.js";
35
34
  import { searchShapes } from "./shapes/search.js";
36
35
  import { secretListShapes } from "./shapes/secret-list.js";
37
36
  import { showShapes } from "./shapes/show.js";
38
- // Re-export helpers so existing imports from `shapes.ts` keep working.
39
- export { capDescription, NORMAL_DESCRIPTION_LIMIT, pickFields, shapeAssetHit, shapeDistillOutput, shapeEventEntry, shapeEventsOutput, shapeHistoryEntry, shapeHistoryOutput, shapeProposalAcceptOutput, shapeProposalDiffOutput, shapeProposalEntry, shapeProposalListOutput, shapeProposalProducerOutput, shapeProposalRejectOutput, shapeProposalShowOutput, shapeRegistrySearchOutput, shapeSearchHit, shapeSearchHitForAgent, shapeSearchOutput, shapeShowOutput, truncateDescription, } from "./shapes/helpers.js";
40
- // Re-export registry API so callers can use this module as the single entry
41
- // point (backward compat).
42
- export { deregisterOutputShape, registerOutputShape } from "./shapes/registry.js";
43
37
  // ── Explicit built-in shape assembly ──────────────────────────────────────────
44
38
  // Each entry below is a pure exported `OutputShapeEntry[]` from a per-command
45
39
  // module. The set is registered ONCE, deterministically, with no reliance on
@@ -51,7 +45,6 @@ const BUILT_IN_OUTPUT_SHAPES = [
51
45
  ...curateShapes,
52
46
  ...registrySearchShapes,
53
47
  ...showShapes,
54
- ...historyShapes,
55
48
  ...eventsShapes,
56
49
  ...proposalListShapes,
57
50
  ...proposalShowShapes,
@@ -59,9 +52,9 @@ const BUILT_IN_OUTPUT_SHAPES = [
59
52
  ...proposalRejectShapes,
60
53
  ...proposalDiffShapes,
61
54
  ...proposalProducerShapes,
62
- ...distillShapes,
63
55
  ...envListShapes,
64
56
  ...secretListShapes,
57
+ ...migrateShapes,
65
58
  // Passthrough commands are registered last so an explicit dedicated handler
66
59
  // above always wins over the identity-stamp fallback for the same name.
67
60
  ...passthroughShapes,
@@ -2,4 +2,6 @@
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  import { formatInitPlain } from "./helpers.js";
5
- export const initFormatters = [{ command: "init", handler: (r) => formatInitPlain(r) }];
5
+ export const bundleCreateFormatters = [
6
+ { command: "bundle-create", handler: (r) => formatInitPlain(r) },
7
+ ];
@@ -0,0 +1,7 @@
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
+ import { formatBundleShowPlain } from "./helpers.js";
5
+ export const bundleShowFormatters = [
6
+ { command: "bundle-show", handler: (r) => formatBundleShowPlain(r) },
7
+ ];