akm-cli 0.9.0-rc.1 → 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 (587) hide show
  1. package/CHANGELOG.md +1190 -52
  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/stash-skeleton/README.md +38 -10
  26. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
  27. package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
  28. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
  29. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
  30. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
  31. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
  32. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
  33. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
  34. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
  35. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
  36. package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
  37. package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
  38. package/dist/assets/tasks/core/extract.yml +3 -2
  39. package/dist/assets/tasks/core/improve.yml +2 -1
  40. package/dist/assets/tasks/core/index-refresh.yml +1 -0
  41. package/dist/assets/tasks/core/sync.yml +1 -0
  42. package/dist/assets/tasks/core/version-check.yml +2 -1
  43. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
  44. package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
  45. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
  46. package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
  47. package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
  48. package/dist/assets/templates/html/health.html +5 -4
  49. package/dist/assets/workflows/workflow-template.md +31 -15
  50. package/dist/cli/invocation.js +279 -0
  51. package/dist/cli/parse-args.js +5 -90
  52. package/dist/cli/retired-commands.js +78 -0
  53. package/dist/cli/shared.js +158 -48
  54. package/dist/cli-node.mjs +2 -1
  55. package/dist/cli.js +747 -293
  56. package/dist/commands/agent/agent-dispatch.js +19 -18
  57. package/dist/commands/agent/agent-support.js +0 -24
  58. package/dist/commands/agent/contribute-cli.js +43 -97
  59. package/dist/commands/completions.js +80 -23
  60. package/dist/commands/config-cli.js +44 -281
  61. package/dist/commands/env/env-binding.js +13 -9
  62. package/dist/commands/env/env-cli.js +76 -159
  63. package/dist/commands/env/env.js +12 -163
  64. package/dist/commands/env/marker-path.js +6 -0
  65. package/dist/commands/env/secret-cli.js +45 -61
  66. package/dist/commands/env/secret.js +32 -62
  67. package/dist/commands/feedback-cli.js +179 -85
  68. package/dist/commands/health/accept-rate.js +58 -0
  69. package/dist/commands/health/advisories.js +7 -8
  70. package/dist/commands/health/checks.js +279 -94
  71. package/dist/commands/health/html-report.js +197 -578
  72. package/dist/commands/health/improve-metrics.js +277 -246
  73. package/dist/commands/health/llm-usage.js +19 -19
  74. package/dist/commands/health/md-report.js +16 -7
  75. package/dist/commands/health/metrics.js +67 -32
  76. package/dist/commands/health/renderers.js +47 -0
  77. package/dist/commands/health/report-view-model.js +508 -0
  78. package/dist/commands/health/stash-exposure.js +1 -1
  79. package/dist/commands/health/surfaces.js +16 -56
  80. package/dist/commands/health/task-runs.js +3 -67
  81. package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
  82. package/dist/commands/health/types-improve.js +29 -0
  83. package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
  84. package/dist/commands/health/types-result.js +7 -0
  85. package/dist/commands/health/types-runs.js +4 -0
  86. package/dist/commands/health/types-session-log.js +4 -0
  87. package/dist/commands/health/types-windows.js +4 -0
  88. package/dist/commands/health/types.js +26 -21
  89. package/dist/commands/health/windows.js +2 -3
  90. package/dist/commands/health.js +296 -167
  91. package/dist/commands/improve/anti-collapse.js +5 -5
  92. package/dist/commands/improve/autonomy-gate.js +68 -0
  93. package/dist/commands/improve/collapse-detector.js +65 -52
  94. package/dist/commands/improve/consolidate/chunking.js +9 -7
  95. package/dist/commands/improve/consolidate/eligibility.js +1 -23
  96. package/dist/commands/improve/consolidate/merge.js +4 -0
  97. package/dist/commands/improve/consolidate.js +454 -1354
  98. package/dist/commands/improve/content-hash.js +39 -0
  99. package/dist/commands/improve/distill/content-repair.js +4 -10
  100. package/dist/commands/improve/distill/promote-memory.js +89 -64
  101. package/dist/commands/improve/distill/quality-gate.js +118 -42
  102. package/dist/commands/improve/distill-guards.js +1 -1
  103. package/dist/commands/improve/distill-promotion-policy.js +33 -888
  104. package/dist/commands/improve/distill.js +607 -363
  105. package/dist/commands/improve/eligibility.js +165 -79
  106. package/dist/commands/improve/extract-cli.js +35 -126
  107. package/dist/commands/improve/extract-prompt.js +6 -35
  108. package/dist/commands/improve/extract.js +640 -391
  109. package/dist/commands/improve/feedback-valence.js +2 -12
  110. package/dist/commands/improve/improve-cli.js +134 -135
  111. package/dist/commands/improve/improve-result-file.js +30 -50
  112. package/dist/commands/improve/improve-run-types.js +4 -0
  113. package/dist/commands/improve/improve-strategies.js +135 -0
  114. package/dist/commands/improve/improve.js +904 -701
  115. package/dist/commands/improve/locks.js +64 -111
  116. package/dist/commands/improve/loop-stages.js +1110 -923
  117. package/dist/commands/improve/memory/derived-ref.js +124 -0
  118. package/dist/commands/improve/memory/memory-belief.js +79 -7
  119. package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
  120. package/dist/commands/improve/memory/memory-improve.js +25 -37
  121. package/dist/commands/improve/outcome-loop.js +25 -88
  122. package/dist/commands/improve/preparation.js +1034 -813
  123. package/dist/commands/improve/proactive-maintenance.js +34 -9
  124. package/dist/commands/improve/proposal-envelope.js +31 -0
  125. package/dist/commands/improve/reflect.js +983 -794
  126. package/dist/commands/improve/run-context.js +119 -0
  127. package/dist/commands/improve/salience.js +24 -127
  128. package/dist/commands/improve/session-asset.js +7 -3
  129. package/dist/commands/improve/shared.js +14 -34
  130. package/dist/commands/improve/source-identity.js +28 -0
  131. package/dist/commands/improve/triage.js +20 -17
  132. package/dist/commands/lint/base-linter.js +340 -313
  133. package/dist/commands/lint/env-key-rules.js +31 -47
  134. package/dist/commands/lint/index.js +185 -30
  135. package/dist/commands/{events.js → log.js} +28 -38
  136. package/dist/commands/migrate-cli.js +54 -0
  137. package/dist/commands/migration-tool.js +55 -0
  138. package/dist/commands/observability-cli.js +70 -208
  139. package/dist/commands/proposal/diff-format.js +50 -0
  140. package/dist/commands/proposal/drain-policies.js +0 -6
  141. package/dist/commands/proposal/drain.js +91 -40
  142. package/dist/commands/proposal/proposal-cli.js +134 -132
  143. package/dist/commands/proposal/proposal-types.js +56 -0
  144. package/dist/commands/proposal/proposal.js +83 -65
  145. package/dist/commands/proposal/propose-cli.js +88 -0
  146. package/dist/commands/proposal/propose.js +105 -88
  147. package/dist/commands/proposal/repository.js +1303 -278
  148. package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
  149. package/dist/commands/proposal/validators/proposal-validators.js +61 -12
  150. package/dist/commands/proposal/validators/proposals.js +6 -8
  151. package/dist/commands/read/curate.js +78 -73
  152. package/dist/commands/read/knowledge.js +510 -13
  153. package/dist/commands/read/registry-search.js +2 -2
  154. package/dist/commands/read/remember-cli.js +84 -15
  155. package/dist/commands/read/search-cli.js +203 -96
  156. package/dist/commands/read/search.js +126 -94
  157. package/dist/commands/read/show.js +226 -250
  158. package/dist/commands/registry-cli.js +34 -60
  159. package/dist/commands/remember.js +18 -57
  160. package/dist/commands/sources/add-cli.js +104 -49
  161. package/dist/commands/sources/bundle-cli.js +166 -0
  162. package/dist/commands/sources/bundle-config-ops.js +63 -0
  163. package/dist/commands/sources/info.js +27 -15
  164. package/dist/commands/sources/init.js +30 -40
  165. package/dist/commands/sources/installed-stashes.js +469 -172
  166. package/dist/commands/sources/schema-repair.js +10 -9
  167. package/dist/commands/sources/self-update.js +182 -121
  168. package/dist/commands/sources/source-add.js +169 -178
  169. package/dist/commands/sources/source-clone.js +144 -41
  170. package/dist/commands/sources/source-manage.js +94 -59
  171. package/dist/commands/sources/sources-cli.js +64 -205
  172. package/dist/commands/sources/stash-cli.js +91 -54
  173. package/dist/commands/sources/stash-skeleton.js +1 -1
  174. package/dist/commands/tasks/tasks-cli.js +106 -104
  175. package/dist/commands/tasks/tasks.js +445 -262
  176. package/dist/commands/workflow-cli.js +75 -228
  177. package/dist/core/action-contributors.js +1 -1
  178. package/dist/core/activation-policy.js +49 -0
  179. package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
  180. package/dist/core/adapter/adapters/akm-adapter.js +528 -0
  181. package/dist/core/adapter/adapters/akm-lint.js +392 -0
  182. package/dist/core/adapter/adapters/akm-metadata.js +387 -0
  183. package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
  184. package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
  185. package/dist/core/adapter/adapters/claude-adapter.js +61 -0
  186. package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
  187. package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
  188. package/dist/core/adapter/adapters/index.js +80 -0
  189. package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
  190. package/dist/core/adapter/adapters/okf-adapter.js +391 -0
  191. package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
  192. package/dist/core/adapter/adapters/shared.js +286 -0
  193. package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
  194. package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
  195. package/dist/core/adapter/bundle-adapter.js +4 -0
  196. package/dist/core/adapter/detect-adapter.js +17 -0
  197. package/dist/core/adapter/recognize-match.js +44 -0
  198. package/dist/core/adapter/registry.js +56 -0
  199. package/dist/core/adapter/types.js +4 -0
  200. package/dist/core/asset/akm-markdown.js +30 -0
  201. package/dist/core/asset/asset-placement.js +243 -0
  202. package/dist/core/asset/asset-ref.js +110 -79
  203. package/dist/core/asset/asset-serialize.js +20 -0
  204. package/dist/core/asset/frontmatter.js +28 -12
  205. package/dist/core/asset/markdown.js +40 -51
  206. package/dist/core/asset/resolve-ref.js +274 -0
  207. package/dist/core/asset/stash-meta.js +2 -2
  208. package/dist/core/bundle-id.js +51 -0
  209. package/dist/core/common.js +281 -86
  210. package/dist/core/config/config-io.js +42 -128
  211. package/dist/core/config/config-schema.js +233 -855
  212. package/dist/core/config/config-sources.js +162 -39
  213. package/dist/core/config/config-types.js +16 -11
  214. package/dist/core/config/config-version.js +29 -0
  215. package/dist/core/config/config-walker.js +126 -37
  216. package/dist/core/config/config.js +154 -331
  217. package/dist/core/config/deep-merge.js +41 -0
  218. package/dist/core/config/engine-semantics.js +28 -0
  219. package/dist/core/config/experimental.js +21 -0
  220. package/dist/core/config/schema/embedding.js +38 -0
  221. package/dist/core/config/schema/engines.js +116 -0
  222. package/dist/core/config/schema/experimental.js +47 -0
  223. package/dist/core/config/schema/feedback.js +31 -0
  224. package/dist/core/config/schema/improve-processes.js +389 -0
  225. package/dist/core/config/schema/improve.js +94 -0
  226. package/dist/core/config/schema/index-config.js +176 -0
  227. package/dist/core/config/schema/output.js +18 -0
  228. package/dist/core/config/schema/primitives.js +94 -0
  229. package/dist/core/config/schema/search.js +30 -0
  230. package/dist/core/config/schema/setup.js +18 -0
  231. package/dist/core/config/schema/sources-bundles.js +169 -0
  232. package/dist/core/config/schema/workflow.js +29 -0
  233. package/dist/core/env-secret-ref.js +155 -20
  234. package/dist/core/errors.js +17 -15
  235. package/dist/core/events-types.js +4 -0
  236. package/dist/core/events.js +46 -128
  237. package/dist/core/extra-params.js +62 -0
  238. package/dist/core/file-change.js +17 -0
  239. package/dist/core/file-lock.js +202 -57
  240. package/dist/core/fs-txn.js +392 -0
  241. package/dist/core/git-message.js +59 -0
  242. package/dist/core/improve-result.js +167 -0
  243. package/dist/core/lesson-lint.js +1 -17
  244. package/dist/core/logs-db.js +1 -1
  245. package/dist/core/maintenance-barrier.js +135 -0
  246. package/dist/core/migration-operation.js +44 -0
  247. package/dist/core/mutation-target.js +78 -0
  248. package/dist/core/paths.js +22 -25
  249. package/dist/core/platform.js +10 -0
  250. package/dist/core/recognition-util.js +128 -0
  251. package/dist/core/redaction.js +392 -0
  252. package/dist/core/standards/resolve-standards-context.js +36 -65
  253. package/dist/core/standards/resolve-stash-standards.js +2 -2
  254. package/dist/core/standards/resolve-type-conventions.js +5 -5
  255. package/dist/core/state/migrations.js +242 -11
  256. package/dist/core/state-db.js +98 -10
  257. package/dist/core/structured.js +1 -1
  258. package/dist/core/subprocess.js +303 -0
  259. package/dist/core/text-truncation.js +9 -5
  260. package/dist/core/time.js +20 -0
  261. package/dist/core/type-presentation.js +130 -0
  262. package/dist/core/warn.js +0 -3
  263. package/dist/core/write-source.js +834 -118
  264. package/dist/indexer/bundle-identity-guard.js +92 -0
  265. package/dist/indexer/db/graph-db.js +1 -25
  266. package/dist/indexer/db/llm-cache.js +1 -1
  267. package/dist/indexer/ensure-index.js +30 -9
  268. package/dist/indexer/graph/graph-boost.js +9 -30
  269. package/dist/indexer/graph/graph-extraction.js +41 -27
  270. package/dist/indexer/graph/graph-types.js +4 -0
  271. package/dist/indexer/index-writer-lock.js +93 -49
  272. package/dist/indexer/index-written-assets.js +100 -53
  273. package/dist/indexer/indexer.js +746 -329
  274. package/dist/indexer/init.js +18 -25
  275. package/dist/indexer/installations.js +142 -0
  276. package/dist/indexer/passes/dir-staleness.js +18 -10
  277. package/dist/indexer/passes/memory-inference.js +25 -15
  278. package/dist/indexer/passes/metadata.js +412 -243
  279. package/dist/indexer/scan/doc-to-entry.js +160 -0
  280. package/dist/indexer/scan/drain-dir.js +134 -0
  281. package/dist/indexer/search/db-search.js +292 -108
  282. package/dist/indexer/search/fts-query.js +64 -0
  283. package/dist/indexer/search/ranking-contributors.js +145 -25
  284. package/dist/indexer/search/ranking-types.js +4 -0
  285. package/dist/indexer/search/ranking.js +28 -71
  286. package/dist/indexer/search/search-attribution.js +67 -0
  287. package/dist/indexer/search/search-fields.js +18 -3
  288. package/dist/indexer/search/search-hit-enrichers.js +30 -40
  289. package/dist/indexer/search/search-source.js +157 -111
  290. package/dist/indexer/search/semantic-status.js +4 -1
  291. package/dist/indexer/usage/usage-events.js +10 -30
  292. package/dist/indexer/walk/file-context.js +3 -45
  293. package/dist/indexer/walk/matchers.js +42 -73
  294. package/dist/indexer/walk/path-resolver.js +11 -5
  295. package/dist/indexer/walk/walker.js +42 -14
  296. package/dist/integrations/agent/builder-shared.js +7 -0
  297. package/dist/integrations/agent/builders.js +5 -58
  298. package/dist/integrations/agent/config.js +3 -143
  299. package/dist/integrations/agent/detect.js +17 -2
  300. package/dist/integrations/agent/engine-resolution.js +231 -0
  301. package/dist/integrations/agent/index.js +1 -2
  302. package/dist/integrations/agent/model-aliases.js +8 -3
  303. package/dist/integrations/agent/profiles.js +6 -99
  304. package/dist/integrations/agent/prompts.js +46 -18
  305. package/dist/integrations/agent/runner-dispatch.js +78 -13
  306. package/dist/integrations/agent/runner.js +76 -208
  307. package/dist/integrations/agent/spawn.js +48 -279
  308. package/dist/integrations/harnesses/aider/agent-builder.js +9 -8
  309. package/dist/integrations/harnesses/aider/index.js +2 -12
  310. package/dist/integrations/harnesses/amazonq/agent-builder.js +10 -16
  311. package/dist/integrations/harnesses/amazonq/index.js +3 -17
  312. package/dist/integrations/harnesses/claude/agent-builder.js +2 -3
  313. package/dist/integrations/harnesses/claude/config-import.js +1 -3
  314. package/dist/integrations/harnesses/claude/index.js +1 -14
  315. package/dist/integrations/harnesses/claude/session-log.js +27 -75
  316. package/dist/integrations/harnesses/codex/agent-builder.js +8 -7
  317. package/dist/integrations/harnesses/codex/index.js +2 -13
  318. package/dist/integrations/harnesses/copilot/agent-builder.js +9 -9
  319. package/dist/integrations/harnesses/copilot/index.js +1 -13
  320. package/dist/integrations/harnesses/gemini/agent-builder.js +8 -9
  321. package/dist/integrations/harnesses/gemini/index.js +1 -13
  322. package/dist/integrations/harnesses/ids.js +24 -0
  323. package/dist/integrations/harnesses/index.js +31 -33
  324. package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
  325. package/dist/integrations/harnesses/opencode/config-import.js +1 -3
  326. package/dist/integrations/harnesses/opencode/index.js +1 -18
  327. package/dist/integrations/harnesses/opencode/session-log.js +67 -125
  328. package/dist/integrations/harnesses/opencode-sdk/harness.js +3 -17
  329. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +274 -191
  330. package/dist/integrations/harnesses/openhands/agent-builder.js +12 -10
  331. package/dist/integrations/harnesses/openhands/index.js +2 -12
  332. package/dist/integrations/harnesses/pi/agent-builder.js +11 -18
  333. package/dist/integrations/harnesses/pi/index.js +3 -16
  334. package/dist/integrations/harnesses/shared.js +17 -0
  335. package/dist/integrations/harnesses/types.js +38 -34
  336. package/dist/integrations/lockfile.js +211 -24
  337. package/dist/integrations/session-logs/index.js +24 -40
  338. package/dist/integrations/session-logs/provider-base.js +113 -0
  339. package/dist/llm/client.js +182 -110
  340. package/dist/llm/embedders/deterministic.js +2 -2
  341. package/dist/llm/embedders/remote.js +21 -9
  342. package/dist/llm/feature-gate.js +17 -57
  343. package/dist/llm/graph-extract.js +12 -13
  344. package/dist/llm/index-passes.js +8 -42
  345. package/dist/llm/memory-infer.js +144 -1
  346. package/dist/llm/metadata-enhance.js +45 -30
  347. package/dist/llm/structured-call.js +16 -8
  348. package/dist/llm/usage-persist.js +30 -5
  349. package/dist/llm/usage-telemetry.js +59 -6
  350. package/dist/output/cli-hints.js +1 -2
  351. package/dist/output/command-registry.js +27 -0
  352. package/dist/output/context.js +22 -7
  353. package/dist/output/format-exempt.js +80 -0
  354. package/dist/output/generic-render.js +251 -0
  355. package/dist/output/html-render.js +11 -16
  356. package/dist/output/render-registry.js +57 -0
  357. package/dist/output/renderers.js +15 -281
  358. package/dist/output/shapes/curate.js +10 -1
  359. package/dist/output/shapes/events.js +12 -7
  360. package/dist/output/shapes/helpers.js +58 -84
  361. package/dist/output/shapes/passthrough.js +8 -40
  362. package/dist/output/shapes/proposal/producer.js +15 -7
  363. package/dist/output/shapes/registry.js +12 -6
  364. package/dist/output/shapes.js +0 -9
  365. package/dist/output/text/{init.js → bundle-create.js} +3 -1
  366. package/dist/output/text/bundle-show.js +7 -0
  367. package/dist/output/text/command-format.js +562 -0
  368. package/dist/output/text/env.js +1 -3
  369. package/dist/output/text/events.js +8 -7
  370. package/dist/output/text/helpers.js +15 -1375
  371. package/dist/output/text/proposal/producer.js +4 -2
  372. package/dist/output/text/proposal-format.js +202 -0
  373. package/dist/output/text/registry-commands.js +1 -2
  374. package/dist/output/text/registry.js +12 -6
  375. package/dist/output/text/show-directives.js +117 -0
  376. package/dist/output/text/show-format.js +103 -0
  377. package/dist/output/text/sync.js +5 -0
  378. package/dist/output/text/workflow-format.js +332 -0
  379. package/dist/output/text/workflow.js +1 -2
  380. package/dist/output/text.js +10 -19
  381. package/dist/registry/factory.js +4 -6
  382. package/dist/registry/origin-resolve.js +16 -27
  383. package/dist/registry/providers/skills-sh.js +3 -3
  384. package/dist/registry/providers/static-index.js +15 -25
  385. package/dist/registry/resolve.js +43 -94
  386. package/dist/registry/semver.js +43 -0
  387. package/dist/runtime.js +81 -12
  388. package/dist/scripts/akm-migrate.js +35529 -0
  389. package/dist/setup/detect.js +5 -7
  390. package/dist/setup/detected-engines.js +136 -0
  391. package/dist/setup/engine-config.js +100 -0
  392. package/dist/setup/registry-stash-loader.js +3 -3
  393. package/dist/setup/semantic-assets.js +12 -9
  394. package/dist/setup/setup.js +444 -208
  395. package/dist/setup/steps/connection-shared.js +120 -0
  396. package/dist/setup/steps/connection.js +108 -305
  397. package/dist/setup/steps/platforms.js +13 -12
  398. package/dist/setup/steps/semantic.js +15 -3
  399. package/dist/setup/steps/sources.js +21 -15
  400. package/dist/setup/steps/stashdir.js +6 -4
  401. package/dist/setup/steps/tasks.js +236 -119
  402. package/dist/setup/steps.js +3 -2
  403. package/dist/sources/freshness.js +39 -0
  404. package/dist/sources/provider-factory.js +11 -17
  405. package/dist/sources/providers/filesystem.js +2 -3
  406. package/dist/sources/providers/git-install.js +278 -34
  407. package/dist/sources/providers/git-provider.js +54 -56
  408. package/dist/sources/providers/git-stash.js +420 -91
  409. package/dist/sources/providers/git.js +2 -2
  410. package/dist/sources/providers/npm.js +16 -19
  411. package/dist/sources/providers/provider-utils.js +47 -22
  412. package/dist/sources/providers/sync-from-ref.js +3 -9
  413. package/dist/sources/providers/website.js +2 -2
  414. package/dist/sources/resolve.js +11 -10
  415. package/dist/sources/snapshot-fetchers/types.js +4 -0
  416. package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
  417. package/dist/storage/database.js +60 -4
  418. package/dist/storage/engines/sqlite-migrations.js +156 -5
  419. package/dist/storage/locations.js +1 -2
  420. package/dist/storage/repositories/canaries-repository.js +1 -1
  421. package/dist/storage/repositories/events-repository.js +51 -11
  422. package/dist/storage/repositories/improve-runs-repository.js +6 -32
  423. package/dist/storage/repositories/index-connection.js +79 -0
  424. package/dist/storage/repositories/index-db.js +4 -3
  425. package/dist/storage/repositories/index-entries-repository.js +863 -0
  426. package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
  427. package/dist/storage/repositories/index-entry-types.js +4 -0
  428. package/dist/storage/repositories/index-fts-repository.js +167 -0
  429. package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
  430. package/dist/storage/repositories/index-meta-repository.js +49 -0
  431. package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
  432. package/dist/storage/repositories/index-sql.js +12 -0
  433. package/dist/storage/repositories/index-utility-repository.js +356 -0
  434. package/dist/storage/repositories/index-vec-repository.js +250 -0
  435. package/dist/storage/repositories/outcome-repository.js +119 -0
  436. package/dist/storage/repositories/proposals-repository.js +317 -75
  437. package/dist/storage/repositories/registry-cache.js +1 -1
  438. package/dist/storage/repositories/salience-repository.js +172 -0
  439. package/dist/storage/repositories/task-history-repository.js +110 -3
  440. package/dist/storage/repositories/workflow-runs-repository.js +68 -35
  441. package/dist/tasks/backends/cron.js +169 -46
  442. package/dist/tasks/backends/exec-utils.js +76 -3
  443. package/dist/tasks/backends/index.js +6 -9
  444. package/dist/tasks/backends/launchd.js +292 -55
  445. package/dist/tasks/backends/schtasks.js +557 -70
  446. package/dist/tasks/backends/types.js +4 -0
  447. package/dist/tasks/command-executable.js +93 -0
  448. package/dist/tasks/embedded.js +56 -38
  449. package/dist/tasks/parser.js +156 -64
  450. package/dist/tasks/resolve-akm-bin.js +144 -51
  451. package/dist/tasks/runner.js +377 -209
  452. package/dist/tasks/schedule.js +108 -19
  453. package/dist/tasks/scheduler-invocation.js +296 -0
  454. package/dist/tasks/schema.js +1 -1
  455. package/dist/tasks/task-id.js +35 -0
  456. package/dist/tasks/validator.js +30 -16
  457. package/dist/workflows/authoring/authoring.js +96 -148
  458. package/dist/workflows/authoring/scope-key.js +1 -1
  459. package/dist/workflows/cli.js +0 -20
  460. package/dist/workflows/concurrency-policy.js +15 -0
  461. package/dist/workflows/exec/brief.js +25 -59
  462. package/dist/workflows/exec/frozen-judge.js +47 -0
  463. package/dist/workflows/exec/native-executor.js +157 -94
  464. package/dist/workflows/exec/report.js +365 -200
  465. package/dist/workflows/exec/run-workflow.js +46 -40
  466. package/dist/workflows/exec/scheduler.js +12 -41
  467. package/dist/workflows/exec/step-work.js +239 -205
  468. package/dist/workflows/exec/workflow-engine-gate.js +67 -0
  469. package/dist/workflows/ir/compile.js +141 -283
  470. package/dist/workflows/ir/freeze.js +233 -0
  471. package/dist/workflows/ir/plan-hash.js +40 -5
  472. package/dist/workflows/ir/schema.js +537 -1
  473. package/dist/workflows/parser.js +878 -306
  474. package/dist/workflows/program/expressions.js +20 -208
  475. package/dist/workflows/program/schema.js +7 -10
  476. package/dist/workflows/renderer.js +99 -121
  477. package/dist/workflows/resource-limits.js +22 -0
  478. package/dist/workflows/runtime/checkin.js +1 -1
  479. package/dist/workflows/runtime/plan-classifier.js +131 -0
  480. package/dist/workflows/runtime/runs.js +200 -113
  481. package/dist/workflows/runtime/unit-checkin.js +1 -1
  482. package/dist/workflows/runtime/unit-phases.js +20 -0
  483. package/dist/workflows/runtime/workflow-asset-loader.js +235 -97
  484. package/dist/workflows/schema.js +1 -11
  485. package/dist/workflows/validate-summary.js +4 -26
  486. package/dist/workflows/validator.js +52 -30
  487. package/docs/README.md +42 -78
  488. package/docs/migration/README.md +8 -0
  489. package/docs/migration/release-notes/0.6.0.md +1 -1
  490. package/docs/migration/release-notes/0.7.0.md +9 -8
  491. package/docs/migration/release-notes/0.9.0.md +158 -14
  492. package/docs/migration/v0.7-to-v0.8.md +46 -47
  493. package/docs/migration/v0.8-to-v0.9.md +844 -0
  494. package/docs/reference/README.md +12 -0
  495. package/docs/reference/data-and-telemetry.md +333 -0
  496. package/package.json +21 -17
  497. package/schemas/akm-asset-envelope.json +93 -0
  498. package/schemas/akm-config.json +4636 -0
  499. package/schemas/akm-task.json +87 -0
  500. package/{dist/schemas → schemas}/akm-workflow.json +127 -82
  501. package/dist/akm-migrate-storage +0 -38
  502. package/dist/assets/help/help-accept.md +0 -12
  503. package/dist/assets/help/help-improve.md +0 -84
  504. package/dist/assets/help/help-proposals.md +0 -17
  505. package/dist/assets/help/help-propose.md +0 -17
  506. package/dist/assets/help/help-reject.md +0 -11
  507. package/dist/assets/profiles/frequent.json +0 -13
  508. package/dist/assets/profiles/recombine-only.json +0 -21
  509. package/dist/assets/profiles/reflect-distill.json +0 -30
  510. package/dist/assets/profiles/synthesize.json +0 -15
  511. package/dist/assets/prompts/procedural-system.md +0 -44
  512. package/dist/assets/prompts/recombine-system.md +0 -40
  513. package/dist/assets/prompts/staleness-detect-system.md +0 -6
  514. package/dist/assets/tasks/core/backup.yml +0 -4
  515. package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
  516. package/dist/assets/templates/html/default.html +0 -78
  517. package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
  518. package/dist/assets/wiki/index-template.md +0 -12
  519. package/dist/assets/wiki/ingest-workflow-template.md +0 -83
  520. package/dist/assets/wiki/log-template.md +0 -8
  521. package/dist/assets/wiki/schema-template.md +0 -61
  522. package/dist/cli/config-migrate.js +0 -150
  523. package/dist/cli/config-validate.js +0 -39
  524. package/dist/commands/graph/graph-cli.js +0 -124
  525. package/dist/commands/graph/graph.js +0 -487
  526. package/dist/commands/improve/calibration.js +0 -161
  527. package/dist/commands/improve/dedup.js +0 -482
  528. package/dist/commands/improve/extract-watch.js +0 -140
  529. package/dist/commands/improve/hot-probation.js +0 -45
  530. package/dist/commands/improve/improve-auto-accept.js +0 -276
  531. package/dist/commands/improve/improve-profiles.js +0 -168
  532. package/dist/commands/improve/procedural.js +0 -398
  533. package/dist/commands/improve/recombine.js +0 -818
  534. package/dist/commands/improve/schema-similarity-gate.js +0 -168
  535. package/dist/commands/lint/agent-linter.js +0 -44
  536. package/dist/commands/lint/command-linter.js +0 -44
  537. package/dist/commands/lint/default-linter.js +0 -16
  538. package/dist/commands/lint/fact-linter.js +0 -39
  539. package/dist/commands/lint/knowledge-linter.js +0 -16
  540. package/dist/commands/lint/memory-linter.js +0 -61
  541. package/dist/commands/lint/registry.js +0 -41
  542. package/dist/commands/lint/skill-linter.js +0 -45
  543. package/dist/commands/lint/task-linter.js +0 -50
  544. package/dist/commands/lint/workflow-linter.js +0 -81
  545. package/dist/commands/proposal/legacy-import.js +0 -115
  546. package/dist/commands/sources/history.js +0 -196
  547. package/dist/commands/tasks/default-tasks.js +0 -186
  548. package/dist/commands/wiki-cli.js +0 -292
  549. package/dist/core/asset/asset-registry.js +0 -76
  550. package/dist/core/asset/asset-spec.js +0 -316
  551. package/dist/core/config/config-migration.js +0 -602
  552. package/dist/core/deep-merge.js +0 -38
  553. package/dist/core/eval/rank-metrics.js +0 -113
  554. package/dist/core/ripgrep/install.js +0 -163
  555. package/dist/core/ripgrep/resolve.js +0 -81
  556. package/dist/indexer/db/db.js +0 -1414
  557. package/dist/indexer/manifest.js +0 -170
  558. package/dist/indexer/passes/metadata-contributors.js +0 -31
  559. package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
  560. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -25
  561. package/dist/llm/call-ai.js +0 -62
  562. package/dist/llm/memory-infer-impl.js +0 -138
  563. package/dist/output/shapes/distill.js +0 -14
  564. package/dist/output/shapes/history.js +0 -11
  565. package/dist/output/text/distill.js +0 -6
  566. package/dist/output/text/enable-disable.js +0 -8
  567. package/dist/output/text/history.js +0 -6
  568. package/dist/output/text/wiki.js +0 -16
  569. package/dist/registry/build-index.js +0 -386
  570. package/dist/schemas/akm-config.json +0 -14225
  571. package/dist/scripts/migrate-storage.js +0 -13169
  572. package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -10169
  573. package/dist/scripts/migrations/v16-to-v17.js +0 -141
  574. package/dist/setup/legacy-config.js +0 -106
  575. package/dist/storage/repositories/consolidation-repository.js +0 -38
  576. package/dist/storage/repositories/recombine-repository.js +0 -213
  577. package/dist/wiki/wiki-templates.js +0 -15
  578. package/dist/wiki/wiki.js +0 -1012
  579. package/dist/workflows/authoring/workflow-program-template.yaml +0 -31
  580. package/dist/workflows/db.js +0 -350
  581. package/dist/workflows/exec/watch.js +0 -116
  582. package/dist/workflows/program/parser.js +0 -760
  583. package/dist/workflows/program/project.js +0 -105
  584. package/docs/data-and-telemetry.md +0 -227
  585. package/docs/migration/release-notes/0.9.0-beta.60.md +0 -19
  586. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
  587. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
