akm-cli 0.9.0-rc.0 → 0.9.0-rc.13

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 (598) hide show
  1. package/CHANGELOG.md +1283 -22
  2. package/README.md +62 -37
  3. package/SECURITY.md +46 -31
  4. package/dist/akm +162 -38
  5. package/dist/akm-migrate +44 -0
  6. package/dist/assets/backends/schtasks-template.xml +2 -1
  7. package/dist/assets/hints/cli-hints-full.md +268 -118
  8. package/dist/assets/hints/cli-hints-short.md +87 -24
  9. package/dist/assets/{profiles → improve-strategies}/catchup.json +3 -1
  10. package/dist/assets/{profiles → improve-strategies}/consolidate.json +3 -1
  11. package/dist/assets/{profiles → improve-strategies}/default.json +6 -7
  12. package/dist/assets/improve-strategies/frequent.json +15 -0
  13. package/dist/assets/{profiles → improve-strategies}/graph-refresh.json +4 -2
  14. package/dist/assets/{profiles → improve-strategies}/memory-focus.json +4 -1
  15. package/dist/assets/{profiles → improve-strategies}/proactive-maintenance.json +5 -5
  16. package/dist/assets/{profiles → improve-strategies}/quick.json +4 -2
  17. package/dist/assets/improve-strategies/reflect-distill.json +30 -0
  18. package/dist/assets/{profiles → improve-strategies}/thorough.json +1 -1
  19. package/dist/assets/prompts/consolidate-system.md +5 -5
  20. package/dist/assets/prompts/extract-session.md +2 -6
  21. package/dist/assets/prompts/memory-infer-user.md +2 -3
  22. package/dist/assets/prompts/reflect-llm-framed-contract.md +11 -0
  23. package/dist/assets/prompts/reflect-llm-schema-contract.md +3 -0
  24. package/dist/assets/prompts/reflect-output-repair.md +3 -0
  25. package/dist/assets/prompts/workflow-unit-preamble.md +26 -0
  26. package/dist/assets/stash-skeleton/README.md +38 -10
  27. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
  28. package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
  29. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
  30. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
  31. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
  32. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
  33. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
  34. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
  35. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
  36. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
  37. package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
  38. package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
  39. package/dist/assets/tasks/core/extract.yml +3 -2
  40. package/dist/assets/tasks/core/improve.yml +2 -1
  41. package/dist/assets/tasks/core/index-refresh.yml +1 -0
  42. package/dist/assets/tasks/core/sync.yml +1 -0
  43. package/dist/assets/tasks/core/version-check.yml +2 -1
  44. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
  45. package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
  46. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
  47. package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
  48. package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
  49. package/dist/assets/templates/html/health.html +5 -4
  50. package/dist/assets/workflows/workflow-template.md +31 -15
  51. package/dist/cli/invocation.js +279 -0
  52. package/dist/cli/parse-args.js +5 -90
  53. package/dist/cli/retired-commands.js +78 -0
  54. package/dist/cli/shared.js +158 -48
  55. package/dist/cli-node.mjs +2 -1
  56. package/dist/cli.js +747 -293
  57. package/dist/commands/agent/agent-dispatch.js +19 -18
  58. package/dist/commands/agent/agent-support.js +0 -24
  59. package/dist/commands/agent/contribute-cli.js +43 -97
  60. package/dist/commands/completions.js +80 -23
  61. package/dist/commands/config-cli.js +44 -281
  62. package/dist/commands/env/env-binding.js +99 -0
  63. package/dist/commands/env/env-cli.js +84 -224
  64. package/dist/commands/env/env.js +12 -163
  65. package/dist/commands/env/marker-path.js +6 -0
  66. package/dist/commands/env/secret-cli.js +45 -61
  67. package/dist/commands/env/secret.js +32 -62
  68. package/dist/commands/feedback-cli.js +179 -85
  69. package/dist/commands/health/accept-rate.js +58 -0
  70. package/dist/commands/health/advisories.js +7 -8
  71. package/dist/commands/health/checks.js +279 -94
  72. package/dist/commands/health/html-report.js +197 -578
  73. package/dist/commands/health/improve-metrics.js +277 -246
  74. package/dist/commands/health/llm-usage.js +19 -19
  75. package/dist/commands/health/md-report.js +16 -7
  76. package/dist/commands/health/metrics.js +67 -32
  77. package/dist/commands/health/renderers.js +47 -0
  78. package/dist/commands/health/report-view-model.js +508 -0
  79. package/dist/commands/health/stash-exposure.js +1 -1
  80. package/dist/commands/health/surfaces.js +16 -56
  81. package/dist/commands/health/task-runs.js +3 -67
  82. package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
  83. package/dist/commands/health/types-improve.js +29 -0
  84. package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
  85. package/dist/commands/health/types-result.js +7 -0
  86. package/dist/commands/health/types-runs.js +4 -0
  87. package/dist/commands/health/types-session-log.js +4 -0
  88. package/dist/commands/health/types-windows.js +4 -0
  89. package/dist/commands/health/types.js +26 -21
  90. package/dist/commands/health/windows.js +2 -3
  91. package/dist/commands/health.js +296 -167
  92. package/dist/commands/improve/anti-collapse.js +5 -5
  93. package/dist/commands/improve/autonomy-gate.js +68 -0
  94. package/dist/commands/improve/collapse-detector.js +65 -52
  95. package/dist/commands/improve/consolidate/chunking.js +9 -7
  96. package/dist/commands/improve/consolidate/eligibility.js +1 -23
  97. package/dist/commands/improve/consolidate/merge.js +4 -0
  98. package/dist/commands/improve/consolidate.js +454 -1354
  99. package/dist/commands/improve/content-hash.js +39 -0
  100. package/dist/commands/improve/distill/content-repair.js +4 -10
  101. package/dist/commands/improve/distill/promote-memory.js +89 -64
  102. package/dist/commands/improve/distill/quality-gate.js +118 -42
  103. package/dist/commands/improve/distill-guards.js +1 -1
  104. package/dist/commands/improve/distill-promotion-policy.js +33 -888
  105. package/dist/commands/improve/distill.js +607 -363
  106. package/dist/commands/improve/eligibility.js +165 -79
  107. package/dist/commands/improve/extract-cli.js +35 -126
  108. package/dist/commands/improve/extract-prompt.js +6 -35
  109. package/dist/commands/improve/extract.js +640 -391
  110. package/dist/commands/improve/feedback-valence.js +2 -12
  111. package/dist/commands/improve/improve-cli.js +134 -135
  112. package/dist/commands/improve/improve-result-file.js +30 -50
  113. package/dist/commands/improve/improve-run-types.js +4 -0
  114. package/dist/commands/improve/improve-strategies.js +135 -0
  115. package/dist/commands/improve/improve.js +904 -701
  116. package/dist/commands/improve/locks.js +64 -111
  117. package/dist/commands/improve/loop-stages.js +1110 -923
  118. package/dist/commands/improve/memory/derived-ref.js +124 -0
  119. package/dist/commands/improve/memory/memory-belief.js +79 -7
  120. package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
  121. package/dist/commands/improve/memory/memory-improve.js +25 -37
  122. package/dist/commands/improve/outcome-loop.js +25 -88
  123. package/dist/commands/improve/preparation.js +1034 -813
  124. package/dist/commands/improve/proactive-maintenance.js +34 -9
  125. package/dist/commands/improve/proposal-envelope.js +31 -0
  126. package/dist/commands/improve/reflect.js +983 -794
  127. package/dist/commands/improve/run-context.js +119 -0
  128. package/dist/commands/improve/salience.js +24 -127
  129. package/dist/commands/improve/session-asset.js +7 -3
  130. package/dist/commands/improve/shared.js +14 -34
  131. package/dist/commands/improve/source-identity.js +28 -0
  132. package/dist/commands/improve/triage.js +20 -17
  133. package/dist/commands/lint/base-linter.js +340 -313
  134. package/dist/commands/lint/env-key-rules.js +31 -47
  135. package/dist/commands/lint/index.js +185 -30
  136. package/dist/commands/{events.js → log.js} +28 -38
  137. package/dist/commands/migrate-cli.js +54 -0
  138. package/dist/commands/migration-tool.js +55 -0
  139. package/dist/commands/observability-cli.js +70 -208
  140. package/dist/commands/proposal/diff-format.js +50 -0
  141. package/dist/commands/proposal/drain-policies.js +0 -6
  142. package/dist/commands/proposal/drain.js +91 -40
  143. package/dist/commands/proposal/proposal-cli.js +134 -132
  144. package/dist/commands/proposal/proposal-types.js +56 -0
  145. package/dist/commands/proposal/proposal.js +83 -65
  146. package/dist/commands/proposal/propose-cli.js +88 -0
  147. package/dist/commands/proposal/propose.js +105 -88
  148. package/dist/commands/proposal/repository.js +1303 -278
  149. package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
  150. package/dist/commands/proposal/validators/proposal-validators.js +61 -12
  151. package/dist/commands/proposal/validators/proposals.js +6 -8
  152. package/dist/commands/read/curate.js +78 -73
  153. package/dist/commands/read/knowledge.js +510 -13
  154. package/dist/commands/read/registry-search.js +2 -2
  155. package/dist/commands/read/remember-cli.js +84 -15
  156. package/dist/commands/read/search-cli.js +203 -96
  157. package/dist/commands/read/search.js +126 -94
  158. package/dist/commands/read/show.js +226 -250
  159. package/dist/commands/registry-cli.js +34 -60
  160. package/dist/commands/remember.js +18 -57
  161. package/dist/commands/sources/add-cli.js +104 -49
  162. package/dist/commands/sources/bundle-cli.js +166 -0
  163. package/dist/commands/sources/bundle-config-ops.js +63 -0
  164. package/dist/commands/sources/info.js +27 -15
  165. package/dist/commands/sources/init.js +30 -40
  166. package/dist/commands/sources/installed-stashes.js +469 -172
  167. package/dist/commands/sources/migration-help.js +7 -4
  168. package/dist/commands/sources/schema-repair.js +10 -9
  169. package/dist/commands/sources/self-update.js +182 -121
  170. package/dist/commands/sources/source-add.js +169 -178
  171. package/dist/commands/sources/source-clone.js +144 -41
  172. package/dist/commands/sources/source-manage.js +94 -59
  173. package/dist/commands/sources/sources-cli.js +64 -205
  174. package/dist/commands/sources/stash-cli.js +91 -54
  175. package/dist/commands/sources/stash-skeleton.js +1 -1
  176. package/dist/commands/tasks/tasks-cli.js +106 -104
  177. package/dist/commands/tasks/tasks.js +445 -262
  178. package/dist/commands/workflow-cli.js +232 -121
  179. package/dist/core/action-contributors.js +1 -1
  180. package/dist/core/activation-policy.js +49 -0
  181. package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
  182. package/dist/core/adapter/adapters/akm-adapter.js +528 -0
  183. package/dist/core/adapter/adapters/akm-lint.js +392 -0
  184. package/dist/core/adapter/adapters/akm-metadata.js +387 -0
  185. package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
  186. package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
  187. package/dist/core/adapter/adapters/claude-adapter.js +61 -0
  188. package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
  189. package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
  190. package/dist/core/adapter/adapters/index.js +80 -0
  191. package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
  192. package/dist/core/adapter/adapters/okf-adapter.js +391 -0
  193. package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
  194. package/dist/core/adapter/adapters/shared.js +286 -0
  195. package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
  196. package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
  197. package/dist/core/adapter/bundle-adapter.js +4 -0
  198. package/dist/core/adapter/detect-adapter.js +17 -0
  199. package/dist/core/adapter/recognize-match.js +44 -0
  200. package/dist/core/adapter/registry.js +56 -0
  201. package/dist/core/adapter/types.js +4 -0
  202. package/dist/core/asset/akm-markdown.js +30 -0
  203. package/dist/core/asset/asset-placement.js +243 -0
  204. package/dist/core/asset/asset-ref.js +110 -79
  205. package/dist/core/asset/asset-serialize.js +20 -0
  206. package/dist/core/asset/frontmatter.js +28 -12
  207. package/dist/core/asset/markdown.js +40 -51
  208. package/dist/core/asset/resolve-ref.js +274 -0
  209. package/dist/core/asset/stash-meta.js +2 -2
  210. package/dist/core/bundle-id.js +51 -0
  211. package/dist/core/common.js +281 -86
  212. package/dist/core/config/config-io.js +42 -128
  213. package/dist/core/config/config-schema.js +233 -834
  214. package/dist/core/config/config-sources.js +162 -39
  215. package/dist/core/config/config-types.js +16 -11
  216. package/dist/core/config/config-version.js +29 -0
  217. package/dist/core/config/config-walker.js +126 -37
  218. package/dist/core/config/config.js +154 -331
  219. package/dist/core/config/deep-merge.js +41 -0
  220. package/dist/core/config/engine-semantics.js +28 -0
  221. package/dist/core/config/experimental.js +21 -0
  222. package/dist/core/config/schema/embedding.js +38 -0
  223. package/dist/core/config/schema/engines.js +116 -0
  224. package/dist/core/config/schema/experimental.js +47 -0
  225. package/dist/core/config/schema/feedback.js +31 -0
  226. package/dist/core/config/schema/improve-processes.js +389 -0
  227. package/dist/core/config/schema/improve.js +94 -0
  228. package/dist/core/config/schema/index-config.js +176 -0
  229. package/dist/core/config/schema/output.js +18 -0
  230. package/dist/core/config/schema/primitives.js +94 -0
  231. package/dist/core/config/schema/search.js +30 -0
  232. package/dist/core/config/schema/setup.js +18 -0
  233. package/dist/core/config/schema/sources-bundles.js +169 -0
  234. package/dist/core/config/schema/workflow.js +29 -0
  235. package/dist/core/env-secret-ref.js +155 -20
  236. package/dist/core/errors.js +17 -15
  237. package/dist/core/events-types.js +4 -0
  238. package/dist/core/events.js +46 -128
  239. package/dist/core/extra-params.js +62 -0
  240. package/dist/core/file-change.js +17 -0
  241. package/dist/core/file-lock.js +202 -57
  242. package/dist/core/fs-txn.js +392 -0
  243. package/dist/core/git-message.js +59 -0
  244. package/dist/core/improve-result.js +167 -0
  245. package/dist/core/json-schema.js +142 -0
  246. package/dist/core/lesson-lint.js +1 -17
  247. package/dist/core/logs-db.js +1 -1
  248. package/dist/core/maintenance-barrier.js +135 -0
  249. package/dist/core/migration-operation.js +44 -0
  250. package/dist/core/mutation-target.js +78 -0
  251. package/dist/core/paths.js +22 -25
  252. package/dist/core/platform.js +10 -0
  253. package/dist/core/recognition-util.js +128 -0
  254. package/dist/core/redaction.js +392 -0
  255. package/dist/core/standards/resolve-standards-context.js +36 -65
  256. package/dist/core/standards/resolve-stash-standards.js +2 -2
  257. package/dist/core/standards/resolve-type-conventions.js +5 -5
  258. package/dist/core/state/migrations.js +242 -11
  259. package/dist/core/state-db.js +98 -10
  260. package/dist/core/structured.js +1 -1
  261. package/dist/core/subprocess.js +303 -0
  262. package/dist/core/text-truncation.js +9 -5
  263. package/dist/core/time.js +20 -0
  264. package/dist/core/type-presentation.js +130 -0
  265. package/dist/core/warn.js +0 -3
  266. package/dist/core/write-source.js +834 -118
  267. package/dist/indexer/bundle-identity-guard.js +92 -0
  268. package/dist/indexer/db/graph-db.js +1 -25
  269. package/dist/indexer/db/llm-cache.js +1 -1
  270. package/dist/indexer/ensure-index.js +30 -9
  271. package/dist/indexer/graph/graph-boost.js +9 -30
  272. package/dist/indexer/graph/graph-extraction.js +41 -27
  273. package/dist/indexer/graph/graph-types.js +4 -0
  274. package/dist/indexer/index-writer-lock.js +93 -49
  275. package/dist/indexer/index-written-assets.js +100 -53
  276. package/dist/indexer/indexer.js +746 -329
  277. package/dist/indexer/init.js +18 -25
  278. package/dist/indexer/installations.js +142 -0
  279. package/dist/indexer/passes/dir-staleness.js +18 -10
  280. package/dist/indexer/passes/memory-inference.js +25 -15
  281. package/dist/indexer/passes/metadata.js +412 -243
  282. package/dist/indexer/scan/doc-to-entry.js +160 -0
  283. package/dist/indexer/scan/drain-dir.js +134 -0
  284. package/dist/indexer/search/db-search.js +292 -108
  285. package/dist/indexer/search/fts-query.js +64 -0
  286. package/dist/indexer/search/ranking-contributors.js +145 -25
  287. package/dist/indexer/search/ranking-types.js +4 -0
  288. package/dist/indexer/search/ranking.js +28 -71
  289. package/dist/indexer/search/search-attribution.js +67 -0
  290. package/dist/indexer/search/search-fields.js +18 -3
  291. package/dist/indexer/search/search-hit-enrichers.js +30 -40
  292. package/dist/indexer/search/search-source.js +157 -111
  293. package/dist/indexer/search/semantic-status.js +4 -1
  294. package/dist/indexer/usage/usage-events.js +10 -30
  295. package/dist/indexer/walk/file-context.js +3 -45
  296. package/dist/indexer/walk/matchers.js +42 -34
  297. package/dist/indexer/walk/path-resolver.js +11 -5
  298. package/dist/indexer/walk/walker.js +42 -14
  299. package/dist/integrations/agent/builder-shared.js +7 -0
  300. package/dist/integrations/agent/builders.js +5 -56
  301. package/dist/integrations/agent/config.js +3 -143
  302. package/dist/integrations/agent/detect.js +17 -2
  303. package/dist/integrations/agent/engine-resolution.js +231 -0
  304. package/dist/integrations/agent/index.js +1 -2
  305. package/dist/integrations/agent/model-aliases.js +16 -2
  306. package/dist/integrations/agent/profiles.js +36 -62
  307. package/dist/integrations/agent/prompts.js +46 -18
  308. package/dist/integrations/agent/runner-dispatch.js +93 -4
  309. package/dist/integrations/agent/runner.js +76 -208
  310. package/dist/integrations/agent/spawn.js +88 -196
  311. package/dist/integrations/harnesses/aider/agent-builder.js +114 -0
  312. package/dist/integrations/harnesses/aider/index.js +48 -0
  313. package/dist/integrations/harnesses/aider/result-extractor.js +53 -0
  314. package/dist/integrations/harnesses/amazonq/agent-builder.js +147 -0
  315. package/dist/integrations/harnesses/amazonq/index.js +45 -0
  316. package/dist/integrations/harnesses/amazonq/result-extractor.js +48 -0
  317. package/dist/integrations/harnesses/claude/agent-builder.js +46 -8
  318. package/dist/integrations/harnesses/claude/config-import.js +1 -3
  319. package/dist/integrations/harnesses/claude/index.js +24 -35
  320. package/dist/integrations/harnesses/claude/result-extractor.js +52 -0
  321. package/dist/integrations/harnesses/claude/session-log.js +27 -75
  322. package/dist/integrations/harnesses/codex/agent-builder.js +138 -0
  323. package/dist/integrations/harnesses/codex/index.js +52 -0
  324. package/dist/integrations/harnesses/codex/result-extractor.js +73 -0
  325. package/dist/integrations/harnesses/copilot/agent-builder.js +122 -0
  326. package/dist/integrations/harnesses/copilot/index.js +48 -0
  327. package/dist/integrations/harnesses/copilot/result-extractor.js +151 -0
  328. package/dist/integrations/harnesses/gemini/agent-builder.js +120 -0
  329. package/dist/integrations/harnesses/gemini/index.js +48 -0
  330. package/dist/integrations/harnesses/gemini/result-extractor.js +121 -0
  331. package/dist/integrations/harnesses/ids.js +24 -0
  332. package/dist/integrations/harnesses/index.js +54 -34
  333. package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
  334. package/dist/integrations/harnesses/opencode/config-import.js +1 -3
  335. package/dist/integrations/harnesses/opencode/index.js +14 -32
  336. package/dist/integrations/harnesses/opencode/session-log.js +67 -125
  337. package/dist/integrations/harnesses/opencode-sdk/harness.js +51 -0
  338. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +681 -108
  339. package/dist/integrations/harnesses/openhands/agent-builder.js +128 -0
  340. package/dist/integrations/harnesses/openhands/index.js +48 -0
  341. package/dist/integrations/harnesses/openhands/result-extractor.js +103 -0
  342. package/dist/integrations/harnesses/pi/agent-builder.js +97 -0
  343. package/dist/integrations/harnesses/pi/index.js +45 -0
  344. package/dist/integrations/harnesses/pi/result-extractor.js +135 -0
  345. package/dist/integrations/harnesses/shared.js +17 -0
  346. package/dist/integrations/harnesses/types.js +43 -32
  347. package/dist/integrations/lockfile.js +211 -24
  348. package/dist/integrations/session-logs/index.js +36 -39
  349. package/dist/integrations/session-logs/provider-base.js +113 -0
  350. package/dist/llm/client.js +182 -110
  351. package/dist/llm/embedders/deterministic.js +2 -2
  352. package/dist/llm/embedders/remote.js +21 -9
  353. package/dist/llm/feature-gate.js +17 -57
  354. package/dist/llm/graph-extract.js +12 -13
  355. package/dist/llm/index-passes.js +8 -42
  356. package/dist/llm/memory-infer.js +144 -1
  357. package/dist/llm/metadata-enhance.js +45 -30
  358. package/dist/llm/structured-call.js +16 -8
  359. package/dist/llm/usage-persist.js +30 -5
  360. package/dist/llm/usage-telemetry.js +59 -6
  361. package/dist/output/cli-hints.js +1 -2
  362. package/dist/output/command-registry.js +27 -0
  363. package/dist/output/context.js +22 -7
  364. package/dist/output/format-exempt.js +80 -0
  365. package/dist/output/generic-render.js +251 -0
  366. package/dist/output/html-render.js +11 -16
  367. package/dist/output/render-registry.js +57 -0
  368. package/dist/output/renderers.js +14 -279
  369. package/dist/output/shapes/curate.js +10 -1
  370. package/dist/output/shapes/events.js +12 -7
  371. package/dist/output/shapes/helpers.js +58 -84
  372. package/dist/output/shapes/passthrough.js +11 -39
  373. package/dist/output/shapes/proposal/producer.js +15 -7
  374. package/dist/output/shapes/registry.js +12 -6
  375. package/dist/output/shapes.js +0 -9
  376. package/dist/output/text/{init.js → bundle-create.js} +3 -1
  377. package/dist/output/text/bundle-show.js +7 -0
  378. package/dist/output/text/command-format.js +562 -0
  379. package/dist/output/text/env.js +1 -3
  380. package/dist/output/text/events.js +8 -7
  381. package/dist/output/text/helpers.js +15 -1164
  382. package/dist/output/text/proposal/producer.js +4 -2
  383. package/dist/output/text/proposal-format.js +202 -0
  384. package/dist/output/text/registry-commands.js +1 -2
  385. package/dist/output/text/registry.js +12 -6
  386. package/dist/output/text/show-directives.js +117 -0
  387. package/dist/output/text/show-format.js +103 -0
  388. package/dist/output/text/sync.js +5 -0
  389. package/dist/output/text/workflow-format.js +332 -0
  390. package/dist/output/text/workflow.js +3 -2
  391. package/dist/output/text.js +10 -19
  392. package/dist/registry/factory.js +4 -6
  393. package/dist/registry/origin-resolve.js +16 -27
  394. package/dist/registry/providers/skills-sh.js +3 -3
  395. package/dist/registry/providers/static-index.js +15 -25
  396. package/dist/registry/resolve.js +43 -94
  397. package/dist/registry/semver.js +43 -0
  398. package/dist/runtime.js +81 -12
  399. package/dist/scripts/akm-migrate.js +35529 -0
  400. package/dist/setup/detect.js +5 -7
  401. package/dist/setup/detected-engines.js +136 -0
  402. package/dist/setup/engine-config.js +100 -0
  403. package/dist/setup/registry-stash-loader.js +3 -3
  404. package/dist/setup/semantic-assets.js +12 -9
  405. package/dist/setup/setup.js +444 -208
  406. package/dist/setup/steps/connection-shared.js +120 -0
  407. package/dist/setup/steps/connection.js +108 -305
  408. package/dist/setup/steps/platforms.js +13 -12
  409. package/dist/setup/steps/semantic.js +15 -3
  410. package/dist/setup/steps/sources.js +21 -15
  411. package/dist/setup/steps/stashdir.js +6 -4
  412. package/dist/setup/steps/tasks.js +236 -119
  413. package/dist/setup/steps.js +3 -2
  414. package/dist/sources/freshness.js +39 -0
  415. package/dist/sources/provider-factory.js +11 -17
  416. package/dist/sources/providers/filesystem.js +2 -3
  417. package/dist/sources/providers/git-install.js +278 -34
  418. package/dist/sources/providers/git-provider.js +54 -56
  419. package/dist/sources/providers/git-stash.js +420 -91
  420. package/dist/sources/providers/git.js +2 -2
  421. package/dist/sources/providers/npm.js +16 -19
  422. package/dist/sources/providers/provider-utils.js +47 -22
  423. package/dist/sources/providers/sync-from-ref.js +3 -9
  424. package/dist/sources/providers/website.js +2 -2
  425. package/dist/sources/resolve.js +11 -10
  426. package/dist/sources/snapshot-fetchers/types.js +4 -0
  427. package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
  428. package/dist/storage/database.js +60 -4
  429. package/dist/storage/engines/sqlite-migrations.js +156 -5
  430. package/dist/storage/locations.js +1 -2
  431. package/dist/storage/repositories/canaries-repository.js +1 -1
  432. package/dist/storage/repositories/events-repository.js +51 -11
  433. package/dist/storage/repositories/improve-runs-repository.js +6 -32
  434. package/dist/storage/repositories/index-connection.js +79 -0
  435. package/dist/storage/repositories/index-db.js +4 -3
  436. package/dist/storage/repositories/index-entries-repository.js +863 -0
  437. package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
  438. package/dist/storage/repositories/index-entry-types.js +4 -0
  439. package/dist/storage/repositories/index-fts-repository.js +167 -0
  440. package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
  441. package/dist/storage/repositories/index-meta-repository.js +49 -0
  442. package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
  443. package/dist/storage/repositories/index-sql.js +12 -0
  444. package/dist/storage/repositories/index-utility-repository.js +356 -0
  445. package/dist/storage/repositories/index-vec-repository.js +250 -0
  446. package/dist/storage/repositories/outcome-repository.js +119 -0
  447. package/dist/storage/repositories/proposals-repository.js +317 -75
  448. package/dist/storage/repositories/registry-cache.js +1 -1
  449. package/dist/storage/repositories/salience-repository.js +172 -0
  450. package/dist/storage/repositories/task-history-repository.js +110 -3
  451. package/dist/storage/repositories/workflow-runs-repository.js +240 -19
  452. package/dist/tasks/backends/cron.js +169 -46
  453. package/dist/tasks/backends/exec-utils.js +76 -3
  454. package/dist/tasks/backends/index.js +6 -9
  455. package/dist/tasks/backends/launchd.js +292 -55
  456. package/dist/tasks/backends/schtasks.js +557 -70
  457. package/dist/tasks/backends/types.js +4 -0
  458. package/dist/tasks/command-executable.js +93 -0
  459. package/dist/tasks/embedded.js +56 -38
  460. package/dist/tasks/parser.js +156 -64
  461. package/dist/tasks/resolve-akm-bin.js +144 -51
  462. package/dist/tasks/runner.js +377 -209
  463. package/dist/tasks/schedule.js +108 -19
  464. package/dist/tasks/scheduler-invocation.js +296 -0
  465. package/dist/tasks/schema.js +1 -1
  466. package/dist/tasks/task-id.js +35 -0
  467. package/dist/tasks/validator.js +30 -16
  468. package/dist/text-import-hook.mjs +1 -1
  469. package/dist/workflows/authoring/authoring.js +104 -43
  470. package/dist/workflows/authoring/scope-key.js +1 -1
  471. package/dist/workflows/cli.js +0 -16
  472. package/dist/workflows/concurrency-policy.js +15 -0
  473. package/dist/workflows/exec/brief.js +450 -0
  474. package/dist/workflows/exec/frozen-judge.js +47 -0
  475. package/dist/workflows/exec/native-executor.js +1038 -0
  476. package/dist/workflows/exec/param-secrets.js +115 -0
  477. package/dist/workflows/exec/report.js +1460 -0
  478. package/dist/workflows/exec/run-workflow.js +602 -0
  479. package/dist/workflows/exec/scheduler.js +71 -0
  480. package/dist/workflows/exec/step-work.js +1190 -0
  481. package/dist/workflows/exec/unit-writer.js +23 -0
  482. package/dist/workflows/exec/workflow-engine-gate.js +67 -0
  483. package/dist/workflows/exec/worktree.js +171 -0
  484. package/dist/workflows/ir/compile.js +246 -0
  485. package/dist/workflows/ir/freeze.js +233 -0
  486. package/dist/workflows/ir/params.js +54 -0
  487. package/dist/workflows/ir/plan-hash.js +68 -0
  488. package/dist/workflows/ir/schema.js +540 -0
  489. package/dist/workflows/parser.js +878 -304
  490. package/dist/workflows/program/expressions.js +181 -0
  491. package/dist/workflows/program/schema.js +51 -0
  492. package/dist/workflows/renderer.js +100 -45
  493. package/dist/workflows/resource-limits.js +22 -0
  494. package/dist/workflows/runtime/agent-identity.js +59 -14
  495. package/dist/workflows/runtime/checkin.js +1 -1
  496. package/dist/workflows/runtime/plan-classifier.js +131 -0
  497. package/dist/workflows/runtime/runs.js +376 -119
  498. package/dist/workflows/runtime/unit-checkin.js +45 -0
  499. package/dist/workflows/runtime/unit-phases.js +20 -0
  500. package/dist/workflows/runtime/workflow-asset-loader.js +241 -40
  501. package/dist/workflows/schema.js +1 -11
  502. package/dist/workflows/validate-summary.js +2 -3
  503. package/dist/workflows/validator.js +52 -30
  504. package/docs/README.md +42 -78
  505. package/docs/migration/README.md +8 -0
  506. package/docs/migration/release-notes/0.6.0.md +1 -1
  507. package/docs/migration/release-notes/0.7.0.md +9 -8
  508. package/docs/migration/release-notes/0.9.0.md +158 -14
  509. package/docs/migration/v0.7-to-v0.8.md +46 -47
  510. package/docs/migration/v0.8-to-v0.9.md +844 -0
  511. package/docs/reference/README.md +12 -0
  512. package/docs/reference/data-and-telemetry.md +333 -0
  513. package/package.json +21 -17
  514. package/schemas/akm-asset-envelope.json +93 -0
  515. package/schemas/akm-config.json +4636 -0
  516. package/schemas/akm-task.json +87 -0
  517. package/schemas/akm-workflow.json +373 -0
  518. package/dist/akm-migrate-storage +0 -38
  519. package/dist/assets/help/help-accept.md +0 -12
  520. package/dist/assets/help/help-improve.md +0 -84
  521. package/dist/assets/help/help-proposals.md +0 -17
  522. package/dist/assets/help/help-propose.md +0 -17
  523. package/dist/assets/help/help-reject.md +0 -11
  524. package/dist/assets/profiles/frequent.json +0 -13
  525. package/dist/assets/profiles/recombine-only.json +0 -21
  526. package/dist/assets/profiles/reflect-distill.json +0 -30
  527. package/dist/assets/profiles/synthesize.json +0 -15
  528. package/dist/assets/prompts/procedural-system.md +0 -44
  529. package/dist/assets/prompts/recombine-system.md +0 -40
  530. package/dist/assets/prompts/staleness-detect-system.md +0 -6
  531. package/dist/assets/tasks/core/backup.yml +0 -4
  532. package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
  533. package/dist/assets/templates/html/default.html +0 -78
  534. package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
  535. package/dist/assets/wiki/index-template.md +0 -12
  536. package/dist/assets/wiki/ingest-workflow-template.md +0 -83
  537. package/dist/assets/wiki/log-template.md +0 -8
  538. package/dist/assets/wiki/schema-template.md +0 -61
  539. package/dist/cli/config-migrate.js +0 -150
  540. package/dist/cli/config-validate.js +0 -39
  541. package/dist/commands/graph/graph-cli.js +0 -124
  542. package/dist/commands/graph/graph.js +0 -487
  543. package/dist/commands/improve/calibration.js +0 -161
  544. package/dist/commands/improve/dedup.js +0 -482
  545. package/dist/commands/improve/extract-watch.js +0 -140
  546. package/dist/commands/improve/hot-probation.js +0 -45
  547. package/dist/commands/improve/improve-auto-accept.js +0 -276
  548. package/dist/commands/improve/improve-profiles.js +0 -168
  549. package/dist/commands/improve/procedural.js +0 -398
  550. package/dist/commands/improve/recombine.js +0 -818
  551. package/dist/commands/improve/schema-similarity-gate.js +0 -168
  552. package/dist/commands/lint/agent-linter.js +0 -44
  553. package/dist/commands/lint/command-linter.js +0 -44
  554. package/dist/commands/lint/default-linter.js +0 -16
  555. package/dist/commands/lint/fact-linter.js +0 -39
  556. package/dist/commands/lint/knowledge-linter.js +0 -16
  557. package/dist/commands/lint/memory-linter.js +0 -61
  558. package/dist/commands/lint/registry.js +0 -41
  559. package/dist/commands/lint/skill-linter.js +0 -45
  560. package/dist/commands/lint/task-linter.js +0 -50
  561. package/dist/commands/lint/workflow-linter.js +0 -81
  562. package/dist/commands/proposal/legacy-import.js +0 -115
  563. package/dist/commands/sources/history.js +0 -196
  564. package/dist/commands/tasks/default-tasks.js +0 -186
  565. package/dist/commands/wiki-cli.js +0 -292
  566. package/dist/core/asset/asset-registry.js +0 -76
  567. package/dist/core/asset/asset-spec.js +0 -259
  568. package/dist/core/config/config-migration.js +0 -602
  569. package/dist/core/deep-merge.js +0 -38
  570. package/dist/core/eval/rank-metrics.js +0 -113
  571. package/dist/core/ripgrep/install.js +0 -163
  572. package/dist/core/ripgrep/resolve.js +0 -81
  573. package/dist/indexer/db/db.js +0 -1413
  574. package/dist/indexer/manifest.js +0 -170
  575. package/dist/indexer/passes/metadata-contributors.js +0 -31
  576. package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
  577. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -49
  578. package/dist/llm/call-ai.js +0 -62
  579. package/dist/llm/memory-infer-impl.js +0 -138
  580. package/dist/output/shapes/distill.js +0 -14
  581. package/dist/output/shapes/history.js +0 -11
  582. package/dist/output/text/distill.js +0 -6
  583. package/dist/output/text/enable-disable.js +0 -8
  584. package/dist/output/text/history.js +0 -6
  585. package/dist/output/text/wiki.js +0 -16
  586. package/dist/registry/build-index.js +0 -386
  587. package/dist/scripts/migrate-storage.js +0 -19108
  588. package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -9411
  589. package/dist/scripts/migrations/v16-to-v17.js +0 -141
  590. package/dist/setup/legacy-config.js +0 -106
  591. package/dist/storage/repositories/consolidation-repository.js +0 -38
  592. package/dist/storage/repositories/recombine-repository.js +0 -213
  593. package/dist/wiki/wiki-templates.js +0 -15
  594. package/dist/wiki/wiki.js +0 -1012
  595. package/dist/workflows/db.js +0 -215
  596. package/docs/data-and-telemetry.md +0 -226
  597. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
  598. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
