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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/CHANGELOG.md +1190 -52
  2. package/README.md +62 -37
  3. package/SECURITY.md +46 -31
  4. package/dist/akm +162 -38
  5. package/dist/akm-migrate +44 -0
  6. package/dist/assets/backends/schtasks-template.xml +2 -1
  7. package/dist/assets/hints/cli-hints-full.md +268 -118
  8. package/dist/assets/hints/cli-hints-short.md +87 -24
  9. package/dist/assets/{profiles → improve-strategies}/catchup.json +3 -1
  10. package/dist/assets/{profiles → improve-strategies}/consolidate.json +3 -1
  11. package/dist/assets/{profiles → improve-strategies}/default.json +6 -7
  12. package/dist/assets/improve-strategies/frequent.json +15 -0
  13. package/dist/assets/{profiles → improve-strategies}/graph-refresh.json +4 -2
  14. package/dist/assets/{profiles → improve-strategies}/memory-focus.json +4 -1
  15. package/dist/assets/{profiles → improve-strategies}/proactive-maintenance.json +5 -5
  16. package/dist/assets/{profiles → improve-strategies}/quick.json +4 -2
  17. package/dist/assets/improve-strategies/reflect-distill.json +30 -0
  18. package/dist/assets/{profiles → improve-strategies}/thorough.json +1 -1
  19. package/dist/assets/prompts/consolidate-system.md +5 -5
  20. package/dist/assets/prompts/extract-session.md +2 -6
  21. package/dist/assets/prompts/memory-infer-user.md +2 -3
  22. package/dist/assets/prompts/reflect-llm-framed-contract.md +11 -0
  23. package/dist/assets/prompts/reflect-llm-schema-contract.md +3 -0
  24. package/dist/assets/prompts/reflect-output-repair.md +3 -0
  25. package/dist/assets/stash-skeleton/README.md +38 -10
  26. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
  27. package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
  28. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
  29. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
  30. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
  31. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
  32. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
  33. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
  34. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
  35. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
  36. package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
  37. package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
  38. package/dist/assets/tasks/core/extract.yml +3 -2
  39. package/dist/assets/tasks/core/improve.yml +2 -1
  40. package/dist/assets/tasks/core/index-refresh.yml +1 -0
  41. package/dist/assets/tasks/core/sync.yml +1 -0
  42. package/dist/assets/tasks/core/version-check.yml +2 -1
  43. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
  44. package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
  45. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
  46. package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
  47. package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
  48. package/dist/assets/templates/html/health.html +5 -4
  49. package/dist/assets/workflows/workflow-template.md +31 -15
  50. package/dist/cli/invocation.js +279 -0
  51. package/dist/cli/parse-args.js +5 -90
  52. package/dist/cli/retired-commands.js +78 -0
  53. package/dist/cli/shared.js +158 -48
  54. package/dist/cli-node.mjs +2 -1
  55. package/dist/cli.js +747 -293
  56. package/dist/commands/agent/agent-dispatch.js +19 -18
  57. package/dist/commands/agent/agent-support.js +0 -24
  58. package/dist/commands/agent/contribute-cli.js +43 -97
  59. package/dist/commands/completions.js +80 -23
  60. package/dist/commands/config-cli.js +44 -281
  61. package/dist/commands/env/env-binding.js +13 -9
  62. package/dist/commands/env/env-cli.js +76 -159
  63. package/dist/commands/env/env.js +12 -163
  64. package/dist/commands/env/marker-path.js +6 -0
  65. package/dist/commands/env/secret-cli.js +45 -61
  66. package/dist/commands/env/secret.js +32 -62
  67. package/dist/commands/feedback-cli.js +179 -85
  68. package/dist/commands/health/accept-rate.js +58 -0
  69. package/dist/commands/health/advisories.js +7 -8
  70. package/dist/commands/health/checks.js +279 -94
  71. package/dist/commands/health/html-report.js +197 -578
  72. package/dist/commands/health/improve-metrics.js +277 -246
  73. package/dist/commands/health/llm-usage.js +19 -19
  74. package/dist/commands/health/md-report.js +16 -7
  75. package/dist/commands/health/metrics.js +67 -32
  76. package/dist/commands/health/renderers.js +47 -0
  77. package/dist/commands/health/report-view-model.js +508 -0
  78. package/dist/commands/health/stash-exposure.js +1 -1
  79. package/dist/commands/health/surfaces.js +16 -56
  80. package/dist/commands/health/task-runs.js +3 -67
  81. package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
  82. package/dist/commands/health/types-improve.js +29 -0
  83. package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
  84. package/dist/commands/health/types-result.js +7 -0
  85. package/dist/commands/health/types-runs.js +4 -0
  86. package/dist/commands/health/types-session-log.js +4 -0
  87. package/dist/commands/health/types-windows.js +4 -0
  88. package/dist/commands/health/types.js +26 -21
  89. package/dist/commands/health/windows.js +2 -3
  90. package/dist/commands/health.js +296 -167
  91. package/dist/commands/improve/anti-collapse.js +5 -5
  92. package/dist/commands/improve/autonomy-gate.js +68 -0
  93. package/dist/commands/improve/collapse-detector.js +65 -52
  94. package/dist/commands/improve/consolidate/chunking.js +9 -7
  95. package/dist/commands/improve/consolidate/eligibility.js +1 -23
  96. package/dist/commands/improve/consolidate/merge.js +4 -0
  97. package/dist/commands/improve/consolidate.js +454 -1354
  98. package/dist/commands/improve/content-hash.js +39 -0
  99. package/dist/commands/improve/distill/content-repair.js +4 -10
  100. package/dist/commands/improve/distill/promote-memory.js +89 -64
  101. package/dist/commands/improve/distill/quality-gate.js +118 -42
  102. package/dist/commands/improve/distill-guards.js +1 -1
  103. package/dist/commands/improve/distill-promotion-policy.js +33 -888
  104. package/dist/commands/improve/distill.js +607 -363
  105. package/dist/commands/improve/eligibility.js +165 -79
  106. package/dist/commands/improve/extract-cli.js +35 -126
  107. package/dist/commands/improve/extract-prompt.js +6 -35
  108. package/dist/commands/improve/extract.js +640 -391
  109. package/dist/commands/improve/feedback-valence.js +2 -12
  110. package/dist/commands/improve/improve-cli.js +134 -135
  111. package/dist/commands/improve/improve-result-file.js +30 -50
  112. package/dist/commands/improve/improve-run-types.js +4 -0
  113. package/dist/commands/improve/improve-strategies.js +135 -0
  114. package/dist/commands/improve/improve.js +904 -701
  115. package/dist/commands/improve/locks.js +64 -111
  116. package/dist/commands/improve/loop-stages.js +1110 -923
  117. package/dist/commands/improve/memory/derived-ref.js +124 -0
  118. package/dist/commands/improve/memory/memory-belief.js +79 -7
  119. package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
  120. package/dist/commands/improve/memory/memory-improve.js +25 -37
  121. package/dist/commands/improve/outcome-loop.js +25 -88
  122. package/dist/commands/improve/preparation.js +1034 -813
  123. package/dist/commands/improve/proactive-maintenance.js +34 -9
  124. package/dist/commands/improve/proposal-envelope.js +31 -0
  125. package/dist/commands/improve/reflect.js +983 -794
  126. package/dist/commands/improve/run-context.js +119 -0
  127. package/dist/commands/improve/salience.js +24 -127
  128. package/dist/commands/improve/session-asset.js +7 -3
  129. package/dist/commands/improve/shared.js +14 -34
  130. package/dist/commands/improve/source-identity.js +28 -0
  131. package/dist/commands/improve/triage.js +20 -17
  132. package/dist/commands/lint/base-linter.js +340 -313
  133. package/dist/commands/lint/env-key-rules.js +31 -47
  134. package/dist/commands/lint/index.js +185 -30
  135. package/dist/commands/{events.js → log.js} +28 -38
  136. package/dist/commands/migrate-cli.js +54 -0
  137. package/dist/commands/migration-tool.js +55 -0
  138. package/dist/commands/observability-cli.js +70 -208
  139. package/dist/commands/proposal/diff-format.js +50 -0
  140. package/dist/commands/proposal/drain-policies.js +0 -6
  141. package/dist/commands/proposal/drain.js +91 -40
  142. package/dist/commands/proposal/proposal-cli.js +134 -132
  143. package/dist/commands/proposal/proposal-types.js +56 -0
  144. package/dist/commands/proposal/proposal.js +83 -65
  145. package/dist/commands/proposal/propose-cli.js +88 -0
  146. package/dist/commands/proposal/propose.js +105 -88
  147. package/dist/commands/proposal/repository.js +1303 -278
  148. package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
  149. package/dist/commands/proposal/validators/proposal-validators.js +61 -12
  150. package/dist/commands/proposal/validators/proposals.js +6 -8
  151. package/dist/commands/read/curate.js +78 -73
  152. package/dist/commands/read/knowledge.js +510 -13
  153. package/dist/commands/read/registry-search.js +2 -2
  154. package/dist/commands/read/remember-cli.js +84 -15
  155. package/dist/commands/read/search-cli.js +203 -96
  156. package/dist/commands/read/search.js +126 -94
  157. package/dist/commands/read/show.js +226 -250
  158. package/dist/commands/registry-cli.js +34 -60
  159. package/dist/commands/remember.js +18 -57
  160. package/dist/commands/sources/add-cli.js +104 -49
  161. package/dist/commands/sources/bundle-cli.js +166 -0
  162. package/dist/commands/sources/bundle-config-ops.js +63 -0
  163. package/dist/commands/sources/info.js +27 -15
  164. package/dist/commands/sources/init.js +30 -40
  165. package/dist/commands/sources/installed-stashes.js +469 -172
  166. package/dist/commands/sources/schema-repair.js +10 -9
  167. package/dist/commands/sources/self-update.js +182 -121
  168. package/dist/commands/sources/source-add.js +169 -178
  169. package/dist/commands/sources/source-clone.js +144 -41
  170. package/dist/commands/sources/source-manage.js +94 -59
  171. package/dist/commands/sources/sources-cli.js +64 -205
  172. package/dist/commands/sources/stash-cli.js +91 -54
  173. package/dist/commands/sources/stash-skeleton.js +1 -1
  174. package/dist/commands/tasks/tasks-cli.js +106 -104
  175. package/dist/commands/tasks/tasks.js +445 -262
  176. package/dist/commands/workflow-cli.js +75 -228
  177. package/dist/core/action-contributors.js +1 -1
  178. package/dist/core/activation-policy.js +49 -0
  179. package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
  180. package/dist/core/adapter/adapters/akm-adapter.js +528 -0
  181. package/dist/core/adapter/adapters/akm-lint.js +392 -0
  182. package/dist/core/adapter/adapters/akm-metadata.js +387 -0
  183. package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
  184. package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
  185. package/dist/core/adapter/adapters/claude-adapter.js +61 -0
  186. package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
  187. package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
  188. package/dist/core/adapter/adapters/index.js +80 -0
  189. package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
  190. package/dist/core/adapter/adapters/okf-adapter.js +391 -0
  191. package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
  192. package/dist/core/adapter/adapters/shared.js +286 -0
  193. package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
  194. package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
  195. package/dist/core/adapter/bundle-adapter.js +4 -0
  196. package/dist/core/adapter/detect-adapter.js +17 -0
  197. package/dist/core/adapter/recognize-match.js +44 -0
  198. package/dist/core/adapter/registry.js +56 -0
  199. package/dist/core/adapter/types.js +4 -0
  200. package/dist/core/asset/akm-markdown.js +30 -0
  201. package/dist/core/asset/asset-placement.js +243 -0
  202. package/dist/core/asset/asset-ref.js +110 -79
  203. package/dist/core/asset/asset-serialize.js +20 -0
  204. package/dist/core/asset/frontmatter.js +28 -12
  205. package/dist/core/asset/markdown.js +40 -51
  206. package/dist/core/asset/resolve-ref.js +274 -0
  207. package/dist/core/asset/stash-meta.js +2 -2
  208. package/dist/core/bundle-id.js +51 -0
  209. package/dist/core/common.js +281 -86
  210. package/dist/core/config/config-io.js +42 -128
  211. package/dist/core/config/config-schema.js +233 -855
  212. package/dist/core/config/config-sources.js +162 -39
  213. package/dist/core/config/config-types.js +16 -11
  214. package/dist/core/config/config-version.js +29 -0
  215. package/dist/core/config/config-walker.js +126 -37
  216. package/dist/core/config/config.js +154 -331
  217. package/dist/core/config/deep-merge.js +41 -0
  218. package/dist/core/config/engine-semantics.js +28 -0
  219. package/dist/core/config/experimental.js +21 -0
  220. package/dist/core/config/schema/embedding.js +38 -0
  221. package/dist/core/config/schema/engines.js +116 -0
  222. package/dist/core/config/schema/experimental.js +47 -0
  223. package/dist/core/config/schema/feedback.js +31 -0
  224. package/dist/core/config/schema/improve-processes.js +389 -0
  225. package/dist/core/config/schema/improve.js +94 -0
  226. package/dist/core/config/schema/index-config.js +176 -0
  227. package/dist/core/config/schema/output.js +18 -0
  228. package/dist/core/config/schema/primitives.js +94 -0
  229. package/dist/core/config/schema/search.js +30 -0
  230. package/dist/core/config/schema/setup.js +18 -0
  231. package/dist/core/config/schema/sources-bundles.js +169 -0
  232. package/dist/core/config/schema/workflow.js +29 -0
  233. package/dist/core/env-secret-ref.js +155 -20
  234. package/dist/core/errors.js +17 -15
  235. package/dist/core/events-types.js +4 -0
  236. package/dist/core/events.js +46 -128
  237. package/dist/core/extra-params.js +62 -0
  238. package/dist/core/file-change.js +17 -0
  239. package/dist/core/file-lock.js +202 -57
  240. package/dist/core/fs-txn.js +392 -0
  241. package/dist/core/git-message.js +59 -0
  242. package/dist/core/improve-result.js +167 -0
  243. package/dist/core/lesson-lint.js +1 -17
  244. package/dist/core/logs-db.js +1 -1
  245. package/dist/core/maintenance-barrier.js +135 -0
  246. package/dist/core/migration-operation.js +44 -0
  247. package/dist/core/mutation-target.js +78 -0
  248. package/dist/core/paths.js +22 -25
  249. package/dist/core/platform.js +10 -0
  250. package/dist/core/recognition-util.js +128 -0
  251. package/dist/core/redaction.js +392 -0
  252. package/dist/core/standards/resolve-standards-context.js +36 -65
  253. package/dist/core/standards/resolve-stash-standards.js +2 -2
  254. package/dist/core/standards/resolve-type-conventions.js +5 -5
  255. package/dist/core/state/migrations.js +242 -11
  256. package/dist/core/state-db.js +98 -10
  257. package/dist/core/structured.js +1 -1
  258. package/dist/core/subprocess.js +303 -0
  259. package/dist/core/text-truncation.js +9 -5
  260. package/dist/core/time.js +20 -0
  261. package/dist/core/type-presentation.js +130 -0
  262. package/dist/core/warn.js +0 -3
  263. package/dist/core/write-source.js +834 -118
  264. package/dist/indexer/bundle-identity-guard.js +92 -0
  265. package/dist/indexer/db/graph-db.js +1 -25
  266. package/dist/indexer/db/llm-cache.js +1 -1
  267. package/dist/indexer/ensure-index.js +30 -9
  268. package/dist/indexer/graph/graph-boost.js +9 -30
  269. package/dist/indexer/graph/graph-extraction.js +41 -27
  270. package/dist/indexer/graph/graph-types.js +4 -0
  271. package/dist/indexer/index-writer-lock.js +93 -49
  272. package/dist/indexer/index-written-assets.js +100 -53
  273. package/dist/indexer/indexer.js +746 -329
  274. package/dist/indexer/init.js +18 -25
  275. package/dist/indexer/installations.js +142 -0
  276. package/dist/indexer/passes/dir-staleness.js +18 -10
  277. package/dist/indexer/passes/memory-inference.js +25 -15
  278. package/dist/indexer/passes/metadata.js +412 -243
  279. package/dist/indexer/scan/doc-to-entry.js +160 -0
  280. package/dist/indexer/scan/drain-dir.js +134 -0
  281. package/dist/indexer/search/db-search.js +292 -108
  282. package/dist/indexer/search/fts-query.js +64 -0
  283. package/dist/indexer/search/ranking-contributors.js +145 -25
  284. package/dist/indexer/search/ranking-types.js +4 -0
  285. package/dist/indexer/search/ranking.js +28 -71
  286. package/dist/indexer/search/search-attribution.js +67 -0
  287. package/dist/indexer/search/search-fields.js +18 -3
  288. package/dist/indexer/search/search-hit-enrichers.js +30 -40
  289. package/dist/indexer/search/search-source.js +157 -111
  290. package/dist/indexer/search/semantic-status.js +4 -1
  291. package/dist/indexer/usage/usage-events.js +10 -30
  292. package/dist/indexer/walk/file-context.js +3 -45
  293. package/dist/indexer/walk/matchers.js +42 -73
  294. package/dist/indexer/walk/path-resolver.js +11 -5
  295. package/dist/indexer/walk/walker.js +42 -14
  296. package/dist/integrations/agent/builder-shared.js +7 -0
  297. package/dist/integrations/agent/builders.js +5 -58
  298. package/dist/integrations/agent/config.js +3 -143
  299. package/dist/integrations/agent/detect.js +17 -2
  300. package/dist/integrations/agent/engine-resolution.js +231 -0
  301. package/dist/integrations/agent/index.js +1 -2
  302. package/dist/integrations/agent/model-aliases.js +8 -3
  303. package/dist/integrations/agent/profiles.js +6 -99
  304. package/dist/integrations/agent/prompts.js +46 -18
  305. package/dist/integrations/agent/runner-dispatch.js +78 -13
  306. package/dist/integrations/agent/runner.js +76 -208
  307. package/dist/integrations/agent/spawn.js +48 -279
  308. package/dist/integrations/harnesses/aider/agent-builder.js +9 -8
  309. package/dist/integrations/harnesses/aider/index.js +2 -12
  310. package/dist/integrations/harnesses/amazonq/agent-builder.js +10 -16
  311. package/dist/integrations/harnesses/amazonq/index.js +3 -17
  312. package/dist/integrations/harnesses/claude/agent-builder.js +2 -3
  313. package/dist/integrations/harnesses/claude/config-import.js +1 -3
  314. package/dist/integrations/harnesses/claude/index.js +1 -14
  315. package/dist/integrations/harnesses/claude/session-log.js +27 -75
  316. package/dist/integrations/harnesses/codex/agent-builder.js +8 -7
  317. package/dist/integrations/harnesses/codex/index.js +2 -13
  318. package/dist/integrations/harnesses/copilot/agent-builder.js +9 -9
  319. package/dist/integrations/harnesses/copilot/index.js +1 -13
  320. package/dist/integrations/harnesses/gemini/agent-builder.js +8 -9
  321. package/dist/integrations/harnesses/gemini/index.js +1 -13
  322. package/dist/integrations/harnesses/ids.js +24 -0
  323. package/dist/integrations/harnesses/index.js +31 -33
  324. package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
  325. package/dist/integrations/harnesses/opencode/config-import.js +1 -3
  326. package/dist/integrations/harnesses/opencode/index.js +1 -18
  327. package/dist/integrations/harnesses/opencode/session-log.js +67 -125
  328. package/dist/integrations/harnesses/opencode-sdk/harness.js +3 -17
  329. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +274 -191
  330. package/dist/integrations/harnesses/openhands/agent-builder.js +12 -10
  331. package/dist/integrations/harnesses/openhands/index.js +2 -12
  332. package/dist/integrations/harnesses/pi/agent-builder.js +11 -18
  333. package/dist/integrations/harnesses/pi/index.js +3 -16
  334. package/dist/integrations/harnesses/shared.js +17 -0
  335. package/dist/integrations/harnesses/types.js +38 -34
  336. package/dist/integrations/lockfile.js +211 -24
  337. package/dist/integrations/session-logs/index.js +24 -40
  338. package/dist/integrations/session-logs/provider-base.js +113 -0
  339. package/dist/llm/client.js +182 -110
  340. package/dist/llm/embedders/deterministic.js +2 -2
  341. package/dist/llm/embedders/remote.js +21 -9
  342. package/dist/llm/feature-gate.js +17 -57
  343. package/dist/llm/graph-extract.js +12 -13
  344. package/dist/llm/index-passes.js +8 -42
  345. package/dist/llm/memory-infer.js +144 -1
  346. package/dist/llm/metadata-enhance.js +45 -30
  347. package/dist/llm/structured-call.js +16 -8
  348. package/dist/llm/usage-persist.js +30 -5
  349. package/dist/llm/usage-telemetry.js +59 -6
  350. package/dist/output/cli-hints.js +1 -2
  351. package/dist/output/command-registry.js +27 -0
  352. package/dist/output/context.js +22 -7
  353. package/dist/output/format-exempt.js +80 -0
  354. package/dist/output/generic-render.js +251 -0
  355. package/dist/output/html-render.js +11 -16
  356. package/dist/output/render-registry.js +57 -0
  357. package/dist/output/renderers.js +15 -281
  358. package/dist/output/shapes/curate.js +10 -1
  359. package/dist/output/shapes/events.js +12 -7
  360. package/dist/output/shapes/helpers.js +58 -84
  361. package/dist/output/shapes/passthrough.js +8 -40
  362. package/dist/output/shapes/proposal/producer.js +15 -7
  363. package/dist/output/shapes/registry.js +12 -6
  364. package/dist/output/shapes.js +0 -9
  365. package/dist/output/text/{init.js → bundle-create.js} +3 -1
  366. package/dist/output/text/bundle-show.js +7 -0
  367. package/dist/output/text/command-format.js +562 -0
  368. package/dist/output/text/env.js +1 -3
  369. package/dist/output/text/events.js +8 -7
  370. package/dist/output/text/helpers.js +15 -1375
  371. package/dist/output/text/proposal/producer.js +4 -2
  372. package/dist/output/text/proposal-format.js +202 -0
  373. package/dist/output/text/registry-commands.js +1 -2
  374. package/dist/output/text/registry.js +12 -6
  375. package/dist/output/text/show-directives.js +117 -0
  376. package/dist/output/text/show-format.js +103 -0
  377. package/dist/output/text/sync.js +5 -0
  378. package/dist/output/text/workflow-format.js +332 -0
  379. package/dist/output/text/workflow.js +1 -2
  380. package/dist/output/text.js +10 -19
  381. package/dist/registry/factory.js +4 -6
  382. package/dist/registry/origin-resolve.js +16 -27
  383. package/dist/registry/providers/skills-sh.js +3 -3
  384. package/dist/registry/providers/static-index.js +15 -25
  385. package/dist/registry/resolve.js +43 -94
  386. package/dist/registry/semver.js +43 -0
  387. package/dist/runtime.js +81 -12
  388. package/dist/scripts/akm-migrate.js +35529 -0
  389. package/dist/setup/detect.js +5 -7
  390. package/dist/setup/detected-engines.js +136 -0
  391. package/dist/setup/engine-config.js +100 -0
  392. package/dist/setup/registry-stash-loader.js +3 -3
  393. package/dist/setup/semantic-assets.js +12 -9
  394. package/dist/setup/setup.js +444 -208
  395. package/dist/setup/steps/connection-shared.js +120 -0
  396. package/dist/setup/steps/connection.js +108 -305
  397. package/dist/setup/steps/platforms.js +13 -12
  398. package/dist/setup/steps/semantic.js +15 -3
  399. package/dist/setup/steps/sources.js +21 -15
  400. package/dist/setup/steps/stashdir.js +6 -4
  401. package/dist/setup/steps/tasks.js +236 -119
  402. package/dist/setup/steps.js +3 -2
  403. package/dist/sources/freshness.js +39 -0
  404. package/dist/sources/provider-factory.js +11 -17
  405. package/dist/sources/providers/filesystem.js +2 -3
  406. package/dist/sources/providers/git-install.js +278 -34
  407. package/dist/sources/providers/git-provider.js +54 -56
  408. package/dist/sources/providers/git-stash.js +420 -91
  409. package/dist/sources/providers/git.js +2 -2
  410. package/dist/sources/providers/npm.js +16 -19
  411. package/dist/sources/providers/provider-utils.js +47 -22
  412. package/dist/sources/providers/sync-from-ref.js +3 -9
  413. package/dist/sources/providers/website.js +2 -2
  414. package/dist/sources/resolve.js +11 -10
  415. package/dist/sources/snapshot-fetchers/types.js +4 -0
  416. package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
  417. package/dist/storage/database.js +60 -4
  418. package/dist/storage/engines/sqlite-migrations.js +156 -5
  419. package/dist/storage/locations.js +1 -2
  420. package/dist/storage/repositories/canaries-repository.js +1 -1
  421. package/dist/storage/repositories/events-repository.js +51 -11
  422. package/dist/storage/repositories/improve-runs-repository.js +6 -32
  423. package/dist/storage/repositories/index-connection.js +79 -0
  424. package/dist/storage/repositories/index-db.js +4 -3
  425. package/dist/storage/repositories/index-entries-repository.js +863 -0
  426. package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
  427. package/dist/storage/repositories/index-entry-types.js +4 -0
  428. package/dist/storage/repositories/index-fts-repository.js +167 -0
  429. package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
  430. package/dist/storage/repositories/index-meta-repository.js +49 -0
  431. package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
  432. package/dist/storage/repositories/index-sql.js +12 -0
  433. package/dist/storage/repositories/index-utility-repository.js +356 -0
  434. package/dist/storage/repositories/index-vec-repository.js +250 -0
  435. package/dist/storage/repositories/outcome-repository.js +119 -0
  436. package/dist/storage/repositories/proposals-repository.js +317 -75
  437. package/dist/storage/repositories/registry-cache.js +1 -1
  438. package/dist/storage/repositories/salience-repository.js +172 -0
  439. package/dist/storage/repositories/task-history-repository.js +110 -3
  440. package/dist/storage/repositories/workflow-runs-repository.js +68 -35
  441. package/dist/tasks/backends/cron.js +169 -46
  442. package/dist/tasks/backends/exec-utils.js +76 -3
  443. package/dist/tasks/backends/index.js +6 -9
  444. package/dist/tasks/backends/launchd.js +292 -55
  445. package/dist/tasks/backends/schtasks.js +557 -70
  446. package/dist/tasks/backends/types.js +4 -0
  447. package/dist/tasks/command-executable.js +93 -0
  448. package/dist/tasks/embedded.js +56 -38
  449. package/dist/tasks/parser.js +156 -64
  450. package/dist/tasks/resolve-akm-bin.js +144 -51
  451. package/dist/tasks/runner.js +377 -209
  452. package/dist/tasks/schedule.js +108 -19
  453. package/dist/tasks/scheduler-invocation.js +296 -0
  454. package/dist/tasks/schema.js +1 -1
  455. package/dist/tasks/task-id.js +35 -0
  456. package/dist/tasks/validator.js +30 -16
  457. package/dist/workflows/authoring/authoring.js +96 -148
  458. package/dist/workflows/authoring/scope-key.js +1 -1
  459. package/dist/workflows/cli.js +0 -20
  460. package/dist/workflows/concurrency-policy.js +15 -0
  461. package/dist/workflows/exec/brief.js +25 -59
  462. package/dist/workflows/exec/frozen-judge.js +47 -0
  463. package/dist/workflows/exec/native-executor.js +157 -94
  464. package/dist/workflows/exec/report.js +365 -200
  465. package/dist/workflows/exec/run-workflow.js +46 -40
  466. package/dist/workflows/exec/scheduler.js +12 -41
  467. package/dist/workflows/exec/step-work.js +239 -205
  468. package/dist/workflows/exec/workflow-engine-gate.js +67 -0
  469. package/dist/workflows/ir/compile.js +141 -283
  470. package/dist/workflows/ir/freeze.js +233 -0
  471. package/dist/workflows/ir/plan-hash.js +40 -5
  472. package/dist/workflows/ir/schema.js +537 -1
  473. package/dist/workflows/parser.js +878 -306
  474. package/dist/workflows/program/expressions.js +20 -208
  475. package/dist/workflows/program/schema.js +7 -10
  476. package/dist/workflows/renderer.js +99 -121
  477. package/dist/workflows/resource-limits.js +22 -0
  478. package/dist/workflows/runtime/checkin.js +1 -1
  479. package/dist/workflows/runtime/plan-classifier.js +131 -0
  480. package/dist/workflows/runtime/runs.js +200 -113
  481. package/dist/workflows/runtime/unit-checkin.js +1 -1
  482. package/dist/workflows/runtime/unit-phases.js +20 -0
  483. package/dist/workflows/runtime/workflow-asset-loader.js +235 -97
  484. package/dist/workflows/schema.js +1 -11
  485. package/dist/workflows/validate-summary.js +4 -26
  486. package/dist/workflows/validator.js +52 -30
  487. package/docs/README.md +42 -78
  488. package/docs/migration/README.md +8 -0
  489. package/docs/migration/release-notes/0.6.0.md +1 -1
  490. package/docs/migration/release-notes/0.7.0.md +9 -8
  491. package/docs/migration/release-notes/0.9.0.md +158 -14
  492. package/docs/migration/v0.7-to-v0.8.md +46 -47
  493. package/docs/migration/v0.8-to-v0.9.md +844 -0
  494. package/docs/reference/README.md +12 -0
  495. package/docs/reference/data-and-telemetry.md +333 -0
  496. package/package.json +21 -17
  497. package/schemas/akm-asset-envelope.json +93 -0
  498. package/schemas/akm-config.json +4636 -0
  499. package/schemas/akm-task.json +87 -0
  500. package/{dist/schemas → schemas}/akm-workflow.json +127 -82
  501. package/dist/akm-migrate-storage +0 -38
  502. package/dist/assets/help/help-accept.md +0 -12
  503. package/dist/assets/help/help-improve.md +0 -84
  504. package/dist/assets/help/help-proposals.md +0 -17
  505. package/dist/assets/help/help-propose.md +0 -17
  506. package/dist/assets/help/help-reject.md +0 -11
  507. package/dist/assets/profiles/frequent.json +0 -13
  508. package/dist/assets/profiles/recombine-only.json +0 -21
  509. package/dist/assets/profiles/reflect-distill.json +0 -30
  510. package/dist/assets/profiles/synthesize.json +0 -15
  511. package/dist/assets/prompts/procedural-system.md +0 -44
  512. package/dist/assets/prompts/recombine-system.md +0 -40
  513. package/dist/assets/prompts/staleness-detect-system.md +0 -6
  514. package/dist/assets/tasks/core/backup.yml +0 -4
  515. package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
  516. package/dist/assets/templates/html/default.html +0 -78
  517. package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
  518. package/dist/assets/wiki/index-template.md +0 -12
  519. package/dist/assets/wiki/ingest-workflow-template.md +0 -83
  520. package/dist/assets/wiki/log-template.md +0 -8
  521. package/dist/assets/wiki/schema-template.md +0 -61
  522. package/dist/cli/config-migrate.js +0 -150
  523. package/dist/cli/config-validate.js +0 -39
  524. package/dist/commands/graph/graph-cli.js +0 -124
  525. package/dist/commands/graph/graph.js +0 -487
  526. package/dist/commands/improve/calibration.js +0 -161
  527. package/dist/commands/improve/dedup.js +0 -482
  528. package/dist/commands/improve/extract-watch.js +0 -140
  529. package/dist/commands/improve/hot-probation.js +0 -45
  530. package/dist/commands/improve/improve-auto-accept.js +0 -276
  531. package/dist/commands/improve/improve-profiles.js +0 -168
  532. package/dist/commands/improve/procedural.js +0 -398
  533. package/dist/commands/improve/recombine.js +0 -818
  534. package/dist/commands/improve/schema-similarity-gate.js +0 -168
  535. package/dist/commands/lint/agent-linter.js +0 -44
  536. package/dist/commands/lint/command-linter.js +0 -44
  537. package/dist/commands/lint/default-linter.js +0 -16
  538. package/dist/commands/lint/fact-linter.js +0 -39
  539. package/dist/commands/lint/knowledge-linter.js +0 -16
  540. package/dist/commands/lint/memory-linter.js +0 -61
  541. package/dist/commands/lint/registry.js +0 -41
  542. package/dist/commands/lint/skill-linter.js +0 -45
  543. package/dist/commands/lint/task-linter.js +0 -50
  544. package/dist/commands/lint/workflow-linter.js +0 -81
  545. package/dist/commands/proposal/legacy-import.js +0 -115
  546. package/dist/commands/sources/history.js +0 -196
  547. package/dist/commands/tasks/default-tasks.js +0 -186
  548. package/dist/commands/wiki-cli.js +0 -292
  549. package/dist/core/asset/asset-registry.js +0 -76
  550. package/dist/core/asset/asset-spec.js +0 -316
  551. package/dist/core/config/config-migration.js +0 -602
  552. package/dist/core/deep-merge.js +0 -38
  553. package/dist/core/eval/rank-metrics.js +0 -113
  554. package/dist/core/ripgrep/install.js +0 -163
  555. package/dist/core/ripgrep/resolve.js +0 -81
  556. package/dist/indexer/db/db.js +0 -1414
  557. package/dist/indexer/manifest.js +0 -170
  558. package/dist/indexer/passes/metadata-contributors.js +0 -31
  559. package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
  560. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -25
  561. package/dist/llm/call-ai.js +0 -62
  562. package/dist/llm/memory-infer-impl.js +0 -138
  563. package/dist/output/shapes/distill.js +0 -14
  564. package/dist/output/shapes/history.js +0 -11
  565. package/dist/output/text/distill.js +0 -6
  566. package/dist/output/text/enable-disable.js +0 -8
  567. package/dist/output/text/history.js +0 -6
  568. package/dist/output/text/wiki.js +0 -16
  569. package/dist/registry/build-index.js +0 -386
  570. package/dist/schemas/akm-config.json +0 -14225
  571. package/dist/scripts/migrate-storage.js +0 -13169
  572. package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -10169
  573. package/dist/scripts/migrations/v16-to-v17.js +0 -141
  574. package/dist/setup/legacy-config.js +0 -106
  575. package/dist/storage/repositories/consolidation-repository.js +0 -38
  576. package/dist/storage/repositories/recombine-repository.js +0 -213
  577. package/dist/wiki/wiki-templates.js +0 -15
  578. package/dist/wiki/wiki.js +0 -1012
  579. package/dist/workflows/authoring/workflow-program-template.yaml +0 -31
  580. package/dist/workflows/db.js +0 -350
  581. package/dist/workflows/exec/watch.js +0 -116
  582. package/dist/workflows/program/parser.js +0 -760
  583. package/dist/workflows/program/project.js +0 -105
  584. package/docs/data-and-telemetry.md +0 -227
  585. package/docs/migration/release-notes/0.9.0-beta.60.md +0 -19
  586. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
  587. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
@@ -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,25 +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
- * - descriptor → ./harness.ts ({@link OpencodeSdkHarness}, the
9
- * {@link AkmHarness} that `HARNESS_REGISTRY` registers)
10
- * - agent runner → ./sdk-runner.ts (runOpencodeSdk)
11
- *
12
- * The descriptor lives in its own leaf module (`./harness.ts`) rather than
13
- * here so that the registry can import the class WITHOUT pulling in
14
- * `./sdk-runner` (and its `core/config` dependency) — see the header of
15
- * `./harness.ts` for the temporal-dead-zone cycle this avoids. This barrel is
16
- * the runtime entry point that re-exports both.
17
- *
18
- * Unlike the CLI harnesses, the SDK path has no native session logs of its own
19
- * (`capabilities.sessionLogs = false`): it dispatches via the embedded
20
- * `@opencode-ai/sdk` and surfaces output directly rather than writing platform
21
- * session files. It is still detected at setup and migrated from v1 profile
22
- * names. Canonical id is `'opencode-sdk'` with no alias.
23
- */
24
- export { OpencodeSdkHarness } from "./harness.js";
25
- export { closeServer, runOpencodeSdk } from "./sdk-runner.js";
@@ -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
- ];