akm-cli 0.9.0-rc.4 → 0.9.0-rc.6

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 (438) hide show
  1. package/CHANGELOG.md +122 -26
  2. package/README.md +7 -7
  3. package/SECURITY.md +11 -10
  4. package/dist/akm +2 -2
  5. package/dist/akm-migrate-storage +2 -2
  6. package/dist/assets/hints/cli-hints-full.md +60 -73
  7. package/dist/assets/hints/cli-hints-short.md +8 -12
  8. package/dist/assets/improve-strategies/default.json +5 -7
  9. package/dist/assets/improve-strategies/frequent.json +2 -2
  10. package/dist/assets/improve-strategies/proactive-maintenance.json +2 -2
  11. package/dist/assets/improve-strategies/quick.json +1 -1
  12. package/dist/assets/improve-strategies/reflect-distill.json +3 -3
  13. package/dist/assets/improve-strategies/thorough.json +1 -1
  14. package/dist/assets/prompts/consolidate-system.md +5 -5
  15. package/dist/assets/prompts/extract-session.md +2 -6
  16. package/dist/assets/prompts/reflect-llm-framed-contract.md +11 -0
  17. package/dist/assets/prompts/reflect-llm-schema-contract.md +3 -0
  18. package/dist/assets/prompts/reflect-output-repair.md +3 -0
  19. package/dist/assets/stash-skeleton/README.md +10 -11
  20. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +1 -1
  21. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +1 -1
  22. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +1 -1
  23. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +2 -2
  24. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +2 -2
  25. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +1 -1
  26. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +2 -2
  27. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +1 -1
  28. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +18 -18
  29. package/dist/assets/stash-skeleton/facts/conventions/domains.md +8 -9
  30. package/dist/assets/stash-skeleton/facts/conventions/organization.md +13 -15
  31. package/dist/assets/tasks/core/extract.yml +2 -2
  32. package/dist/assets/tasks/core/improve.yml +1 -1
  33. package/dist/assets/templates/html/health.html +2 -3
  34. package/dist/cli/config-migrate.js +1328 -101
  35. package/dist/cli/invocation.js +255 -0
  36. package/dist/cli/parse-args.js +20 -83
  37. package/dist/cli/shared.js +15 -37
  38. package/dist/cli.js +18 -49
  39. package/dist/commands/agent/agent-dispatch.js +2 -2
  40. package/dist/commands/agent/contribute-cli.js +5 -4
  41. package/dist/commands/bundle/bundle-cli.js +68 -0
  42. package/dist/commands/bundle/bundle.js +219 -0
  43. package/dist/commands/completions.js +2 -2
  44. package/dist/commands/config-cli.js +6 -3
  45. package/dist/commands/env/env-binding.js +13 -9
  46. package/dist/commands/env/env-cli.js +49 -48
  47. package/dist/commands/env/secret-cli.js +24 -10
  48. package/dist/commands/events.js +2 -2
  49. package/dist/commands/feedback-cli.js +59 -33
  50. package/dist/commands/graph/graph.js +6 -4
  51. package/dist/commands/health/advisories.js +4 -4
  52. package/dist/commands/health/html-report.js +190 -593
  53. package/dist/commands/health/improve-metrics.js +240 -188
  54. package/dist/commands/health/metrics.js +9 -17
  55. package/dist/commands/health/report-view-model.js +509 -0
  56. package/dist/commands/health/surfaces.js +6 -3
  57. package/dist/commands/health/types-checks.js +4 -0
  58. package/dist/commands/health/types-improve.js +22 -0
  59. package/dist/commands/health/types-metrics.js +4 -0
  60. package/dist/commands/health/types-result.js +7 -0
  61. package/dist/commands/health/types-runs.js +4 -0
  62. package/dist/commands/health/types-session-log.js +4 -0
  63. package/dist/commands/health/types-windows.js +4 -0
  64. package/dist/commands/health/types.js +26 -21
  65. package/dist/commands/health/windows.js +1 -2
  66. package/dist/commands/health.js +219 -161
  67. package/dist/commands/improve/collapse-detector.js +25 -14
  68. package/dist/commands/improve/consolidate/chunking.js +7 -5
  69. package/dist/commands/improve/consolidate.js +640 -740
  70. package/dist/commands/improve/content-hash.js +39 -0
  71. package/dist/commands/improve/distill/content-repair.js +4 -10
  72. package/dist/commands/improve/distill/promote-memory.js +79 -49
  73. package/dist/commands/improve/distill/quality-gate.js +113 -35
  74. package/dist/commands/improve/distill-promotion-policy.js +24 -885
  75. package/dist/commands/improve/distill.js +565 -337
  76. package/dist/commands/improve/eligibility.js +75 -36
  77. package/dist/commands/improve/extract-cli.js +6 -6
  78. package/dist/commands/improve/extract-prompt.js +5 -34
  79. package/dist/commands/improve/extract.js +526 -357
  80. package/dist/commands/improve/feedback-valence.js +2 -12
  81. package/dist/commands/improve/improve-cli.js +11 -20
  82. package/dist/commands/improve/improve-result-file.js +7 -6
  83. package/dist/commands/improve/improve-run-types.js +4 -0
  84. package/dist/commands/improve/improve-strategies.js +3 -9
  85. package/dist/commands/improve/improve.js +822 -727
  86. package/dist/commands/improve/locks.js +27 -95
  87. package/dist/commands/improve/loop-stages.js +941 -963
  88. package/dist/commands/improve/memory/derived-ref.js +122 -0
  89. package/dist/commands/improve/memory/memory-contradiction-detect.js +35 -38
  90. package/dist/commands/improve/memory/memory-improve.js +24 -37
  91. package/dist/commands/improve/outcome-loop.js +13 -33
  92. package/dist/commands/improve/preparation.js +889 -691
  93. package/dist/commands/improve/proactive-maintenance.js +37 -9
  94. package/dist/commands/improve/proposal-envelope.js +31 -0
  95. package/dist/commands/improve/reflect.js +974 -588
  96. package/dist/commands/improve/run-context.js +119 -0
  97. package/dist/commands/improve/salience.js +8 -4
  98. package/dist/commands/improve/session-asset.js +7 -3
  99. package/dist/commands/improve/shared.js +14 -40
  100. package/dist/commands/improve/source-identity.js +39 -26
  101. package/dist/commands/improve/triage.js +20 -17
  102. package/dist/commands/lint/base-linter.js +288 -295
  103. package/dist/commands/lint/index.js +132 -19
  104. package/dist/commands/mv-cli.js +257 -234
  105. package/dist/commands/observability-cli.js +2 -1
  106. package/dist/commands/proposal/diff-format.js +50 -0
  107. package/dist/commands/proposal/drain-policies.js +0 -6
  108. package/dist/commands/proposal/drain.js +17 -16
  109. package/dist/commands/proposal/proposal-cli.js +40 -77
  110. package/dist/commands/proposal/proposal-types.js +56 -0
  111. package/dist/commands/proposal/proposal.js +39 -1
  112. package/dist/commands/proposal/propose.js +41 -19
  113. package/dist/commands/proposal/repository.js +566 -486
  114. package/dist/commands/proposal/validators/proposal-quality-validators.js +22 -6
  115. package/dist/commands/proposal/validators/proposal-validators.js +6 -5
  116. package/dist/commands/proposal/validators/proposals.js +5 -4
  117. package/dist/commands/read/curate.js +50 -28
  118. package/dist/commands/read/knowledge.js +25 -16
  119. package/dist/commands/read/remember-cli.js +12 -4
  120. package/dist/commands/read/search-cli.js +33 -33
  121. package/dist/commands/read/search.js +68 -55
  122. package/dist/commands/read/show.js +54 -135
  123. package/dist/commands/remember.js +7 -5
  124. package/dist/commands/sources/add-cli.js +10 -24
  125. package/dist/commands/sources/bundle-config-ops.js +58 -0
  126. package/dist/commands/sources/history.js +13 -8
  127. package/dist/commands/sources/info.js +10 -11
  128. package/dist/commands/sources/init.js +12 -21
  129. package/dist/commands/sources/installed-stashes.js +151 -138
  130. package/dist/commands/sources/schema-repair.js +5 -3
  131. package/dist/commands/sources/self-update.js +9 -7
  132. package/dist/commands/sources/source-add.js +116 -154
  133. package/dist/commands/sources/source-clone.js +33 -14
  134. package/dist/commands/sources/source-manage.js +43 -32
  135. package/dist/commands/sources/sources-cli.js +12 -7
  136. package/dist/commands/sources/stash-cli.js +12 -5
  137. package/dist/commands/sources/stash-skeleton.js +1 -1
  138. package/dist/commands/tasks/default-tasks.js +13 -13
  139. package/dist/commands/tasks/tasks-cli.js +3 -3
  140. package/dist/commands/tasks/tasks.js +71 -31
  141. package/dist/commands/workflow-cli.js +22 -26
  142. package/dist/core/action-contributors.js +1 -1
  143. package/dist/core/activation-policy.js +49 -0
  144. package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
  145. package/dist/core/adapter/adapters/akm-adapter.js +509 -0
  146. package/dist/core/adapter/adapters/akm-lint.js +381 -0
  147. package/dist/core/adapter/adapters/akm-metadata.js +416 -0
  148. package/dist/core/adapter/adapters/akm-task-adapter.js +150 -0
  149. package/dist/core/adapter/adapters/akm-workflow-adapter.js +196 -0
  150. package/dist/core/adapter/adapters/claude-adapter.js +61 -0
  151. package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
  152. package/dist/core/adapter/adapters/generic-files-adapter.js +117 -0
  153. package/dist/core/adapter/adapters/index.js +80 -0
  154. package/dist/core/adapter/adapters/llm-wiki-adapter.js +413 -0
  155. package/dist/core/adapter/adapters/okf-adapter.js +223 -0
  156. package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
  157. package/dist/core/adapter/adapters/shared.js +286 -0
  158. package/dist/core/adapter/adapters/tool-dir-shared.js +212 -0
  159. package/dist/core/adapter/adapters/website-snapshot-adapter.js +154 -0
  160. package/dist/core/adapter/bundle-adapter.js +4 -0
  161. package/dist/core/adapter/recognize-match.js +42 -0
  162. package/dist/core/adapter/registry.js +56 -0
  163. package/dist/core/adapter/types.js +4 -0
  164. package/dist/core/asset/asset-placement.js +229 -0
  165. package/dist/core/asset/asset-ref.js +107 -78
  166. package/dist/core/asset/asset-serialize.js +20 -0
  167. package/dist/core/asset/frontmatter.js +1 -1
  168. package/dist/core/asset/resolve-ref.js +223 -0
  169. package/dist/core/asset/stash-meta.js +1 -1
  170. package/dist/core/common.js +141 -49
  171. package/dist/core/config/config-io.js +0 -108
  172. package/dist/core/config/config-schema.js +94 -1039
  173. package/dist/core/config/config-sources.js +115 -36
  174. package/dist/core/config/config-types.js +16 -11
  175. package/dist/core/config/config-walker.js +4 -2
  176. package/dist/core/config/config.js +21 -26
  177. package/dist/core/config/engine-semantics.js +0 -4
  178. package/dist/core/config/schema/embedding.js +38 -0
  179. package/dist/core/config/schema/engines.js +116 -0
  180. package/dist/core/config/schema/feedback.js +31 -0
  181. package/dist/core/config/schema/improve-processes.js +395 -0
  182. package/dist/core/config/schema/improve.js +76 -0
  183. package/dist/core/config/schema/index-config.js +183 -0
  184. package/dist/core/config/schema/output.js +15 -0
  185. package/dist/core/config/schema/primitives.js +94 -0
  186. package/dist/core/config/schema/search.js +30 -0
  187. package/dist/core/config/schema/setup.js +27 -0
  188. package/dist/core/config/schema/sources-bundles.js +164 -0
  189. package/dist/core/config/schema/workflow.js +29 -0
  190. package/dist/core/env-secret-ref.js +113 -8
  191. package/dist/core/errors.js +1 -1
  192. package/dist/core/events-types.js +4 -0
  193. package/dist/core/extra-params.js +1 -0
  194. package/dist/core/file-change.js +16 -0
  195. package/dist/core/fs-txn.js +316 -0
  196. package/dist/core/git-message.js +59 -0
  197. package/dist/core/improve-result.js +9 -1
  198. package/dist/core/logs-db.js +1 -1
  199. package/dist/core/maintenance-barrier.js +16 -0
  200. package/dist/core/migration-backup.js +332 -160
  201. package/dist/core/paths.js +3 -6
  202. package/dist/core/platform.js +10 -0
  203. package/dist/core/recognition-util.js +130 -0
  204. package/dist/core/redaction.js +2 -2
  205. package/dist/core/standards/resolve-standards-context.js +47 -64
  206. package/dist/core/standards/resolve-type-conventions.js +3 -3
  207. package/dist/core/state/migrations.js +201 -8
  208. package/dist/core/state-db.js +38 -2
  209. package/dist/core/subprocess.js +303 -0
  210. package/dist/core/time.js +20 -0
  211. package/dist/core/type-presentation.js +130 -0
  212. package/dist/core/write-source.js +39 -67
  213. package/dist/indexer/bundle-identity-guard.js +91 -0
  214. package/dist/indexer/db/graph-db.js +1 -1
  215. package/dist/indexer/db/llm-cache.js +1 -1
  216. package/dist/indexer/ensure-index.js +29 -9
  217. package/dist/indexer/graph/graph-boost.js +28 -24
  218. package/dist/indexer/graph/graph-extraction.js +5 -6
  219. package/dist/indexer/graph/graph-types.js +4 -0
  220. package/dist/indexer/index-written-assets.js +44 -17
  221. package/dist/indexer/indexer.js +289 -153
  222. package/dist/indexer/init.js +18 -25
  223. package/dist/indexer/installations.js +224 -0
  224. package/dist/indexer/passes/dir-staleness.js +2 -1
  225. package/dist/indexer/passes/memory-inference.js +8 -4
  226. package/dist/indexer/passes/metadata.js +96 -243
  227. package/dist/indexer/scan/doc-to-entry.js +123 -0
  228. package/dist/indexer/scan/drain-dir.js +144 -0
  229. package/dist/indexer/search/db-search.js +171 -99
  230. package/dist/indexer/search/fts-query.js +1 -1
  231. package/dist/indexer/search/ranking-contributors.js +57 -7
  232. package/dist/indexer/search/ranking-types.js +4 -0
  233. package/dist/indexer/search/ranking.js +31 -6
  234. package/dist/indexer/search/search-attribution.js +67 -0
  235. package/dist/indexer/search/search-hit-enrichers.js +30 -40
  236. package/dist/indexer/search/search-source.js +109 -52
  237. package/dist/indexer/search/semantic-status.js +4 -1
  238. package/dist/indexer/usage/unmigrated-vaults-guard.js +2 -1
  239. package/dist/indexer/usage/usage-events.js +72 -9
  240. package/dist/indexer/walk/file-context.js +1 -44
  241. package/dist/indexer/walk/matchers.js +16 -32
  242. package/dist/indexer/walk/path-resolver.js +6 -5
  243. package/dist/indexer/walk/walker.js +4 -2
  244. package/dist/integrations/agent/engine-resolution.js +22 -0
  245. package/dist/integrations/agent/model-aliases.js +1 -1
  246. package/dist/integrations/agent/prompts.js +35 -11
  247. package/dist/integrations/agent/spawn.js +41 -270
  248. package/dist/integrations/harnesses/aider/agent-builder.js +2 -2
  249. package/dist/integrations/harnesses/aider/index.js +2 -11
  250. package/dist/integrations/harnesses/amazonq/agent-builder.js +1 -9
  251. package/dist/integrations/harnesses/amazonq/index.js +3 -16
  252. package/dist/integrations/harnesses/claude/config-import.js +1 -3
  253. package/dist/integrations/harnesses/claude/index.js +1 -12
  254. package/dist/integrations/harnesses/claude/session-log.js +27 -65
  255. package/dist/integrations/harnesses/codex/agent-builder.js +1 -2
  256. package/dist/integrations/harnesses/codex/index.js +2 -12
  257. package/dist/integrations/harnesses/copilot/agent-builder.js +2 -3
  258. package/dist/integrations/harnesses/copilot/index.js +1 -12
  259. package/dist/integrations/harnesses/gemini/agent-builder.js +1 -3
  260. package/dist/integrations/harnesses/gemini/index.js +1 -12
  261. package/dist/integrations/harnesses/ids.js +24 -0
  262. package/dist/integrations/harnesses/index.js +27 -2
  263. package/dist/integrations/harnesses/opencode/config-import.js +1 -3
  264. package/dist/integrations/harnesses/opencode/index.js +1 -12
  265. package/dist/integrations/harnesses/opencode/session-log.js +67 -110
  266. package/dist/integrations/harnesses/opencode-sdk/harness.js +2 -11
  267. package/dist/integrations/harnesses/openhands/agent-builder.js +3 -3
  268. package/dist/integrations/harnesses/openhands/index.js +2 -11
  269. package/dist/integrations/harnesses/pi/agent-builder.js +3 -11
  270. package/dist/integrations/harnesses/pi/index.js +3 -15
  271. package/dist/integrations/harnesses/shared.js +17 -0
  272. package/dist/integrations/harnesses/types.js +37 -2
  273. package/dist/integrations/lockfile.js +36 -0
  274. package/dist/integrations/session-logs/index.js +21 -12
  275. package/dist/integrations/session-logs/provider-base.js +113 -0
  276. package/dist/llm/client.js +7 -5
  277. package/dist/llm/embedders/deterministic.js +2 -2
  278. package/dist/llm/embedders/remote.js +8 -4
  279. package/dist/llm/graph-extract.js +7 -2
  280. package/dist/llm/metadata-enhance.js +43 -26
  281. package/dist/llm/structured-call.js +15 -7
  282. package/dist/migrate/legacy/config-source-migration.js +223 -0
  283. package/dist/migrate/legacy/content-migration.js +305 -0
  284. package/dist/migrate/legacy/legacy-layout.js +779 -0
  285. package/dist/migrate/legacy/legacy-paths.js +25 -0
  286. package/dist/migrate/legacy/legacy-stash-json.js +72 -0
  287. package/dist/migrate/legacy/proposal-fs-import.js +168 -0
  288. package/dist/migrate/legacy/task-target-ref-migration.js +272 -0
  289. package/dist/migrate/legacy/three-db-cutover.js +840 -0
  290. package/dist/migrate/legacy/workflow-migrations-bodies.js +52 -0
  291. package/dist/migrate/legacy/workflow-migrations-frozen.js +21 -0
  292. package/dist/migrate/legacy-ref-grammar.js +209 -0
  293. package/dist/output/command-registry.js +27 -0
  294. package/dist/output/html-render.js +11 -16
  295. package/dist/output/renderers.js +32 -276
  296. package/dist/output/shapes/passthrough.js +3 -9
  297. package/dist/output/shapes/registry.js +12 -6
  298. package/dist/output/text/command-format.js +547 -0
  299. package/dist/output/text/helpers.js +15 -1377
  300. package/dist/output/text/proposal-format.js +230 -0
  301. package/dist/output/text/registry.js +12 -6
  302. package/dist/output/text/show-directives.js +107 -0
  303. package/dist/output/text/show-format.js +103 -0
  304. package/dist/output/text/workflow-format.js +345 -0
  305. package/dist/output/text.js +1 -3
  306. package/dist/registry/build-index.js +13 -17
  307. package/dist/registry/providers/static-index.js +2 -2
  308. package/dist/registry/resolve.js +4 -90
  309. package/dist/registry/semver.js +93 -0
  310. package/dist/runtime.js +90 -0
  311. package/dist/schemas/akm-config.json +2956 -14890
  312. package/dist/schemas/akm-task.json +2 -2
  313. package/dist/schemas/akm-workflow.json +2 -2
  314. package/dist/scripts/migrate-storage.js +2312 -19642
  315. package/dist/setup/detect.js +5 -7
  316. package/dist/setup/engine-config.js +2 -1
  317. package/dist/setup/registry-stash-loader.js +1 -1
  318. package/dist/setup/semantic-assets.js +12 -9
  319. package/dist/setup/setup.js +109 -39
  320. package/dist/setup/steps/connection-shared.js +120 -0
  321. package/dist/setup/steps/connection.js +50 -274
  322. package/dist/setup/steps/platforms.js +1 -0
  323. package/dist/setup/steps/sources.js +13 -6
  324. package/dist/setup/steps/stashdir.js +5 -2
  325. package/dist/sources/freshness.js +39 -0
  326. package/dist/sources/providers/git-provider.js +29 -33
  327. package/dist/sources/providers/git-stash.js +10 -5
  328. package/dist/sources/providers/provider-utils.js +40 -18
  329. package/dist/sources/providers/website.js +1 -1
  330. package/dist/sources/resolve.js +5 -5
  331. package/dist/sources/snapshot-fetchers/types.js +4 -0
  332. package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +105 -39
  333. package/dist/storage/database.js +47 -3
  334. package/dist/storage/engines/sqlite-migrations.js +34 -16
  335. package/dist/storage/locations.js +1 -2
  336. package/dist/storage/repositories/improve-runs-repository.js +0 -20
  337. package/dist/storage/repositories/index-connection.js +80 -0
  338. package/dist/storage/repositories/index-db.js +4 -3
  339. package/dist/storage/repositories/index-entries-repository.js +952 -0
  340. package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +15 -2
  341. package/dist/storage/repositories/index-entry-types.js +4 -0
  342. package/dist/storage/repositories/index-fts-repository.js +164 -0
  343. package/dist/storage/repositories/index-llm-cache-repository.js +109 -0
  344. package/dist/storage/repositories/index-meta-repository.js +50 -0
  345. package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +241 -100
  346. package/dist/storage/repositories/index-sql.js +12 -0
  347. package/dist/storage/repositories/index-utility-repository.js +369 -0
  348. package/dist/storage/repositories/index-vec-repository.js +245 -0
  349. package/dist/storage/repositories/proposals-repository.js +41 -50
  350. package/dist/storage/repositories/registry-cache.js +1 -1
  351. package/dist/storage/repositories/workflow-runs-repository.js +17 -11
  352. package/dist/tasks/backends/cron.js +5 -5
  353. package/dist/tasks/backends/exec-utils.js +21 -0
  354. package/dist/tasks/backends/index.js +6 -9
  355. package/dist/tasks/backends/launchd.js +16 -17
  356. package/dist/tasks/backends/schtasks.js +33 -41
  357. package/dist/tasks/backends/types.js +4 -0
  358. package/dist/tasks/parser.js +25 -5
  359. package/dist/tasks/runner.js +33 -39
  360. package/dist/tasks/validator.js +5 -6
  361. package/dist/workflows/authoring/authoring.js +8 -11
  362. package/dist/workflows/exec/brief.js +10 -7
  363. package/dist/workflows/exec/report.js +261 -156
  364. package/dist/workflows/exec/run-workflow.js +2 -1
  365. package/dist/workflows/exec/step-work.js +3 -9
  366. package/dist/workflows/program/parser.js +4 -60
  367. package/dist/workflows/renderer.js +11 -60
  368. package/dist/workflows/runtime/checkin.js +1 -1
  369. package/dist/workflows/runtime/plan-classifier.js +7 -4
  370. package/dist/workflows/runtime/runs.js +11 -10
  371. package/dist/workflows/runtime/unit-checkin.js +1 -1
  372. package/dist/workflows/runtime/unit-phases.js +20 -0
  373. package/dist/workflows/runtime/workflow-asset-loader.js +27 -16
  374. package/dist/workflows/validate-summary.js +2 -2
  375. package/dist/workflows/validator.js +18 -2
  376. package/docs/migration/release-notes/0.9.0.md +45 -3
  377. package/docs/migration/v0.8-to-v0.9.md +466 -262
  378. package/docs/{data-and-telemetry.md → reference/data-and-telemetry.md} +61 -17
  379. package/package.json +10 -9
  380. package/schemas/akm-config.json +2956 -14890
  381. package/schemas/akm-task.json +2 -2
  382. package/schemas/akm-workflow.json +2 -2
  383. package/dist/assets/help/help-accept.md +0 -12
  384. package/dist/assets/help/help-improve.md +0 -84
  385. package/dist/assets/help/help-proposals.md +0 -17
  386. package/dist/assets/help/help-propose.md +0 -17
  387. package/dist/assets/help/help-reject.md +0 -11
  388. package/dist/assets/improve-strategies/recombine-only.json +0 -23
  389. package/dist/assets/improve-strategies/synthesize.json +0 -17
  390. package/dist/assets/prompts/procedural-system.md +0 -44
  391. package/dist/assets/prompts/recombine-system.md +0 -40
  392. package/dist/assets/prompts/staleness-detect-system.md +0 -6
  393. package/dist/assets/templates/html/default.html +0 -78
  394. package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
  395. package/dist/assets/wiki/index-template.md +0 -12
  396. package/dist/assets/wiki/ingest-workflow-template.md +0 -83
  397. package/dist/assets/wiki/log-template.md +0 -8
  398. package/dist/assets/wiki/schema-template.md +0 -61
  399. package/dist/commands/improve/calibration.js +0 -161
  400. package/dist/commands/improve/dedup.js +0 -482
  401. package/dist/commands/improve/hot-probation.js +0 -45
  402. package/dist/commands/improve/improve-auto-accept.js +0 -262
  403. package/dist/commands/improve/procedural.js +0 -403
  404. package/dist/commands/improve/recombine.js +0 -843
  405. package/dist/commands/improve/schema-similarity-gate.js +0 -168
  406. package/dist/commands/lint/agent-linter.js +0 -44
  407. package/dist/commands/lint/command-linter.js +0 -44
  408. package/dist/commands/lint/default-linter.js +0 -16
  409. package/dist/commands/lint/fact-linter.js +0 -39
  410. package/dist/commands/lint/knowledge-linter.js +0 -16
  411. package/dist/commands/lint/memory-linter.js +0 -61
  412. package/dist/commands/lint/registry.js +0 -41
  413. package/dist/commands/lint/skill-linter.js +0 -45
  414. package/dist/commands/lint/task-linter.js +0 -50
  415. package/dist/commands/lint/workflow-linter.js +0 -81
  416. package/dist/commands/proposal/legacy-import.js +0 -115
  417. package/dist/commands/wiki-cli.js +0 -291
  418. package/dist/core/asset/asset-registry.js +0 -76
  419. package/dist/core/asset/asset-spec.js +0 -316
  420. package/dist/core/eval/rank-metrics.js +0 -113
  421. package/dist/core/ripgrep/install.js +0 -163
  422. package/dist/core/ripgrep/resolve.js +0 -81
  423. package/dist/indexer/db/db.js +0 -1585
  424. package/dist/indexer/manifest.js +0 -170
  425. package/dist/indexer/passes/metadata-contributors.js +0 -31
  426. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -25
  427. package/dist/output/text/wiki.js +0 -16
  428. package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -18228
  429. package/dist/scripts/migrations/v16-to-v17.js +0 -141
  430. package/dist/storage/repositories/consolidation-repository.js +0 -38
  431. package/dist/storage/repositories/recombine-repository.js +0 -213
  432. package/dist/wiki/wiki-templates.js +0 -15
  433. package/dist/wiki/wiki.js +0 -1013
  434. package/dist/workflows/db.js +0 -413
  435. package/docs/README.md +0 -103
  436. package/docs/migration/release-notes/0.9.0-beta.60.md +0 -19
  437. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
  438. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
