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
@@ -2,17 +2,32 @@
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  /**
5
- * The single canonical contract for the derived `entries` generation.
5
+ * The derived `entries` layout: DDL plus the layout marker.
6
6
  *
7
- * `index.db` is regenerable, so callers compare one normalized PRAGMA
8
- * fingerprint and discard any generation that differs. This module owns both
9
- * the DDL and its expected fingerprint so schema creation, writable opens,
10
- * serving preflights, and read-only evaluator tooling cannot drift into
11
- * separate definitions of "current".
7
+ * `index_meta.version` is a layout marker. An older layout is never refused:
8
+ * readers serve what is there, and the writable opener (`ensureSchema`,
9
+ * `index-schema.ts`) brings it up to date in place — added and dropped
10
+ * columns, retired tables dropped, a one-time full-text rebuild — without
11
+ * touching embeddings, utility scores, or the LLM enrichment cache (the one
12
+ * exception is the LLM entity graph, unconditionally dropped since its
13
+ * retirement in 0.9.17-alpha.9). A newer layout is refused, naming the
14
+ * upgrade.
12
15
  */
13
- // v23 adds an isolated fragment FTS population. v22 is the last shipped
14
- // generation and is intentionally rebuilt rather than migrated in place.
15
- export const CANONICAL_INDEX_DB_VERSION = 23;
16
+ // 26: declared links (#935) live in `asset_links`, one row per link, owned by
17
+ // the entry that declares it. The writable opener derives them in place from
18
+ // each entry's stored `document_json` (`migrateToDeclaredLinks`,
19
+ // index-schema.ts); releases before 26 did not store them.
20
+ // 25: vectors live only in `embeddings`; the sqlite-vec mirror `entries_vec`
21
+ // is dropped (`dropVecMirror`, index-schema.ts), and so is the fragment FTS
22
+ // table `entry_fragments_fts`, which search no longer reads. `entries` keeps
23
+ // a hash of each entry's embedding input (`embed_hash`) instead of the text
24
+ // (`search_text`); the text is derived from `document_json` when embedding.
25
+ // 24: the FTS5 tables are contentless (`content=''`) — the indexed text lives
26
+ // once, in `entries` / `entry_fragments`, and FTS rows are keyed by rowid only.
27
+ // 23 and earlier stored a second copy of every indexed field in FTS5's own
28
+ // content shadow tables. `ensureFtsLayout` (index-schema.ts) rebuilds the FTS
29
+ // tables from the stored entries when it finds the older layout.
30
+ export const CANONICAL_INDEX_DB_VERSION = 26;
16
31
  export const CANONICAL_ENTRY_SCHEMA_SQL = `
17
32
  CREATE TABLE IF NOT EXISTS entries (
18
33
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -25,8 +40,8 @@ export const CANONICAL_ENTRY_SCHEMA_SQL = `
25
40
  file_path TEXT NOT NULL,
26
41
  content_hash TEXT,
27
42
  document_json TEXT NOT NULL,
28
- search_text TEXT NOT NULL,
29
- derived_from TEXT
43
+ derived_from TEXT,
44
+ embed_hash TEXT
30
45
  );
31
46
 
32
47
  CREATE INDEX IF NOT EXISTS idx_entries_bundle ON entries(bundle_id);
