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,170 +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
- * Manifest: compact asset listing for cheap capability discovery.
6
- *
7
- * Returns a lightweight list of all assets (name, type, ref, one-line
8
- * description) that stays under 500 tokens for 50 assets. This gives
9
- * agents a fast way to discover available capabilities without loading
10
- * full content or running a search query.
11
- */
12
- import fs from "node:fs";
13
- import path from "node:path";
14
- import { makeAssetRef } from "../core/asset/asset-ref.js";
15
- import { deriveCanonicalAssetNameFromStashRoot } from "../core/asset/asset-spec.js";
16
- import { resolveStashDir } from "../core/common.js";
17
- import { loadConfig } from "../core/config/config.js";
18
- import { getDbPath } from "../core/paths.js";
19
- import { warn } from "../core/warn.js";
20
- import { closeDatabase, getAllEntries, getEntryCount, getMeta, openExistingDatabase } from "./db/db.js";
21
- import { generateMetadataFlat, loadStashFile } from "./passes/metadata.js";
22
- import { resolveSourceEntries } from "./search/search-source.js";
23
- import { walkStashFlat } from "./walk/walker.js";
24
- const MAX_DESCRIPTION_LENGTH = 80;
25
- /**
26
- * Truncate a description string to a maximum length, appending "..." if truncated.
27
- */
28
- function truncateDescription(desc) {
29
- if (!desc)
30
- return undefined;
31
- if (desc.length <= MAX_DESCRIPTION_LENGTH)
32
- return desc;
33
- return `${desc.slice(0, MAX_DESCRIPTION_LENGTH)}...`;
34
- }
35
- /**
36
- * Build a compact ManifestEntry from a StashEntry.
37
- * Returns null if the entry cannot be converted (e.g. malformed name).
38
- */
39
- function toManifestEntry(entry, filePath, stashDir, registryId) {
40
- try {
41
- const canonical = deriveCanonicalAssetNameFromStashRoot(entry.type, stashDir, filePath);
42
- const refName = canonical && !canonical.startsWith("../") && !canonical.startsWith("..\\") ? canonical : entry.name;
43
- const ref = makeAssetRef(entry.type, refName, registryId);
44
- const result = {
45
- name: entry.name,
46
- type: entry.type,
47
- ref,
48
- };
49
- const desc = truncateDescription(entry.description);
50
- if (desc) {
51
- result.description = desc;
52
- }
53
- return result;
54
- }
55
- catch (error) {
56
- warn(`Manifest: skipping entry "${entry.name}" (${entry.type}):`, error instanceof Error ? error.message : String(error));
57
- return null;
58
- }
59
- }
60
- /**
61
- * Get the manifest from the database (fast path).
62
- */
63
- function getManifestFromDb(stashDir, _config, sources, type) {
64
- const dbPath = getDbPath();
65
- try {
66
- if (!fs.existsSync(dbPath))
67
- return null;
68
- const db = openExistingDatabase(dbPath);
69
- try {
70
- const entryCount = getEntryCount(db);
71
- const storedStashDir = getMeta(db, "stashDir");
72
- if (entryCount === 0 || storedStashDir !== stashDir)
73
- return null;
74
- const typeFilter = type && type !== "any" ? type : undefined;
75
- const allEntries = getAllEntries(db, typeFilter);
76
- // Deduplicate by file path
77
- const seenFilePaths = new Set();
78
- const entries = [];
79
- for (const ie of allEntries) {
80
- if (seenFilePaths.has(ie.filePath))
81
- continue;
82
- seenFilePaths.add(ie.filePath);
83
- // Find origin for this entry
84
- const source = sources.find((s) => ie.filePath.startsWith(path.resolve(s.path) + path.sep));
85
- const entry = toManifestEntry(ie.entry, ie.filePath, ie.stashDir, source?.registryId);
86
- if (entry)
87
- entries.push(entry);
88
- }
89
- return entries;
90
- }
91
- finally {
92
- closeDatabase(db);
93
- }
94
- }
95
- catch (error) {
96
- warn("Manifest: index unavailable, falling back to walker:", error instanceof Error ? error.message : String(error));
97
- return null;
98
- }
99
- }
100
- /**
101
- * Get the manifest by walking the stash directory (fallback when no index).
102
- */
103
- async function getManifestFromWalker(sources, type) {
104
- const allSourceDirs = sources.map((s) => s.path);
105
- const entries = [];
106
- for (const currentStashDir of allSourceDirs) {
107
- const fileContexts = walkStashFlat(currentStashDir);
108
- // Group by parent directory
109
- const dirGroups = new Map();
110
- for (const ctx of fileContexts) {
111
- const group = dirGroups.get(ctx.parentDirAbs);
112
- if (group)
113
- group.push(ctx.absPath);
114
- else
115
- dirGroups.set(ctx.parentDirAbs, [ctx.absPath]);
116
- }
117
- for (const [dirPath, files] of dirGroups) {
118
- const generated = await generateMetadataFlat(currentStashDir, files);
119
- const legacyOverrides = loadStashFile(dirPath, { requireFilename: true });
120
- const mergedEntries = legacyOverrides
121
- ? generated.entries.map((entry) => mergeLegacyEntry(entry, legacyOverrides.entries))
122
- : generated.entries;
123
- const stash = mergedEntries.length > 0 ? { entries: mergedEntries } : legacyOverrides;
124
- if (!stash || stash.entries.length === 0)
125
- continue;
126
- const source = sources.find((s) => dirPath.startsWith(path.resolve(s.path) + path.sep));
127
- for (const stashEntry of stash.entries) {
128
- if (type && type !== "any" && stashEntry.type !== type)
129
- continue;
130
- if (!stashEntry.filename)
131
- continue;
132
- const entryPath = path.join(dirPath, stashEntry.filename);
133
- const manifestEntry = toManifestEntry(stashEntry, entryPath, currentStashDir, source?.registryId);
134
- if (manifestEntry)
135
- entries.push(manifestEntry);
136
- }
137
- }
138
- }
139
- return entries;
140
- }
141
- function mergeLegacyEntry(entry, legacyEntries) {
142
- const legacy = legacyEntries.find((candidate) => candidate.filename === entry.filename);
143
- return legacy ? { ...entry, ...legacy, filename: entry.filename } : entry;
144
- }
145
- /**
146
- * Generate a compact manifest of all assets in the stash.
147
- *
148
- * Tries the database first (fast path). Falls back to walker-based listing
149
- * if no index is available.
150
- */
151
- export async function akmManifest(options) {
152
- const stashDir = options?.stashDir ?? resolveStashDir();
153
- const type = options?.type;
154
- const config = loadConfig();
155
- const sources = resolveSourceEntries(stashDir, config);
156
- // Fast path: try database
157
- const dbEntries = getManifestFromDb(stashDir, config, sources, type);
158
- if (dbEntries !== null) {
159
- return {
160
- schemaVersion: 1,
161
- entries: dbEntries,
162
- };
163
- }
164
- // Fallback: walk filesystem
165
- const walkerEntries = await getManifestFromWalker(sources, type);
166
- return {
167
- schemaVersion: 1,
168
- entries: walkerEntries,
169
- };
170
- }
@@ -1,31 +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
- const contributors = [];
5
- /**
6
- * Ensure that all built-in indexer contributors are registered.
7
- *
8
- * Delegates to the single `initIndexer()` composition root (see
9
- * `src/indexer/init.ts`). Imported dynamically to keep this a lazy gate and to
10
- * avoid a static import cycle (init -> renderers -> metadata-contributors).
11
- * Called on first use of getMetadataContributors; idempotent.
12
- */
13
- async function ensureBuiltinMetadataContributorsRegistered() {
14
- const { initIndexer } = await import("../init.js");
15
- await initIndexer();
16
- }
17
- export function registerMetadataContributor(contributor) {
18
- contributors.push(contributor);
19
- }
20
- export async function getMetadataContributors() {
21
- await ensureBuiltinMetadataContributorsRegistered();
22
- return [...contributors];
23
- }
24
- export async function applyMetadataContributors(entry, ctx) {
25
- const activeContributors = await getMetadataContributors();
26
- for (const contributor of activeContributors) {
27
- if (!contributor.appliesTo(ctx))
28
- continue;
29
- contributor.contribute(entry, ctx);
30
- }
31
- }
@@ -1,94 +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
- * One-time, read-only guard for un-migrated `vaults/` directories (0.9.0).
6
- *
7
- * Background: 0.8.0 introduced the `env` asset type and a `vaults/` → `env/`
8
- * copy migration (run by `akm-migrate-storage`). 0.9.0 removed the `vault`
9
- * asset type entirely, and the indexer now unconditionally SKIPS `vaults/`
10
- * (see `shouldIndexStashFile` in `metadata.ts`). A user who upgrades straight
11
- * to 0.9.0 without ever running the storage migration therefore has the `.env`
12
- * data in their `vaults/` directory silently dropped from the index — it was
13
- * never copied to `env/`, and `vaults/` is no longer scanned.
14
- *
15
- * This guard detects exactly that state on a stash and emits ONE clear warning
16
- * pointing at `akm-migrate-storage`. It is:
17
- * - Non-destructive: it never reads `.env` contents, never writes, never
18
- * deletes, and never moves anything. It only stats directory entries.
19
- * - Idempotent: the warning is emitted at most once per process per stash
20
- * directory (deduped in-memory).
21
- *
22
- * It deliberately does NOT auto-run the copy: filesystem mutation + chmod of
23
- * secret material stays in the dedicated `akm-migrate-storage` bin, behind the
24
- * user's explicit invocation, never as a side effect of a normal `akm` command.
25
- */
26
- import fs from "node:fs";
27
- import path from "node:path";
28
- import { warn } from "../../core/warn.js";
29
- /**
30
- * Marker filename the `vaults/` → `env/` migration drops inside `vaults/` after
31
- * a successful copy. Single source of truth shared with
32
- * `scripts/migrate-storage.ts` (which writes it) and this guard (which reads
33
- * it). Its presence means the data already lives under `env/` (or was a no-op
34
- * fresh install).
35
- */
36
- export const MIGRATED_MARKER = ".migrated";
37
- /** Stashes already warned about in this process — keyed by absolute stash dir. */
38
- const warnedStashDirs = new Set();
39
- /** True when `dir` contains at least one `*.env` / `.env` file (recursively). */
40
- function hasEnvFilesRecursive(dir) {
41
- let entries;
42
- try {
43
- entries = fs.readdirSync(dir, { withFileTypes: true });
44
- }
45
- catch {
46
- return false;
47
- }
48
- for (const entry of entries) {
49
- const full = path.join(dir, entry.name);
50
- if (entry.isDirectory()) {
51
- if (hasEnvFilesRecursive(full))
52
- return true;
53
- }
54
- else if (entry.name === ".env" || entry.name.endsWith(".env")) {
55
- return true;
56
- }
57
- }
58
- return false;
59
- }
60
- /**
61
- * Warn (once) when `<stashDir>/vaults/` holds `.env` data that was never
62
- * migrated to `env/`. No-op when there is no `vaults/` dir, when the
63
- * `vaults/.migrated` marker is present, or when `vaults/` has no `.env` files.
64
- *
65
- * @returns `true` when a warning was emitted, `false` otherwise. The return is
66
- * primarily for tests; callers can ignore it.
67
- */
68
- export function warnOnUnmigratedVaults(stashDir) {
69
- const resolved = path.resolve(stashDir);
70
- if (warnedStashDirs.has(resolved))
71
- return false;
72
- const vaultsDir = path.join(resolved, "vaults");
73
- if (!fs.existsSync(vaultsDir))
74
- return false;
75
- // The migration writes this marker after a successful copy. Its presence
76
- // means the data already lives under env/ (or was a no-op fresh install).
77
- if (fs.existsSync(path.join(vaultsDir, MIGRATED_MARKER)))
78
- return false;
79
- if (!hasEnvFilesRecursive(vaultsDir))
80
- return false;
81
- // Mark before emitting so a throw in `warn` can't cause a re-warn loop.
82
- warnedStashDirs.add(resolved);
83
- warn(`[akm] WARNING: found un-migrated secrets in ${vaultsDir}.\n` +
84
- ` The 'vault' asset type was removed in 0.9.0 and 'vaults/' is no longer indexed,\n` +
85
- ` so this data will NOT appear under 'env:' until you migrate it. Run:\n` +
86
- ` akm-migrate-storage --yes\n` +
87
- ` This copies 'vaults/' -> 'env/' (non-destructive — your 'vaults/' dir is left intact).\n` +
88
- ` See docs/migration/v0.8-to-v0.9.md.`);
89
- return true;
90
- }
91
- /** Test-only: clear the per-process dedup set. */
92
- export function _resetUnmigratedVaultsGuardForTests() {
93
- warnedStashDirs.clear();
94
- }
@@ -1,49 +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
- * OpenCode SDK harness (#564).
6
- *
7
- * Per-harness barrel for the SDK-mode dispatch path:
8
- * - agent runner → ./sdk-runner.ts (runOpencodeSdk)
9
- *
10
- * It also defines {@link OpencodeSdkHarness}, the {@link AkmHarness} descriptor
11
- * that `HARNESS_REGISTRY` registers.
12
- *
13
- * Unlike the CLI harnesses, the SDK path has no native session logs of its own
14
- * (`capabilities.sessionLogs = false`): it dispatches via the embedded
15
- * `@opencode-ai/sdk` and surfaces output directly rather than writing platform
16
- * session files. It is still detected at setup and migrated from v1 profile
17
- * names. Canonical id is `'opencode-sdk'` with no alias.
18
- */
19
- import { BaseHarness } from "../types.js";
20
- export { closeServer, runOpencodeSdk } from "./sdk-runner.js";
21
- function caps(c) {
22
- return {
23
- sessionLogs: false,
24
- agentDispatch: false,
25
- detection: false,
26
- configImport: false,
27
- runtimeIdentity: false,
28
- v1Migration: false,
29
- ...c,
30
- };
31
- }
32
- /**
33
- * OpenCode SDK (embedded-SDK dispatch path).
34
- *
35
- * Dispatch-only: no native session logs, but detected at setup and migrated
36
- * from v1 profile names.
37
- */
38
- export class OpencodeSdkHarness extends BaseHarness {
39
- id = "opencode-sdk";
40
- displayName = "OpenCode SDK";
41
- aliases = [];
42
- // Decorated v1 profile names like "opencode-sdk-fast" belong to the SDK path.
43
- v1ProfilePrefixes = ["opencode-sdk"];
44
- capabilities = caps({
45
- agentDispatch: true,
46
- detection: true,
47
- v1Migration: true,
48
- });
49
- }
@@ -1,62 +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 { getDefaultLlmConfig } from "../core/config/config.js";
5
- import { warn } from "../core/warn.js";
6
- import { resolveProfileFromConfig, runAgent } from "../integrations/agent/index.js";
7
- import { chatCompletion } from "./client.js";
8
- /**
9
- * Unified AI call: prefers the default agent profile, falls back to the
10
- * default LLM profile. When neither is configured, returns a structured
11
- * error pointing the user at `akm setup`.
12
- */
13
- export async function callAi(config, prompt, opts = {}) {
14
- const defaultAgentName = config.defaults?.agent;
15
- if (defaultAgentName) {
16
- try {
17
- const profile = resolveProfileFromConfig(defaultAgentName, config);
18
- if (!profile) {
19
- return {
20
- ok: false,
21
- error: `Agent profile "${defaultAgentName}" is not built-in and has no \`bin\` override.`,
22
- };
23
- }
24
- const result = await runAgent(profile, prompt, {
25
- stdio: opts.draftFilePath ? "interactive" : "captured",
26
- parseOutput: "text",
27
- timeoutMs: opts.timeoutMs,
28
- });
29
- if (!result.ok)
30
- return { ok: false, error: result.error ?? result.reason ?? "agent failed" };
31
- return { ok: true, content: result.stdout ?? "", path: "agent-cli" };
32
- }
33
- catch (e) {
34
- return { ok: false, error: String(e) };
35
- }
36
- }
37
- const llmConfig = getDefaultLlmConfig(config);
38
- if (llmConfig) {
39
- if (opts.draftFilePath) {
40
- warn("[akm] No agent CLI configured — falling back to LLM API. " +
41
- "File-write contract unavailable; expecting JSON in stdout. " +
42
- "Install an agent CLI and run `akm setup` for full functionality.");
43
- }
44
- const messages = [];
45
- if (opts.systemPrompt)
46
- messages.push({ role: "system", content: opts.systemPrompt });
47
- messages.push({ role: "user", content: prompt });
48
- try {
49
- const content = await chatCompletion(llmConfig, messages, {
50
- ...(opts.timeoutMs !== undefined ? { timeoutMs: opts.timeoutMs } : {}),
51
- });
52
- return { ok: true, content, path: "llm-http" };
53
- }
54
- catch (e) {
55
- return { ok: false, error: String(e) };
56
- }
57
- }
58
- return {
59
- ok: false,
60
- error: "No AI connection configured. Run `akm setup` or set `defaults.agent`/`defaults.llm`.",
61
- };
62
- }
@@ -1,138 +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
- * LLM helper for the `akm index` memory-inference pass (#201).
6
- *
7
- * Compresses a single memory body into one higher-signal derived memory. The
8
- * pass itself (in `src/indexer/memory-inference.ts`) is responsible for
9
- * deciding which memories are pending, persisting the derived memory with the
10
- * correct frontmatter (`inferred: true`, `source: <parent-ref>`), and marking
11
- * the parent as processed for idempotency.
12
- *
13
- * This module is intentionally tiny and stateless so tests can stub it via
14
- * `mock.module("../src/llm/memory-infer", ...)` without hitting a network.
15
- *
16
- * Locked v1 contract (#208): the LLM connection always comes from the
17
- * shared `akm.llm` block — never from a per-pass override. Callers obtain
18
- * the connection via `resolveIndexPassLLM("memory", config)` and pass it
19
- * straight through.
20
- */
21
- import memoryInferSystemPrompt from "../assets/prompts/memory-infer-system.md" with { type: "text" };
22
- import memoryInferUserPrompt from "../assets/prompts/memory-infer-user.md" with { type: "text" };
23
- import { toErrorMessage } from "../core/common.js";
24
- import { warn } from "../core/warn.js";
25
- import { parseEmbeddedJsonResponse } from "./client.js";
26
- import { callStructured } from "./structured-call.js";
27
- /** Hard cap on body chars sent to the model — pragmatic and matches `runLlmEnrich`. */
28
- const MAX_BODY_CHARS = 4000;
29
- const SYSTEM_PROMPT = memoryInferSystemPrompt;
30
- const USER_PROMPT_PREFIX = memoryInferUserPrompt;
31
- /**
32
- * Strict JSON Schema for the derived-memory payload. Sent to providers that
33
- * opt in via `LlmConnectionConfig.supportsJsonSchema = true`; the client
34
- * silently drops the schema for providers that don't.
35
- *
36
- * Extends the responseSchema lift (PR 1, asset-writers-investigation §5) to
37
- * the memory-inference path. Mirrors the validation gate below
38
- * (title/description/content + non-empty tags/searchHints) so a
39
- * schema-compliant response is guaranteed to pass the downstream check
40
- * — no more "incomplete derived memory payload from LLM; skipping memory"
41
- * for shape-only failures.
42
- */
43
- const DERIVED_MEMORY_JSON_SCHEMA = {
44
- type: "object",
45
- properties: {
46
- title: { type: "string", minLength: 1 },
47
- description: { type: "string", minLength: 1 },
48
- content: { type: "string", minLength: 1 },
49
- tags: { type: "array", items: { type: "string" }, minItems: 1, maxItems: 8 },
50
- searchHints: { type: "array", items: { type: "string" }, minItems: 1, maxItems: 6 },
51
- },
52
- required: ["title", "description", "content", "tags", "searchHints"],
53
- additionalProperties: false,
54
- };
55
- /**
56
- * Compress a single memory body into one derived memory via the configured LLM.
57
- *
58
- * Returns `undefined` on any failure (timeout, invalid JSON, empty response).
59
- * Errors are logged via `warn()` but never thrown — a failed split for one memory
60
- * must not abort the rest of the index pass.
61
- *
62
- * Routes through `callStructured({ feature: "memory_inference", ... })` so the
63
- * feature gate, error classification, and onFallback hook are honoured uniformly
64
- * (Fix C5).
65
- */
66
- export async function compressMemoryToDerivedMemory(llmConfig, body, signal, akmConfig, onFallback, telemetry, onRetryAttempt) {
67
- const trimmedBody = body.trim();
68
- if (!trimmedBody)
69
- return undefined;
70
- const userPrompt = `${USER_PROMPT_PREFIX}${trimmedBody.slice(0, MAX_BODY_CHARS)}`;
71
- // Memory-inference is ALWAYS gated: no `akmConfig` ⇒ gate closed (no chat,
72
- // `disabled` fallback), never the seam's ungated/propagate path (which is for
73
- // direct callers like `enhanceMetadata`). This is the gate-closed branch
74
- // `tryLlmFeature(_, undefined, _)` took before the migration.
75
- if (!akmConfig) {
76
- onFallback?.({ feature: "memory_inference", reason: "disabled" });
77
- return undefined;
78
- }
79
- return callStructured({
80
- feature: "memory_inference",
81
- akmConfig,
82
- config: llmConfig,
83
- messages: [
84
- { role: "system", content: SYSTEM_PROMPT },
85
- { role: "user", content: userPrompt },
86
- ],
87
- request: {
88
- temperature: 0.1,
89
- timeoutMs: llmConfig.timeoutMs,
90
- signal,
91
- responseSchema: DERIVED_MEMORY_JSON_SCHEMA,
92
- onRetryAttempt,
93
- },
94
- parse: (raw) => {
95
- if (!raw)
96
- return undefined;
97
- const parsed = parseEmbeddedJsonResponse(raw);
98
- if (!parsed) {
99
- warn("memory inference: invalid JSON response from LLM; skipping memory.");
100
- return undefined;
101
- }
102
- const title = typeof parsed.title === "string" ? parsed.title.trim() : "";
103
- const description = typeof parsed.description === "string" ? parsed.description.trim() : "";
104
- const content = typeof parsed.content === "string" ? parsed.content.trim() : "";
105
- const tags = Array.isArray(parsed.tags)
106
- ? parsed.tags
107
- .filter((t) => typeof t === "string")
108
- .map((t) => t.trim())
109
- .filter(Boolean)
110
- .slice(0, 8)
111
- : [];
112
- const searchHints = Array.isArray(parsed.searchHints)
113
- ? parsed.searchHints
114
- .filter((h) => typeof h === "string")
115
- .map((h) => h.trim())
116
- .filter(Boolean)
117
- .slice(0, 6)
118
- : [];
119
- if (!title || !description || !content || tags.length === 0 || searchHints.length === 0) {
120
- warn("memory inference: incomplete derived memory payload from LLM; skipping memory.");
121
- return undefined;
122
- }
123
- return { title, description, tags, searchHints, content };
124
- },
125
- onError: (cls, err) => {
126
- if (cls === "html") {
127
- if (telemetry)
128
- telemetry.htmlErrorCount = (telemetry.htmlErrorCount ?? 0) + 1;
129
- warn(`memory inference: provider returned HTML instead of JSON; skipping memory: ${toErrorMessage(err)}`);
130
- return undefined;
131
- }
132
- warn(`memory inference failed: ${toErrorMessage(err)}`);
133
- return undefined;
134
- },
135
- fallback: undefined,
136
- onFallback,
137
- });
138
- }
@@ -1,14 +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
- // Output shape registration for `akm distill <ref>` (#228). The shape is
5
- // simple — outcome + ids + optional payload — so `brief` strips the full
6
- // proposal blob, `normal` keeps the headline fields, and `full` projects
7
- // everything for downstream automation.
8
- import { shapeDistillOutput } from "./helpers.js";
9
- export const distillShapes = [
10
- {
11
- command: "distill",
12
- handler: (result, detail) => shapeDistillOutput(result, detail),
13
- },
14
- ];
@@ -1,11 +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
- // Output shape registration for `akm history` — paired with the text renderer in text.ts.
5
- import { shapeHistoryOutput } from "./helpers.js";
6
- export const historyShapes = [
7
- {
8
- command: "history",
9
- handler: (result, detail) => shapeHistoryOutput(result, detail),
10
- },
11
- ];
@@ -1,6 +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
- // Output text formatter for `akm distill <ref>` (#228).
5
- import { formatDistillPlain } from "./helpers.js";
6
- export const distillFormatters = [{ command: "distill", handler: (r) => formatDistillPlain(r) }];
@@ -1,8 +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 { formatToggleComponentPlain } from "./helpers.js";
5
- export const enableDisableFormatters = [
6
- { command: "enable", handler: (r) => formatToggleComponentPlain("enable", r) },
7
- { command: "disable", handler: (r) => formatToggleComponentPlain("disable", r) },
8
- ];
@@ -1,6 +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
- // Output text formatter for `akm history` — paired with the shape in shapes/history.ts.
5
- import { formatHistoryPlain } from "./helpers.js";
6
- export const historyFormatters = [{ command: "history", handler: (r) => formatHistoryPlain(r) }];
@@ -1,16 +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
- // Output text formatters for all `akm wiki *` commands.
5
- import { formatWikiCreatePlain, formatWikiIngestPlain, formatWikiLintPlain, formatWikiListPlain, formatWikiPagesPlain, formatWikiRegisterPlain, formatWikiRemovePlain, formatWikiShowPlain, formatWikiStashPlain, } from "./helpers.js";
6
- export const wikiFormatters = [
7
- { command: "wiki-list", handler: (r) => formatWikiListPlain(r) },
8
- { command: "wiki-show", handler: (r) => formatWikiShowPlain(r) },
9
- { command: "wiki-create", handler: (r) => formatWikiCreatePlain(r) },
10
- { command: "wiki-remove", handler: (r) => formatWikiRemovePlain(r) },
11
- { command: "wiki-pages", handler: (r) => formatWikiPagesPlain(r) },
12
- { command: "wiki-stash", handler: (r) => formatWikiStashPlain(r) },
13
- { command: "wiki-lint", handler: (r) => formatWikiLintPlain(r) },
14
- { command: "wiki-ingest", handler: (r) => formatWikiIngestPlain(r) },
15
- { command: "wiki-register", handler: (r) => formatWikiRegisterPlain(r) },
16
- ];