@@ -2,49 +2,78 @@
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
  /**
5
- * Observability command cluster — `akm log` (events list/tail), `akm lessons`
6
- * (coverage), and `akm hints`. Extracted verbatim from src/cli.ts (WS6) so the
7
- * God Module shrinks; the `main.subCommands.{log,lessons,hints}` keys and every
8
- * subcommand's args/output shape are byte-identical.
5
+ * Observability command cluster — `akm log` (append-only events stream).
6
+ * Extracted verbatim from src/cli.ts (WS6) so the God Module shrinks; the
7
+ * `main.subCommands.log` key and its args/output shape are byte-identical.
9
8
  *
10
- * These three surfaces are cohesive read-only "tell me what happened / what to
11
- * do" commands: `log` reads the append-only state.db events stream, `lessons
12
- * coverage` reports tag-coverage gaps from the index, and `hints` prints the
13
- * embedded AGENTS.md guidance. They share no helpers with any command still
14
- * inline in cli.ts, so the `loadHints` private helper and the
15
- * `formatEventLine` / `EMBEDDED_HINTS*` / db-tag-set imports move with them.
9
+ * `log` reads the append-only state.db events stream. It shares no helpers
10
+ * with any command still inline in cli.ts.
16
11
  *
17
- * The leaf handlers whose body is a plain `runWithJsonErrors(...) + output(...)`
18
- * (`events list`, `lessons coverage`) are migrated onto `defineJsonCommand`,
19
- * which emits the same JSON envelope (stdout/stderr/exit-code) as the inline
20
- * form. `events tail` (manual streaming console/stderr writes) and `hints`
21
- * (direct `process.stdout.write`) keep a plain `defineCommand` wrapping
22
- * `runWithJsonErrors` so their byte-for-byte output stays untouched.
12
+ * 0.9.0 CLI overhaul (S3): `log` was a group with `list`/`tail` subcommands;
13
+ * `tail` (a foreground polling daemon) is dropped and `log` becomes a LEAF
14
+ * command that is today's `list` surface, unchanged (including the
15
+ * `--since @offset:<id>` durable cursor and --ref/--type filters). The
16
+ * `lessons`/`lesson` group (`coverage`, `strength`) is dropped entirely —
17
+ * ranking's `lessonStrength` contributor is untouched, only the CLI read
18
+ * surface for it goes away.
19
+ *
20
+ * The embedded agent-guide surfaces (`akm hints` and `akm help agents`) live
21
+ * in src/cli.ts, so their loading code is intentionally outside this module.
22
+ *
23
+ * The leaf handler's body is a plain `runWithJsonErrors(...) + output(...)`,
24
+ * migrated onto `defineJsonCommand`, which emits the same JSON envelope
25
+ * (stdout/stderr/exit-code) as the inline form.
23
26
  */