@@ -34,279 +49,97 @@ export const CANONICAL_ENTRY_SCHEMA_SQL = `
34
49
  CREATE INDEX IF NOT EXISTS idx_entries_file_path ON entries(file_path);
35
50
  CREATE INDEX IF NOT EXISTS idx_entries_derived_from ON entries(derived_from);
36
51
 
37
- -- Keep parent metadata and body fragments in separate FTS populations.
38
- -- Combining them changes parent-document IDF and conjunction semantics.
39
- CREATE VIRTUAL TABLE IF NOT EXISTS entries_fts USING fts5(
40
- entry_id UNINDEXED,
41
- name,
42
- description,
43
- tags,
44
- hints,
45
- content,
46
- tokenize='porter unicode61'
47
- );
48
-
49
52
  CREATE TABLE IF NOT EXISTS entry_fragments (
50
53
  entry_id INTEGER PRIMARY KEY REFERENCES entries(id) ON DELETE CASCADE,
51
54
  safe_markdown TEXT NOT NULL
52
55
  );
53
56
 
54
- CREATE VIRTUAL TABLE IF NOT EXISTS entry_fragments_fts USING fts5(
55
- entry_id UNINDEXED,
56
- fragment_id UNINDEXED,
57
- fragment_ordinal UNINDEXED,
58
- content,
59
- tokenize='porter unicode61'
60
- );
57
+ -- Declared links (#935). dst_bundle NULL: the declaring entry's own bundle.
58
+ CREATE TABLE IF NOT EXISTS asset_links (
59
+ entry_id INTEGER NOT NULL REFERENCES entries(id) ON DELETE CASCADE,
60
+ ord INTEGER NOT NULL,
61
+ kind TEXT NOT NULL,
62
+ raw TEXT NOT NULL,
63
+ dst_bundle TEXT,
64
+ dst_concept TEXT NOT NULL,
65
+ PRIMARY KEY (entry_id, ord)
66
+ ) WITHOUT ROWID;
67
+
68
+ CREATE INDEX IF NOT EXISTS idx_asset_links_dst ON asset_links(dst_concept);
61
69
  `;