@@ -0,0 +1,332 @@
1
+ // This Source Code Form is subject to the terms of the Mozilla Public
2
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+ /**
5
+ * Plain-text renderers for `akm workflow *` commands.
6
+ *
7
+ * Split out of `helpers.ts` (formerly 1418 lines / 59 fns) as its own
8
+ * sibling module: the workflow run/step/status/brief renderers form a
9
+ * cohesive, self-contained cluster (they call only each other, never
10
+ * formatters from other domains).
11
+ */
12
+ /**
13
+ * Plain-text rendering for a step-completion that was rejected by the
14
+ * summary-validation gate (#506): the step stays pending and the agent gets
15
+ * corrective feedback on what to finish/fix.
16
+ */
17
+ export function formatWorkflowCompleteRejectedPlain(r) {
18
+ const stepId = String(r.stepId ?? "?");
19
+ const feedback = typeof r.feedback === "string" ? r.feedback : "";
20
+ const missing = Array.isArray(r.missing) ? r.missing.map((m) => String(m)) : [];
21
+ const lines = [`workflow complete: rejected — step "${stepId}" does not meet its completion criteria`];
22
+ if (feedback)
23
+ lines.push(` feedback: ${feedback}`);
24
+ if (missing.length > 0) {
25
+ lines.push(" outstanding:");
26
+ for (const m of missing)
27
+ lines.push(` - ${m}`);
28
+ }
29
+ return lines.join("\n");
30
+ }
31
+ export function formatWorkflowListPlain(result) {
32
+ const runs = Array.isArray(result.runs) ? result.runs : [];
33
+ if (runs.length === 0) {
34
+ return "No workflow runs in the current working scope. Start one with `akm workflow next workflows/<name>` or author one with `akm workflow create <name>`.";
35
+ }
36
+ return runs
37
+ .map((run) => {
38
+ const id = typeof run.id === "string" ? run.id : "unknown";
39
+ // Fallback matches the `id`/`status` convention just below (plain
40
+ // "unknown", not a `type:name`-shaped placeholder — that shape reads as
41
+ // a ref in the dead colon grammar, which this fallback must not model).
42
+ const ref = typeof run.workflowRef === "string" ? run.workflowRef : "unknown";
43
+ const status = typeof run.status === "string" ? run.status : "unknown";
44
+ const currentStep = typeof run.currentStepId === "string" ? ` (current: ${run.currentStepId})` : "";
45
+ return `${id} ${ref} [${status}]${currentStep}`;
46
+ })
47
+ .join("\n");
48
+ }
49
+ export function formatWorkflowStatusPlain(result) {
50
+ const run = typeof result.run === "object" && result.run !== null ? result.run : undefined;
51
+ const workflow = typeof result.workflow === "object" && result.workflow !== null
52
+ ? result.workflow
53
+ : undefined;
54
+ if (!run || !workflow)
55
+ return null;
56
+ const lines = [
57
+ `workflow: ${String(workflow.ref ?? "unknown")}`,
58
+ `run: ${String(run.id ?? "unknown")}`,
59
+ `title: ${String(run.workflowTitle ?? workflow.title ?? "Workflow")}`,
60
+ `status: ${String(run.status ?? "unknown")}`,
61
+ ];
62
+ if (run.currentStepId)
63
+ lines.push(`currentStep: ${String(run.currentStepId)}`);
64
+ const steps = Array.isArray(workflow.steps) ? workflow.steps : [];
65
+ if (steps.length > 0) {
66
+ lines.push("steps:");
67
+ for (const step of steps) {
68
+ const title = typeof step.title === "string" ? step.title : "Untitled step";
69
+ const id = typeof step.id === "string" ? step.id : "unknown";
70
+ const status = typeof step.status === "string" ? step.status : "unknown";
71
+ lines.push(` - ${title} [${id}] (${status})`);
72
+ if (typeof step.notes === "string" && step.notes.trim()) {
73
+ lines.push(` notes: ${step.notes}`);
74
+ }
75
+ }
76
+ }
77
+ // `workflow status --units` (#22): the honest per-unit diagnostic surface —
78
+ // failure_reason plus any journaled result/error text. Diagnostics only; the
79
+ // deterministic step evidence above is unaffected.
80
+ const units = Array.isArray(result.units) ? result.units : undefined;
81
+ if (units) {
82
+ lines.push("");
83
+ lines.push(units.length > 0 ? "units:" : "units: (none journaled)");
84
+ for (const unit of units) {
85
+ const id = typeof unit.unitId === "string" ? unit.unitId : "unknown";
86
+ const status = typeof unit.status === "string" ? unit.status : "unknown";
87
+ const node = typeof unit.nodeId === "string" ? unit.nodeId : "";
88
+ const attempts = typeof unit.attempts === "number" ? unit.attempts : undefined;
89
+ const suffix = attempts !== undefined && attempts > 1 ? `, attempt ${attempts}` : "";
90
+ lines.push(` - ${id} [${node}] (${status}${suffix})`);
91
+ // Codex round-3 finding B: a `running` claim gone silent past the check-in
92
+ // window — the driver likely died. Surface it (with the claim holder) so a
93
+ // human can reclaim/re-run the unit, matching what `brief` reports.
94
+ if (unit.stale === true) {
95
+ const holder = typeof unit.claimHolder === "string" && unit.claimHolder.trim() ? ` claimed by ${unit.claimHolder}` : "";
96
+ lines.push(` stale: claim went silent past the check-in window${holder} — its driver may have died`);
97
+ }
98
+ if (typeof unit.failureReason === "string" && unit.failureReason.trim()) {
99
+ lines.push(` failure_reason: ${unit.failureReason}`);
100
+ }
101
+ if (typeof unit.diagnostic === "string" && unit.diagnostic.trim()) {
102
+ const diagLines = unit.diagnostic.split("\n");
103
+ lines.push(` diagnostic: ${diagLines[0]}`);
104
+ for (const diagLine of diagLines.slice(1))
105
+ lines.push(` ${diagLine}`);
106
+ }
107
+ }
108
+ }
109
+ // Review C2: the check-in `continue` directive must survive plain-text
110
+ // rendering — JSON consumers saw `checkin` but the text path dropped it.
111
+ const checkinLine = formatWorkflowCheckinLine(result);
112
+ if (checkinLine) {
113
+ lines.push("");
114
+ lines.push(checkinLine);
115
+ }
116
+ return lines.join("\n");
117
+ }
118
+ /**
119
+ * Render the stalled-run check-in directive (#506) when present on a
120
+ * workflow-next/status result. Returns null when the run is healthy.
121
+ */
122
+ function formatWorkflowCheckinLine(result) {
123
+ const checkin = typeof result.checkin === "object" && result.checkin !== null
124
+ ? result.checkin
125
+ : undefined;
126
+ if (!checkin || typeof checkin.directive !== "string" || !checkin.directive.trim())
127
+ return null;
128
+ return checkin.directive.trim();
129
+ }
130
+ export function formatWorkflowNextPlain(result) {
131
+ const base = formatWorkflowStatusPlain(result);
132
+ const step = typeof result.step === "object" && result.step !== null ? result.step : undefined;
133
+ if (!step)
134
+ return base;
135
+ const lines = base ? [base, "", "next:"] : ["next:"];
136
+ lines.push(` ${String(step.title ?? "Untitled step")} [${String(step.id ?? "unknown")}]`);
137
+ if (typeof step.instructions === "string" && step.instructions.trim()) {
138
+ const instrLines = step.instructions.trim().split("\n");
139
+ lines.push(` instructions: ${instrLines[0]}`);
140
+ for (const instrLine of instrLines.slice(1))
141
+ lines.push(` ${instrLine}`);
142
+ }
143
+ const completion = Array.isArray(step.completionCriteria) ? step.completionCriteria : [];
144
+ if (completion.length > 0) {
145
+ lines.push(" completion:");
146
+ for (const criterion of completion) {
147
+ lines.push(` - ${String(criterion)}`);
148
+ }
149
+ }
150
+ // T2-3: surface run-id as labeled field
151
+ const run = typeof result.run === "object" && result.run !== null ? result.run : undefined;
152
+ const runId = typeof run?.id === "string" ? run.id : null;
153
+ const stepId = typeof step?.id === "string" ? step.id : null;
154
+ if (runId) {
155
+ lines.push("");
156
+ lines.push(`runId: ${runId}`);
157
+ }
158
+ // T1-6: complete command
159
+ if (runId && stepId) {
160
+ lines.push("");
161
+ lines.push("COMPLETE THIS STEP:");
162
+ lines.push(` akm workflow complete '${runId}' --step '${stepId}'`);
163
+ }
164
+ else if (runId) {
165
+ lines.push("");
166
+ lines.push("COMPLETE THIS STEP:");
167
+ lines.push(` akm workflow complete '${runId}' --step '<step-id>'`);
168
+ }
169
+ return lines.join("\n");
170
+ }
171
+ export function formatWorkflowRunPlain(result) {
172
+ const run = typeof result.run === "object" && result.run !== null ? result.run : undefined;
173
+ if (!run)
174
+ return null;
175
+ const lines = [`run: ${String(run.id ?? "unknown")}`, `status: ${String(run.status ?? "unknown")}`];
176
+ const executed = Array.isArray(result.executed) ? result.executed : [];
177
+ if (executed.length === 0) {
178
+ lines.push("executed: (no steps — run was already done or blocked)");
179
+ }
180
+ else {
181
+ lines.push("executed:");
182
+ for (const step of executed) {
183
+ const marker = step.ok === true ? "ok" : "FAILED";
184
+ lines.push(` - ${String(step.stepId ?? "?")} [${marker}] units: ${String(step.unitCount ?? 0)}` +
185
+ (Number(step.failedUnits ?? 0) > 0 ? ` (${String(step.failedUnits)} failed)` : ""));
186
+ if (typeof step.summary === "string" && step.summary.trim()) {
187
+ lines.push(` ${step.summary}`);
188
+ }
189
+ }
190
+ }
191
+ const gate = typeof result.gateRejection === "object" && result.gateRejection !== null
192
+ ? result.gateRejection
193
+ : undefined;
194
+ if (gate) {
195
+ lines.push(`gate rejected step ${String(gate.stepId ?? "?")}: ${String(gate.feedback ?? "")}`);
196
+ const missing = Array.isArray(gate.missing) ? gate.missing : [];
197
+ for (const item of missing)
198
+ lines.push(` missing: ${String(item)}`);
199
+ }
200
+ if (result.done === true)
201
+ lines.push("workflow completed.");
202
+ return lines.join("\n");
203
+ }
204
+ export function formatWorkflowBriefPlain(result) {
205
+ const run = typeof result.run === "object" && result.run !== null ? result.run : undefined;
206
+ if (!run)
207
+ return null;
208
+ const lines = [];
209
+ lines.push(`# Workflow brief: ${String(run.id ?? "unknown")}`);
210
+ lines.push(`workflow: ${String(run.workflowRef ?? "?")} (${String(run.workflowTitle ?? "")})`);
211
+ lines.push(`status: ${String(run.status ?? "?")}`);
212
+ if (typeof result.message === "string")
213
+ lines.push(result.message);
214
+ const lease = typeof result.engineLease === "object" && result.engineLease !== null
215
+ ? result.engineLease
216
+ : undefined;
217
+ if (lease) {
218
+ const live = lease.live === true ? "LIVE" : "expired";
219
+ lines.push(`engine lease: ${String(lease.holder ?? "?")} (until ${String(lease.until ?? "?")}) [${live}]`);
220
+ }
221
+ const warnings = Array.isArray(result.warnings) ? result.warnings : [];
222
+ for (const w of warnings)
223
+ lines.push(`! ${String(w)}`);
224
+ if (result.done === true) {
225
+ lines.push("");
226
+ lines.push("This run is completed — no work remains.");
227
+ return lines.join("\n");
228
+ }
229
+ const step = typeof result.step === "object" && result.step !== null ? result.step : undefined;
230
+ if (!step) {
231
+ return lines.join("\n");
232
+ }
233
+ const gate = typeof step.gate === "object" && step.gate !== null ? step.gate : undefined;
234
+ lines.push("");
235
+ lines.push(`## Active step: ${String(step.stepId ?? "?")} — ${String(step.title ?? "")} [${String(step.kind ?? "execute")}]`);
236
+ if (gate) {
237
+ const criteria = Array.isArray(gate.criteria) ? gate.criteria : [];
238
+ lines.push(`gate: loop ${String(gate.currentLoop ?? 1)} of max ${String(gate.maxLoops ?? 1)}` +
239
+ (criteria.length > 0 ? `; criteria: ${criteria.map(String).join("; ")}` : "; no completion criteria") +
240
+ (gate.judgesArtifact === true ? " (artifact-judged)" : ""));
241
+ }
242
+ if (step.outputSchema !== undefined)
243
+ lines.push("outputSchema: declared (see JSON output)");
244
+ const feedback = typeof result.gateFeedback === "object" && result.gateFeedback !== null
245
+ ? result.gateFeedback
246
+ : undefined;
247
+ if (feedback) {
248
+ lines.push(`gate feedback (previous loop rejected): ${String(feedback.feedback ?? "")}`);
249
+ const missing = Array.isArray(feedback.missing) ? feedback.missing : [];
250
+ for (const m of missing)
251
+ lines.push(` - missing: ${String(m)}`);
252
+ }
253
+ const route = typeof result.route === "object" && result.route !== null ? result.route : undefined;
254
+ if (route) {
255
+ lines.push("");
256
+ lines.push(`## Route contract on ${String(route.input ?? "?")}`);
257
+ const when = typeof route.when === "object" && route.when !== null ? route.when : {};
258
+ for (const [value, target] of Object.entries(when))
259
+ lines.push(` when "${value}" → ${String(target)}`);
260
+ if (route.defaultStepId !== undefined)
261
+ lines.push(` default → ${String(route.defaultStepId)}`);
262
+ const decision = typeof route.decision === "object" && route.decision !== null
263
+ ? route.decision
264
+ : undefined;
265
+ if (decision)
266
+ lines.push(` decision NOW: value "${String(decision.value)}" → ${String(decision.selected)}`);
267
+ else if (typeof route.decisionError === "string")
268
+ lines.push(` decision error: ${route.decisionError}`);
269
+ else
270
+ lines.push(" decision: pending this step's output (evaluated after units complete)");
271
+ }
272
+ const workList = typeof result.workList === "object" && result.workList !== null
273
+ ? result.workList
274
+ : undefined;
275
+ const units = workList && Array.isArray(workList.units) ? workList.units : [];
276
+ if (workList?.error) {
277
+ lines.push("");
278
+ lines.push(`work-list error: ${String(workList.error)}`);
279
+ }
280
+ else if (units.length > 0) {
281
+ lines.push("");
282
+ lines.push(`## Units (${units.length})`);
283
+ for (const u of units) {
284
+ const model = u.model ? ` model=${String(u.model)}` : "";
285
+ const journaled = typeof u.journaled === "object" && u.journaled !== null ? u.journaled : undefined;
286
+ const jstatus = journaled ? ` [journaled: ${String(journaled.status)}]` : "";
287
+ lines.push(`- ${String(u.unitId)} (runner=${String(u.runner)}${model})${jstatus}`);
288
+ const env = Array.isArray(u.env) ? u.env : [];
289
+ if (env.length > 0)
290
+ lines.push(` env (names): ${env.map(String).join(", ")}`);
291
+ if (u.outputSchema !== undefined)
292
+ lines.push(" outputSchema: declared (see JSON output)");
293
+ const resolved = typeof u.resolved === "object" && u.resolved !== null ? u.resolved : undefined;
294
+ if (resolved && resolved.ok === false)
295
+ lines.push(` RESOLUTION ERROR: ${String(resolved.error)}`);
296
+ if (typeof u.report === "string")
297
+ lines.push(` report: ${u.report}`);
298
+ }
299
+ }
300
+ // Finding D: a non-dispatching step (route-only / empty / all-unresolvable)
301
+ // advances via the `--settle` verb, surfaced so a driver can advance the spine.
302
+ if (typeof result.settleCommand === "string") {
303
+ lines.push("");
304
+ lines.push("## Advance (no reportable units)");
305
+ lines.push(`settle: ${result.settleCommand}`);
306
+ }
307
+ const guidance = typeof result.reportGuidance === "object" && result.reportGuidance !== null
308
+ ? result.reportGuidance
309
+ : undefined;
310
+ if (guidance) {
311
+ lines.push("");
312
+ lines.push("## Reporting");
313
+ if (typeof guidance.checkin === "string")
314
+ lines.push(`heartbeat: ${guidance.checkin}`);
315
+ if (typeof guidance.failure === "string")
316
+ lines.push(`on failure: ${guidance.failure}`);
317
+ }
318
+ return lines.join("\n");
319
+ }
320
+ export function formatWorkflowCreatePlain(r) {
321
+ // `workflow create --print`: no file is written, just the template text
322
+ // (dropped `workflow template`'s output, moved onto this shape).
323
+ if (typeof r.template === "string")
324
+ return r.template;
325
+ if (r.ref && r.path) {
326
+ return `Created ${String(r.ref)} at ${String(r.path)}`;
327
+ }
328
+ return null;
329
+ }
330
+ export function formatWorkflowResumePlain(r) {
331
+ return formatWorkflowStatusPlain(r) ?? `Resumed workflow run ${String(r.id ?? r.runId ?? "?")}`;
332
+ }
@@ -2,7 +2,7 @@
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
  // Output text formatters for all `akm workflow *` commands.