24
- import fs from "node:fs";
25
- import path from "node:path";
26
- import { defineCommand } from "citty";
27
27
  import { parsePositiveIntFlag } from "../cli/parse-args.js";
28
- import { defineJsonCommand, output, parseAllFlagValues, runWithJsonErrors } from "../cli/shared.js";
29
- import { closeDatabase, collectTagSetFromEntries, openExistingDatabase } from "../indexer/db/db.js";
30
- import { EMBEDDED_HINTS, EMBEDDED_HINTS_FULL } from "../output/cli-hints.js";
31
- import { getOutputMode, parseDetailLevel } from "../output/context.js";
32
- import { formatEventLine } from "../output/text.js";
33
- import { getDirname } from "../runtime.js";
34
- import { akmEventsList, akmEventsTail } from "./events.js";
28
+ import { retiredCommandHint } from "../cli/retired-commands.js";
29
+ import { defineJsonCommand, output, parseAllFlagValues } from "../cli/shared.js";
30
+ import { UsageError } from "../core/errors.js";
31
+ import { akmEventsList } from "./log.js";
32
+ /**
33
+ * `log` flattened from a group (`log list`/`log tail`) to a leaf in 0.9 (S3).
34
+ * `log` declares no positional args, so citty leaves any leftover positional
35
+ * token in `args._` uninterpreted rather than rejecting it — meaning
36
+ * `akm log tail` and `akm log list` silently ran today's `log` surface
37
+ * instead of failing like the other removed spellings (`log tail` is the
38
+ * dangerous one: it used to stream/follow, so an unmigrated caller got a
39
+ * silent one-shot snapshot instead of an error).
40
+ */
41
+ function rejectExtraLogPositionals(positionals) {
42
+ const extra = Array.isArray(positionals) ? positionals.map(String) : [];
43
+ if (extra.length === 0)
44
+ return;
45
+ // A retired subcommand spelling gets its replacement hint (same table the
46
+ // unknown-command path uses), so `akm log tail` teaches the durable-cursor
47
+ // polling pattern instead of a bare "takes no positional arguments".
48
+ const retired = extra[0] === undefined ? undefined : retiredCommandHint(["log"], extra[0]);
49
+ throw new UsageError(`akm log takes no positional arguments, but got ${extra.map((token) => `"${token}"`).join(" ")}. ` +
50
+ '"log list"/"log tail" were removed in 0.9.0 — `akm log` alone is today\'s `log list` surface.', "INVALID_FLAG_VALUE", retired);
51
+ }
35
52
  // ── `akm log` ────────────────────────────────────────────────────────────────