62
- const CANONICAL_ENTRY_SCHEMA_FINGERPRINT = {
63
- tableSql: "CREATE TABLE entries ( id INTEGER PRIMARY KEY AUTOINCREMENT, item_ref TEXT NOT NULL UNIQUE, bundle_id TEXT NOT NULL, component_id TEXT NOT NULL, concept_id TEXT NOT NULL, adapter_id TEXT NOT NULL, type TEXT NOT NULL, file_path TEXT NOT NULL, content_hash TEXT, document_json TEXT NOT NULL, search_text TEXT NOT NULL, derived_from TEXT )",
64
- sqliteSequenceTable: true,
65
- sqliteSequenceValid: true,
66
- columns: [
67
- { cid: 0, name: "id", type: "INTEGER", notNull: 0, defaultValue: null, primaryKeyPosition: 1, hidden: 0 },
68
- {
69
- cid: 1,
70
- name: "item_ref",
71
- type: "TEXT",
72
- notNull: 1,
73
- defaultValue: null,
74
- primaryKeyPosition: 0,
75
- hidden: 0,
76
- },
77
- {
78
- cid: 2,
79
- name: "bundle_id",
80
- type: "TEXT",
81
- notNull: 1,
82
- defaultValue: null,
83
- primaryKeyPosition: 0,
84
- hidden: 0,
85
- },
86
- {
87
- cid: 3,
88
- name: "component_id",
89
- type: "TEXT",
90
- notNull: 1,
91
- defaultValue: null,
92
- primaryKeyPosition: 0,
93
- hidden: 0,
94
- },
95
- {
96
- cid: 4,
97
- name: "concept_id",
98
- type: "TEXT",
99
- notNull: 1,
100
- defaultValue: null,
101
- primaryKeyPosition: 0,
102
- hidden: 0,
103
- },
104
- {
105
- cid: 5,
106
- name: "adapter_id",
107
- type: "TEXT",
108
- notNull: 1,
109
- defaultValue: null,
110
- primaryKeyPosition: 0,
111
- hidden: 0,
112
- },
113
- { cid: 6, name: "type", type: "TEXT", notNull: 1, defaultValue: null, primaryKeyPosition: 0, hidden: 0 },
114
- {
115
- cid: 7,
116
- name: "file_path",
117
- type: "TEXT",
118
- notNull: 1,
119
- defaultValue: null,
120
- primaryKeyPosition: 0,
121
- hidden: 0,
122
- },
123
- {
124
- cid: 8,
125
- name: "content_hash",
126
- type: "TEXT",
127
- notNull: 0,
128
- defaultValue: null,
129
- primaryKeyPosition: 0,
130
- hidden: 0,
131
- },
132
- {
133
- cid: 9,
134
- name: "document_json",
135
- type: "TEXT",
136
- notNull: 1,
137
- defaultValue: null,
138
- primaryKeyPosition: 0,
139
- hidden: 0,
140
- },
141
- {
142
- cid: 10,
143
- name: "search_text",
144
- type: "TEXT",
145
- notNull: 1,
146
- defaultValue: null,
147
- primaryKeyPosition: 0,
148
- hidden: 0,
149
- },
150
- {
151
- cid: 11,
152
- name: "derived_from",
153
- type: "TEXT",
154
- notNull: 0,
155
- defaultValue: null,
156
- primaryKeyPosition: 0,
157
- hidden: 0,
158
- },
159
- ],
160
- indexes: [
161
- {
162
- name: "idx_entries_bundle",
163
- unique: 0,
164
- origin: "c",
165
- partial: 0,
166
- columns: [
167
- { sequence: 0, cid: 2, name: "bundle_id", descending: 0, collation: "BINARY", key: 1 },
168
- { sequence: 1, cid: -1, name: null, descending: 0, collation: "BINARY", key: 0 },
169
- ],
170
- },
171
- {
172
- name: "idx_entries_derived_from",
173
- unique: 0,
174
- origin: "c",
175
- partial: 0,
176
- columns: [
177
- { sequence: 0, cid: 11, name: "derived_from", descending: 0, collation: "BINARY", key: 1 },
178
- { sequence: 1, cid: -1, name: null, descending: 0, collation: "BINARY", key: 0 },
179
- ],
180
- },
181
- {
182
- name: "idx_entries_file_path",
183
- unique: 0,
184
- origin: "c",
185
- partial: 0,
186
- columns: [
187
- { sequence: 0, cid: 7, name: "file_path", descending: 0, collation: "BINARY", key: 1 },
188
- { sequence: 1, cid: -1, name: null, descending: 0, collation: "BINARY", key: 0 },
189
- ],
190
- },
191
- {
192
- name: "idx_entries_type",
193
- unique: 0,
194
- origin: "c",
195
- partial: 0,
196
- columns: [
197
- { sequence: 0, cid: 6, name: "type", descending: 0, collation: "BINARY", key: 1 },
198
- { sequence: 1, cid: -1, name: null, descending: 0, collation: "BINARY", key: 0 },
199
- ],
200
- },
201
- {
202
- name: "sqlite_autoindex_entries_1",
203
- unique: 1,
204
- origin: "u",
205
- partial: 0,
206
- columns: [
207
- { sequence: 0, cid: 1, name: "item_ref", descending: 0, collation: "BINARY", key: 1 },
208
- { sequence: 1, cid: -1, name: null, descending: 0, collation: "BINARY", key: 0 },
209
- ],
210
- },
211
- ],
212
- searchSurfaces: {
213
- entriesFtsSql: "CREATE VIRTUAL TABLE entries_fts USING fts5( entry_id UNINDEXED, name, description, tags, hints, content, tokenize='porter unicode61' )",
214
- fragmentSourceSql: "CREATE TABLE entry_fragments ( entry_id INTEGER PRIMARY KEY REFERENCES entries(id) ON DELETE CASCADE, safe_markdown TEXT NOT NULL )",
215
- fragmentsFtsSql: "CREATE VIRTUAL TABLE entry_fragments_fts USING fts5( entry_id UNINDEXED, fragment_id UNINDEXED, fragment_ordinal UNINDEXED, content, tokenize='porter unicode61' )",
216
- },
217
- };
70
+ // The FTS table is contentless: FTS5 keeps only the inverted index, and a row
71
+ // is addressed by its rowid (`entries_fts.rowid = entries.id`, see
72
+ // index-fts-repository.ts). `contentless_delete=1` lets a row be deleted by
73
+ // rowid alone — an external-content table would instead need the exact text
74
+ // originally indexed, which is derived in JS from `document_json`
75
+ // (`buildSearchFields`) and would corrupt the index the first time that
76
+ // derivation changed. The UNINDEXED columns store nothing and read back NULL;
77
+ // they stay declared so the insert statements and the readers'
78
+ // `COALESCE(f.entry_id, f.rowid)` joins are valid against both this layout
79
+ // and the content-bearing one older releases wrote — which is also the
80
+ // layout written when the linked SQLite predates `contentless_delete` (3.43,
81
+ // e.g. the macOS 13 system library Bun links there).
82
+ const CONTENTLESS_OPTIONS = "content='', contentless_delete=1,";
83
+ export function entriesFtsDdl(contentless) {
84
+ return `
85
+ CREATE VIRTUAL TABLE IF NOT EXISTS entries_fts USING fts5(
86
+ entry_id UNINDEXED, name, description, tags, hints, content,
87
+ ${contentless ? CONTENTLESS_OPTIONS : ""} tokenize='porter unicode61'
88
+ );`;
89
+ }
90
+ /** Whether the linked SQLite's FTS5 supports `contentless_delete` (3.43.0+). */
91
+ export function supportsContentlessDelete(db) {
92
+ const version = db.prepare("SELECT sqlite_version() AS version").get().version;
93
+ const [major = 0, minor = 0] = version.split(".").map(Number);
94
+ return major > 3 || (major === 3 && minor >= 43);
95
+ }
218
96
  function sqlString(value) {
219
97
  return `'${value.replaceAll("'", "''")}'`;
220
98
  }
