akm-cli 0.9.16 → 0.9.17-alpha.10

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 (403) hide show
  1. package/CHANGELOG.md +2101 -0
  2. package/STABILITY.md +11 -10
  3. package/dist/akm +124 -193
  4. package/dist/akm-migrate +38 -19
  5. package/dist/assets/hints/cli-hints-full.md +6 -7
  6. package/dist/assets/improve-strategies/catchup.json +0 -3
  7. package/dist/assets/improve-strategies/consolidate.json +0 -1
  8. package/dist/assets/improve-strategies/default.json +1 -2
  9. package/dist/assets/improve-strategies/proactive-maintenance.json +1 -2
  10. package/dist/assets/improve-strategies/quick.json +1 -2
  11. package/dist/assets/improve-strategies/reflect-distill.json +1 -2
  12. package/dist/assets/improve-strategies/thorough.json +0 -3
  13. package/dist/assets/prompts/consolidate-pair.md +20 -0
  14. package/dist/assets/prompts/consolidate-system.md +4 -11
  15. package/dist/assets/prompts/retrieval-relevance-judge.md +6 -0
  16. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +20 -20
  17. package/dist/assets/stash-skeleton/facts/conventions/domains.md +2 -2
  18. package/dist/assets/templates/html/health.html +3 -5
  19. package/dist/cli/retired-commands.js +1 -1
  20. package/dist/cli/shared.js +6 -2
  21. package/dist/cli/unknown-flags.js +24 -1
  22. package/dist/cli.js +68 -10
  23. package/dist/commands/agent/agent-dispatch.js +1 -1
  24. package/dist/commands/command/command-execution.js +24 -62
  25. package/dist/commands/feedback-cli.js +0 -1
  26. package/dist/commands/health/accept-rate.js +6 -0
  27. package/dist/commands/health/archive-usage.js +92 -0
  28. package/dist/commands/health/checks.js +83 -74
  29. package/dist/commands/health/config-skew.js +38 -0
  30. package/dist/commands/health/data-dir-usage.js +25 -13
  31. package/dist/commands/health/egress.js +54 -0
  32. package/dist/commands/health/html-report.js +1 -42
  33. package/dist/commands/health/improve-metrics.js +136 -591
  34. package/dist/commands/health/md-report.js +1 -6
  35. package/dist/commands/health/plugin-staleness.js +53 -3
  36. package/dist/commands/health/renderers.js +12 -4
  37. package/dist/commands/health/report-view-model.js +14 -120
  38. package/dist/commands/health/types-improve.js +4 -19
  39. package/dist/commands/health/windows.js +64 -74
  40. package/dist/commands/health.js +145 -143
  41. package/dist/commands/improve/consolidate/chunking.js +26 -117
  42. package/dist/commands/improve/consolidate/continuity-check.js +137 -0
  43. package/dist/commands/improve/consolidate/pair-pass.js +791 -0
  44. package/dist/commands/improve/consolidate/sanitize.js +54 -149
  45. package/dist/commands/improve/consolidate.js +589 -1127
  46. package/dist/commands/improve/content-hash.js +16 -24
  47. package/dist/commands/improve/distill/content-repair.js +18 -100
  48. package/dist/commands/improve/distill-guards.js +20 -81
  49. package/dist/commands/improve/distill-promotion-policy.js +23 -243
  50. package/dist/commands/improve/distill.js +608 -1041
  51. package/dist/commands/improve/eligibility.js +126 -390
  52. package/dist/commands/improve/execution.js +8 -10
  53. package/dist/commands/improve/extract-prompt.js +1 -2
  54. package/dist/commands/improve/extract.js +487 -1046
  55. package/dist/commands/improve/feedback-valence.js +0 -25
  56. package/dist/commands/improve/improve-cli.js +75 -169
  57. package/dist/commands/improve/improve-result-file.js +10 -66
  58. package/dist/commands/improve/improve-strategies.js +52 -4
  59. package/dist/commands/improve/improve-usage-report.js +18 -64
  60. package/dist/commands/improve/improve.js +480 -1074
  61. package/dist/commands/improve/ledger.js +119 -0
  62. package/dist/commands/improve/locks.js +2 -8
  63. package/dist/commands/improve/loop-stages.js +415 -1073
  64. package/dist/commands/improve/memory/derived-ref.js +12 -77
  65. package/dist/commands/improve/memory/memory-belief.js +16 -118
  66. package/dist/commands/improve/memory/memory-improve.js +266 -14
  67. package/dist/commands/improve/outcome-loop.js +28 -156
  68. package/dist/commands/improve/planner.js +5 -15
  69. package/dist/commands/improve/preparation.js +779 -2319
  70. package/dist/commands/improve/proactive-maintenance.js +34 -101
  71. package/dist/commands/improve/reflect-noise.js +104 -280
  72. package/dist/commands/improve/reflect.js +642 -1353
  73. package/dist/commands/improve/retrieval-gate.js +127 -0
  74. package/dist/commands/improve/retrieval-scope.js +92 -0
  75. package/dist/commands/improve/salience.js +41 -240
  76. package/dist/commands/improve/session-asset.js +19 -100
  77. package/dist/commands/improve/stage.js +322 -0
  78. package/dist/commands/lint/base-linter.js +37 -15
  79. package/dist/commands/proposal/drain.js +261 -578
  80. package/dist/commands/proposal/proposal-cli.js +19 -20
  81. package/dist/commands/proposal/proposal-types.js +31 -24
  82. package/dist/commands/proposal/proposal.js +38 -8
  83. package/dist/commands/proposal/propose.js +134 -160
  84. package/dist/commands/proposal/repository.js +1097 -1394
  85. package/dist/commands/proposal/validators/proposal-quality-validators.js +71 -174
  86. package/dist/commands/proposal/validators/proposal-validators.js +1 -1
  87. package/dist/commands/proposal/validators/proposals.js +22 -89
  88. package/dist/commands/read/curate.js +105 -462
  89. package/dist/commands/read/knowledge.js +3 -2
  90. package/dist/commands/read/search-cli.js +16 -33
  91. package/dist/commands/read/search.js +17 -23
  92. package/dist/commands/read/show.js +57 -108
  93. package/dist/commands/sources/bundle-cli.js +25 -2
  94. package/dist/commands/sources/bundle-config-ops.js +4 -0
  95. package/dist/commands/sources/dangerous-env-audit.js +1 -2
  96. package/dist/commands/sources/info.js +127 -29
  97. package/dist/commands/sources/installed-stashes.js +197 -746
  98. package/dist/commands/sources/schema-repair.js +98 -129
  99. package/dist/commands/sources/source-add.js +62 -12
  100. package/dist/commands/sources/source-manage.js +9 -2
  101. package/dist/commands/sources/stash-cli.js +24 -4
  102. package/dist/commands/tasks/explain.js +10 -13
  103. package/dist/commands/tasks/tasks-cli.js +12 -13
  104. package/dist/commands/tasks/tasks.js +350 -936
  105. package/dist/commands/tasks/validate.js +26 -24
  106. package/dist/commands/workflow/plan.js +22 -29
  107. package/dist/commands/workflow-cli.js +4 -4
  108. package/dist/core/adapter/adapters/akm-adapter.js +2 -1
  109. package/dist/core/adapter/adapters/akm-lint.js +2 -3
  110. package/dist/core/adapter/adapters/akm-metadata.js +42 -12
  111. package/dist/core/adapter/adapters/akm-task-adapter.js +29 -8
  112. package/dist/core/adapter/adapters/akm-workflow-adapter.js +1 -1
  113. package/dist/core/adapter/execution-source.js +17 -29
  114. package/dist/core/asset/asset-placement.js +4 -13
  115. package/dist/core/asset/frontmatter.js +106 -1
  116. package/dist/core/asset/resolve-ref.js +1 -1
  117. package/dist/core/bundle-id.js +42 -5
  118. package/dist/core/bundle-rename.js +285 -0
  119. package/dist/core/config/config-io.js +1 -2
  120. package/dist/core/config/config-schema.js +9 -34
  121. package/dist/core/config/config-walker.js +1 -1
  122. package/dist/core/config/config.js +184 -111
  123. package/dist/core/config/engine-semantics.js +0 -2
  124. package/dist/core/config/legacy-source-shape-shim.js +38 -9
  125. package/dist/core/config/schema/embedding.js +20 -5
  126. package/dist/core/config/schema/engines.js +5 -0
  127. package/dist/core/config/schema/execution.js +1 -1
  128. package/dist/core/config/schema/experimental.js +1 -1
  129. package/dist/core/config/schema/improve-processes.js +54 -125
  130. package/dist/core/config/schema/improve.js +4 -42
  131. package/dist/core/config/schema/index-config.js +9 -48
  132. package/dist/core/config/schema/scheduler.js +12 -12
  133. package/dist/core/config/schema/search.js +6 -22
  134. package/dist/core/env-secret-ref.js +0 -1
  135. package/dist/core/errors.js +8 -9
  136. package/dist/core/file-change.js +13 -5
  137. package/dist/core/file-lock.js +76 -173
  138. package/dist/core/improve-result.js +35 -7
  139. package/dist/core/improve-types.js +0 -1
  140. package/dist/core/logs-db.js +2 -2
  141. package/dist/core/loopback.js +7 -12
  142. package/dist/core/non-task-input.js +20 -0
  143. package/dist/core/parse.js +13 -16
  144. package/dist/core/paths.js +0 -24
  145. package/dist/core/redaction.js +109 -2
  146. package/dist/core/run-lock.js +2 -5
  147. package/dist/core/spawn-env.js +1 -1
  148. package/dist/core/state/migrations.js +123 -61
  149. package/dist/core/state-db-scope.js +2 -4
  150. package/dist/core/state-db.js +126 -692
  151. package/dist/core/time.js +0 -20
  152. package/dist/core/type-presentation.js +1 -9
  153. package/dist/core/write-source.js +294 -1005
  154. package/dist/execution/input-contract.js +1 -1
  155. package/dist/execution/resolved-request.js +135 -689
  156. package/dist/execution/source.js +63 -257
  157. package/dist/execution/target-ref.js +1 -1
  158. package/dist/indexer/bundle-identity-guard.js +2 -2
  159. package/dist/indexer/db/llm-cache.js +2 -2
  160. package/dist/indexer/ensure-index.js +77 -73
  161. package/dist/indexer/index-rebuild-lock.js +3 -11
  162. package/dist/indexer/index-writer-lock.js +8 -17
  163. package/dist/indexer/index-written-assets.js +141 -154
  164. package/dist/indexer/indexer.js +400 -1124
  165. package/dist/indexer/links/declared-links.js +90 -0
  166. package/dist/indexer/materialize-embeddings.js +60 -397
  167. package/dist/indexer/passes/memory-inference.js +96 -90
  168. package/dist/indexer/passes/metadata.js +132 -219
  169. package/dist/indexer/read-preflight.js +0 -7
  170. package/dist/indexer/scan/doc-to-entry.js +2 -3
  171. package/dist/indexer/scan/drain-dir.js +1 -1
  172. package/dist/indexer/search/db-search.js +190 -590
  173. package/dist/indexer/search/fts-query.js +30 -41
  174. package/dist/indexer/search/ranking.js +28 -154
  175. package/dist/indexer/search/search-attribution.js +12 -32
  176. package/dist/indexer/search/search-fields.js +11 -15
  177. package/dist/indexer/search/search-hit-enrichers.js +54 -85
  178. package/dist/indexer/search/search-source.js +1 -4
  179. package/dist/indexer/usage/usage-events.js +36 -7
  180. package/dist/indexer/walk/walker.js +3 -4
  181. package/dist/integrations/agent/engine-fallback.js +23 -40
  182. package/dist/integrations/agent/engine-resolution.js +93 -183
  183. package/dist/integrations/agent/execution.js +507 -0
  184. package/dist/integrations/agent/model-map.js +28 -156
  185. package/dist/integrations/agent/request-lowering.js +66 -141
  186. package/dist/integrations/agent/runner-dispatch.js +143 -321
  187. package/dist/integrations/agent/runner.js +54 -14
  188. package/dist/integrations/lockfile.js +53 -101
  189. package/dist/llm/client.js +18 -6
  190. package/dist/llm/embedders/deterministic.js +2 -3
  191. package/dist/llm/embedders/profile.js +71 -0
  192. package/dist/llm/embedders/remote.js +11 -17
  193. package/dist/llm/feature-gate.js +0 -8
  194. package/dist/llm/index-passes.js +3 -5
  195. package/dist/llm/memory-infer.js +1 -2
  196. package/dist/llm/structured-call.js +5 -24
  197. package/dist/output/generic-render.js +23 -11
  198. package/dist/output/html-render.js +13 -10
  199. package/dist/output/render-registry.js +3 -32
  200. package/dist/output/shapes/helpers.js +25 -38
  201. package/dist/output/shapes/passthrough.js +1 -9
  202. package/dist/{indexer/graph/graph-types.js → output/text/bundle-rename.js} +4 -1
  203. package/dist/output/text/command-format.js +69 -31
  204. package/dist/output/text/helpers.js +1 -1
  205. package/dist/output/text/migrate.js +5 -14
  206. package/dist/output/text/proposal-format.js +48 -3
  207. package/dist/output/text/show-format.js +13 -17
  208. package/dist/output/text/workflow-format.js +0 -32
  209. package/dist/output/text.js +2 -0
  210. package/dist/registry/factory.js +4 -19
  211. package/dist/registry/network.js +66 -220
  212. package/dist/registry/providers/index.js +0 -2
  213. package/dist/registry/providers/skills-sh.js +3 -14
  214. package/dist/registry/providers/static-index.js +24 -26
  215. package/dist/registry/resolve.js +55 -131
  216. package/dist/scripts/akm-migrate-node.js +42948 -92369
  217. package/dist/scripts/akm-migrate.js +42935 -92354
  218. package/dist/setup/registry-stash-loader.js +4 -13
  219. package/dist/setup/semantic-assets.js +3 -44
  220. package/dist/setup/setup.js +1 -1
  221. package/dist/setup/steps/connection.js +5 -6
  222. package/dist/setup/steps/platforms.js +2 -2
  223. package/dist/setup/steps/tasks.js +25 -15
  224. package/dist/sources/provider-factory.js +17 -18
  225. package/dist/sources/providers/filesystem.js +2 -3
  226. package/dist/sources/providers/git-install.js +7 -1
  227. package/dist/sources/providers/git-provider.js +0 -3
  228. package/dist/sources/providers/git-stash.js +83 -21
  229. package/dist/sources/providers/npm.js +2 -4
  230. package/dist/sources/providers/provider-utils.js +5 -10
  231. package/dist/sources/providers/website.js +0 -2
  232. package/dist/sources/snapshot-fetchers/website-ingest.js +1 -1
  233. package/dist/sources/website-url.js +2 -2
  234. package/dist/storage/database.js +9 -35
  235. package/dist/storage/repositories/improve-ledger-repository.js +209 -0
  236. package/dist/storage/repositories/index-connection.js +39 -72
  237. package/dist/storage/repositories/index-entries-repository.js +131 -129
  238. package/dist/storage/repositories/index-entry-mapper.js +1 -2
  239. package/dist/storage/repositories/index-entry-schema.js +101 -268
  240. package/dist/storage/repositories/index-fts-repository.js +86 -256
  241. package/dist/storage/repositories/index-links-repository.js +143 -0
  242. package/dist/storage/repositories/index-llm-cache-repository.js +7 -9
  243. package/dist/storage/repositories/index-meta-repository.js +6 -4
  244. package/dist/storage/repositories/index-schema.js +257 -325
  245. package/dist/storage/repositories/index-utility-repository.js +8 -29
  246. package/dist/storage/repositories/index-vec-repository.js +133 -414
  247. package/dist/storage/repositories/outcome-repository.js +2 -1
  248. package/dist/storage/repositories/proposals-repository.js +104 -1
  249. package/dist/storage/repositories/registry-index-cache-repository.js +100 -0
  250. package/dist/storage/repositories/salience-repository.js +1 -19
  251. package/dist/storage/repositories/task-history-repository.js +26 -4
  252. package/dist/storage/repositories/workflow-runs-repository.js +53 -244
  253. package/dist/storage/sqlite-migrations.js +136 -0
  254. package/dist/storage/sqlite-pragmas.js +11 -9
  255. package/dist/storage/sqlite-transaction.js +170 -0
  256. package/dist/storage/state-db-integrity.js +130 -0
  257. package/dist/tasks/activation-config.js +134 -62
  258. package/dist/tasks/backends/cron.js +191 -302
  259. package/dist/tasks/backends/exec-utils.js +2 -5
  260. package/dist/tasks/backends/launchd.js +141 -748
  261. package/dist/tasks/backends/schtasks.js +119 -623
  262. package/dist/tasks/prepare/prepare-support.js +5 -15
  263. package/dist/tasks/prepare/prepare.js +0 -2
  264. package/dist/tasks/resolve-akm-bin.js +20 -79
  265. package/dist/tasks/run/attempt-lifecycle.js +0 -1
  266. package/dist/tasks/run/load-task.js +1 -1
  267. package/dist/tasks/scheduler-binding.js +20 -238
  268. package/dist/tasks/scheduler-invocation.js +136 -244
  269. package/dist/tasks/scheduler-lock.js +53 -0
  270. package/dist/tasks/scheduler-sync.js +368 -679
  271. package/dist/tasks/source/parse-task-source.js +55 -9
  272. package/dist/tasks/source/task-source-v3-frozen.js +3 -4
  273. package/dist/tasks/source/task-to-v4.js +464 -88
  274. package/dist/workflows/authoring/authoring.js +3 -12
  275. package/dist/workflows/compile.js +211 -0
  276. package/dist/workflows/concurrency-policy.js +13 -74
  277. package/dist/workflows/exec/child-invocation.js +3 -17
  278. package/dist/workflows/exec/child-workflow.js +32 -141
  279. package/dist/workflows/exec/dispatch-redaction.js +13 -53
  280. package/dist/workflows/exec/environment.js +98 -0
  281. package/dist/workflows/exec/exec-unit.js +33 -140
  282. package/dist/workflows/exec/frozen-judge.js +7 -59
  283. package/dist/workflows/exec/native-executor.js +82 -341
  284. package/dist/workflows/exec/param-secrets.js +29 -47
  285. package/dist/workflows/exec/run-workflow.js +154 -387
  286. package/dist/workflows/exec/scheduler.js +9 -36
  287. package/dist/workflows/exec/step-work.js +127 -430
  288. package/dist/workflows/exec/unit-dispatch.js +11 -63
  289. package/dist/workflows/exec/unit-writer.js +8 -52
  290. package/dist/workflows/exec/worktree.js +39 -273
  291. package/dist/workflows/freeze/child-output-references.js +4 -15
  292. package/dist/workflows/freeze/environment.js +99 -92
  293. package/dist/workflows/freeze/freeze.js +172 -0
  294. package/dist/workflows/freeze/step-values.js +19 -21
  295. package/dist/workflows/freeze/targets/child-workflow.js +23 -92
  296. package/dist/workflows/freeze/targets/command.js +10 -33
  297. package/dist/workflows/freeze/targets/script.js +5 -12
  298. package/dist/workflows/freeze/targets/shell.js +3 -6
  299. package/dist/workflows/freeze/targets/task.js +25 -80
  300. package/dist/workflows/freeze/task-bindings.js +20 -67
  301. package/dist/workflows/{source-ir/github-yaml.js → github-yaml.js} +88 -206
  302. package/dist/workflows/ir/params.js +6 -51
  303. package/dist/workflows/ir/plan-hash.js +2 -34
  304. package/dist/workflows/parser.js +140 -43
  305. package/dist/{commands/improve/consolidate/types.js → workflows/plan.js} +2 -1
  306. package/dist/workflows/renderer.js +36 -69
  307. package/dist/workflows/resource-limits.js +12 -120
  308. package/dist/workflows/runtime/agent-identity.js +8 -40
  309. package/dist/workflows/runtime/run-outputs.js +3 -6
  310. package/dist/workflows/runtime/run-plan.js +316 -0
  311. package/dist/workflows/runtime/runs.js +48 -200
  312. package/dist/workflows/runtime/workflow-asset-loader.js +24 -57
  313. package/dist/workflows/{source-ir/semantics.js → source-semantics.js} +16 -20
  314. package/dist/workflows/validate-summary.js +2 -7
  315. package/docs/integration/bundling-akm.md +49 -42
  316. package/docs/migration/README.md +1 -0
  317. package/docs/migration/release-notes/0.9.17.md +43 -0
  318. package/docs/migration/v0.9.1-to-v0.9.2.md +23 -7
  319. package/docs/reference/cli.md +232 -135
  320. package/docs/reference/configuration.md +71 -57
  321. package/docs/reference/data-and-telemetry.md +20 -21
  322. package/docs/reference/tasks.md +105 -39
  323. package/docs/reference/workflow-schema.md +14 -18
  324. package/docs/reference/workflows.md +6 -9
  325. package/package.json +1 -1
  326. package/schemas/akm-config.json +115 -738
  327. package/schemas/akm-workflow.json +1 -0
  328. package/dist/assets/improve-strategies/graph-refresh.json +0 -15
  329. package/dist/assets/prompts/contradiction-judge.md +0 -33
  330. package/dist/assets/prompts/graph-extract-system.md +0 -1
  331. package/dist/assets/prompts/graph-extract-user-prompt.md +0 -35
  332. package/dist/assets/prompts/metadata-enhance-system.md +0 -1
  333. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +0 -4
  334. package/dist/commands/health/advisories.js +0 -150
  335. package/dist/commands/health/metrics.js +0 -329
  336. package/dist/commands/health/surfaces.js +0 -102
  337. package/dist/commands/improve/anti-collapse.js +0 -83
  338. package/dist/commands/improve/collapse-detector.js +0 -432
  339. package/dist/commands/improve/consolidate/eligibility.js +0 -48
  340. package/dist/commands/improve/consolidate/merge.js +0 -149
  341. package/dist/commands/improve/distill/promote-memory.js +0 -291
  342. package/dist/commands/improve/distill/quality-gate.js +0 -337
  343. package/dist/commands/improve/eval-cases.js +0 -52
  344. package/dist/commands/improve/memory/memory-contradiction-detect.js +0 -291
  345. package/dist/commands/improve/proposal-envelope.js +0 -31
  346. package/dist/commands/improve/run-context.js +0 -123
  347. package/dist/commands/improve/shared.js +0 -31
  348. package/dist/commands/improve/source-identity.js +0 -28
  349. package/dist/commands/improve/triage.js +0 -96
  350. package/dist/commands/proposal/drain-policies.js +0 -151
  351. package/dist/commands/sources/update-transaction.js +0 -220
  352. package/dist/core/action-contributors.js +0 -28
  353. package/dist/core/config/config-version-shim.js +0 -101
  354. package/dist/core/fs-txn.js +0 -405
  355. package/dist/core/lexical-score.js +0 -25
  356. package/dist/core/maintenance-barrier.js +0 -167
  357. package/dist/execution/executable-identity.js +0 -105
  358. package/dist/execution/guarded-source.js +0 -427
  359. package/dist/indexer/db/graph-db.js +0 -444
  360. package/dist/indexer/graph/graph-boost.js +0 -427
  361. package/dist/indexer/graph/graph-dedup.js +0 -95
  362. package/dist/indexer/graph/graph-extraction.js +0 -1108
  363. package/dist/indexer/search/name-match.js +0 -35
  364. package/dist/indexer/search/ranking-contributors.js +0 -515
  365. package/dist/indexer/search/ranking-types.js +0 -4
  366. package/dist/indexer/walk/project-context.js +0 -192
  367. package/dist/integrations/agent/execution-cascade.js +0 -566
  368. package/dist/integrations/agent/execution-definitions.js +0 -202
  369. package/dist/integrations/agent/execution-lowering.js +0 -841
  370. package/dist/integrations/agent/execution-preparation.js +0 -98
  371. package/dist/integrations/agent/inline-execution.js +0 -74
  372. package/dist/llm/graph-extract.js +0 -728
  373. package/dist/llm/metadata-enhance.js +0 -96
  374. package/dist/registry/create-provider-registry.js +0 -29
  375. package/dist/registry/pinned-request-helper.js +0 -247
  376. package/dist/registry/pinned-transport.js +0 -717
  377. package/dist/sources/providers/index.js +0 -14
  378. package/dist/storage/engines/sqlite-migrations.js +0 -271
  379. package/dist/storage/repositories/canaries-repository.js +0 -107
  380. package/dist/storage/repositories/embedding-salvage-repository.js +0 -184
  381. package/dist/storage/repositories/registry-cache.js +0 -113
  382. package/dist/tasks/scheduler-sync-preview.js +0 -52
  383. package/dist/tasks/source/task-to-v3.js +0 -507
  384. package/dist/workflows/freeze/resolve-steps.js +0 -86
  385. package/dist/workflows/freeze/source-freeze.js +0 -64
  386. package/dist/workflows/ir/compile.js +0 -321
  387. package/dist/workflows/ir/environment-v4.js +0 -330
  388. package/dist/workflows/ir/freeze-v4.js +0 -153
  389. package/dist/workflows/ir/schema-v4.js +0 -745
  390. package/dist/workflows/ir/schema.js +0 -354
  391. package/dist/workflows/program/schema.js +0 -77
  392. package/dist/workflows/runtime/checkin.js +0 -57
  393. package/dist/workflows/runtime/plan-classifier.js +0 -196
  394. package/dist/workflows/runtime/unit-checkin.js +0 -45
  395. package/dist/workflows/runtime/unit-phases.js +0 -20
  396. package/dist/workflows/schema.js +0 -4
  397. package/dist/workflows/source-ir/compile.js +0 -200
  398. package/dist/workflows/source-ir/program.js +0 -50
  399. package/dist/workflows/source-ir/result.js +0 -26
  400. package/dist/workflows/source-ir/schema.js +0 -786
  401. package/dist/workflows/source-ir/triggers.js +0 -79
  402. package/dist/workflows/source-ir/uses.js +0 -40
  403. package/dist/workflows/validator.js +0 -60