36
- // Append-only events stream surface (#204). `list` reads state.db events
37
- // with optional --since/--type/--ref filters; `tail` follows the table via
38
- // a polling loop and prints each event as a single JSONL line.
39
- const eventsListCommand = defineJsonCommand({
40
- meta: { name: "list", description: "List events from the append-only state.db events stream" },
53
+ // Append-only events stream surface (#204). Reads state.db events with
54
+ // optional --since/--type/--ref filters.
55
+ //
56
+ // R-060: the internal output()/shape-registry command name is `log-list`
57
+ // (renamed from the pre-rename `events-list`, back when the command group was
58
+ // still called `akm events`). This string never reaches the wire —
59
+ // `shapeEventsOutput` (src/output/shapes/helpers.ts) builds its own envelope
60
+ // and never stamps a `shape` field — so the rename is a coherence-only
61
+ // change, not a schemaVersion bump. Kept as `log-list` (not renamed to `log`)
62
+ // even though the group flattened to a leaf, to avoid unrelated churn on the
63
+ // internal registry key.
64
+ export const logCommand = defineJsonCommand({
65
+ meta: { name: "log", description: "List events from the append-only state.db events stream" },
41
66
  args: {
42
67
  since: {
43
68
  type: "string",
44
69
  description: "ISO timestamp / epoch ms, OR `@offset:<id>` for a durable row-id cursor (resume across processes)",
45
70
  },
46
71
  type: { type: "string", description: "Filter by event type (add, remove, remember, feedback, ...)" },
47
- ref: { type: "string", description: "Filter by asset ref (type:name)" },
72
+ ref: { type: "string", description: "Filter by asset ref ([bundle//]conceptId)" },
73
+ run: {
74
+ type: "string",
75
+ description: "Filter to a workflow run's events (metadata.runId), e.g. the id from `akm workflow start`",
76
+ },
48
77
  "exclude-tags": {
49
78
  type: "string",
50
79
  description: "Exclude events matching these tags (repeatable)",
@@ -53,192 +82,25 @@ const eventsListCommand = defineJsonCommand({
53
82
  type: "string",
54
83
  description: "Only include events with ALL these tags (repeatable)",
55
84
  },
85
+ limit: {
86
+ type: "string",
87
+ description: "Return only the most recent N events matching every other filter (default: unlimited)",
88
+ },
56
89
  },
57
90
  run({ args }) {
91
+ rejectExtraLogPositionals(args._);
58
92
  const excludeTags = parseAllFlagValues("--exclude-tags");
59
93
  const includeTags = parseAllFlagValues("--include-tags");
94
+ const limit = parsePositiveIntFlag(args.limit);
60
95
  const result = akmEventsList({
61
96
  since: args.since,
62
97
  type: args.type,
63
98
  ref: args.ref,
99
+ run: args.run,
64
100
  ...(excludeTags.length > 0 ? { excludeTags } : {}),
65
101
  ...(includeTags.length > 0 ? { includeTags } : {}),
102
+ ...(limit !== undefined ? { limit } : {}),
66
103
  });
67
- output("events-list", result);
104
+ output("log-list", result);
68
105
  },
69
106
  });
70
- const eventsTailCommand = defineCommand({
71
- meta: { name: "tail", description: "Follow the append-only state.db events stream (polling)" },
72
- args: {
73
- since: {
74
- type: "string",
75
- description: "ISO timestamp / epoch ms, OR `@offset:<id>` for a durable row-id cursor (resume across processes)",
76
- },
77
- type: { type: "string", description: "Filter by event type" },
78
- ref: { type: "string", description: "Filter by asset ref (type:name)" },
79
- "interval-ms": { type: "string", description: "Polling interval in ms (default: 75)" },
80
- "max-duration-ms": { type: "string", description: "Stop after this many ms (default: never)" },
81
- "max-events": { type: "string", description: "Stop after observing this many events" },
82
- "exclude-tags": {
83
- type: "string",
84
- description: "Exclude events matching these tags (repeatable)",
85
- },
86
- "include-tags": {
87
- type: "string",
88
- description: "Only include events with ALL these tags (repeatable)",
89
- },
90
- },
91
- async run({ args }) {
92
- await runWithJsonErrors(async () => {
93
- const intervalMs = parsePositiveIntFlag(args["interval-ms"], "--interval-ms");
94
- const maxDurationMs = parsePositiveIntFlag(args["max-duration-ms"], "--max-duration-ms");
95
- const maxEvents = parsePositiveIntFlag(args["max-events"], "--max-events");
96
- const mode = getOutputMode();
97
- // In streaming text mode we want each event to print as soon as it
98
- // arrives. The polling loop emits via `onEvent`; the final result is
99
- // also rendered through the standard output() pipeline so JSON
100
- // consumers always get the canonical envelope.
101
- const stream = mode.format === "text" || mode.format === "jsonl";
102
- const excludeTags = parseAllFlagValues("--exclude-tags");
103
- const includeTags = parseAllFlagValues("--include-tags");
104
- const result = await akmEventsTail({
105
- since: args.since,
106
- type: args.type,
107
- ref: args.ref,
108
- intervalMs,
109
- maxDurationMs,
110
- maxEvents,
111
- ...(excludeTags.length > 0 ? { excludeTags } : {}),
112
- ...(includeTags.length > 0 ? { includeTags } : {}),
113
- onEvent: stream
114
- ? (event) => {
115
- if (mode.format === "jsonl") {
116
- console.log(JSON.stringify(event));
117
- }
118
- else {
119
- console.log(formatEventLine(event));
120
- }
121
- }
122
- : undefined,
123
- });
124
- // Emit the canonical envelope last (JSON/YAML modes rely on this;
125
- // streaming modes already printed each event but we still emit a
126
- // trailer so callers can persist the resumable cursor).
127
- if (!stream) {
128
- output("events-tail", result);
129
- }
130
- else if (mode.format === "jsonl") {
131
- // Final discriminated trailer row so jsonl consumers can resume.
132
- const trailer = {
133
- _kind: "trailer",
134
- schemaVersion: 1,
135
- nextOffset: result.nextOffset,
136
- totalCount: result.totalCount,
137
- reason: result.reason,
138
- };
139
- console.log(JSON.stringify(trailer));
140
- }
141
- else {
142
- // text mode: keep stdout pristine for line-oriented parsers and
143
- // emit the trailer on stderr.
144
- process.stderr.write(`[events-tail] reason=${result.reason} nextOffset=${result.nextOffset} total=${result.totalCount}\n`);
145
- }
146
- });
147
- },
148
- });
149
- export const logCommand = defineCommand({
150
- meta: {
151
- name: "log",
152
- description: "Read or follow the append-only state.db events stream (mutations, feedback, indexing)",
153
- },
154
- subCommands: {
155
- list: eventsListCommand,
156
- tail: eventsTailCommand,
157
- },
158
- });
159
- // ── lessons subcommands (Phase 7A / Advantage D4c) ──────────────────────────
160
- const lessonsCoverageCommand = defineJsonCommand({
161
- meta: {
162
- name: "coverage",
163
- description: "Report tags that exist on indexed assets but are NOT yet covered by any lesson.\n\n" +
164
- "Useful for spotting topics where the stash has skills/commands/scripts but no\n" +
165
- "crystallized lesson — a signal that the team has tacit knowledge worth distilling.\n\n" +
166
- "Default output is JSON: { uncoveredTags: string[], lessonTagCount: number, totalTagCount: number }.\n" +
167
- "Pass --format text for a plain-text bulleted list.",
168
- },
169
- args: {},
170
- run() {
171
- const db = openExistingDatabase();
172
- try {
173
- const allTagSet = collectTagSetFromEntries(db, undefined);
174
- const lessonTagSet = collectTagSetFromEntries(db, "lesson");
175
- const uncovered = [];
176
- for (const tag of allTagSet) {
177
- if (!lessonTagSet.has(tag))
178
- uncovered.push(tag);
179
- }
180
- uncovered.sort((a, b) => a.localeCompare(b));
181
- output("lessons-coverage", {
182
- ok: true,
183
- uncoveredTags: uncovered,
184
- lessonTagCount: lessonTagSet.size,
185
- totalTagCount: allTagSet.size,
186
- });
187
- }
188
- finally {
189
- closeDatabase(db);
190
- }
191
- },
192
- });
193
- export const lessonsCommand = defineCommand({
194
- meta: {
195
- name: "lessons",
196
- alias: "lesson",
197
- description: "Lesson-asset tooling: tag-coverage gaps, strength queries.",
198
- },
199
- subCommands: {
200
- coverage: lessonsCoverageCommand,
201
- },
202
- });
203
- // ── `akm hints` ──────────────────────────────────────────────────────────────
204
- export const hintsCommand = defineCommand({
205
- meta: {
206
- name: "hints",
207
- description: "Print agent instructions on how to use akm, use --detail full for a complete guide",
208
- },
209
- args: {
210
- detail: {
211
- type: "string",
212
- description: "Hints detail level (brief|normal|full). `brief` prints the short guide; `normal`/`full` print the complete guide.",
213
- default: "normal",
214
- },
215
- },
216
- run({ args }) {
217
- return runWithJsonErrors(() => {
218
- // Let the global parser validate the value so an invalid `--detail`
219
- // returns the standard JSON error envelope (exit 2) rather than a raw
220
- // stack trace + exit 1. `brief` → short doc; `normal`/`full` → full doc.
221
- const detail = parseDetailLevel(args.detail) ?? "normal";
222
- process.stdout.write(loadHints(detail === "brief" ? "brief" : "full"));
223
- });
224
- },
225
- });
226
- // ── Hints (embedded AGENTS.md) ──────────────────────────────────────────────
227
- function loadHints(detail = "normal") {
228
- // `brief` → the short AGENTS.md guide; `normal`/`full` → the complete guide.
229
- const wantFull = detail !== "brief";
230
- const filename = wantFull ? "AGENTS.full.md" : "AGENTS.md";
231
- const fallback = wantFull ? EMBEDDED_HINTS_FULL : EMBEDDED_HINTS;
232
- // Try reading from the docs/ directory (works in dev and when installed via npm)
233
- try {
234
- const docsPath = path.resolve(getDirname(import.meta.url), `../../docs/agents/${filename}`);
235
- if (fs.existsSync(docsPath)) {
236
- return fs.readFileSync(docsPath, "utf8");
237
- }
238
- }
239
- catch {
240
- // fall through
241
- }
242
- // Fallback for compiled binary — inline content
243
- return fallback;
244
- }
@@ -0,0 +1,50 @@
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
+ * Proposal diff renderers — extracted verbatim from `repository.ts`
6
+ * (Chunk 6 WI-6.6 decompose). Pure string functions with no repository
7
+ * dependency; `diffProposal` (repository.ts) is the only production caller.
8
+ */
9
+ /**
10
+ * Minimal unified-diff renderer. We deliberately avoid pulling a runtime
11
+ * dependency just for this — proposals diffs are usually small (a single
12
+ * lesson / skill file), so the LCS-free greedy renderer below is plenty for
13
+ * humans to review. The output mirrors `git diff --no-index` for the first
14
+ * `@@ … @@` hunk: enough to be familiar, not so detailed that we re-implement
15
+ * a full LCS table.
16
+ */
17
+ export function formatUnifiedDiff(left, right, label) {
18
+ if (left === right)
19
+ return "";
20
+ const leftLines = left.split("\n");
21
+ const rightLines = right.split("\n");
22
+ const lines = [`--- ${label} (existing)`, `+++ ${label} (proposed)`];
23
+ // Pad to the longer side so alignment is one-to-one. Real diff tools use
24
+ // LCS to align matching runs; we don't need that fidelity for a review
25
+ // surface — both halves are visible regardless.
26
+ const max = Math.max(leftLines.length, rightLines.length);
27
+ lines.push(`@@ 1,${leftLines.length} 1,${rightLines.length} @@`);
28
+ for (let i = 0; i < max; i += 1) {
29
+ const l = leftLines[i];
30
+ const r = rightLines[i];
31
+ if (l === r && l !== undefined) {
32
+ lines.push(` ${l}`);
33
+ continue;
34
+ }
35
+ if (l !== undefined)
36
+ lines.push(`-${l}`);
37
+ if (r !== undefined)
38
+ lines.push(`+${r}`);
39
+ }
40
+ return lines.join("\n");
41
+ }
42
+ /** Render the all-additions diff for a proposal targeting a new asset. */
43
+ export function formatNewAssetDiff(ref, content) {
44
+ const lines = [`--- /dev/null`, `+++ ${ref} (proposed, new asset)`];
45
+ lines.push(`@@ 0,0 1,${content.split("\n").length} @@`);
46
+ for (const line of content.split("\n")) {
47
+ lines.push(`+${line}`);
48
+ }
49
+ return lines.join("\n");
50
+ }
@@ -47,12 +47,6 @@ export const PERSONAL_STASH = {
47
47
  { generator: "reflect", maxDiffLines: 80 },
48
48
  // Consolidate within the diff band; mid-band lands in `defer` below.
49
49
  { generator: "consolidate", maxDiffLines: 200 },
50
- // Recombine: accept only confirmed type:lesson proposals (promoted by the
51
- // recombine confidence gate) within the diff band. type:hypothesis proposals
52
- // have no matching rule here and stay pending on the audited-autonomous
53
- // queue until recombine supersedes them or the 90-day TTL sweeps them —
54
- // there is no manual-review rung (06-M3).
55
- { generator: "recombine", requireType: "lesson", maxDiffLines: 200 },
56
50
  ],
57
51
  rejectEmpty: true,
58
52
  // Mid-band consolidate, distill duplicates, and contradiction escalations are