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
@@ -1,292 +0,0 @@
1
- // This Source Code Form is subject to the terms of the Mozilla Public
2
- // License, v. 2.0. If a copy of the MPL was not distributed with this
3
- // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- /**
5
- * `akm wiki` command family. Extracted verbatim from src/cli.ts (WS6) so the
6
- * God Module shrinks; the `main.subCommands.wiki` key and every subcommand's
7
- * args/output shape are byte-identical. Handlers whose body is a plain
8
- * `runWithJsonErrors(...) + output(...)` are migrated to `defineJsonCommand`,
9
- * which emits the same JSON envelope (stdout/stderr/exit-code) as the inline
10
- * form. `wiki lint` keeps an explicit `runWithJsonErrors` because it calls
11
- * `process.exit(1)` after the wrapper when findings exist.
12
- */
13
- import { defineCommand } from "citty";
14
- import { getStringArg, parsePositiveIntFlag } from "../cli/parse-args.js";
15
- import { defineGroupCommand, defineJsonCommand, output, runWithJsonErrors } from "../cli/shared.js";
16
- import { resolveStashDir } from "../core/common.js";
17
- import { loadConfig, resolveConfiguredSources } from "../core/config/config.js";
18
- import { ConfigError, UsageError } from "../core/errors.js";
19
- import { akmAgentDispatch } from "./agent/agent-dispatch.js";
20
- import { readKnowledgeInput } from "./read/knowledge.js";
21
- import { buildWebsiteOptions } from "./sources/add-cli.js";
22
- const wikiCreateCommand = defineJsonCommand({
23
- meta: { name: "create", description: "Scaffold a new wiki under <stashDir>/wikis/<name>/" },
24
- args: {
25
- name: { type: "positional", description: "Wiki name (lowercase, digits, hyphens)", required: true },
26
- },
27
- async run({ args }) {
28
- const { createWiki } = await import("../wiki/wiki.js");
29
- const stashDir = resolveStashDir();
30
- const result = createWiki(stashDir, args.name);
31
- output("wiki-create", result);
32
- },
33
- });
34
- const wikiRegisterCommand = defineJsonCommand({
35
- meta: {
36
- name: "register",
37
- description: "Register an existing directory or repo as a first-class wiki without copying or mutating it; refreshes source and wiki search state immediately",
38
- },
39
- args: {
40
- name: { type: "positional", description: "Wiki name (lowercase, digits, hyphens)", required: true },
41
- ref: { type: "positional", description: "Path or repo ref for the external wiki source", required: true },
42
- writable: {
43
- type: "boolean",
44
- description: "Mark a git-backed source as writable so changes can be pushed back",
45
- default: false,
46
- },
47
- "max-pages": { type: "string", description: "Maximum pages to crawl for website sources (default: 50)" },
48
- "max-depth": { type: "string", description: "Maximum crawl depth for website sources (default: 3)" },
49
- },
50
- async run({ args }) {
51
- const { registerWikiSource } = await import("./sources/source-add.js");
52
- const result = await registerWikiSource({
53
- ref: args.ref.trim(),
54
- name: args.name,
55
- options: Object.keys(buildWebsiteOptions(args)).length > 0 ? buildWebsiteOptions(args) : undefined,
56
- writable: args.writable,
57
- });
58
- output("wiki-register", result);
59
- },
60
- });
61
- const wikiListCommand = defineJsonCommand({
62
- meta: { name: "list", description: "List wikis with page/raw counts and last-modified timestamps" },
63
- async run() {
64
- const { listWikis } = await import("../wiki/wiki.js");
65
- const stashDir = resolveStashDir();
66
- const wikis = listWikis(stashDir);
67
- output("wiki-list", { wikis });
68
- },
69
- });
70
- const wikiShowCommand = defineJsonCommand({
71
- meta: { name: "show", description: "Show a wiki's path, description, counts, and last 3 log entries" },
72
- args: {
73
- name: { type: "positional", description: "Wiki name", required: true },
74
- },
75
- async run({ args }) {
76
- const { showWiki } = await import("../wiki/wiki.js");
77
- const stashDir = resolveStashDir();
78
- const result = showWiki(stashDir, args.name);
79
- output("wiki-show", result);
80
- },
81
- });
82
- const wikiRemoveCommand = defineJsonCommand({
83
- meta: {
84
- name: "remove",
85
- description: "Remove a wiki and refresh the index. Preserves raw/ by default; pass --with-sources to also delete raw/",
86
- },
87
- args: {
88
- name: { type: "positional", description: "Wiki name", required: true },
89
- yes: {
90
- type: "boolean",
91
- alias: "y",
92
- description: "Skip confirmation prompt (required in non-interactive shells)",
93
- default: false,
94
- },
95
- "with-sources": {
96
- type: "boolean",
97
- description: "Also delete the raw/ directory (immutable ingested sources)",
98
- default: false,
99
- },
100
- },
101
- async run({ args }) {
102
- const { confirmDestructive } = await import("../cli/confirm.js");
103
- const confirmed = await confirmDestructive(`Remove wiki "${args.name}"? This cannot be undone.`, {
104
- yes: args.yes === true,
105
- });
106
- if (!confirmed) {
107
- process.stderr.write("Aborted.\n");
108
- return;
109
- }
110
- const withSources = args["with-sources"];
111
- const { removeWiki } = await import("../wiki/wiki.js");
112
- const { akmIndex } = await import("../indexer/indexer.js");
113
- const stashDir = resolveStashDir();
114
- const result = removeWiki(stashDir, args.name, { withSources });
115
- await akmIndex({ stashDir });
116
- output("wiki-remove", result);
117
- },
118
- });
119
- const wikiPagesCommand = defineJsonCommand({
120
- meta: {
121
- name: "pages",
122
- description: "List wiki pages (ref + frontmatter description), excluding schema/index/log/raw",
123
- },
124
- args: {
125
- name: { type: "positional", description: "Wiki name", required: true },
126
- },
127
- async run({ args }) {
128
- const { listPages } = await import("../wiki/wiki.js");
129
- const stashDir = resolveStashDir();
130
- const pages = listPages(stashDir, args.name);
131
- output("wiki-pages", { wiki: args.name, pages });
132
- },
133
- });
134
- const wikiSearchCommand = defineJsonCommand({
135
- meta: {
136
- name: "search",
137
- description: "Search wiki pages within a single wiki (scoped wrapper over `akm search --type wiki`; excludes raw/schema/index/log and returns canonical wiki refs)",
138
- },
139
- args: {
140
- name: { type: "positional", description: "Wiki name", required: true },
141
- query: { type: "positional", description: "Search query", required: true },
142
- limit: { type: "string", description: "Max hits (default 20)", required: false },
143
- },
144
- async run({ args }) {
145
- const { resolveWikiSource, searchInWiki } = await import("../wiki/wiki.js");
146
- const stashDir = resolveStashDir();
147
- resolveWikiSource(stashDir, args.name);
148
- const parsedLimit = args.limit ? Number(args.limit) : undefined;
149
- const limit = typeof parsedLimit === "number" && Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : undefined;
150
- const response = await searchInWiki({ stashDir, wikiName: args.name, query: args.query, limit });
151
- output("search", response);
152
- },
153
- });
154
- const wikiStashCommand = defineJsonCommand({
155
- meta: {
156
- name: "stash",
157
- description: "Copy a source into wikis/<name>/raw/<slug>.md with frontmatter. Source may be a file path, URL, or '-' for stdin.",
158
- },
159
- args: {
160
- name: { type: "positional", description: "Wiki name", required: true },
161
- source: { type: "positional", description: "Source file path, URL, or '-' to read from stdin", required: true },
162
- as: { type: "string", description: "Preferred slug base (defaults to source filename or first-line slug)" },
163
- target: {
164
- type: "string",
165
- description: "Name of a writable stash source to write into instead of the default stash. Must match a configured source name (run `akm list` to see sources).",
166
- },
167
- },
168
- async run({ args }) {
169
- const { stashRaw } = await import("../wiki/wiki.js");
170
- let stashDir;
171
- if (args.target) {
172
- // Resolve the named source to its filesystem path.
173
- const cfg = loadConfig();
174
- const sources = resolveConfiguredSources(cfg);
175
- const match = sources.find((s) => s.name === args.target);
176
- if (!match) {
177
- throw new UsageError(`--target must reference a configured source name. No source named "${args.target}" found. Run \`akm list\` to see available sources.`, "INVALID_FLAG_VALUE");
178
- }
179
- const spec = match.source;
180
- if (spec.type !== "filesystem" && spec.type !== "local") {
181
- throw new ConfigError(`Source "${args.target}" is not a filesystem source and cannot be used as a wiki stash target.`, "INVALID_CONFIG_FILE", `Use a source with type "filesystem" or "local", or omit --target to use the default stash.`);
182
- }
183
- stashDir = spec.path;
184
- }
185
- else {
186
- stashDir = resolveStashDir();
187
- }
188
- const { content, preferredName } = await readKnowledgeInput(args.source, { stashDir });
189
- const result = stashRaw({
190
- stashDir,
191
- wikiName: args.name,
192
- content,
193
- preferredName: args.as ?? preferredName,
194
- explicitSlug: args.as !== undefined,
195
- });
196
- output("wiki-stash", { ok: true, wiki: args.name, source: args.source, ...result });
197
- },
198
- });
199
- const wikiLintCommand = defineCommand({
200
- meta: {
201
- name: "lint",
202
- description: "Structural lint for a wiki: orphans, broken xrefs, missing descriptions, uncited raws, stale index",
203
- },
204
- args: {
205
- name: { type: "positional", description: "Wiki name", required: true },
206
- },
207
- async run({ args }) {
208
- let findingCount = 0;
209
- await runWithJsonErrors(async () => {
210
- const { lintWiki } = await import("../wiki/wiki.js");
211
- const stashDir = resolveStashDir();
212
- const report = lintWiki(stashDir, args.name);
213
- output("wiki-lint", report);
214
- findingCount = report.findings.length;
215
- });
216
- if (findingCount > 0)
217
- process.exit(1); // EXIT_GENERAL
218
- },
219
- });
220
- const wikiIngestCommand = defineJsonCommand({
221
- meta: {
222
- name: "ingest",
223
- description: "Dispatch an agent to execute the ingest workflow for this wiki. Uses --profile or config.defaults.agent.",
224
- },
225
- args: {
226
- name: { type: "positional", description: "Wiki name", required: true },
227
- profile: {
228
- type: "string",
229
- description: "Agent profile to use (default: config.defaults.agent).",
230
- },
231
- model: {
232
- type: "string",
233
- description: "Model override — accepts aliases (opus, sonnet, haiku) or exact platform model IDs.",
234
- },
235
- "timeout-ms": { type: "string", description: "Override the agent CLI timeout in milliseconds." },
236
- },
237
- async run({ args }) {
238
- const { buildIngestWorkflow } = await import("../wiki/wiki.js");
239
- const stashDir = resolveStashDir();
240
- const built = buildIngestWorkflow(stashDir, args.name);
241
- const config = loadConfig();
242
- const profileName = getStringArg(args, "profile") ?? config.defaults?.agent;
243
- if (!profileName) {
244
- throw new UsageError("akm wiki ingest requires an agent profile. Pass --profile <name> or set defaults.agent in config.", "MISSING_REQUIRED_ARGUMENT", "Available profiles are listed under profiles.agent in your config. Run `akm config get profiles.agent` to inspect.");
245
- }
246
- const timeoutMs = parsePositiveIntFlag(args["timeout-ms"], "--timeout-ms");
247
- const model = getStringArg(args, "model");
248
- const { getDefaultLlmConfig } = await import("../core/config/config.js");
249
- const dispatchResult = await akmAgentDispatch({
250
- profileName,
251
- agentConfig: config,
252
- llmConfig: getDefaultLlmConfig(config),
253
- prompt: built.workflow,
254
- dispatch: {
255
- prompt: built.workflow,
256
- ...(model !== undefined ? { model } : {}),
257
- },
258
- ...(timeoutMs !== undefined && Number.isFinite(timeoutMs) ? { timeoutMs } : {}),
259
- });
260
- output("wiki-ingest", {
261
- wiki: built.wiki,
262
- path: built.path,
263
- schemaPath: built.schemaPath,
264
- dispatched: true,
265
- profile: profileName,
266
- agentResult: dispatchResult,
267
- });
268
- },
269
- });
270
- export const wikiCommand = defineGroupCommand({
271
- meta: {
272
- name: "wiki",
273
- description: "Manage multiple markdown wikis (Karpathy-style). akm surfaces (lifecycle, raw/, lint, index); the agent writes pages.",
274
- },
275
- subCommands: {
276
- create: wikiCreateCommand,
277
- register: wikiRegisterCommand,
278
- list: wikiListCommand,
279
- show: wikiShowCommand,
280
- remove: wikiRemoveCommand,
281
- pages: wikiPagesCommand,
282
- search: wikiSearchCommand,
283
- stash: wikiStashCommand,
284
- lint: wikiLintCommand,
285
- ingest: wikiIngestCommand,
286
- },
287
- async defaultRun() {
288
- // Default action: list wikis
289
- const { listWikis } = await import("../wiki/wiki.js");
290
- output("wiki-list", { wikis: listWikis(resolveStashDir()) });
291
- },
292
- });
@@ -1,76 +0,0 @@
1
- // This Source Code Form is subject to the terms of the Mozilla Public
2
- // License, v. 2.0. If a copy of the MPL was not distributed with this
3
- // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- /**
5
- * Central registry for asset type renderer and action builder maps.
6
- *
7
- * Previously these maps lived in `db-search.ts` (then `local-search.ts`) and
8
- * were wired into `asset-spec.ts` via a fragile `_setAssetTypeHooks` deferred
9
- * callback pattern. If the search module was imported after
10
- * `registerAssetType()` calls, hooks would be silently dropped.
11
- *
12
- * This module is a simple singleton that both `asset-spec.ts` and
13
- * `db-search.ts` import from, eliminating the import-order dependency
14
- * entirely.
15
- */
16
- import { buildWorkflowAction } from "../../output/renderers.js";
17
- /** Map asset types to their primary renderer names. */
18
- export const TYPE_TO_RENDERER = {
19
- script: "script-source",
20
- skill: "skill-md",
21
- command: "command-md",
22
- agent: "agent-md",
23
- knowledge: "knowledge-md",
24
- lesson: "lesson-md",
25
- memory: "memory-md",
26
- workflow: "workflow-md",
27
- env: "env-file",
28
- secret: "secret-file",
29
- wiki: "wiki-md",
30
- task: "task-yaml",
31
- session: "session-md",
32
- fact: "fact-md",
33
- };
34
- /** Map asset types to action builder functions for search results. */
35
- export const ACTION_BUILDERS = {
36
- script: (ref) => `akm show ${ref} -> execute the run command`,
37
- skill: (ref) => `akm show ${ref} -> follow the instructions`,
38
- command: (ref) => `akm show ${ref} -> fill placeholders and dispatch`,
39
- agent: (ref) => `akm show ${ref} -> dispatch with full prompt`,
40
- knowledge: (ref) => `akm show ${ref} -> read reference material`,
41
- lesson: (ref) => `akm show ${ref} -> read the lesson and apply when_to_use`,
42
- memory: (ref) => `akm show ${ref} -> recall context`,
43
- workflow: (ref) => buildWorkflowAction(ref),
44
- env: (ref) => `akm show ${ref} -> inspect key names; akm env run ${ref} -- <command> -> run with the whole .env injected (prefer --clean to minimize inherited parent env; child stdout is not redacted). akm env export ${ref} --out <file> writes a sourceable script (values to a file, not stdout).`,
45
- secret: (ref) => `akm show ${ref} -> name only (value never shown); akm secret path ${ref} -> file path; akm secret run ${ref} <VAR> -- <command> -> run with value injected into $VAR`,
46
- wiki: (ref) => `akm show ${ref} -> read the wiki page`,
47
- task: (ref) => `akm tasks show ${ref.replace(/^task:/, "")} -> inspect; akm tasks run <id> -> run now; akm tasks remove <id> -> unschedule`,
48
- session: (ref) => `akm show ${ref} -> read the session summary; follow the \`access\` frontmatter to open the raw log at \`log_path\``,
49
- fact: (ref) => `akm show ${ref} -> read the stash fact and apply it as durable context`,
50
- };
51
- /**
52
- * Register a type-to-renderer mapping.
53
- *
54
- * Called by `registerAssetType()` in `asset-spec.ts` when a spec includes
55
- * `rendererName`, or directly by extension code.
56
- */
57
- export function registerTypeRenderer(type, rendererName) {
58
- TYPE_TO_RENDERER[type] = rendererName;
59
- }
60
- /**
61
- * Register an action builder for an asset type.
62
- *
63
- * Called by `registerAssetType()` in `asset-spec.ts` when a spec includes
64
- * `actionBuilder`, or directly by extension code.
65
- */
66
- export function registerActionBuilder(type, builder) {
67
- ACTION_BUILDERS[type] = builder;
68
- }
69
- export const defaultRendererRegistry = {
70
- rendererNameFor(type) {
71
- return TYPE_TO_RENDERER[type];
72
- },
73
- actionBuilderFor(type) {
74
- return ACTION_BUILDERS[type];
75
- },
76
- };
@@ -1,259 +0,0 @@
1
- // This Source Code Form is subject to the terms of the Mozilla Public
2
- // License, v. 2.0. If a copy of the MPL was not distributed with this
3
- // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- import path from "node:path";
5
- import { buildWorkflowAction } from "../../output/renderers.js";
6
- import { registerActionBuilder, registerTypeRenderer } from "./asset-registry.js";
7
- function toPosix(input) {
8
- return input.replace(/\\/g, "/");
9
- }
10
- const buildTaskAction = (ref) => `akm tasks show ${ref.replace(/^task:/, "")} -> inspect; akm tasks run <id> -> run now; akm tasks remove <id> -> unschedule`;
11
- const markdownSpec = {
12
- isRelevantFile: (fileName) => path.extname(fileName).toLowerCase() === ".md",
13
- toCanonicalName: (typeRoot, filePath) => {
14
- const rel = toPosix(path.relative(typeRoot, filePath));
15
- // Strip .md extension from canonical names (agent:code-reviewer, not agent:code-reviewer.md)
16
- return rel.endsWith(".md") ? rel.slice(0, -3) : rel;
17
- },
18
- toAssetPath: (typeRoot, name) => {
19
- // Accept both with and without .md extension
20
- const withExt = name.endsWith(".md") ? name : `${name}.md`;
21
- return path.join(typeRoot, withExt);
22
- },
23
- };
24
- /** All recognized script extensions for the script asset type */
25
- export const SCRIPT_EXTENSIONS = new Set([
26
- ".sh",
27
- ".ts",
28
- ".js",
29
- ".ps1",
30
- ".cmd",
31
- ".bat",
32
- ".py",
33
- ".rb",
34
- ".go",
35
- ".pl",
36
- ".php",
37
- ".lua",
38
- ".r",
39
- ".swift",
40
- ".kt",
41
- ".kts",
42
- ]);
43
- const scriptSpec = {
44
- isRelevantFile: (fileName) => SCRIPT_EXTENSIONS.has(path.extname(fileName).toLowerCase()),
45
- toCanonicalName: (typeRoot, filePath) => toPosix(path.relative(typeRoot, filePath)),
46
- toAssetPath: (typeRoot, name) => path.join(typeRoot, name),
47
- };
48
- const ASSET_SPECS_INTERNAL = {
49
- skill: {
50
- stashDir: "skills",
51
- isRelevantFile: (fileName) => fileName === "SKILL.md",
52
- toCanonicalName: (typeRoot, filePath) => {
53
- const relDir = toPosix(path.dirname(path.relative(typeRoot, filePath)));
54
- if (!relDir || relDir === ".")
55
- return undefined;
56
- return relDir;
57
- },
58
- toAssetPath: (typeRoot, name) => path.join(typeRoot, name, "SKILL.md"),
59
- },
60
- command: { stashDir: "commands", ...markdownSpec },
61
- agent: { stashDir: "agents", ...markdownSpec },
62
- knowledge: { stashDir: "knowledge", ...markdownSpec },
63
- workflow: {
64
- stashDir: "workflows",
65
- ...markdownSpec,
66
- rendererName: "workflow-md",
67
- actionBuilder: (ref) => buildWorkflowAction(ref),
68
- },
69
- script: { stashDir: "scripts", ...scriptSpec },
70
- memory: { stashDir: "memories", ...markdownSpec },
71
- // Environment assets — whole `.env` files sourced/injected wholesale. Replaced
72
- // the deprecated `vault` type (removed in 0.9.0). Only key NAMES are surfaced
73
- // as metadata; values and comment text are never read for indexing (comments
74
- // routinely contain commented-out credentials).
75
- env: {
76
- stashDir: "env",
77
- isRelevantFile: (fileName) => fileName === ".env" || fileName.endsWith(".env"),
78
- toCanonicalName: (typeRoot, filePath) => {
79
- const rel = toPosix(path.relative(typeRoot, filePath));
80
- const fileName = path.basename(rel);
81
- // Treat ".env" as the "default" env; "<name>.env" → "<name>"
82
- if (fileName === ".env") {
83
- const dir = path.dirname(rel);
84
- return dir === "." || dir === "" ? "default" : `${dir}/default`;
85
- }
86
- const stripped = rel.endsWith(".env") ? rel.slice(0, -4) : rel;
87
- return stripped;
88
- },
89
- toAssetPath: (typeRoot, name) => {
90
- if (name === "default")
91
- return path.join(typeRoot, ".env");
92
- return path.join(typeRoot, name.endsWith(".env") ? name : `${name}.env`);
93
- },
94
- rendererName: "env-file",
95
- actionBuilder: (ref) => `akm show ${ref} -> inspect key names; akm env run ${ref} -- <command> -> run with the whole .env injected (prefer --clean to minimize inherited parent env; child stdout is not redacted); akm env export ${ref} --out <file> -> write a sourceable script to a file`,
96
- },
97
- // Secrets — a single sensitive value used on its own for authentication (a
98
- // PEM key, API token, TLS cert). Unlike `env` (a group of related .env
99
- // configuration), the ENTIRE file is the one secret value — there is no safe
100
- // region to parse, so only the filename is ever surfaced as metadata. The
101
- // value reaches a command only via `akm secret run` (injected into a child
102
- // env var) or `akm secret path` (Docker `_FILE` convention). A secret is any
103
- // regular file under `secrets/` except `.lock`/`.sensitive` sidecars; the
104
- // canonical name preserves the natural filename (e.g. `id_rsa`, `team/deploy.key`).
105
- secret: {
106
- stashDir: "secrets",
107
- isRelevantFile: (fileName) => !fileName.endsWith(".lock") && !fileName.endsWith(".sensitive"),
108
- toCanonicalName: (typeRoot, filePath) => toPosix(path.relative(typeRoot, filePath)),
109
- toAssetPath: (typeRoot, name) => path.join(typeRoot, name),
110
- rendererName: "secret-file",
111
- actionBuilder: (ref) => `akm show ${ref} -> name only (value never shown); akm secret path ${ref} -> file path; akm secret run ${ref} <VAR> -- <command> -> run with value injected into $VAR`,
112
- },
113
- wiki: {
114
- stashDir: "wikis",
115
- ...markdownSpec,
116
- rendererName: "wiki-md",
117
- actionBuilder: (ref) => `akm show ${ref} -> read the wiki page`,
118
- },
119
- // v1 spec §13 — `lesson` asset type. Required frontmatter fields are
120
- // `description` and `when_to_use`; lint enforces both (see
121
- // `src/core/lesson-lint.ts`). Lessons normally arrive as proposals via
122
- // `akm distill <ref>` (§14.5) and are promoted via `akm proposal accept`,
123
- // but they can also be authored directly with `akm import` /
124
- // `akm remember`-style flows.
125
- lesson: {
126
- stashDir: "lessons",
127
- ...markdownSpec,
128
- rendererName: "lesson-md",
129
- actionBuilder: (ref) => `akm show ${ref} -> read the lesson and apply when_to_use`,
130
- },
131
- // Scheduled tasks. A task file pairs a cron-style schedule with a target
132
- // (workflow ref, prompt, or command) that `akm tasks` registers with the
133
- // OS-native scheduler (cron / launchd / schtasks). Stored as pure YAML
134
- // under <stash>/tasks/<id>.yml.
135
- task: {
136
- stashDir: "tasks",
137
- isRelevantFile: (fileName) => path.extname(fileName).toLowerCase() === ".yml",
138
- toCanonicalName: (typeRoot, filePath) => {
139
- const rel = toPosix(path.relative(typeRoot, filePath));
140
- return rel.endsWith(".yml") ? rel.slice(0, -4) : rel;
141
- },
142
- toAssetPath: (typeRoot, name) => {
143
- const withExt = name.endsWith(".yml") ? name : `${name}.yml`;
144
- return path.join(typeRoot, withExt);
145
- },
146
- rendererName: "task-yaml",
147
- actionBuilder: buildTaskAction,
148
- },
149
- // #561 — agent sessions indexed as a first-class searchable asset type.
150
- // Generated (derived) markdown written by the `extract` pass to
151
- // `sessions/<harness>/<session-id>.md`; carries `log_path` + `access`
152
- // frontmatter so any agent can navigate into the raw session log. A plain
153
- // markdown spec — the summary body is the searchable surface.
154
- session: {
155
- stashDir: "sessions",
156
- ...markdownSpec,
157
- rendererName: "session-md",
158
- actionBuilder: (ref) => `akm show ${ref} -> read the session summary; follow the \`access\` frontmatter to open the raw log at \`log_path\``,
159
- },
160
- // Durable stash-level semantic knowledge — facts about the user, team, or
161
- // project (personal details, team tool stacks, coding conventions /
162
- // "constitution", and stash-meta like naming conventions or the active
163
- // projects list). Unlike `memory` (episodic, recency-decayed) these are
164
- // mostly-static declarations meant to be reliably surfaced as context. A
165
- // plain markdown spec; `category` frontmatter scopes the fact and
166
- // `pinned: true` marks the small always-injected core. See
167
- // docs/design/fact-asset-type.md.
168
- fact: {
169
- stashDir: "facts",
170
- ...markdownSpec,
171
- rendererName: "fact-md",
172
- actionBuilder: (ref) => `akm show ${ref} -> read the stash fact and apply it as durable context`,
173
- },
174
- };
175
- export const ASSET_SPECS = ASSET_SPECS_INTERNAL;
176
- /**
177
- * Register a custom asset type with the akm asset system.
178
- *
179
- * ## Full extension registration API
180
- *
181
- * Providing `rendererName` and/or `actionBuilder` in the spec automatically
182
- * registers the renderer and action builder so that search results and `show`
183
- * output work out of the box without additional calls.
184
- *
185
- * ### Minimal registration (filesystem layout only)
186
- * ```ts
187
- * registerAssetType("widget", {
188
- * stashDir: "widgets",
189
- * isRelevantFile: (f) => f.endsWith(".widget"),
190
- * toCanonicalName: (root, fp) => path.basename(fp, ".widget"),
191
- * toAssetPath: (root, name) => path.join(root, `${name}.widget`),
192
- * });
193
- * ```
194
- *
195
- * ### Full registration (filesystem + renderer + action)
196
- * ```ts
197
- * registerAssetType("widget", {
198
- * stashDir: "widgets",
199
- * isRelevantFile: (f) => f.endsWith(".widget"),
200
- * toCanonicalName: (root, fp) => path.basename(fp, ".widget"),
201
- * toAssetPath: (root, name) => path.join(root, `${name}.widget`),
202
- * rendererName: "widget-md", // registered via registerRenderer() separately
203
- * actionBuilder: (ref) => `akm show ${ref} -> use widget`,
204
- * });
205
- * ```
206
- *
207
- * Renderer and action builder registration is handled directly via the
208
- * `asset-registry` singleton — no deferred hooks or import-order concerns.
209
- */
210
- export function registerAssetType(type, spec) {
211
- ASSET_SPECS_INTERNAL[type] = spec;
212
- TYPE_DIRS[type] = spec.stashDir;
213
- // Auto-register renderer and action builder if provided in spec
214
- if (spec.rendererName) {
215
- registerTypeRenderer(type, spec.rendererName);
216
- }
217
- if (spec.actionBuilder) {
218
- registerActionBuilder(type, spec.actionBuilder);
219
- }
220
- }
221
- /**
222
- * Remove a previously-registered asset type.
223
- *
224
- * Primarily used by tests for cleanup after `registerAssetType` calls so
225
- * subsequent tests see a pristine type registry. Built-in types should not
226
- * normally be deregistered at runtime.
227
- */
228
- export function deregisterAssetType(type) {
229
- delete ASSET_SPECS_INTERNAL[type];
230
- delete TYPE_DIRS[type];
231
- }
232
- export function getAssetTypes() {
233
- return Object.keys(ASSET_SPECS_INTERNAL);
234
- }
235
- export const TYPE_DIRS = Object.fromEntries(Object.entries(ASSET_SPECS_INTERNAL).map(([type, spec]) => [type, spec.stashDir]));
236
- export function isRelevantAssetFile(assetType, fileName) {
237
- return ASSET_SPECS[assetType]?.isRelevantFile(fileName) ?? false;
238
- }
239
- export function deriveCanonicalAssetName(assetType, typeRoot, filePath) {
240
- return ASSET_SPECS[assetType]?.toCanonicalName(typeRoot, filePath);
241
- }
242
- export function deriveCanonicalAssetNameFromStashRoot(assetType, stashRoot, filePath) {
243
- const relPath = toPosix(path.relative(stashRoot, filePath));
244
- const segments = relPath.split("/").filter(Boolean);
245
- const firstSegment = segments[0];
246
- // When the first segment matches the canonical type dir (e.g. "agents"),
247
- // use it as the type root so canonical names are relative to it.
248
- // Otherwise fall back to stashRoot — this preserves the full relative path
249
- // as the canonical name, which is correct for installed stashes that live
250
- // under custom directories (e.g. "tools/agents/svelte-file-editor").
251
- const typeRoot = firstSegment === TYPE_DIRS[assetType] ? path.join(stashRoot, firstSegment) : stashRoot;
252
- return deriveCanonicalAssetName(assetType, typeRoot, filePath);
253
- }
254
- export function resolveAssetPathFromName(assetType, typeRoot, name) {
255
- const spec = ASSET_SPECS[assetType];
256
- if (!spec)
257
- throw new Error(`Unknown asset type: "${assetType}"`);
258
- return spec.toAssetPath(typeRoot, name);
259
- }