5
- import { formatWorkflowCompleteRejectedPlain, formatWorkflowCreatePlain, formatWorkflowListPlain, formatWorkflowNextPlain, formatWorkflowResumePlain, formatWorkflowStatusPlain, formatWorkflowValidatePlain, } from "./helpers.js";
5
+ import { formatWorkflowBriefPlain, formatWorkflowCompleteRejectedPlain, formatWorkflowCreatePlain, formatWorkflowListPlain, formatWorkflowNextPlain, formatWorkflowResumePlain, formatWorkflowRunPlain, formatWorkflowStatusPlain, } from "./helpers.js";
6
6
  export const workflowFormatters = [
7
7
  { command: "workflow-start", handler: (r) => formatWorkflowStatusPlain(r) },
8
8
  { command: "workflow-status", handler: (r) => formatWorkflowStatusPlain(r) },
@@ -11,7 +11,8 @@ export const workflowFormatters = [
11
11
  { command: "workflow-next", handler: (r) => formatWorkflowNextPlain(r) },
12
12
  { command: "workflow-list", handler: (r) => formatWorkflowListPlain(r) },
13
13
  { command: "workflow-create", handler: (r) => formatWorkflowCreatePlain(r) },
14
- { command: "workflow-validate", handler: (r) => formatWorkflowValidatePlain(r) },
15
14
  { command: "workflow-resume", handler: (r) => formatWorkflowResumePlain(r) },
16
15
  { command: "workflow-abandon", handler: (r) => formatWorkflowStatusPlain(r) },
16
+ { command: "workflow-run", handler: (r) => formatWorkflowRunPlain(r) },
17
+ { command: "workflow-brief", handler: (r) => formatWorkflowBriefPlain(r) },
17
18
  ];
@@ -2,19 +2,17 @@
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 { addFormatters } from "./text/add.js";
5
+ import { bundleCreateFormatters } from "./text/bundle-create.js";
6
+ import { bundleShowFormatters } from "./text/bundle-show.js";
5
7
  import { cloneFormatters } from "./text/clone.js";
6
8
  import { configFormatters } from "./text/config.js";
7
9
  import { curateFormatters } from "./text/curate.js";
8
- import { distillFormatters } from "./text/distill.js";
9
- import { enableDisableFormatters } from "./text/enable-disable.js";
10
10
  import { envFormatters } from "./text/env.js";
11
11
  import { eventsFormatters } from "./text/events.js";
12
12
  import { feedbackFormatters } from "./text/feedback.js";
13
- import { historyFormatters } from "./text/history.js";
14
13
  import { importFormatters } from "./text/import.js";
15
14
  import { indexFormatters } from "./text/index.js";
16
15
  import { infoFormatters } from "./text/info.js";
17
- import { initFormatters } from "./text/init.js";
18
16
  import { listFormatters } from "./text/list.js";
19
17
  import { proposalProducerFormatters } from "./text/proposal/producer.js";
20
18
  import { proposalFormatters } from "./text/proposal/proposal.js";
@@ -22,18 +20,12 @@ import { getTextFormatterHandler, registerTextFormatters } from "./text/registry
22
20
  import { registryCommandFormatters } from "./text/registry-commands.js";
23
21
  import { rememberFormatters } from "./text/remember.js";
24
22
  import { removeFormatters } from "./text/remove.js";
25
- import { saveFormatters } from "./text/save.js";
26
23
  import { searchFormatters } from "./text/search.js";
27
24
  import { showFormatters } from "./text/show.js";
25
+ import { syncFormatters } from "./text/sync.js";
28
26
  import { updateFormatters } from "./text/update.js";
29
27
  import { upgradeFormatters } from "./text/upgrade.js";
30
- import { wikiFormatters } from "./text/wiki.js";
31
28
  import { workflowFormatters } from "./text/workflow.js";
32
- // Re-export helpers so existing imports from `text.ts` keep working.
33
- export { formatAddPlain, formatClonePlain, formatConfigPlain, formatCuratePlain, formatDistillPlain, formatEventLine, formatEventsPlain, formatFeedbackPlain, formatHistoryPlain, formatImportPlain, formatIndexPlain, formatInfoPlain, formatInitPlain, formatListPlain, formatProposalAcceptPlain, formatProposalDiffPlain, formatProposalListPlain, formatProposalProducerPlain, formatProposalRejectPlain, formatProposalShowPlain, formatRegistryAddPlain, formatRegistryBuildIndexPlain, formatRegistryListPlain, formatRegistryRemovePlain, formatRegistrySearchPlain, formatRememberPlain, formatRemovePlain, formatSavePlain, formatSearchPlain, formatShowPlain, formatToggleComponentPlain, formatUpdatePlain, formatUpgradePlain, formatWikiCreatePlain, formatWikiIngestPlain, formatWikiLintPlain, formatWikiListPlain, formatWikiPagesPlain, formatWikiRegisterPlain, formatWikiRemovePlain, formatWikiShowPlain, formatWikiStashPlain, formatWorkflowCreatePlain, formatWorkflowListPlain, formatWorkflowNextPlain, formatWorkflowResumePlain, formatWorkflowStatusPlain, formatWorkflowValidatePlain, } from "./text/helpers.js";
34
- // Re-export registry API so callers can use this module as the single entry
35
- // point (backward compat).
36
- export { deregisterTextFormatter, registerTextFormatter } from "./text/registry.js";
37
29
  // ── Explicit built-in formatter assembly ──────────────────────────────────────
38
30
  // Each entry below is a pure exported `TextFormatterEntry[]` from a per-command
39
31
  // module. The set is registered ONCE, deterministically, with no reliance on
@@ -41,12 +33,12 @@ export { deregisterTextFormatter, registerTextFormatter } from "./text/registry.
41
33
  // and because each name is referenced statically, a deleted export fails to
42
34
  // compile instead of silently disappearing at runtime.
43
35
  const BUILT_IN_TEXT_FORMATTERS = [
44
- ...initFormatters,
36
+ ...bundleCreateFormatters,
37
+ ...bundleShowFormatters,
45
38
  ...indexFormatters,
46
39
  ...showFormatters,
47
40
  ...searchFormatters,
48
41
  ...curateFormatters,
49
- ...wikiFormatters,
50
42
  ...workflowFormatters,
51
43
  ...listFormatters,
52
44
  ...addFormatters,
@@ -54,18 +46,15 @@ const BUILT_IN_TEXT_FORMATTERS = [
54
46
  ...updateFormatters,
55
47
  ...upgradeFormatters,
56
48
  ...cloneFormatters,
57
- ...historyFormatters,
58
49
  ...eventsFormatters,
59
50
  ...proposalFormatters,
60
51
  ...proposalProducerFormatters,
61
- ...distillFormatters,
62
52
  ...infoFormatters,
63
53
  ...configFormatters,
64
54
  ...feedbackFormatters,
65
55
  ...rememberFormatters,
66
56
  ...importFormatters,
67
- ...saveFormatters,
68
- ...enableDisableFormatters,
57
+ ...syncFormatters,
69
58
  ...registryCommandFormatters,
70
59
  ...envFormatters,
71
60
  ];
@@ -90,12 +79,14 @@ export function outputJsonl(command, shaped) {
90
79
  // ── Dispatcher ────────────────────────────────────────────────────────────────
91
80
  /**
92
81
  * Return a plain-text string for commands that are better as short messages,
93
- * or null to fall through to YAML output.
82
+ * or null to fall through to the generic text rendering of the shaped
83
+ * envelope (`renderGenericText`, applied in `output()` in
84
+ * `src/cli/shared.ts` — this module stays dependency-free of that renderer).
94
85
  */
95
86
  export function formatPlain(command, result, detail) {
96
87
  const handler = getTextFormatterHandler(command);
97
88
  if (handler) {
98
89
  return handler(result, detail);
99
90
  }
100
- return null; // fall through to YAML
91
+ return null; // fall through to the generic text renderer, not YAML
101
92
  }
@@ -12,17 +12,15 @@
12
12
  * `sources/provider-factory.ts` or the installed-source operations in
13
13
  * `installed-stashes.ts`.
14
14
  *
15
- * Phase 6 (v1 architecture refactor): factories are now the
16
- * `RegistryProviderFactory` type owned by `src/registry/providers/types.ts`.
17
- * The legacy alias in `src/registry-provider.ts` is kept as a thin re-export
18
- * for transitional callers and will be removed after the dust settles.
15
+ * Factories use the `RegistryProviderFactory` type owned by
16
+ * `src/registry/providers/types.ts`.
19
17
  */
20
18
  import { createProviderRegistry } from "./create-provider-registry.js";
21
19
  // ── Factory map ─────────────────────────────────────────────────────────────
22
20
  const registry = createProviderRegistry();
23
- export function registerProvider(type, factory) {
21
+ export function registerRegistryProvider(type, factory) {
24
22
  registry.register(type, factory);
25
23
  }
26
- export function resolveProviderFactory(type) {
24
+ export function resolveRegistryProviderFactory(type) {
27
25
  return registry.resolve(type);
28
26
  }
@@ -2,56 +2,45 @@
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 path from "node:path";
5
+ import { isBundleSlug } from "../core/asset/asset-ref.js";
6
+ import { deriveInstallations } from "../indexer/installations.js";
5
7
  import { parseRegistryRef } from "./resolve.js";
6
8
  /**
7
9
  * Given an origin string (from an AssetRef) and the full list of stash
8
10
  * sources, return the subset of sources to search.
9
11
  *
10
- * Resolution order:
11
- * 1. undefined → all sources
12
- * 2. "local" → primary stash only (first entry)
13
- * 3. exact match → source whose registryId matches verbatim
14
- * 4. parsed match → parse origin as a registry ref, match by parsed ID
15
- * 5. path match → source whose resolved path matches the origin
16
- * 6. empty → indicates a remote/uninstalled origin (caller decides)
12
+ * Qualified asset refs use bundle identity only. Install locators and paths are
13
+ * a separate grammar handled by {@link resolveSourcesForLocator}.
17
14
  */
18
15
  export function resolveSourcesForOrigin(origin, allSources) {
19
16
  if (!origin)
20
17
  return allSources;
21
- // "local" means the primary stash (first entry)
22
- if (origin === "local") {
23
- return allSources.length > 0 ? [allSources[0]] : [];
24
- }
25
- // Exact registryId match (e.g. origin is "npm:@scope/pkg")
26
- const byExactId = allSources.filter((s) => s.registryId !== undefined && s.registryId === origin);
18
+ const installations = deriveInstallations(allSources);
19
+ return allSources.filter((_, index) => installations[index]?.id === origin);
20
+ }
21
+ /** Resolve the non-asset source locator grammar used by `akm clone`. */
22
+ export function resolveSourcesForLocator(locator, allSources) {
23
+ const byExactId = allSources.filter((source) => source.registryId === locator);
27
24
  if (byExactId.length > 0)
28
25
  return byExactId;
29
- // Parse origin as a registry ref and match by parsed ID.
30
- // Allows shorthand: "owner/repo" matches "github:owner/repo",
31
- // "@scope/pkg" matches "npm:@scope/pkg".
32
26
  try {
33
- const parsed = parseRegistryRef(origin);
27
+ const parsed = parseRegistryRef(locator);
34
28
  const byParsedId = allSources.filter((s) => s.registryId !== undefined && s.registryId === parsed.id);
35
29
  if (byParsedId.length > 0)
36
30
  return byParsedId;
37
31
  }
38
32
  catch {
39
- // Not a valid registry ref — continue to path matching
33
+ // Not a registry locator; continue to path matching.
40
34
  }
41
- // Match by resolved path (any source, including installed)
42
- const resolvedOrigin = path.resolve(origin);
43
- const byPath = allSources.filter((s) => path.resolve(s.path) === resolvedOrigin);
44
- if (byPath.length > 0)
45
- return byPath;
46
- // No match — origin may be remote/uninstalled
47
- return [];
35
+ const resolvedLocator = path.resolve(locator);
36
+ return allSources.filter((source) => path.resolve(source.path) === resolvedLocator);
48
37
  }
49
38
  /**
50
39
  * Check whether an origin refers to something that could be fetched remotely
51
40
  * (i.e. it looks like a registry ref but isn't installed locally).
52
41
  */
53
42
  export function isRemoteOrigin(origin, allSources) {
54
- if (origin === "local")
43
+ if (isBundleSlug(origin))
55
44
  return false;
56
- return resolveSourcesForOrigin(origin, allSources).length === 0;
45
+ return resolveSourcesForLocator(origin, allSources).length === 0;
57
46
  }
@@ -4,7 +4,7 @@
4
4
  import { fetchWithRetry } from "../../core/common.js";
5
5
  import { md5Hex } from "../../runtime.js";
6
6
  import { fetchCachedJson } from "../../storage/repositories/registry-cache.js";
7
- import { registerProvider } from "../factory.js";
7
+ import { registerRegistryProvider } from "../factory.js";
8
8
  // ── Constants ───────────────────────────────────────────────────────────────
9
9
  /** Per-query cache TTL in milliseconds (15 minutes). */
10
10
  const QUERY_CACHE_TTL_MS = 15 * 60 * 1000;
@@ -112,7 +112,7 @@ class SkillsShProvider {
112
112
  assetName: entry.name,
113
113
  stash: { id: `skills-sh:${entry.id}`, name: entry.name },
114
114
  registryName,
115
- action: `akm add github:${ownerRepo}`,
115
+ action: `akm bundle add github:${ownerRepo}`,
116
116
  score: Math.round((entry.installs / maxInstalls) * 1000) / 1000,
117
117
  };
118
118
  });
@@ -125,7 +125,7 @@ class SkillsShProvider {
125
125
  }
126
126
  }
127
127
  // ── Self-register ───────────────────────────────────────────────────────────
128
- registerProvider("skills-sh", (config) => new SkillsShProvider(config));
128
+ registerRegistryProvider("skills-sh", (config) => new SkillsShProvider(config));
129
129
  // ── Response parsing ────────────────────────────────────────────────────────
130
130
  function parseSkillsResponse(data) {
131
131
  if (typeof data !== "object" || data === null || Array.isArray(data))