@@ -1,96 +0,0 @@
1
- // This Source Code Form is subject to the terms of the Mozilla Public
2
- // License, v. 2.0. If a copy of the MPL was not distributed with this
3
- // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- /**
5
- * LLM-driven metadata enhancement for stash entries.
6
- *
7
- * Keeps the higher-level workflow for improving descriptions, tags, and search
8
- * hints separate from the low-level transport client.
9
- */
10
- import metadataEnhanceSystemPrompt from "../assets/prompts/metadata-enhance-system.md" with { type: "text" };
11
- import { parseJsonResponse } from "../core/parse.js";
12
- import { callStructured } from "./structured-call.js";
13
- const SYSTEM_PROMPT = metadataEnhanceSystemPrompt;
14
- /**
15
- * Use an LLM to enhance a stash entry's metadata: improve description,
16
- * generate searchHints, and suggest tags.
17
- *
18
- * When `akmConfig` is provided, routes through
19
- * `tryLlmFeature("metadata_enhance", ...)` so the feature gate is honoured: a
20
- * closed gate yields `{ status: "skipped" }` and a thrown/timed-out call yields
21
- * `{ status: "failed" }` — neither is reported as an enrichment. When
22
- * `akmConfig` is `undefined` the gate is bypassed entirely: the LLM call runs
23
- * unconditionally and errors propagate to direct callers such as tests.
24
- */
25
- export async function enhanceMetadata(runner, entry, fileContent, signal, akmConfig, onNotices, lease) {
26
- const contextParts = [`Name: ${entry.name}`, `Type: ${entry.type}`];
27
- if (entry.description)
28
- contextParts.push(`Current description: ${entry.description}`);
29
- if (entry.tags?.length)
30
- contextParts.push(`Current tags: ${entry.tags.join(", ")}`);
31
- if (fileContent) {
32
- // Limit content to first 4000 chars to stay within token limits (matches other modules)
33
- const truncated = fileContent.length > 4000 ? `${fileContent.slice(0, 4000)}\n... (truncated)` : fileContent;
34
- contextParts.push(`File content:\n${truncated}`);
35
- }
36
- const userPrompt = `${contextParts.join("\n")}
37
-
38
- Generate improved metadata for this ${entry.type}. Return JSON with these fields:
39
- - "description": a clear, concise one-sentence description of what this does
40
- - "searchHints": an array of 3-6 natural language task phrases an agent might use to find this (e.g. "deploy a docker container", "run database migrations")
41
- - "tags": an array of 3-8 relevant keyword tags
42
-
43
- Return ONLY the JSON object, no explanation.`;
44
- // `parse` owns the raw response: the `!raw`/unparseable case ⇒ empty metadata
45
- // (still a genuine success), plus the description/searchHints/tags shaping.
46
- // `enhanceMetadata` never warns and never bumps telemetry — `onError` (gated
47
- // path only) reports `failed` WITHOUT warning, carrying the message so the
48
- // caller can surface it. The ungated path (akmConfig === undefined) propagates
49
- // errors via callStructured.
50
- let timedOut = false;
51
- const outcome = await callStructured({
52
- feature: "metadata_enhance",
53
- akmConfig,
54
- runner,
55
- ...(lease ? { lease } : {}),
56
- messages: [
57
- { role: "system", content: SYSTEM_PROMPT },
58
- { role: "user", content: userPrompt },
59
- ],
60
- request: { signal, timeoutMs: runner.timeoutMs },
61
- onNotices,
62
- parse: (raw) => {
63
- const parsed = raw ? parseJsonResponse(raw) : undefined;
64
- const metadata = {};
65
- if (parsed) {
66
- if (typeof parsed.description === "string" && parsed.description) {
67
- metadata.description = parsed.description;
68
- }
69
- if (Array.isArray(parsed.searchHints)) {
70
- metadata.searchHints = parsed.searchHints
71
- .filter((s) => typeof s === "string" && s.trim().length > 0)
72
- .slice(0, 8);
73
- }
74
- if (Array.isArray(parsed.tags)) {
75
- metadata.tags = parsed.tags
76
- .filter((s) => typeof s === "string" && s.trim().length > 0)
77
- .slice(0, 10);
78
- }
79
- }
80
- return { status: "enriched", metadata };
81
- },
82
- onError: (_cls, err) => ({ status: "failed", error: err instanceof Error ? err.message : String(err) }),
83
- fallback: { status: "skipped" },
84
- // The seam returns the `skipped` fallback for a closed gate AND for a
85
- // wrapper-level timeout. Record the timeout so we can reclassify it below —
86
- // a timed-out call is a failure, not a silent skip.
87
- onFallback: (event) => {
88
- if (event.reason === "timeout")
89
- timedOut = true;
90
- },
91
- });
92
- if (outcome.status === "skipped" && timedOut) {
93
- return { status: "failed", error: "metadata_enhance timed out" };
94
- }
95
- return outcome;
96
- }
@@ -1,29 +0,0 @@
1
- // This Source Code Form is subject to the terms of the Mozilla Public
2
- // License, v. 2.0. If a copy of the MPL was not distributed with this
3
- // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- /**
5
- * Generic factory-map utility.
6
- *
7
- * Creates a lightweight registry that maps string keys to factory functions.
8
- * Both registry/factory.ts (registry discovery) and sources/provider-factory.ts
9
- * (source providers) are built on this utility.
10
- */
11
- export function createProviderRegistry() {
12
- const map = new Map();
13
- return {
14
- register(type, factory) {
15
- map.set(type, factory);
16
- },
17
- resolve(type) {
18
- return map.get(type) ?? null;
19
- },
20
- /** Removes a registration. No-op if `type` was never registered. */
21
- unregister(type) {
22
- map.delete(type);
23
- },
24
- /** Snapshot of all registered keys. Iteration order matches insertion order. */
25
- list() {
26
- return [...map.keys()];
27
- },
28
- };
29
- }
@@ -1,247 +0,0 @@
1
- // This Source Code Form is subject to the terms of the Mozilla Public
2
- // License, v. 2.0. If a copy of the MPL was not distributed with this
3
- // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- /** Parse and validate the private stdin request before any socket is opened. */
5
- async function readNodePinnedHelperRequest(isIP) {
6
- const MAX_PRELUDE_BYTES = 64 * 1024;
7
- const iterator = process.stdin[Symbol.asyncIterator]();
8
- let buffered = Buffer.alloc(0);
9
- const readExact = async (length) => {
10
- while (buffered.byteLength < length) {
11
- const next = await iterator.next();
12
- if (next.done)
13
- throw new Error("Registry helper input ended before the request prelude was complete");
14
- buffered = Buffer.concat([buffered, Buffer.from(next.value)]);
15
- }
16
- const result = buffered.subarray(0, length);
17
- buffered = buffered.subarray(length);
18
- return result;
19
- };
20
- const preludeLength = (await readExact(4)).readUInt32BE(0);
21
- if (preludeLength === 0 || preludeLength > MAX_PRELUDE_BYTES) {
22
- throw new Error("Registry helper request prelude exceeds its protocol limit");
23
- }
24
- const raw = JSON.parse((await readExact(preludeLength)).toString("utf8"));
25
- if (typeof raw.url !== "string" || typeof raw.address !== "string") {
26
- throw new Error("Registry helper request prelude is invalid");
27
- }
28
- const url = new URL(raw.url);
29
- if ((url.protocol !== "http:" && url.protocol !== "https:") || url.username || url.password) {
30
- throw new Error("Registry helper accepts only credential-free HTTP(S) URLs");
31
- }
32
- const addressFamily = isIP(raw.address);
33
- if (addressFamily === 0)
34
- throw new Error("Registry helper requires a numeric pinned address");
35
- if (typeof raw.timeoutMs !== "number" || !Number.isSafeInteger(raw.timeoutMs) || raw.timeoutMs <= 0) {
36
- throw new Error("Registry helper timeout is invalid");
37
- }
38
- if (!Array.isArray(raw.headers) || raw.headers.length > 256) {
39
- throw new Error("Registry helper headers are invalid");
40
- }
41
- const headers = {};
42
- for (const pair of raw.headers) {
43
- if (!Array.isArray(pair) ||
44
- pair.length !== 2 ||
45
- typeof pair[0] !== "string" ||
46
- typeof pair[1] !== "string" ||
47
- pair[0].length > 256 ||
48
- pair[1].length > 16_384) {
49
- throw new Error("Registry helper header entry is invalid");
50
- }
51
- headers[pair[0].toLowerCase()] = pair[1];
52
- }
53
- for (const name of [
54
- "connection",
55
- "keep-alive",
56
- "proxy-authorization",
57
- "proxy-connection",
58
- "te",
59
- "trailer",
60
- "transfer-encoding",
61
- "upgrade",
62
- ]) {
63
- delete headers[name];
64
- }
65
- headers.host = url.host;
66
- return {
67
- addressFamily: addressFamily,
68
- bodyPresent: raw.bodyPresent === true,
69
- headers,
70
- initialBody: buffered,
71
- iterator,
72
- method: typeof raw.method === "string" ? raw.method.toUpperCase() : "GET",
73
- pinnedAddress: raw.address,
74
- timeoutMs: raw.timeoutMs,
75
- url,
76
- };
77
- }
78
- /**
79
- * The body of the one-request Node helper used by Bun's registry transport.
80
- * Its parser is passed explicitly when the parent serializes both functions.
81
- */
82
- export async function nodePinnedRequestHelperMain(readRequest, http, https, isIP) {
83
- const MAX_FRAME_BYTES = 1024 * 1024;
84
- const FRAME_PRELUDE = 0;
85
- const FRAME_BODY = 1;
86
- const FRAME_END = 2;
87
- const FRAME_ERROR = 3;
88
- const writeBuffer = async (value) => {
89
- await new Promise((resolve, reject) => {
90
- process.stdout.write(value, (error) => (error ? reject(error) : resolve()));
91
- });
92
- };
93
- const writeFrame = async (type, payload = new Uint8Array()) => {
94
- if (payload.byteLength > MAX_FRAME_BYTES && type !== FRAME_BODY) {
95
- throw new Error("Registry helper frame exceeds its protocol limit");
96
- }
97
- if (type === FRAME_BODY && payload.byteLength > MAX_FRAME_BYTES) {
98
- for (let offset = 0; offset < payload.byteLength; offset += MAX_FRAME_BYTES) {
99
- await writeFrame(type, payload.subarray(offset, Math.min(payload.byteLength, offset + MAX_FRAME_BYTES)));
100
- }
101
- return;
102
- }
103
- const header = Buffer.allocUnsafe(5);
104
- header[0] = type;
105
- header.writeUInt32BE(payload.byteLength, 1);
106
- await writeBuffer(header);
107
- if (payload.byteLength > 0)
108
- await writeBuffer(payload);
109
- };
110
- const errorPayload = (error) => {
111
- const candidate = error;
112
- return Buffer.from(JSON.stringify({
113
- name: typeof candidate?.name === "string" ? candidate.name.slice(0, 128) : "Error",
114
- message: typeof candidate?.message === "string" ? candidate.message.slice(0, 8_192) : String(error).slice(0, 8_192),
115
- code: typeof candidate?.code === "string" ? candidate.code.slice(0, 128) : undefined,
116
- }));
117
- };
118
- try {
119
- const nodeMajor = Number.parseInt(process.versions.node.split(".")[0] ?? "0", 10);
120
- if (!Number.isInteger(nodeMajor) || nodeMajor < 22) {
121
- throw new Error(`The pinned registry helper requires Node.js >= 22; found ${process.versions.node}`);
122
- }
123
- const { addressFamily, bodyPresent, headers, initialBody, iterator, method, pinnedAddress, timeoutMs, url } = await readRequest(isIP);
124
- const hostname = url.hostname.startsWith("[") && url.hostname.endsWith("]") ? url.hostname.slice(1, -1) : url.hostname;
125
- const lookup = (_hostname, options, callback) => {
126
- if (typeof options === "object" && options !== null && "all" in options && options.all === true) {
127
- callback(null, [{ address: pinnedAddress, family: addressFamily }]);
128
- }
129
- else {
130
- callback(null, pinnedAddress, addressFamily);
131
- }
132
- };
133
- const requestOptions = {
134
- protocol: url.protocol,
135
- hostname,
136
- port: url.port || undefined,
137
- path: `${url.pathname}${url.search}`,
138
- method,
139
- headers,
140
- lookup,
141
- // One helper owns exactly one fresh connection. It never pools a socket
142
- // selected for an earlier DNS answer.
143
- agent: false,
144
- ...(url.protocol === "https:" && isIP(hostname) === 0 ? { servername: hostname } : {}),
145
- };
146
- let responseStarted = false;
147
- let requestFinished = false;
148
- let request;
149
- const responseDone = new Promise((resolve, reject) => {
150
- const requestFn = url.protocol === "https:" ? https.request : http.request;
151
- request = requestFn(requestOptions, async (response) => {
152
- responseStarted = true;
153
- try {
154
- await writeFrame(FRAME_PRELUDE, Buffer.from(JSON.stringify({
155
- status: response.statusCode ?? 500,
156
- statusText: response.statusMessage ?? "",
157
- rawHeaders: response.rawHeaders,
158
- })));
159
- for await (const chunk of response) {
160
- await writeFrame(FRAME_BODY, Buffer.from(chunk));
161
- }
162
- await writeFrame(FRAME_END);
163
- resolve();
164
- }
165
- catch (error) {
166
- reject(error);
167
- }
168
- });
169
- const headerTimer = setTimeout(() => {
170
- request?.destroy(new Error(`Registry request timed out after ${timeoutMs}ms while awaiting response headers`));
171
- }, timeoutMs);
172
- request.once("response", () => clearTimeout(headerTimer));
173
- request.once("error", (error) => {
174
- clearTimeout(headerTimer);
175
- if (!responseStarted)
176
- reject(error);
177
- });
178
- });
179
- const writeRequestChunk = async (chunk) => {
180
- if (!request || request.destroyed)
181
- throw new Error("Registry helper request closed while streaming its body");
182
- const activeRequest = request;
183
- if (activeRequest.write(chunk))
184
- return;
185
- await new Promise((resolve, reject) => {
186
- const onDrain = () => {
187
- cleanup();
188
- resolve();
189
- };
190
- const onError = (error) => {
191
- cleanup();
192
- reject(error);
193
- };
194
- const cleanup = () => {
195
- activeRequest.off("drain", onDrain);
196
- activeRequest.off("error", onError);
197
- };
198
- activeRequest.once("drain", onDrain);
199
- activeRequest.once("error", onError);
200
- });
201
- };
202
- const bodyDone = (async () => {
203
- if (!request)
204
- throw new Error("Registry helper request was not initialized");
205
- if (bodyPresent) {
206
- if (initialBody.byteLength > 0) {
207
- await writeRequestChunk(initialBody);
208
- }
209
- while (true) {
210
- const next = await iterator.next();
211
- if (next.done)
212
- break;
213
- await writeRequestChunk(Buffer.from(next.value));
214
- }
215
- }
216
- requestFinished = true;
217
- request.end();
218
- })();
219
- try {
220
- await Promise.all([responseDone, bodyDone]);
221
- }
222
- catch (error) {
223
- if (!requestFinished && !responseStarted)
224
- request?.destroy(error);
225
- throw error;
226
- }
227
- }
228
- catch (error) {
229
- try {
230
- await writeFrame(FRAME_ERROR, errorPayload(error));
231
- }
232
- catch {
233
- // The parent also treats an unframed EOF as a transport failure.
234
- }
235
- process.exitCode = 1;
236
- }
237
- }
238
- /** Materialize both self-contained passes into a one-request Node program. */
239
- export function nodePinnedRequestHelperSource() {
240
- return (`import * as http from "node:http";\n` +
241
- `import * as https from "node:https";\n` +
242
- `import { isIP } from "node:net";\n` +
243
- `(${nodePinnedRequestHelperMain.toString()})(${readNodePinnedHelperRequest.toString()}, http, https, isIP).catch((error) => {\n` +
244
- ` console.error(error instanceof Error ? error.message : String(error));\n` +
245
- ` process.exitCode = 1;\n` +
246
- `});\n`);
247
- }