221
- function normalizeSchemaSql(value) {
222
- if (value == null)
223
- return null;
224
- return value.replace(/\s+/g, " ").trim();
225
- }
226
- function readNamedTableSql(db, name) {
99
+ export function readTableSql(db, name) {
227
100
  const row = db.prepare(`SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ${sqlString(name)}`).get();
228
- return normalizeSchemaSql(row?.sql);
229
- }
230
- export function readEntrySchemaFingerprint(db) {
231
- const sqliteSequenceTable = db.prepare("SELECT 1 AS present FROM sqlite_master WHERE type = 'table' AND name = 'sqlite_sequence'").get() !=
232
- null;
233
- const maxId = Number(db.prepare("SELECT COALESCE(MAX(id), 0) AS maxId FROM entries").get().maxId);
234
- const sequenceRow = sqliteSequenceTable
235
- ? db.prepare("SELECT seq FROM sqlite_sequence WHERE name = 'entries'").get()
236
- : undefined;
237
- const sqliteSequenceValid = sqliteSequenceTable &&
238
- (maxId === 0 ? sequenceRow == null || Number(sequenceRow.seq) >= 0 : Number(sequenceRow?.seq) >= maxId);
239
- const columns = db.prepare("PRAGMA table_xinfo(entries)").all().map((column) => ({
240
- cid: Number(column.cid),
241
- name: column.name,
242
- type: column.type.trim().toUpperCase(),
243
- notNull: Number(column.notnull),
244
- defaultValue: column.dflt_value === null ? null : String(column.dflt_value),
245
- primaryKeyPosition: Number(column.pk),
246
- hidden: Number(column.hidden),
247
- }));
248
- const indexes = db.prepare("PRAGMA index_list(entries)").all()
249
- .map((index) => ({
250
- name: index.name,
251
- unique: Number(index.unique),
252
- origin: index.origin,
253
- partial: Number(index.partial),
254
- columns: db.prepare(`PRAGMA index_xinfo(${sqlString(index.name)})`).all()
255
- .sort((left, right) => Number(left.seqno) - Number(right.seqno))
256
- .map((column) => ({
257
- sequence: Number(column.seqno),
258
- cid: Number(column.cid),
259
- name: column.name,
260
- descending: Number(column.desc),
261
- collation: column.coll,
262
- key: Number(column.key),
263
- })),
264
- }))
265
- .sort((left, right) => left.name.localeCompare(right.name));
266
- return {
267
- tableSql: readNamedTableSql(db, "entries"),
268
- sqliteSequenceTable,
269
- sqliteSequenceValid,
270
- columns,
271
- indexes,
272
- searchSurfaces: {
273
- entriesFtsSql: readNamedTableSql(db, "entries_fts"),
274
- fragmentSourceSql: readNamedTableSql(db, "entry_fragments"),
275
- fragmentsFtsSql: readNamedTableSql(db, "entry_fragments_fts"),
276
- },
277
- };
101
+ return row?.sql ?? null;
278
102
  }
279
- export function hasCanonicalEntrySchema(db) {
280
- try {
281
- return JSON.stringify(readEntrySchemaFingerprint(db)) === JSON.stringify(CANONICAL_ENTRY_SCHEMA_FINGERPRINT);
282
- }
283
- catch {
284
- return false;
285
- }
103
+ export function tableExists(db, name) {
104
+ return readTableSql(db, name) !== null;
286
105
  }
287
- export function classifyIndexGeneration(db) {
288
- let storedVersion;
289
- try {
290
- const row = db.prepare("SELECT value FROM index_meta WHERE key = 'version'").get();
291
- storedVersion = row?.value;
292
- }
293
- catch {
294
- storedVersion = undefined;
295
- }
296
- if (storedVersion === String(CANONICAL_INDEX_DB_VERSION) && hasCanonicalEntrySchema(db)) {
297
- return { status: "canonical", storedVersion };
298
- }
299
- const storedNumeric = storedVersion === undefined ? undefined : Number(storedVersion);
300
- if (storedNumeric !== undefined && Number.isFinite(storedNumeric) && storedNumeric > CANONICAL_INDEX_DB_VERSION) {
301
- return { status: "newer", storedVersion };
302
- }
303
- return { status: "older", storedVersion };
106
+ /**
107
+ * Columns this release's readers need in `entries` (layout 21+). The writable
108
+ * opener adds `embed_hash` to an older table, so it is not required here.
109
+ */
110
+ const REQUIRED_ENTRY_COLUMNS = [
111
+ "id",
112
+ "item_ref",
113
+ "bundle_id",
114
+ "component_id",
115
+ "concept_id",
116
+ "adapter_id",
117
+ "type",
118
+ "file_path",
119
+ "content_hash",
120
+ "document_json",
121
+ "derived_from",
122
+ ];
123
+ /** Required `entries` columns the table lacks; every column when there is no `entries` table. */
124
+ export function missingEntryColumns(db) {
125
+ const present = new Set(db.prepare("PRAGMA table_info(entries)").all().map((c) => c.name));
126
+ return REQUIRED_ENTRY_COLUMNS.filter((column) => !present.has(column));
304
127
  }
305
- export function isCanonicalIndexGeneration(db) {
128
+ /**
129
+ * Whether an index database has an `entries` table this release can read. A
130
+ * fresh or empty file has none; an index older than layout 21 has one keyed
131
+ * by columns this release no longer reads, and serves nothing until the next
132
+ * `akm index` recreates it.
133
+ */
134
+ export function hasCurrentEntriesTable(db) {
306
135
  try {
307
- return classifyIndexGeneration(db).status === "canonical";
136
+ return missingEntryColumns(db).length === 0;
308
137
  }
309
138
  catch {
310
139
  return false;
311
140
  }
312
141
  }
142
+ /** True when an FTS5 table's DDL declares the contentless layout this release writes. */
143
+ export function isContentlessFtsDdl(sql) {
144
+ return sql !== null && /content\s*=\s*''/.test(sql);
145
+ }