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
package/README.md CHANGED
@@ -1,44 +1,44 @@
1
- # akm -- Agent Knowledge Management
1
+ # akm -- Agent Knowledge Manager
2
2
 
3
- > **akm** (Agent Knowledge Management) -- A package manager for AI agent skills, commands, tools, and knowledge.
3
+ > **akm** (Agent Knowledge Manager) -- A knowledge toolkit for AI agents.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/akm-cli)](https://www.npmjs.com/package/akm-cli)
6
6
  [![npm downloads](https://img.shields.io/npm/dm/akm-cli)](https://www.npmjs.com/package/akm-cli)
7
7
  [![license](https://img.shields.io/github/license/itlackey/akm)](https://github.com/itlackey/akm/blob/main/LICENSE)
8
8
 
9
- `akm` is a package manager for AI agent capabilities -- scripts, skills, commands,
10
- agents, knowledge, memories, workflows, wikis, env files, secrets, lessons, and
11
- scheduled tasks. It works with any AI coding assistant that can run shell commands,
9
+ `akm` is a knowledge toolkit for AI agent capabilities -- scripts, skills, commands,
10
+ agents, knowledge, instructions, memories, workflows, env files, secrets, lessons,
11
+ tasks, sessions, and facts. It can discover and install bundles from npm, git, local
12
+ directories, and configured registries. It works with any AI coding assistant that can run shell commands,
12
13
  including [Claude Code](https://claude.ai/code),
13
14
  [OpenCode](https://opencode.ai), [Cursor](https://cursor.com), and more.
14
15
 
15
16
  ## Install
16
17
 
17
- **Option 1 — Prebuilt binary (recommended, no runtime required):**
18
+ **Option 1 — npm package (recommended; requires [Node.js](https://nodejs.org) >= 22):**
18
19
 
19
20
  ```sh
20
- # Linux / macOS
21
- curl -fsSL https://github.com/itlackey/akm/releases/latest/download/install.sh | bash
22
-
23
- # Windows (PowerShell)
24
- irm https://github.com/itlackey/akm/releases/latest/download/install.ps1 | iex
21
+ npm install -g akm-cli
25
22
  ```
26
23
 
27
- **Option 2 — Bun (requires [Bun](https://bun.sh) >= 1.0):**
24
+ **Option 2 — Prebuilt binary (no runtime required):**
28
25
 
29
26
  ```sh
30
- bun install -g akm-cli
31
- ```
32
-
33
- **Option 3 — Node.js (requires Node.js >= 20.12):**
27
+ # Linux / macOS
28
+ curl -fsSL https://github.com/itlackey/akm/releases/latest/download/install.sh | bash
34
29
 
35
- ```sh
36
- npm install -g akm-cli
30
+ # Windows (PowerShell)
31
+ irm https://github.com/itlackey/akm/releases/latest/download/install.ps1 | iex
37
32
  ```
38
33
 
39
34
  Upgrade in place with `akm upgrade`.
40
35
 
41
- > **AKM 0.9.0 supports three install paths:** prebuilt binary, Bun, or Node.js >= 20.12.
36
+ The npm package always uses Node.js to bootstrap its cross-platform command.
37
+ If a working [Bun](https://bun.sh) >= 1.0 is also on `PATH`, the launcher
38
+ prefers Bun for execution; old, unusable, or absent Bun installations fall back
39
+ to Node.js. Node.js remains required for the npm package. The standalone
40
+ binaries are runtime-free.
41
+
42
42
  > The old `vault` asset type was removed in 0.9.0; use `env` for whole `.env`
43
43
  > groups and `secret` for standalone sensitive values.
44
44
 
@@ -46,16 +46,41 @@ Upgrade in place with `akm upgrade`.
46
46
 
47
47
  ```sh
48
48
  akm setup # Guided setup: configure, initialize, and index
49
- akm add github:owner/repo # Add a stash from GitHub
49
+ akm task doctor # Verify scheduler and installed runtime
50
+ akm bundle add github:owner/repo # Add a bundle from GitHub
50
51
  akm search "deploy" # Find assets across all sources
51
- akm show script:deploy.sh # View details and run command
52
+ akm show scripts/deploy.sh # View details and run command
52
53
  ```
53
54
 
55
+ Non-interactive setup never activates schedules.
56
+
57
+ ## Schedule Tasks Safely
58
+
59
+ ```sh
60
+ akm setup # Review definitions, schedules, and enabled state
61
+ # Confirm scheduler activation only after reviewing the complete task summary.
62
+ akm task doctor # Verify backend, runtime, task state, and warnings
63
+ ```
64
+
65
+ Setup shows the complete task review — both the general-purpose core
66
+ templates and the maintainer-oriented improve cadence — before asking one
67
+ explicit question about changing task files and the OS scheduler. Only
68
+ confirmation prepares the definitions and syncs the scheduler. Declining, or
69
+ running setup non-interactively, leaves both unchanged. A scheduled entry
70
+ captures the installed akm runtime used during activation. Ordinary
71
+ `akm task sync` preserves that runtime; after moving or replacing the
72
+ installation, use `akm task sync --rebind` explicitly to migrate or repair
73
+ scheduler entries, then run `akm task doctor` again.
74
+
75
+ Rerunning setup preserves existing scheduler bindings. If setup changes the AKM
76
+ storage path, or the installed runtime path changes, run
77
+ `akm task sync --rebind` explicitly.
78
+
54
79
  ## Why akm?
55
80
 
56
81
  - **Works with any AI agent** -- No plugins or SDKs required. Any model that can run shell commands can use `akm`.
57
- - **One command to search everything** -- Local stash, registries, and community skills from [skills.sh](https://skills.sh) in a single query.
58
- - **Install stashes from anywhere** -- npm, GitHub, GitLab, local directories.
82
+ - **One command to search your knowledge** -- Local assets are searched by default. Add `--from registry` or `--from all` for configured registry results; [skills.sh](https://skills.sh) participates only when enabled.
83
+ - **Install bundles from anywhere** -- npm, GitHub, GitLab, local directories.
59
84
  - **Semantic search** -- Optional local embeddings (via Ollama or HuggingFace) for finding assets by meaning, not just keywords.
60
85
  - **Private registries** -- Host your own registry for team or enterprise use.
61
86
 
@@ -67,22 +92,22 @@ Add this to your `AGENTS.md`, `CLAUDE.md`, or system prompt:
67
92
  ## Resources & Capabilities
68
93
 
69
94
  You have access to a searchable library of scripts, skills, commands, agents,
70
- knowledge, memories, workflows, wikis, env files, secrets, lessons, and scheduled tasks
71
- via the `akm` CLI. Use `akm -h` for details.
95
+ knowledge, instructions, memories, workflows, env files, secrets, lessons, tasks,
96
+ sessions, and facts via the `akm` CLI. Use `akm -h` for details.
72
97
  ```
73
98
 
74
- ## Install Stashes from Anywhere
99
+ ## Install Bundles from Anywhere
75
100
 
76
101
  ```sh
77
- akm add @scope/my-stash # npm
78
- akm add github:owner/repo#v1.2.3 # GitHub with tag
79
- akm add git+https://gitlab.com/org/stash # Any git repo
80
- akm add ./path/to/local/stash # Local directory
102
+ akm bundle add @scope/pkg # npm
103
+ akm bundle add github:owner/repo#v1.2.3 # GitHub with tag
104
+ akm bundle add git+https://gitlab.com/org/repo # Any git repo
105
+ akm bundle add ./path/to/local/dir # Local directory
81
106
  ```
82
107
 
83
- Manage stashes with `akm list`, `akm update --all`, and `akm remove`.
108
+ Manage bundles with `akm bundle list`, `akm bundle update --all`, and `akm bundle remove`.
84
109
 
85
- ## Publish Your Own Stash
110
+ ## Publish Your Own Bundle
86
111
 
87
112
  1. Organize your assets into a directory
88
113
  2. Add `"akm"` to `keywords` in `package.json`
@@ -93,11 +118,11 @@ Manage stashes with `akm list`, `akm update --all`, and `akm remove`.
93
118
 
94
119
  Full docs, CLI reference, and guides are available on [GitHub](https://github.com/itlackey/akm):
95
120
 
96
- - [Getting Started](https://github.com/itlackey/akm/blob/main/docs/getting-started.md)
97
- - [CLI Reference](https://github.com/itlackey/akm/blob/main/docs/cli.md)
98
- - [Configuration](https://github.com/itlackey/akm/blob/main/docs/configuration.md)
99
- - [Stash Maker's Guide](https://github.com/itlackey/akm/blob/main/docs/stash-makers.md)
100
- - [Registry](https://github.com/itlackey/akm/blob/main/docs/registry.md)
121
+ - [Getting Started](https://github.com/itlackey/akm/blob/main/docs/guides/getting-started.md)
122
+ - [CLI Reference](https://github.com/itlackey/akm/blob/main/docs/reference/cli.md)
123
+ - [Configuration](https://github.com/itlackey/akm/blob/main/docs/reference/configuration.md)
124
+ - [Bundle Maker's Guide](https://github.com/itlackey/akm/blob/main/docs/guides/stash-makers.md)
125
+ - [Registry](https://github.com/itlackey/akm/blob/main/docs/reference/registry.md)
101
126
 
102
127
  ## License
103
128
 
package/SECURITY.md CHANGED
@@ -7,9 +7,9 @@ Security fixes are made on the latest minor release line of `akm-cli`. The
7
7
 
8
8
  | Version | Supported |
9
9
  | --- | --- |
10
- | 0.8.x | ✅ active |
11
- | 0.7.x | ❌ no longer maintained |
12
- | < 0.7 | ❌ no longer maintained |
10
+ | 0.9.x | ✅ active |
11
+ | 0.8.x | ❌ no longer maintained |
12
+ | < 0.8 | ❌ no longer maintained |
13
13
 
14
14
  ## Reporting a vulnerability
15
15
 
@@ -31,7 +31,7 @@ shell commands (via scripts, workflows, and agent dispatch), and talks to
31
31
  explicitly configured external services (LLM endpoints, git remotes, npm,
32
32
  HTTP sources). It does **not** ship telemetry, send data to anyone by
33
33
  default, or open network listeners. See
34
- [`docs/data-and-telemetry.md`](docs/data-and-telemetry.md) for the on-disk
34
+ [`docs/reference/data-and-telemetry.md`](docs/reference/data-and-telemetry.md) for the on-disk
35
35
  inventory.
36
36
 
37
37
  Several akm surfaces execute user-controlled code or data with the full
@@ -42,52 +42,67 @@ bugs, but you should be aware of them:
42
42
 
43
43
  Workflow steps run in your shell with your PATH and your environment
44
44
  variables — including any secrets you have exported or loaded via
45
- `akm vault load`. **Only add workflow sources you trust.** See
46
- [`docs/features/workflows.md` — "Security: workflow sources are executed
47
- code"](docs/features/workflows.md#security-workflow-sources-are-executed-code)
45
+ `akm env run` / `akm secret run`. **Only add workflow sources you trust.** See
46
+ [`docs/reference/workflows.md` — "Security: workflow sources are executed
47
+ code"](docs/reference/workflows.md#security-workflow-sources-are-executed-code)
48
48
  for the full discussion.
49
49
 
50
50
  ### Scripts execute shell commands
51
51
 
52
- `akm show script:<name>` returns a `run:` command line the user (or an
52
+ `akm show scripts/<name>` returns a `run:` command line the user (or an
53
53
  integrating agent) then executes. The same trust model applies: scripts you
54
54
  install from third-party stashes are third-party code.
55
55
 
56
56
  ### Agents and commands embed user-authored prompts
57
57
 
58
- `akm show agent:<name>` and `akm show command:<name>` return prompt
58
+ `akm show agents/<name>` and `akm show commands/<name>` return prompt
59
59
  templates and system prompts that an LLM will execute. A malicious stash
60
60
  maintainer could write a system prompt that instructs the LLM to read
61
61
  sensitive files in your working tree and exfiltrate them via the LLM
62
62
  response. Audit the prompt body the same way you'd audit a script.
63
63
 
64
- ### Vaults are plaintext on disk
64
+ ### Installing a stash means trusting its code
65
65
 
66
- `akm vault` files are `0o600`-permissioned plaintext at
67
- `<stash>/vaults/<name>.env`. They are protected against other local users
68
- by filesystem permissions but not encrypted at rest. Do not commit vault
69
- files to source control — they are `.gitignore`d in the default stash
70
- layout for that reason. The `akm vault show` / `akm vault list` commands
71
- never echo values; `akm vault load` produces shell-eval output meant to be
72
- piped to `eval`, never displayed.
66
+ Installing a stash is not a data-only operation: **`<stashDir>/scripts/wiki-fetchers/*.{ts,js,mjs}` is imported and EXECUTED during `akm index`** (when a website-snapshot source in that stash is synced), with no gate, no prompt, and no allowlist. Every file in that directory is dynamically `import()`ed, and only *after* the module has fully evaluated does akm check that its default export looks like a fetcher (`{ name, matches, fetch }`) — module-level code (anything outside the exported functions) runs unconditionally before that check ever happens, and a file that fails the check still ran. There is no sandboxing: a wiki-fetcher script executes with the full permissions of the akm process, exactly like the scripts and workflow steps documented above.
73
67
 
74
- ### Improve / propose / distill send asset content to the configured LLM
68
+ This is a deliberate design decision (owner ruling), not an oversight, and it will not change without a separate decision to add a gate. **If you install a stash from a source you do not trust, you are trusting its code to run on your machine at index time** — audit `scripts/wiki-fetchers/` the same way you would audit any other executable you're about to run, before installing.
75
69
 
76
- `akm improve`, `akm propose`, `akm distill`, `akm reflect`, and `akm
77
- consolidate` send asset frontmatter and body to whatever LLM endpoint is
78
- configured in `~/.config/akm/config.json` (under `llm.endpoint`). If you
79
- have configured a third-party LLM, your asset content goes to that
80
- third-party. Use a local model (`http://localhost:11434` via Ollama, etc.)
81
- for assets containing secrets or private notes.
70
+ The built-in YouTube snapshot fetcher (`src/sources/snapshot-fetchers/youtube.ts`) deliberately **impersonates the YouTube Android app's InnerTube client** (`clientName: "ANDROID"`, a spoofed `clientVersion`) when calling YouTube's private `youtubei/v1/player` endpoint, because the public web client's caption URLs are Proof-of-Origin-Token gated and return empty bodies. This is known, intentional behavior needed to fetch captions at all, not a bug — documented here so it isn't mistaken for one.
71
+
72
+ ### Environment and secret assets are plaintext on disk
73
+
74
+ `env` and `secret` assets are owner-permissioned plaintext under `<stash>/env/`
75
+ and `<stash>/secrets/`. They are protected against other local users by
76
+ filesystem permissions but are not encrypted at rest. Do not commit these
77
+ files to source control. Normal `akm env` and `akm secret` output never echoes
78
+ values; materialize values only at the command boundary with `akm env run`,
79
+ `akm secret run`, or `akm secret path`.
80
+
81
+ The knowledge graph extracted from your assets (entities/relations) lives
82
+ only in `$DATA/index.db` and is surfaced as aggregate counts via `akm health`
83
+ (`--report` for the full breakdown) — there is no export command that writes
84
+ graph content to an arbitrary path.
85
+
86
+ ### Improve / propose send asset content to the configured LLM
87
+
88
+ `akm improve` (whose strategies run processes such as reflect, distill, and
89
+ consolidate) and `akm proposal new` can send asset frontmatter and body to the
90
+ named LLM engine selected by the command, strategy, or current defaults. LLM
91
+ connections live under
92
+ `engines.<name>` in `~/.config/akm/config.json`. If you configure a third-party
93
+ LLM, your asset content goes to that third party. Use a local engine endpoint
94
+ (for example, `http://localhost:11434/v1/chat/completions` via Ollama) for assets
95
+ containing secrets or private notes.
82
96
 
83
97
  ## Known non-issues
84
98
 
85
- - **`akm` requires Bun or the prebuilt binary** — Node.js is not supported
86
- in 0.8.0 because Bun-specific APIs are used in hot paths. This is a
87
- compatibility limitation, not a security risk; the prebuilt binary is a
88
- Bun-compiled standalone executable.
99
+ - **The `akm-cli` npm package requires Node.js >= 22 as its bootstrap.** A
100
+ working Bun >= 1.0 is preferred for execution when it is also on `PATH`; old,
101
+ unusable, or absent Bun installations fall back to Node.js. Bun does not
102
+ remove the package's Node.js requirement. Standalone binaries are
103
+ runtime-free. This is a compatibility limitation, not a security risk.
89
104
  - **Workflows can read any file the akm process can read.** This is not a
90
105
  bug — see "Threat model" above.
91
- - **`bun install -g akm-cli` runs the preinstall hook.** The hook only
92
- emits an error message and exits non-zero on Node.js; it does not phone
93
- home or write outside the install directory.
106
+ - **Installing `akm-cli` runs the preinstall hook.** The hook only validates
107
+ the runtime version and exits non-zero when it is unsupported; it does not
108
+ phone home or write outside the install directory.
package/dist/akm CHANGED
@@ -1,38 +1,162 @@
1
- #!/bin/sh
2
- # This Source Code Form is subject to the terms of the Mozilla Public
3
- # License, v. 2.0. If a copy of the MPL was not distributed with this
4
- # file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
-
6
- case "$0" in
7
- */*) SCRIPT_PATH=$0 ;;
8
- *)
9
- SCRIPT_PATH=$(command -v -- "$0" 2>/dev/null || true)
10
- if [ -z "$SCRIPT_PATH" ]; then
11
- echo "akm launcher could not resolve its own path." >&2
12
- exit 127
13
- fi
14
- ;;
15
- esac
16
-
17
- if command -v readlink >/dev/null 2>&1; then
18
- while [ -L "$SCRIPT_PATH" ]; do
19
- LINK_TARGET=$(readlink "$SCRIPT_PATH")
20
- case "$LINK_TARGET" in
21
- /*) SCRIPT_PATH=$LINK_TARGET ;;
22
- *) SCRIPT_PATH=${SCRIPT_PATH%/*}/$LINK_TARGET ;;
23
- esac
24
- done
25
- fi
26
-
27
- SCRIPT_DIR=$(CDPATH= cd -- "${SCRIPT_PATH%/*}" && pwd)
28
-
29
- if command -v bun >/dev/null 2>&1; then
30
- exec bun "$SCRIPT_DIR/cli.js" "$@"
31
- fi
32
-
33
- if command -v node >/dev/null 2>&1; then
34
- exec node "$SCRIPT_DIR/cli-node.mjs" "$@"
35
- fi
36
-
37
- echo "akm requires Bun or Node.js >= 20.12.0 on PATH." >&2
38
- exit 127
1
+ #!/usr/bin/env node
2
+ // This Source Code Form is subject to the terms of the Mozilla Public
3
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ // file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
+
6
+ import { spawn, spawnSync } from "node:child_process";
7
+ import { createHash } from "node:crypto";
8
+ import fs from "node:fs";
9
+ import path from "node:path";
10
+ import { fileURLToPath } from "node:url";
11
+
12
+ const CONTEXT_ARG = "--scheduler-context";
13
+ const CONTEXT_KEYS = ["AKM_BUNDLE_DIR", "AKM_CONFIG_DIR", "AKM_DATA_DIR", "AKM_CACHE_DIR", "AKM_STATE_DIR"];
14
+ const CONTROL_CHARACTER = /[\u0000-\u001f\u007f-\u009f]/;
15
+
16
+ function invalidContext(file, reason) {
17
+ throw new Error(`Invalid scheduler context descriptor "${file}": ${reason}.`);
18
+ }
19
+
20
+ function readSchedulerContext(file) {
21
+ if (CONTROL_CHARACTER.test(file) || (!path.posix.isAbsolute(file) && !path.win32.isAbsolute(file))) {
22
+ invalidContext(file, "path must be absolute");
23
+ }
24
+ let linkStat;
25
+ try {
26
+ linkStat = fs.lstatSync(file);
27
+ } catch (error) {
28
+ invalidContext(file, error instanceof Error ? error.message : String(error));
29
+ }
30
+ if (linkStat.isSymbolicLink()) invalidContext(file, "symbolic links are not allowed");
31
+ if (!linkStat.isFile()) invalidContext(file, "path is not a regular file");
32
+
33
+ let bytes;
34
+ let fd;
35
+ try {
36
+ const noFollow = process.platform === "win32" ? 0 : fs.constants.O_NOFOLLOW;
37
+ fd = fs.openSync(file, fs.constants.O_RDONLY | noFollow);
38
+ const stat = fs.fstatSync(fd);
39
+ if (!stat.isFile()) invalidContext(file, "path is not a regular file");
40
+ if (process.platform !== "win32") {
41
+ if (typeof process.getuid !== "function") {
42
+ invalidContext(file, "current uid is unavailable for ownership verification");
43
+ }
44
+ const uid = process.getuid();
45
+ if (stat.uid !== uid) invalidContext(file, `file owner ${stat.uid} does not match uid ${uid}`);
46
+ if ((stat.mode & 0o077) !== 0) invalidContext(file, "group or other permissions must be disabled");
47
+ }
48
+ bytes = fs.readFileSync(fd);
49
+ } finally {
50
+ if (fd !== undefined) fs.closeSync(fd);
51
+ }
52
+
53
+ const match = /^([a-f0-9]{64})\.json$/.exec(path.basename(file));
54
+ const digest = createHash("sha256").update(bytes).digest("hex");
55
+ if (!match || match[1] !== digest) {
56
+ invalidContext(file, "content SHA-256 does not match the descriptor filename");
57
+ }
58
+
59
+ let descriptor;
60
+ try {
61
+ descriptor = JSON.parse(bytes.toString("utf8"));
62
+ } catch (error) {
63
+ invalidContext(file, error instanceof Error ? error.message : String(error));
64
+ }
65
+ if (
66
+ typeof descriptor !== "object" ||
67
+ descriptor === null ||
68
+ Array.isArray(descriptor) ||
69
+ descriptor.version !== 1 ||
70
+ Object.keys(descriptor).sort().join("\0") !== "environment\0version"
71
+ ) {
72
+ invalidContext(file, "expected the scheduler context v1 schema");
73
+ }
74
+ const environment = descriptor.environment;
75
+ const expected = [...CONTEXT_KEYS, "PATH"].sort();
76
+ const keys =
77
+ environment && typeof environment === "object" && !Array.isArray(environment)
78
+ ? Object.keys(environment).sort()
79
+ : [];
80
+ if (keys.length !== expected.length || keys.some((key, index) => key !== expected[index])) {
81
+ invalidContext(file, "environment keys do not match the scheduler context v1 schema");
82
+ }
83
+ for (const key of CONTEXT_KEYS) {
84
+ const value = environment[key];
85
+ if (
86
+ typeof value !== "string" ||
87
+ value.trim() === "" ||
88
+ CONTROL_CHARACTER.test(value) ||
89
+ (!path.posix.isAbsolute(value) && !path.win32.isAbsolute(value))
90
+ ) {
91
+ invalidContext(file, `${key} must be an absolute path without control characters`);
92
+ }
93
+ }
94
+ if (typeof environment.PATH !== "string" || CONTROL_CHARACTER.test(environment.PATH)) {
95
+ invalidContext(file, "PATH must be a string without control characters");
96
+ }
97
+ return environment;
98
+ }
99
+
100
+ const contextIndex = process.argv.indexOf(CONTEXT_ARG);
101
+ let contextValid = true;
102
+ if (contextIndex !== -1) {
103
+ try {
104
+ const contextPath = process.argv[contextIndex + 1];
105
+ if (!contextPath) throw new Error(`${CONTEXT_ARG} requires an absolute path.`);
106
+ const environment = readSchedulerContext(contextPath);
107
+ const expected = [...CONTEXT_KEYS, "PATH"].sort();
108
+ for (const key of expected) process.env[key] = environment[key];
109
+ process.argv.splice(contextIndex, 2);
110
+ } catch (error) {
111
+ console.error(`akm: ${error instanceof Error ? error.message : String(error)}`);
112
+ process.exitCode = 78;
113
+ contextValid = false;
114
+ }
115
+ }
116
+
117
+ if (contextValid) {
118
+ process.env.AKM_LAUNCHER_NODE = process.execPath;
119
+ process.env.AKM_LAUNCHER_PATH = fileURLToPath(import.meta.url);
120
+
121
+ if (!process.versions.bun) {
122
+ const [major = 0, minor = 0] = process.versions.node.split(".").map(Number);
123
+ if (major < 22) {
124
+ console.error("The akm-cli npm package requires Node.js >= 22 to bootstrap.");
125
+ process.exit(1);
126
+ }
127
+ }
128
+
129
+ const bunProbe = process.versions.bun
130
+ ? { status: 0, stdout: process.versions.bun }
131
+ : spawnSync("bun", ["--version"], {
132
+ encoding: "utf8",
133
+ stdio: ["ignore", "pipe", "ignore"],
134
+ timeout: 5_000,
135
+ });
136
+ const [bunMajor = 0] = (bunProbe.status === 0 ? bunProbe.stdout.trim() : "").split(".").map(Number);
137
+ const useBun = bunMajor >= 1;
138
+ const bunEntry = fileURLToPath(new URL("./cli.js", import.meta.url));
139
+ const nodeEntry = fileURLToPath(new URL("./cli-node.mjs", import.meta.url));
140
+
141
+ if (!useBun && !process.versions.bun) {
142
+ await import("./cli-node.mjs");
143
+ } else {
144
+ const command = useBun ? (process.versions.bun ? process.execPath : "bun") : "node";
145
+ const entry = useBun ? bunEntry : nodeEntry;
146
+ const runtime = useBun ? "Bun" : "Node.js";
147
+ const result = await new Promise((resolve) => {
148
+ const child = spawn(command, [entry, ...process.argv.slice(2)], { stdio: "inherit", env: process.env });
149
+ child.once("error", (error) => resolve({ error }));
150
+ child.once("exit", (code, signal) => resolve({ code, signal }));
151
+ });
152
+
153
+ if (result.error) {
154
+ console.error(`akm launcher could not start ${runtime}: ${result.error.message}`);
155
+ process.exitCode = 127;
156
+ } else if (result.signal) {
157
+ process.kill(process.pid, result.signal);
158
+ } else {
159
+ process.exitCode = result.code ?? 1;
160
+ }
161
+ }
162
+ }
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+ // This Source Code Form is subject to the terms of the Mozilla Public
3
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ // file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
+
6
+ import { spawn, spawnSync } from "node:child_process";
7
+ import { fileURLToPath } from "node:url";
8
+
9
+ if (!process.versions.bun) {
10
+ const [major = 0, minor = 0] = process.versions.node.split(".").map(Number);
11
+ if (major < 22) {
12
+ console.error("The akm-cli npm package requires Node.js >= 22 to bootstrap.");
13
+ process.exit(1);
14
+ }
15
+ }
16
+
17
+ const bunProbe = process.versions.bun
18
+ ? { status: 0, stdout: process.versions.bun }
19
+ : spawnSync("bun", ["--version"], {
20
+ encoding: "utf8",
21
+ stdio: ["ignore", "pipe", "ignore"],
22
+ timeout: 5_000,
23
+ });
24
+ const [bunMajor = 0] = (bunProbe.status === 0 ? bunProbe.stdout.trim() : "").split(".").map(Number);
25
+ const useBun = bunMajor >= 1;
26
+ const bunEntry = fileURLToPath(new URL("./scripts/akm-migrate.js", import.meta.url));
27
+
28
+ {
29
+ const command = process.versions.bun ? process.execPath : useBun ? "bun" : process.execPath;
30
+ const result = await new Promise((resolve) => {
31
+ const child = spawn(command, [bunEntry, ...process.argv.slice(2)], { stdio: "inherit" });
32
+ child.once("error", (error) => resolve({ error }));
33
+ child.once("exit", (code, signal) => resolve({ code, signal }));
34
+ });
35
+
36
+ if (result.error) {
37
+ console.error(`akm-migrate launcher could not start its runtime: ${result.error.message}`);
38
+ process.exitCode = 127;
39
+ } else if (result.signal) {
40
+ process.kill(process.pid, result.signal);
41
+ } else {
42
+ process.exitCode = result.code ?? 1;
43
+ }
44
+ }
@@ -3,6 +3,8 @@
3
3
  <RegistrationInfo>
4
4
  <Description>akm scheduled task: {{TASK_ID}}</Description>
5
5
  <URI>{{FOLDER}}{{TASK_ID}}</URI>
6
+ <Source>{{SIGNATURE}}</Source>
7
+ <Documentation>Log target (informational only; schtasks doesn't redirect): {{LOG_PATH}}</Documentation>
6
8
  </RegistrationInfo>
7
9
  <Triggers>
8
10
  {{TRIGGER_XML}}
@@ -25,5 +27,4 @@
25
27
  <Arguments>{{ARGS}}</Arguments>
26
28
  </Exec>
27
29
  </Actions>
28
- <!-- Log target (informational only; schtasks doesn't redirect): {{LOG_PATH}} -->
29
30
  </Task>