@@ -19,7 +19,7 @@
19
19
  * • prompt → `executeRunner(engine, prompt, { stdio: "captured" })`
20
20
  * 5. Capture stdout / stderr as structured rows in logs.db (task_logs) and,
21
21
  * transitionally, as a flat text tail at `<cacheDir>/tasks/logs/<id>/<ts>.log`
22
- * (see docs/technical/logs-audit.md).
22
+ * (per the #579 logs audit).
23
23
  * 6. Write a history row to state.db task_history table.
24
24
  *
25
25
  * Returns a structured result so the CLI handler can shape it for `output()`
@@ -28,19 +28,19 @@
28
28
  import fs from "node:fs";
29
29
  import os from "node:os";
30
30
  import path from "node:path";
31
+ import { shouldSkipUnactivatedTask } from "../core/activation-policy.js";
31
32
  import { assertNever } from "../core/assert.js";
32
- import { parseAssetRef } from "../core/asset/asset-ref.js";
33
- import { resolveStashDir } from "../core/common.js";
33
+ import { parseRefInput } from "../core/asset/resolve-ref.js";
34
34
  import { loadConfig } from "../core/config/config.js";
35
35
  import { AkmError, NotFoundError, rethrowIfTestIsolationError } from "../core/errors.js";
36
36
  import { buildTaskRunId, insertTaskLogLines, openLogsDatabase, } from "../core/logs-db.js";
37
37
  import { getTaskLogDir } from "../core/paths.js";
38
38
  import { withStateDb } from "../core/state-db.js";
39
+ import { runManagedSubprocess } from "../core/subprocess.js";
39
40
  import { resolveEngine, resolveLlmEngineUse } from "../integrations/agent/engine-resolution.js";
40
41
  import { resolveModel } from "../integrations/agent/model-aliases.js";
41
42
  import { executeRunner } from "../integrations/agent/runner-dispatch.js";
42
43
  import { chatCompletion } from "../llm/client.js";
43
- import { spawn } from "../runtime.js";
44
44
  import { resolveAssetPath } from "../sources/resolve.js";
45
45
  import { decodeTaskHistoryMetadata, finalizeTaskHistoryAttempt, getTaskHistory, queryTaskHistory, reserveTaskHistoryAttempt, upsertTaskHistory, } from "../storage/repositories/task-history-repository.js";
46
46
  import { startWorkflowRun } from "../workflows/runtime/runs.js";
@@ -49,7 +49,7 @@ import { parseTaskDocument } from "./parser.js";
49
49
  import { resolveAkmInvocation } from "./resolve-akm-bin.js";
50
50
  import { validateTaskId } from "./task-id.js";
51
51
  export const INVALID_TASK_ATTEMPT_ID = "_invalid-task-id";
52
- export async function runTask(id, options = {}) {
52
+ export async function runTask(id, options) {
53
53
  const runAgentImpl = options.runAgentImpl;
54
54
  const startWorkflowRunImpl = options.startWorkflowRunImpl ?? startWorkflowRun;
55
55
  const now = options.now ?? (() => new Date());
@@ -74,7 +74,7 @@ export async function runTask(id, options = {}) {
74
74
  const startedAt = attempt.startedAt;
75
75
  let failureReason = "task_load_failed";
76
76
  try {
77
- const stashDir = options.stashDir ?? resolveStashDir();
77
+ const stashDir = options.stashDir;
78
78
  const filePath = await resolveAssetPath(stashDir, "task", id);
79
79
  const yaml = fs.readFileSync(filePath, "utf8");
80
80
  failureReason = "task_parse_failed";
@@ -82,7 +82,7 @@ export async function runTask(id, options = {}) {
82
82
  failureReason = "task_dispatch_failed";
83
83
  const startedIso = startedAt.toISOString();
84
84
  const logPath = resolveTaskLogPath(options.logDir, id, startedIso);
85
- if (!task.enabled && options.scheduled === true) {
85
+ if (shouldSkipUnactivatedTask({ enabled: task.enabled, scheduled: options.scheduled === true })) {
86
86
  const finishedAt = finishAttempt(startedAt, now());
87
87
  const disabledTarget = task.target.kind === "workflow"
88
88
  ? { kind: "workflow", ref: task.target.ref }
@@ -121,7 +121,16 @@ export async function runTask(id, options = {}) {
121
121
  });
122
122
  }
123
123
  if (task.target.kind === "command") {
124
- return await runCommandTask({ task, logPath, startedAt, now, historyReserved: attempt.historyReserved });
124
+ return await runCommandTask({
125
+ task,
126
+ logPath,
127
+ startedAt,
128
+ now,
129
+ historyReserved: attempt.historyReserved,
130
+ ...(options.spawnFn ? { spawnFn: options.spawnFn } : {}),
131
+ ...(options.setTimeoutFn ? { setTimeoutFn: options.setTimeoutFn } : {}),
132
+ ...(options.clearTimeoutFn ? { clearTimeoutFn: options.clearTimeoutFn } : {}),
133
+ });
125
134
  }
126
135
  return await runPromptTask({
127
136
  task,
@@ -159,44 +168,29 @@ async function runCommandTask(input) {
159
168
  const header = `[akm tasks] task=${task.id} kind=command cmd=${cmd.join(" ")}`;
160
169
  const logLines = [header];
161
170
  const dbLines = [{ line: header }];
162
- let stdout = "";
163
- let stderr = "";
164
171
  let exitCode = null;
165
172
  try {
166
- const proc = spawn(spawnCmd, {
167
- stdin: "ignore",
168
- stdout: "pipe",
169
- stderr: "pipe",
173
+ // Managed spawn (src/core/subprocess.ts): process-GROUP kill so a timeout
174
+ // reaps the whole command tree (no orphans), and a SIGTERM→SIGKILL ladder
175
+ // so a child that ignores SIGTERM can't wedge the run forever.
176
+ const result = await runManagedSubprocess(spawnCmd, {
177
+ capture: true,
170
178
  cwd: process.env.HOME ?? os.tmpdir(),
171
179
  // Stamp task-runner provenance so any akm invocation in the command tree
172
180
  // records usage events as machine traffic, not user demand (DRIFT-6).
173
181
  // A more specific stamp already in the environment (e.g. improve's
174
182
  // AKM_EVENT_SOURCE=improve on its child spawns) still wins in children.
175
183
  env: { ...process.env, AKM_EVENT_SOURCE: process.env.AKM_EVENT_SOURCE ?? "task" },
184
+ timeoutMs,
185
+ ...(input.spawnFn ? { spawnFn: input.spawnFn } : {}),
186
+ ...(input.setTimeoutFn ? { setTimeoutFn: input.setTimeoutFn } : {}),
187
+ ...(input.clearTimeoutFn ? { clearTimeoutFn: input.clearTimeoutFn } : {}),
176
188
  });
177
- let timer;
178
- let timedOut = false;
179
- if (timeoutMs !== null) {
180
- timer = setTimeout(() => {
181
- timedOut = true;
182
- try {
183
- proc.kill("SIGTERM");
184
- }
185
- catch {
186
- /* ignore */
187
- }
188
- }, timeoutMs);
189
- }
190
- const [stdoutBuf, stderrBuf] = await Promise.all([
191
- new Response(proc.stdout).text(),
192
- new Response(proc.stderr).text(),
193
- ]);
194
- await proc.exited;
195
- if (timer !== undefined)
196
- clearTimeout(timer);
197
- stdout = stdoutBuf;
198
- stderr = stderrBuf;
199
- exitCode = proc.exitCode ?? (timedOut ? 143 : 1);
189
+ // A synchronous spawn throw / exit rejection surfaces as spawn_error below.
190
+ if (result.spawnError)
191
+ throw result.spawnError;
192
+ const { stdout, stderr, timedOut } = result;
193
+ exitCode = result.exitCode ?? (timedOut ? 143 : 1);
200
194
  if (timedOut) {
201
195
  logLines.push(`timed_out=true timeout_ms=${timeoutMs}`);
202
196
  dbLines.push({ level: "error", line: `timed_out=true timeout_ms=${timeoutMs}` });
@@ -255,7 +249,7 @@ async function runWorkflowTask(input) {
255
249
  const { task, logPath, startedAt, now, startWorkflowRunImpl, historyReserved } = input;
256
250
  if (task.target.kind !== "workflow")
257
251
  throw new Error("invariant: workflow target");
258
- const ref = parseAssetRef(task.target.ref);
252
+ const ref = parseRefInput(task.target.ref);
259
253
  if (ref.type !== "workflow") {
260
254
  throw new NotFoundError(`Task "${task.id}" workflow target must be a workflow ref (got "${task.target.ref}").`, "WORKFLOW_NOT_FOUND");
261
255
  }
@@ -448,7 +442,7 @@ async function resolvePromptText(task, stashDir) {
448
442
  return fs.readFileSync(filePath, "utf8");
449
443
  }
450
444
  // asset
451
- const ref = parseAssetRef(src.ref);
445
+ const ref = parseRefInput(src.ref);
452
446
  const assetPath = await resolveAssetPath(stashDir, ref.type, ref.name);
453
447
  return fs.readFileSync(assetPath, "utf8");
454
448
  }
@@ -16,8 +16,7 @@
16
16
  */
17
17
  import fs from "node:fs";
18
18
  import path from "node:path";
19
- import { parseAssetRef } from "../core/asset/asset-ref.js";
20
- import { resolveStashDir } from "../core/common.js";
19
+ import { parseRefInput } from "../core/asset/resolve-ref.js";
21
20
  import { loadConfig } from "../core/config/config.js";
22
21
  import { NotFoundError } from "../core/errors.js";
23
22
  import { resolveEngine } from "../integrations/agent/engine-resolution.js";
@@ -27,8 +26,8 @@ export async function validateTaskDocument(task, options) {
27
26
  // Schedule must parse and translate.
28
27
  parseSchedule(task.schedule, options.backend);
29
28
  if (task.target.kind === "workflow") {
30
- const stashDir = options.stashDir ?? resolveStashDir();
31
- const ref = parseAssetRef(task.target.ref);
29
+ const stashDir = options.stashDir;
30
+ const ref = parseRefInput(task.target.ref);
32
31
  if (ref.type !== "workflow") {
33
32
  throw new NotFoundError(`Task "${task.id}" workflow target must be a workflow ref (got "${task.target.ref}").`, "WORKFLOW_NOT_FOUND");
34
33
  }
@@ -52,8 +51,8 @@ export async function validateTaskDocument(task, options) {
52
51
  }
53
52
  const src = task.target.source;
54
53
  if (src.kind === "asset") {
55
- const stashDir = options.stashDir ?? resolveStashDir();
56
- const ref = parseAssetRef(src.ref);
54
+ const stashDir = options.stashDir;
55
+ const ref = parseRefInput(src.ref);
57
56
  await resolveAssetPath(stashDir, ref.type, ref.name);
58
57
  }
59
58
  else if (src.kind === "file") {
@@ -4,9 +4,9 @@
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
6
6
  import workflowTemplate from "../../assets/workflows/workflow-template.md" with { type: "text" };
7
- import { canonicalizeWorkflowName, WORKFLOW_EXTENSIONS } from "../../core/asset/asset-spec.js";
8
7
  import { isWithin, resolveStashDir } from "../../core/common.js";
9
8
  import { UsageError } from "../../core/errors.js";
9
+ import { canonicalizeWorkflowName, WORKFLOW_EXTENSIONS } from "../../core/recognition-util.js";
10
10
  import { warn } from "../../core/warn.js";
11
11
  import { compileWorkflowProgram } from "../ir/compile.js";
12
12
  import { parseWorkflow } from "../parser.js";
@@ -83,7 +83,7 @@ export function createWorkflowAsset(input) {
83
83
  const normalizedName = normalizeWorkflowName(input.name);
84
84
  // The write target is DEFINITIVE — the canonical name plus the chosen format's
85
85
  // extension (`.yaml`/`.yml` for a program, `.md` for markdown). We deliberately
86
- // do NOT go through `resolveAssetPathFromName`, which PROBES existing files and
86
+ // do NOT go through `assetPathForName`, which PROBES existing files and
87
87
  // would redirect a markdown create onto an existing `foo.yaml` (writing
88
88
  // markdown into a `.yaml`). Computing the target directly makes a markdown
89
89
  // create always write `.md`, so the finding-C cross-extension check below sees
@@ -93,10 +93,10 @@ export function createWorkflowAsset(input) {
93
93
  if (!isWithin(assetPath, typeRoot)) {
94
94
  throw new UsageError(`Resolved workflow path escapes the stash: "${normalizedName}"`, "PATH_ESCAPE_VIOLATION");
95
95
  }
96
- // Codex round-3 finding C: a `workflow:<name>` ref is canonical across every
96
+ // Codex round-3 finding C: a `workflows/<name>` ref is canonical across every
97
97
  // recognized extension (`.md`/`.yaml`/`.yml`) and resolves `.md` BEFORE
98
98
  // `.yaml`. So creating `foo.yaml` while `foo.md` exists would return the ref
99
- // `workflow:foo` that still starts the OLD markdown workflow — a silently
99
+ // `workflows/foo` that still starts the OLD markdown workflow — a silently
100
100
  // shadowed asset. Reject creation when ANY recognized extension already holds
101
101
  // the same canonical name, naming the existing file. A same-extension collision
102
102
  // (the target path itself exists) keeps the classic `--force` overwrite escape;
@@ -106,7 +106,7 @@ export function createWorkflowAsset(input) {
106
106
  const conflicting = existingPaths.find((p) => p !== assetPath);
107
107
  if (conflicting !== undefined) {
108
108
  throw new UsageError(`Workflow "${normalizedName}" already exists as ${path.relative(stashDir, conflicting)} — the ` +
109
- `\`workflow:${normalizedName}\` ref resolves to that file, so creating this one would shadow it. ` +
109
+ `\`workflows/${normalizedName}\` ref resolves to that file, so creating this one would shadow it. ` +
110
110
  `Remove or rename the existing file first, or create the workflow under a different name.`, "RESOURCE_ALREADY_EXISTS");
111
111
  }
112
112
  if (fs.existsSync(assetPath) && !input.force) {
@@ -140,7 +140,7 @@ export function createWorkflowAsset(input) {
140
140
  fs.mkdirSync(path.dirname(assetPath), { recursive: true });
141
141
  fs.writeFileSync(assetPath, content.endsWith("\n") ? content : `${content}\n`, "utf8");
142
142
  return {
143
- ref: `workflow:${normalizedName}`,
143
+ ref: `workflows/${normalizedName}`,
144
144
  path: assetPath,
145
145
  stashDir,
146
146
  };
@@ -168,7 +168,7 @@ function readWorkflowSource(source, stashDir) {
168
168
  }
169
169
  function normalizeWorkflowName(name) {
170
170
  // Strip any recognized workflow extension (.md/.yaml/.yml) so the canonical
171
- // name — and thus the `workflow:<name>` ref — is extension-free regardless of
171
+ // name — and thus the `workflows/<name>` ref — is extension-free regardless of
172
172
  // how the user spelled it. The chosen format is recovered from the raw suffix
173
173
  // by the caller (createWorkflowAsset).
174
174
  const normalized = canonicalizeWorkflowName(name
@@ -206,7 +206,7 @@ export function formatWorkflowErrors(path, errors) {
206
206
  return [heading, ...lines].join("\n");
207
207
  }
208
208
  /**
209
- * Validate a workflow by ref (`workflow:<name>`) or filesystem path.
209
+ * Validate a workflow filesystem path.
210
210
  *
211
211
  * Returns the parse result plus the source-relative path used. Throws
212
212
  * `UsageError` only when the target cannot be located on disk; parse
@@ -214,9 +214,6 @@ export function formatWorkflowErrors(path, errors) {
214
214
  * format them however they like.
215
215
  */
216
216
  export function validateWorkflowSource(target) {
217
- if (target.startsWith("workflow:")) {
218
- throw new UsageError(`validateWorkflowSource expects a filesystem path; resolve refs to paths in the caller before invoking.`);
219
- }
220
217
  const resolved = path.resolve(target);
221
218
  if (!fs.existsSync(resolved)) {
222
219
  throw new UsageError(`Workflow file not found: "${target}".`);
@@ -29,17 +29,19 @@
29
29
  * driven run of the same frozen plan produce byte-identical unit graphs — the
30
30
  * invariant R4 asserts.
31
31
  */
32
- import { parseAssetRef } from "../../core/asset/asset-ref.js";
33
- import { canonicalizeWorkflowName } from "../../core/asset/asset-spec.js";
32
+ import { parseRefInput } from "../../core/asset/resolve-ref.js";
34
33
  import { NotFoundError, UsageError } from "../../core/errors.js";
34
+ import { canonicalizeWorkflowName } from "../../core/recognition-util.js";
35
35
  import { withWorkflowRunsRepo } from "../../storage/repositories/workflow-runs-repository.js";
36
36
  import { getCurrentWorkflowScopeKey } from "../authoring/scope-key.js";
37
37
  import { assertRunParamsSatisfyPlan } from "../ir/params.js";
38
38
  import { frozenStepRows, requireExecutableWorkflowPlan } from "../runtime/plan-classifier.js";
39
39
  import { snapshotRunForDriver } from "../runtime/runs.js";
40
40
  import { evaluateStaleUnits } from "../runtime/unit-checkin.js";
41
+ import { GATE_EVALUATION_PHASE } from "../runtime/unit-phases.js";
42
+ import { canonicalWorkflowRunRef } from "../runtime/workflow-asset-loader.js";
41
43
  import { detectSecretShapedParams } from "./param-secrets.js";
42
- import { activeGateLoop, assertJournaledRouteSelectionsValid, computeStepWorkList, evaluateRoute, GATE_EVALUATION_PHASE, isWorkListFullyTerminal, recoverGateFeedback, selectUnitAttemptRow, stepOutputsFromEvidence, } from "./step-work.js";
44
+ import { activeGateLoop, assertJournaledRouteSelectionsValid, computeStepWorkList, evaluateRoute, isWorkListFullyTerminal, recoverGateFeedback, selectUnitAttemptRow, stepOutputsFromEvidence, } from "./step-work.js";
43
45
  const EMPTY_WORK_LIST = { isFanOut: false, reducer: null, itemCount: 0, units: [] };
44
46
  // ── Entry point ──────────────────────────────────────────────────────────────
45
47
  /**
@@ -460,14 +462,15 @@ export async function resolveRunId(target) {
460
462
  const byId = repo.getRunById(target);
461
463
  if (byId)
462
464
  return byId.id;
463
- if (!target.includes(":")) {
465
+ // Run-id vs workflow-ref: a run id has no `/`; canonical workflow refs do.
466
+ if (!target.includes(":") && !target.includes("/")) {
464
467
  throw new NotFoundError(`Workflow run "${target}" not found.`, "WORKFLOW_NOT_FOUND");
465
468
  }
466
- const parsed = parseAssetRef(target);
469
+ const parsed = parseRefInput(target);
467
470
  if (parsed.type !== "workflow") {
468
- throw new UsageError(`Expected a workflow run id or workflow ref (workflow:<name>), got "${target}".`);
471
+ throw new UsageError(`Expected a workflow run id or workflow ref (workflows/<name>), got "${target}".`);
469
472
  }
470
- const ref = `${parsed.origin ? `${parsed.origin}//` : ""}workflow:${canonicalizeWorkflowName(parsed.name)}`;
473
+ const ref = canonicalWorkflowRunRef(parsed.origin, canonicalizeWorkflowName(parsed.name));
471
474
  const active = repo.getActiveRunRowForScope(ref, getCurrentWorkflowScopeKey());
472
475
  if (!active) {
473
476
  throw new NotFoundError(`No active workflow run for ${ref} in this scope. \`akm workflow brief\` describes an existing run and never ` +