akm-cli 0.9.17-alpha.3 → 0.9.17-alpha.5

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 (346) hide show
  1. package/CHANGELOG.md +760 -0
  2. package/dist/akm +94 -196
  3. package/dist/cli/shared.js +6 -2
  4. package/dist/cli.js +22 -9
  5. package/dist/commands/agent/agent-dispatch.js +1 -1
  6. package/dist/commands/command/command-execution.js +24 -62
  7. package/dist/commands/feedback-cli.js +0 -1
  8. package/dist/commands/health/accept-rate.js +2 -2
  9. package/dist/commands/health/checks.js +30 -75
  10. package/dist/commands/health/config-skew.js +38 -0
  11. package/dist/commands/health/egress.js +54 -0
  12. package/dist/commands/health/html-report.js +0 -38
  13. package/dist/commands/health/improve-metrics.js +123 -562
  14. package/dist/commands/health/plugin-staleness.js +53 -3
  15. package/dist/commands/health/renderers.js +12 -4
  16. package/dist/commands/health/report-view-model.js +11 -106
  17. package/dist/commands/health/types-improve.js +4 -19
  18. package/dist/commands/health/windows.js +64 -73
  19. package/dist/commands/health.js +122 -143
  20. package/dist/commands/improve/consolidate/chunking.js +25 -100
  21. package/dist/commands/improve/consolidate/sanitize.js +54 -149
  22. package/dist/commands/improve/consolidate.js +538 -1075
  23. package/dist/commands/improve/content-hash.js +16 -24
  24. package/dist/commands/improve/distill/content-repair.js +18 -100
  25. package/dist/commands/improve/distill-guards.js +20 -81
  26. package/dist/commands/improve/distill-promotion-policy.js +23 -243
  27. package/dist/commands/improve/distill.js +608 -1075
  28. package/dist/commands/improve/eligibility.js +126 -400
  29. package/dist/commands/improve/execution.js +3 -5
  30. package/dist/commands/improve/extract.js +487 -1046
  31. package/dist/commands/improve/feedback-valence.js +0 -25
  32. package/dist/commands/improve/improve-cli.js +29 -166
  33. package/dist/commands/improve/improve-result-file.js +10 -66
  34. package/dist/commands/improve/improve-strategies.js +12 -7
  35. package/dist/commands/improve/improve-usage-report.js +18 -64
  36. package/dist/commands/improve/improve.js +443 -1063
  37. package/dist/commands/improve/ledger.js +114 -0
  38. package/dist/commands/improve/locks.js +2 -8
  39. package/dist/commands/improve/loop-stages.js +459 -1172
  40. package/dist/commands/improve/memory/derived-ref.js +12 -77
  41. package/dist/commands/improve/memory/memory-belief.js +14 -118
  42. package/dist/commands/improve/memory/memory-improve.js +4 -3
  43. package/dist/commands/improve/outcome-loop.js +28 -156
  44. package/dist/commands/improve/planner.js +5 -10
  45. package/dist/commands/improve/preparation.js +851 -2339
  46. package/dist/commands/improve/proactive-maintenance.js +34 -101
  47. package/dist/commands/improve/reflect-noise.js +104 -280
  48. package/dist/commands/improve/reflect.js +621 -1367
  49. package/dist/commands/improve/salience.js +46 -232
  50. package/dist/commands/improve/session-asset.js +19 -100
  51. package/dist/commands/improve/stage.js +323 -0
  52. package/dist/commands/lint/base-linter.js +19 -5
  53. package/dist/commands/proposal/drain.js +251 -644
  54. package/dist/commands/proposal/proposal-cli.js +3 -18
  55. package/dist/commands/proposal/proposal-types.js +20 -41
  56. package/dist/commands/proposal/proposal.js +1 -2
  57. package/dist/commands/proposal/propose.js +134 -160
  58. package/dist/commands/proposal/repository.js +502 -1487
  59. package/dist/commands/proposal/validators/proposal-quality-validators.js +71 -174
  60. package/dist/commands/proposal/validators/proposal-validators.js +1 -1
  61. package/dist/commands/proposal/validators/proposals.js +13 -89
  62. package/dist/commands/read/curate.js +63 -413
  63. package/dist/commands/read/search-cli.js +16 -33
  64. package/dist/commands/read/search.js +17 -23
  65. package/dist/commands/read/show.js +2 -13
  66. package/dist/commands/sources/bundle-cli.js +25 -2
  67. package/dist/commands/sources/bundle-config-ops.js +4 -0
  68. package/dist/commands/sources/dangerous-env-audit.js +1 -2
  69. package/dist/commands/sources/info.js +2 -11
  70. package/dist/commands/sources/installed-stashes.js +197 -746
  71. package/dist/commands/sources/schema-repair.js +98 -129
  72. package/dist/commands/sources/source-add.js +62 -12
  73. package/dist/commands/sources/source-manage.js +9 -2
  74. package/dist/commands/sources/stash-cli.js +1 -1
  75. package/dist/commands/tasks/explain.js +10 -13
  76. package/dist/commands/tasks/tasks-cli.js +9 -8
  77. package/dist/commands/tasks/tasks.js +326 -930
  78. package/dist/commands/tasks/validate.js +42 -21
  79. package/dist/commands/workflow/plan.js +22 -29
  80. package/dist/commands/workflow-cli.js +4 -4
  81. package/dist/core/adapter/adapters/akm-adapter.js +0 -1
  82. package/dist/core/adapter/adapters/akm-lint.js +2 -3
  83. package/dist/core/adapter/adapters/akm-metadata.js +11 -12
  84. package/dist/core/adapter/adapters/akm-workflow-adapter.js +1 -1
  85. package/dist/core/adapter/execution-source.js +17 -29
  86. package/dist/core/asset/asset-placement.js +4 -13
  87. package/dist/core/asset/resolve-ref.js +1 -1
  88. package/dist/core/bundle-id.js +42 -5
  89. package/dist/core/bundle-rename.js +291 -0
  90. package/dist/core/config/config-io.js +1 -2
  91. package/dist/core/config/config-schema.js +1 -33
  92. package/dist/core/config/config-walker.js +1 -1
  93. package/dist/core/config/config.js +163 -68
  94. package/dist/core/config/legacy-source-shape-shim.js +38 -9
  95. package/dist/core/config/schema/embedding.js +20 -5
  96. package/dist/core/config/schema/engines.js +5 -0
  97. package/dist/core/config/schema/execution.js +1 -1
  98. package/dist/core/config/schema/experimental.js +1 -1
  99. package/dist/core/config/schema/improve-processes.js +21 -95
  100. package/dist/core/config/schema/improve.js +4 -42
  101. package/dist/core/config/schema/scheduler.js +12 -12
  102. package/dist/core/config/schema/search.js +6 -22
  103. package/dist/core/env-secret-ref.js +0 -1
  104. package/dist/core/errors.js +8 -9
  105. package/dist/core/file-lock.js +76 -173
  106. package/dist/core/logs-db.js +2 -2
  107. package/dist/core/paths.js +0 -27
  108. package/dist/core/redaction.js +109 -2
  109. package/dist/core/run-lock.js +2 -5
  110. package/dist/core/spawn-env.js +1 -1
  111. package/dist/core/state/migrations.js +108 -61
  112. package/dist/core/state-db-scope.js +2 -4
  113. package/dist/core/state-db.js +126 -692
  114. package/dist/core/type-presentation.js +1 -9
  115. package/dist/core/write-source.js +293 -1012
  116. package/dist/execution/input-contract.js +1 -1
  117. package/dist/execution/resolved-request.js +135 -689
  118. package/dist/execution/source.js +63 -257
  119. package/dist/execution/target-ref.js +1 -1
  120. package/dist/indexer/bundle-identity-guard.js +2 -2
  121. package/dist/indexer/db/graph-db.js +106 -46
  122. package/dist/indexer/ensure-index.js +44 -85
  123. package/dist/indexer/graph/graph-extraction.js +340 -562
  124. package/dist/indexer/graph/graph-related.js +130 -0
  125. package/dist/indexer/index-rebuild-lock.js +3 -11
  126. package/dist/indexer/index-writer-lock.js +8 -17
  127. package/dist/indexer/index-written-assets.js +139 -151
  128. package/dist/indexer/indexer.js +524 -846
  129. package/dist/indexer/materialize-embeddings.js +60 -397
  130. package/dist/indexer/passes/memory-inference.js +81 -90
  131. package/dist/indexer/passes/metadata.js +132 -200
  132. package/dist/indexer/read-preflight.js +0 -7
  133. package/dist/indexer/scan/doc-to-entry.js +1 -3
  134. package/dist/indexer/scan/drain-dir.js +1 -1
  135. package/dist/indexer/search/db-search.js +181 -590
  136. package/dist/indexer/search/fts-query.js +30 -41
  137. package/dist/indexer/search/ranking.js +28 -154
  138. package/dist/indexer/search/search-attribution.js +12 -32
  139. package/dist/indexer/search/search-fields.js +11 -15
  140. package/dist/indexer/search/search-hit-enrichers.js +54 -85
  141. package/dist/indexer/search/search-source.js +1 -4
  142. package/dist/indexer/usage/usage-events.js +2 -7
  143. package/dist/integrations/agent/engine-fallback.js +23 -40
  144. package/dist/integrations/agent/engine-resolution.js +93 -183
  145. package/dist/integrations/agent/execution.js +507 -0
  146. package/dist/integrations/agent/model-map.js +28 -156
  147. package/dist/integrations/agent/request-lowering.js +66 -141
  148. package/dist/integrations/agent/runner-dispatch.js +143 -321
  149. package/dist/integrations/agent/runner.js +54 -14
  150. package/dist/integrations/lockfile.js +53 -101
  151. package/dist/llm/embedders/deterministic.js +2 -3
  152. package/dist/llm/embedders/profile.js +71 -0
  153. package/dist/llm/embedders/remote.js +10 -15
  154. package/dist/llm/graph-extract.js +3 -12
  155. package/dist/llm/index-passes.js +3 -5
  156. package/dist/llm/memory-infer.js +1 -2
  157. package/dist/llm/metadata-enhance.js +1 -2
  158. package/dist/llm/structured-call.js +5 -24
  159. package/dist/output/generic-render.js +23 -11
  160. package/dist/output/html-render.js +13 -10
  161. package/dist/output/render-registry.js +3 -32
  162. package/dist/output/shapes/helpers.js +2 -34
  163. package/dist/output/shapes/passthrough.js +1 -9
  164. package/dist/{indexer/search/ranking-types.js → output/text/bundle-rename.js} +4 -1
  165. package/dist/output/text/command-format.js +60 -23
  166. package/dist/output/text/helpers.js +1 -1
  167. package/dist/output/text/migrate.js +5 -14
  168. package/dist/output/text/proposal-format.js +1 -2
  169. package/dist/output/text/workflow-format.js +0 -32
  170. package/dist/output/text.js +2 -0
  171. package/dist/registry/factory.js +4 -19
  172. package/dist/registry/network.js +66 -220
  173. package/dist/registry/providers/index.js +0 -2
  174. package/dist/registry/providers/skills-sh.js +3 -14
  175. package/dist/registry/providers/static-index.js +24 -26
  176. package/dist/registry/resolve.js +55 -131
  177. package/dist/scripts/akm-migrate-node.js +43940 -93320
  178. package/dist/scripts/akm-migrate.js +43700 -93078
  179. package/dist/setup/registry-stash-loader.js +4 -13
  180. package/dist/setup/semantic-assets.js +3 -44
  181. package/dist/setup/setup.js +1 -1
  182. package/dist/setup/steps/tasks.js +25 -15
  183. package/dist/sources/provider-factory.js +17 -18
  184. package/dist/sources/providers/filesystem.js +2 -3
  185. package/dist/sources/providers/git-install.js +7 -1
  186. package/dist/sources/providers/git-provider.js +0 -3
  187. package/dist/sources/providers/git-stash.js +0 -17
  188. package/dist/sources/providers/npm.js +2 -4
  189. package/dist/sources/providers/provider-utils.js +5 -10
  190. package/dist/sources/providers/website.js +0 -2
  191. package/dist/sources/snapshot-fetchers/website-ingest.js +1 -1
  192. package/dist/sources/website-url.js +2 -2
  193. package/dist/storage/database.js +9 -35
  194. package/dist/storage/repositories/improve-ledger-repository.js +168 -0
  195. package/dist/storage/repositories/index-connection.js +34 -70
  196. package/dist/storage/repositories/index-entries-repository.js +69 -111
  197. package/dist/storage/repositories/index-entry-mapper.js +1 -2
  198. package/dist/storage/repositories/index-entry-schema.js +83 -269
  199. package/dist/storage/repositories/index-fts-repository.js +86 -256
  200. package/dist/storage/repositories/index-llm-cache-repository.js +17 -0
  201. package/dist/storage/repositories/index-meta-repository.js +6 -4
  202. package/dist/storage/repositories/index-schema.js +192 -220
  203. package/dist/storage/repositories/index-utility-repository.js +8 -29
  204. package/dist/storage/repositories/index-vec-repository.js +133 -414
  205. package/dist/storage/repositories/outcome-repository.js +2 -1
  206. package/dist/storage/repositories/proposals-repository.js +35 -0
  207. package/dist/storage/repositories/registry-index-cache-repository.js +100 -0
  208. package/dist/storage/repositories/task-history-repository.js +26 -4
  209. package/dist/storage/repositories/workflow-runs-repository.js +53 -244
  210. package/dist/storage/sqlite-migrations.js +136 -0
  211. package/dist/storage/sqlite-pragmas.js +11 -9
  212. package/dist/storage/sqlite-transaction.js +170 -0
  213. package/dist/storage/state-db-integrity.js +34 -27
  214. package/dist/tasks/activation-config.js +134 -62
  215. package/dist/tasks/backends/cron.js +129 -277
  216. package/dist/tasks/backends/exec-utils.js +2 -5
  217. package/dist/tasks/backends/launchd.js +125 -745
  218. package/dist/tasks/backends/schtasks.js +101 -620
  219. package/dist/tasks/prepare/prepare-support.js +5 -15
  220. package/dist/tasks/prepare/prepare.js +0 -2
  221. package/dist/tasks/resolve-akm-bin.js +20 -79
  222. package/dist/tasks/run/attempt-lifecycle.js +0 -1
  223. package/dist/tasks/scheduler-binding.js +18 -238
  224. package/dist/tasks/scheduler-invocation.js +52 -52
  225. package/dist/tasks/scheduler-lock.js +53 -0
  226. package/dist/tasks/scheduler-sync.js +361 -751
  227. package/dist/tasks/source/parse-task-source.js +160 -10
  228. package/dist/tasks/source/task-source-v3-frozen.js +3 -4
  229. package/dist/tasks/source/task-to-v4.js +2 -2
  230. package/dist/workflows/authoring/authoring.js +3 -12
  231. package/dist/workflows/compile.js +211 -0
  232. package/dist/workflows/concurrency-policy.js +13 -74
  233. package/dist/workflows/exec/child-invocation.js +3 -17
  234. package/dist/workflows/exec/child-workflow.js +32 -141
  235. package/dist/workflows/exec/dispatch-redaction.js +13 -53
  236. package/dist/workflows/exec/environment.js +98 -0
  237. package/dist/workflows/exec/exec-unit.js +33 -140
  238. package/dist/workflows/exec/frozen-judge.js +7 -59
  239. package/dist/workflows/exec/native-executor.js +82 -341
  240. package/dist/workflows/exec/param-secrets.js +29 -47
  241. package/dist/workflows/exec/run-workflow.js +154 -387
  242. package/dist/workflows/exec/scheduler.js +9 -36
  243. package/dist/workflows/exec/step-work.js +127 -430
  244. package/dist/workflows/exec/unit-dispatch.js +11 -63
  245. package/dist/workflows/exec/unit-writer.js +8 -52
  246. package/dist/workflows/exec/worktree.js +39 -273
  247. package/dist/workflows/freeze/child-output-references.js +4 -15
  248. package/dist/workflows/freeze/environment.js +99 -92
  249. package/dist/workflows/freeze/freeze.js +172 -0
  250. package/dist/workflows/freeze/step-values.js +19 -21
  251. package/dist/workflows/freeze/targets/child-workflow.js +23 -92
  252. package/dist/workflows/freeze/targets/command.js +10 -33
  253. package/dist/workflows/freeze/targets/script.js +5 -12
  254. package/dist/workflows/freeze/targets/shell.js +3 -6
  255. package/dist/workflows/freeze/targets/task.js +25 -80
  256. package/dist/workflows/freeze/task-bindings.js +20 -67
  257. package/dist/workflows/{source-ir/github-yaml.js → github-yaml.js} +88 -206
  258. package/dist/workflows/ir/params.js +6 -51
  259. package/dist/workflows/ir/plan-hash.js +2 -34
  260. package/dist/workflows/parser.js +140 -43
  261. package/dist/{commands/improve/consolidate/types.js → workflows/plan.js} +2 -1
  262. package/dist/workflows/renderer.js +36 -69
  263. package/dist/workflows/resource-limits.js +12 -120
  264. package/dist/workflows/runtime/agent-identity.js +8 -40
  265. package/dist/workflows/runtime/run-outputs.js +3 -6
  266. package/dist/workflows/runtime/run-plan.js +316 -0
  267. package/dist/workflows/runtime/runs.js +48 -200
  268. package/dist/workflows/runtime/workflow-asset-loader.js +24 -57
  269. package/dist/workflows/{source-ir/semantics.js → source-semantics.js} +16 -20
  270. package/dist/workflows/validate-summary.js +2 -7
  271. package/docs/integration/bundling-akm.md +49 -42
  272. package/docs/migration/README.md +1 -0
  273. package/docs/migration/release-notes/0.9.17.md +41 -0
  274. package/docs/migration/v0.9.1-to-v0.9.2.md +19 -7
  275. package/docs/reference/cli.md +182 -125
  276. package/docs/reference/configuration.md +49 -56
  277. package/docs/reference/data-and-telemetry.md +19 -20
  278. package/docs/reference/tasks.md +86 -38
  279. package/docs/reference/workflow-schema.md +14 -18
  280. package/docs/reference/workflows.md +6 -9
  281. package/package.json +1 -1
  282. package/schemas/akm-config.json +87 -406
  283. package/dist/commands/health/advisories.js +0 -150
  284. package/dist/commands/health/metrics.js +0 -329
  285. package/dist/commands/health/surfaces.js +0 -102
  286. package/dist/commands/improve/anti-collapse.js +0 -83
  287. package/dist/commands/improve/collapse-detector.js +0 -432
  288. package/dist/commands/improve/consolidate/eligibility.js +0 -48
  289. package/dist/commands/improve/consolidate/merge.js +0 -146
  290. package/dist/commands/improve/distill/promote-memory.js +0 -329
  291. package/dist/commands/improve/distill/quality-gate.js +0 -500
  292. package/dist/commands/improve/memory/memory-contradiction-detect.js +0 -291
  293. package/dist/commands/improve/proposal-envelope.js +0 -31
  294. package/dist/commands/improve/run-context.js +0 -123
  295. package/dist/commands/improve/shared.js +0 -21
  296. package/dist/commands/improve/source-identity.js +0 -28
  297. package/dist/commands/improve/triage.js +0 -96
  298. package/dist/commands/proposal/drain-policies.js +0 -151
  299. package/dist/commands/sources/update-transaction.js +0 -220
  300. package/dist/core/action-contributors.js +0 -28
  301. package/dist/core/config/config-version-shim.js +0 -101
  302. package/dist/core/config/retired-experimental-keys-shim.js +0 -62
  303. package/dist/core/fs-txn.js +0 -405
  304. package/dist/core/lexical-score.js +0 -25
  305. package/dist/core/maintenance-barrier.js +0 -167
  306. package/dist/execution/executable-identity.js +0 -105
  307. package/dist/execution/guarded-source.js +0 -441
  308. package/dist/indexer/graph/graph-boost.js +0 -427
  309. package/dist/indexer/graph/graph-dedup.js +0 -95
  310. package/dist/indexer/search/name-match.js +0 -35
  311. package/dist/indexer/search/ranking-contributors.js +0 -515
  312. package/dist/indexer/walk/project-context.js +0 -192
  313. package/dist/integrations/agent/execution-cascade.js +0 -566
  314. package/dist/integrations/agent/execution-definitions.js +0 -202
  315. package/dist/integrations/agent/execution-lowering.js +0 -841
  316. package/dist/integrations/agent/execution-preparation.js +0 -98
  317. package/dist/integrations/agent/inline-execution.js +0 -74
  318. package/dist/registry/create-provider-registry.js +0 -29
  319. package/dist/registry/pinned-request-helper.js +0 -247
  320. package/dist/registry/pinned-transport.js +0 -717
  321. package/dist/sources/providers/index.js +0 -14
  322. package/dist/storage/engines/sqlite-migrations.js +0 -271
  323. package/dist/storage/repositories/canaries-repository.js +0 -107
  324. package/dist/storage/repositories/embedding-salvage-repository.js +0 -184
  325. package/dist/storage/repositories/registry-cache.js +0 -113
  326. package/dist/tasks/scheduler-sync-preview.js +0 -52
  327. package/dist/workflows/freeze/resolve-steps.js +0 -86
  328. package/dist/workflows/freeze/source-freeze.js +0 -64
  329. package/dist/workflows/ir/compile.js +0 -321
  330. package/dist/workflows/ir/environment-v4.js +0 -330
  331. package/dist/workflows/ir/freeze-v4.js +0 -153
  332. package/dist/workflows/ir/schema-v4.js +0 -745
  333. package/dist/workflows/ir/schema.js +0 -354
  334. package/dist/workflows/program/schema.js +0 -78
  335. package/dist/workflows/runtime/checkin.js +0 -57
  336. package/dist/workflows/runtime/plan-classifier.js +0 -196
  337. package/dist/workflows/runtime/unit-checkin.js +0 -45
  338. package/dist/workflows/runtime/unit-phases.js +0 -20
  339. package/dist/workflows/schema.js +0 -4
  340. package/dist/workflows/source-ir/compile.js +0 -200
  341. package/dist/workflows/source-ir/program.js +0 -50
  342. package/dist/workflows/source-ir/result.js +0 -26
  343. package/dist/workflows/source-ir/schema.js +0 -786
  344. package/dist/workflows/source-ir/triggers.js +0 -79
  345. package/dist/workflows/source-ir/uses.js +0 -40
  346. package/dist/workflows/validator.js +0 -60
@@ -76,36 +76,24 @@ export const searchCommand = defineJsonCommand({
76
76
  description: "Memory belief filter: all|current|historical. current keeps active memory beliefs; historical keeps contradicted/superseded/archived memory beliefs.",
77
77
  default: "all",
78
78
  },
79
- // Declared as the POSITIVE name with `default: true` so citty's native
80
- // `--no-<name>` negation (it strips a leading `--no-` from ANY token and
81
- // negates the remainder BEFORE consulting the declared-args table — see
82
- // node_modules/citty/dist/index.mjs) does the work, the same pattern
83
- // `sync --push/--no-push` uses. A flag DECLARED as `no-project-context`
84
- // can never be negated: `--no-project-context` parses as "negate
85
- // `project-context`", a name nothing declared, leaving the real key at
86
- // its default `false` forever (F1/A1).
87
- "project-context": {
88
- type: "boolean",
89
- default: true,
90
- description: "Automatic project-context ranking boost: assets whose name/tags/aliases match the current working " +
91
- "directory's project get a small score boost, and this search's usage also feeds the scoped-utility " +
92
- "ranking signal. Default: on. Use --no-project-context to disable BOTH the project-context boost and " +
93
- "the scoped-utility signal for this search only.",
94
- },
95
79
  "include-sessions": {
96
80
  type: "boolean",
97
81
  description: "Include session assets (excluded from default search results via config.search.defaultExcludeTypes).",
98
82
  default: false,
99
83
  },
100
- // Declared as the POSITIVE name with `default: true` for the same reason
101
- // as `project-context` above — never declare a flag whose NAME starts
102
- // with `no-`.
84
+ // Declared as the POSITIVE name with `default: true` so citty's native
85
+ // `--no-<name>` negation (it strips a leading `--no-` from ANY token and
86
+ // negates the remainder BEFORE consulting the declared-args table — see
87
+ // node_modules/citty/dist/index.mjs) does the work, the same pattern
88
+ // `sync --push/--no-push` uses. A flag DECLARED as `no-track-usage` could
89
+ // never be negated: `--no-track-usage` parses as "negate `track-usage`",
90
+ // a name nothing declared, leaving the real key at its default forever
91
+ // (F1/A1).
103
92
  "track-usage": {
104
93
  type: "boolean",
105
94
  default: true,
106
- description: "A successful search updates ranking signals (usage-events telemetry and the MemRL utility-score bump " +
107
- "used to prioritize future results). Default: on. Use --no-track-usage to run a read-only search that " +
108
- "does not influence future ranking.",
95
+ description: "A successful search records usage-events telemetry. Default: on. Use --no-track-usage to run a " +
96
+ "search that records nothing.",
109
97
  },
110
98
  },
111
99
  async run({ args }) {
@@ -120,7 +108,6 @@ export const searchCommand = defineJsonCommand({
120
108
  const filters = parseScopeFilterFlags(filterTokens, "--filter");
121
109
  const includeProposed = args["include-proposed"] === true;
122
110
  const belief = parseBeliefFilterMode(typeof args.belief === "string" ? args.belief : undefined);
123
- const disableProjectContext = args["project-context"] === false;
124
111
  const skipLogging = args["track-usage"] === false;
125
112
  const includeSessions = args["include-sessions"];
126
113
  const assets = args.assets === true;
@@ -134,8 +121,6 @@ export const searchCommand = defineJsonCommand({
134
121
  includeProposed,
135
122
  belief,
136
123
  includeSessions,
137
- disableProjectContext,
138
- disableScopedUtility: disableProjectContext,
139
124
  skipLogging,
140
125
  assets,
141
126
  eventSource: resolveUsageEventSource(),
@@ -170,14 +155,13 @@ export const curateCommand = defineJsonCommand({
170
155
  "one curate call.",
171
156
  },
172
157
  // Declared as the POSITIVE name with `default: true` — see the
173
- // `project-context` comment on `searchCommand` above for why a flag NAME
158
+ // `track-usage` comment on `searchCommand` above for why a flag NAME
174
159
  // must never start with `no-`.
175
160
  "track-usage": {
176
161
  type: "boolean",
177
162
  default: true,
178
- description: "A successful curate updates ranking signals (usage-events telemetry for the curated items and the " +
179
- "underlying search). Default: on. Use --no-track-usage to run a read-only curate that does not " +
180
- "influence future ranking.",
163
+ description: "A successful curate records usage-events telemetry for the curated items. Default: on. Use " +
164
+ "--no-track-usage to run a curate that records nothing.",
181
165
  },
182
166
  },
183
167
  async run({ args }) {
@@ -302,14 +286,13 @@ export const showCommand = defineJsonCommand({
302
286
  description: "Exact context budget in characters. Requires --context lead; mutually exclusive with --max-tokens.",
303
287
  },
304
288
  // Declared as the POSITIVE name with `default: true` — see the
305
- // `project-context` comment on `searchCommand` above for why a flag NAME
289
+ // `track-usage` comment on `searchCommand` above for why a flag NAME
306
290
  // must never start with `no-`.
307
291
  "track-usage": {
308
292
  type: "boolean",
309
293
  default: true,
310
- description: "A successful show updates ranking signals (usage-events telemetry, including the search-selection " +
311
- "linkage when this show follows a recent search). Default: on. Use --no-track-usage to run a " +
312
- "read-only show that does not influence future ranking.",
294
+ description: "A successful show records usage-events telemetry, including the search-selection linkage when this " +
295
+ "show follows a recent search. Default: on. Use --no-track-usage to run a show that records nothing.",
313
296
  },
314
297
  },
315
298
  async run({ args }) {
@@ -14,22 +14,20 @@
14
14
  import { getSources, loadConfig } from "../../core/config/config.js";
15
15
  import { rethrowIfTestIsolationError, UsageError } from "../../core/errors.js";
16
16
  import { appendEvent } from "../../core/events.js";
17
+ import { redactCredentialPatterns } from "../../core/redaction.js";
18
+ import { withStateDbTelemetry } from "../../core/state-db.js";
17
19
  import { resolveReadSources } from "../../indexer/read-preflight.js";
18
20
  import { searchLocal } from "../../indexer/search/db-search.js";
19
21
  import { getSearchHitAttribution, usageEventAttributionMetadata, } from "../../indexer/search/search-attribution.js";
20
- import { getEntryIdByFilePath, getItemRefById } from "../../storage/repositories/index-entries-repository.js";
21
- // Eagerly import source providers to trigger self-registration before the
22
- // indexer or path-resolution code runs.
23
- import "../../sources/providers/index.js";
24
- import { withStateDbTelemetry } from "../../core/state-db.js";
25
22
  import { insertUsageEvent } from "../../indexer/usage/usage-events.js";
26
23
  import { TELEMETRY_BUSY_TIMEOUT_MS, withIndexDb } from "../../storage/repositories/index-db.js";
24
+ import { getEntryIdByFilePath, getItemRefById } from "../../storage/repositories/index-entries-repository.js";
27
25
  import { searchRegistry } from "./registry-search.js";
28
26
  const DEFAULT_LIMIT = 20;
29
27
  function duplicateConceptWarnings(hits, defaultBundle) {
30
28
  const ownersByConcept = new Map();
31
29
  for (const hit of hits) {
32
- const displayRef = (hit.parentRef ?? hit.ref).split("#", 1)[0] ?? hit.ref;
30
+ const displayRef = hit.ref.split("#", 1)[0] ?? hit.ref;
33
31
  const boundary = displayRef.indexOf("//");
34
32
  const conceptId = boundary >= 0 ? displayRef.slice(boundary + 2) : displayRef;
35
33
  const owner = hit.origin ?? defaultBundle ?? "working-bundle";
@@ -47,7 +45,6 @@ function duplicateConceptWarnings(hits, defaultBundle) {
47
45
  export async function akmSearch(input) {
48
46
  const t0 = Date.now();
49
47
  const query = input.query.trim();
50
- const normalizedQuery = query.toLowerCase();
51
48
  const searchType = input.type ?? "any";
52
49
  const limit = normalizeLimit(input.limit);
53
50
  const parsedSource = parseSearchSource(input.source ?? "local");
@@ -110,7 +107,7 @@ export async function akmSearch(input) {
110
107
  const localResult = source === "registry"
111
108
  ? undefined
112
109
  : await searchLocal({
113
- query: normalizedQuery,
110
+ query,
114
111
  searchType,
115
112
  limit,
116
113
  stashDir,
@@ -126,8 +123,6 @@ export async function akmSearch(input) {
126
123
  // would leak hits from sources the caller did not request.
127
124
  restrictToSources: namedSourceName !== undefined,
128
125
  includeExcludedTypes: input.includeSessions === true,
129
- disableProjectContext: input.disableProjectContext === true,
130
- disableScopedUtility: input.disableScopedUtility === true,
131
126
  });
132
127
  const registryResult = source === "local"
133
128
  ? undefined
@@ -249,7 +244,13 @@ function resolveEntryIds(db, hits) {
249
244
  * Per-entry events are recorded only for stash hits because registry hits
250
245
  * have no local entry_id to reference.
251
246
  */
252
- function logSearchEvent(query, response, mode = "keyword", eventSource = "user", attributionProjection = "full") {
247
+ function logSearchEvent(rawQuery, response, mode = "keyword", eventSource = "user", attributionProjection = "full") {
248
+ // Credentials pasted into a query (e.g. by the Claude Code hook that
249
+ // curates every user prompt) must never reach state.db verbatim — see
250
+ // `redactCredentialPatterns`. Redacted once here so every persistence call
251
+ // below (events.metadata_json via appendEvent, usage_events.query via
252
+ // insertUsageEvent) gets the same scrubbed text.
253
+ const query = redactCredentialPatterns(rawQuery);
253
254
  // Emit a structured event to events.jsonl so workflow-trace consumers
254
255
  // detect akm search invocations without relying on stdout scraping.
255
256
  const stashHits = response.hits.filter((h) => h.type !== "registry");
@@ -296,18 +297,11 @@ function logSearchEvent(query, response, mode = "keyword", eventSource = "user",
296
297
  source: eventSource,
297
298
  });
298
299
  }, TELEMETRY_BUSY_TIMEOUT_MS);
299
- // No live utility_scores/utility_scores_scoped write here (#862): a
300
- // search result is an impression, not a signal that the asset was
301
- // useful. Rewarding every returned hit created a feedback loop where
302
- // merely appearing in results inflated future ranking — assets
303
- // surfaced because they'd surfaced before, not because a user acted
304
- // on them. Retrieval counts are still recorded above via
305
- // insertUsageEvent (search_count) and rolled into utility_scores by
306
- // the offline `recomputeUtilityScores` pass (`akm index`), which uses
307
- // the show/search *select rate* — a ratio that requires an actual
308
- // `show`/select event, not raw impressions. Explicit signal comes
309
- // from `akm feedback` (applyFeedbackToUtilityScore) and from
310
- // selection (recordShowUsage / the `select` event derived from it).
300
+ // No live utility_scores write here (#862): a search result is an
301
+ // impression, not a signal that the asset was useful. Retrieval
302
+ // counts are recorded above via insertUsageEvent (search_count) and
303
+ // rolled into utility_scores by the offline `recomputeUtilityScores`
304
+ // pass (`akm index`).
311
305
  }, { busyTimeoutMs: TELEMETRY_BUSY_TIMEOUT_MS });
312
306
  }
313
307
  catch (err) {
@@ -34,8 +34,8 @@ import { SCRIPT_EXTENSIONS } from "../../core/recognition-util.js";
34
34
  import { presentationFor } from "../../core/type-presentation.js";
35
35
  import { warn, warnOnce } from "../../core/warn.js";
36
36
  import { hasGraphData } from "../../indexer/db/graph-db.js";
37
- import { listRelatedPathsForFile } from "../../indexer/graph/graph-boost.js";
38
37
  import { extractGraphForSingleFile } from "../../indexer/graph/graph-extraction.js";
38
+ import { listRelatedPathsForFile } from "../../indexer/graph/graph-related.js";
39
39
  import { lookupBundleRef, lookupBundleRefWithResolution } from "../../indexer/indexer.js";
40
40
  import { projectMarkdownFragmentContent } from "../../indexer/passes/metadata.js";
41
41
  import { ensurePrimaryIndexForRead, resolveReadSources } from "../../indexer/read-preflight.js";
@@ -48,9 +48,6 @@ import { resolveStorageLocations } from "../../storage/locations.js";
48
48
  import { closeDatabase, openExistingDatabase } from "../../storage/repositories/index-connection.js";
49
49
  import { TELEMETRY_BUSY_TIMEOUT_MS, withIndexDb } from "../../storage/repositories/index-db.js";
50
50
  import { getIndexedMarkdownFragment } from "../../storage/repositories/index-fts-repository.js";
51
- import { computeBodyHash } from "../../storage/repositories/index-llm-cache-repository.js";
52
- // Eagerly import source providers to trigger self-registration.
53
- import "../../sources/providers/index.js";
54
51
  import { getCurrentWorkflowScopeKey } from "../../workflows/authoring/scope-key.js";
55
52
  import { buildWorkflowAction } from "../../workflows/renderer.js";
56
53
  import { getActiveWorkflowRun } from "../../workflows/runtime/runs.js";
@@ -503,14 +500,6 @@ async function maybeExtractGraphInline(config, sourceStashDir, assetPath) {
503
500
  };
504
501
  reportNotices(graphExecution.notices);
505
502
  let alreadyGraphed = false;
506
- let bodyHash;
507
- try {
508
- const raw = fs.readFileSync(assetPath, "utf8");
509
- bodyHash = computeBodyHash(parseFrontmatter(raw).content.trim());
510
- }
511
- catch {
512
- return; // file gone/unreadable ⇒ nothing to extract
513
- }
514
503
  withIndexDb((db) => {
515
504
  alreadyGraphed = hasGraphData(db, sourceStashDir, assetPath);
516
505
  }, { busyTimeoutMs: TELEMETRY_BUSY_TIMEOUT_MS });
@@ -527,7 +516,7 @@ async function maybeExtractGraphInline(config, sourceStashDir, assetPath) {
527
516
  });
528
517
  try {
529
518
  await Promise.race([
530
- extractGraphForSingleFile(db, sourceStashDir, assetPath, bodyHash, {
519
+ extractGraphForSingleFile(db, sourceStashDir, assetPath, {
531
520
  config,
532
521
  llmRunner: graphExecution.runner,
533
522
  onNotices: reportNotices,
@@ -24,9 +24,11 @@
24
24
  * `proposal-new` shape). `show` is a new shape, `bundle-show`.
25
25
  */
26
26
  import { defineGroupCommand, defineJsonCommand, output } from "../../cli/shared.js";
27
+ import { renameBundle } from "../../core/bundle-rename.js";
27
28
  import { NotFoundError, TransientError, UsageError } from "../../core/errors.js";
28
29
  import { appendEvent } from "../../core/events.js";
29
30
  import { warn } from "../../core/warn.js";
31
+ import { akmTasksSync } from "../tasks/tasks.js";
30
32
  import { addCommand } from "./add-cli.js";
31
33
  import { akmInit } from "./init.js";
32
34
  import { akmListSources, akmRemove, akmUpdate } from "./installed-stashes.js";
@@ -182,9 +184,29 @@ const updateCommand = defineJsonCommand({
182
184
  output("update", result);
183
185
  },
184
186
  });
187
+ const renameCommand = defineJsonCommand({
188
+ meta: {
189
+ name: "rename",
190
+ description: "Rename a configured bundle's key everywhere akm persists it (config, lock, index, and its own proposals/task history). Content inside the bundle that still spells the old ref is reported, not rewritten.",
191
+ },
192
+ args: {
193
+ old: { type: "positional", description: "Current bundle name", required: true },
194
+ new: { type: "positional", description: "New bundle name (must be a legal, unused slug)", required: true },
195
+ "dry-run": {
196
+ type: "boolean",
197
+ description: "Show the rename plan without writing anything",
198
+ default: false,
199
+ },
200
+ },
201
+ async run({ args }) {
202
+ const result = await renameBundle(args.old, args.new, { dryRun: args["dry-run"] }, {
203
+ syncTasks: (newId, backend) => akmTasksSync({ backend }, newId),
204
+ });
205
+ output("bundle-rename", result);
206
+ },
207
+ });
185
208
  export function isSkippableBundleUpdateLock(error) {
186
- return (error instanceof TransientError &&
187
- ["INDEX_DB_CONTENDED", "STATE_DB_CONTENDED", "MAINTENANCE_BARRIER_BUSY"].includes(error.code));
209
+ return error instanceof TransientError && ["INDEX_DB_CONTENDED", "STATE_DB_CONTENDED"].includes(error.code);
188
210
  }
189
211
  export const bundleCommand = defineGroupCommand({
190
212
  meta: {
@@ -198,5 +220,6 @@ export const bundleCommand = defineGroupCommand({
198
220
  show: showCommand,
199
221
  remove: removeCommand,
200
222
  update: updateCommand,
223
+ rename: renameCommand,
201
224
  },
202
225
  });
@@ -92,6 +92,10 @@ export function bundleKeyForUrl(config, url) {
92
92
  * caller's `preferredName` when it is a legal slug, else slug the seed locator
93
93
  * (path/url) — the shared {@link deriveBundleId} rule (D-R5), made unique against
94
94
  * the currently-configured bundle keys.
95
+ *
96
+ * Every add path validates an explicit `--name` with
97
+ * {@link validateExplicitBundleName} before calling in (an illegal or taken
98
+ * name fails loudly), so a `preferredName` that reaches here is returned as is.
95
99
  */
96
100
  export function nextBundleKey(bundles, preferredName, seedLocator) {
97
101
  return deriveBundleId(preferredName, seedLocator, new Set(Object.keys(bundles)));
@@ -66,8 +66,7 @@ function collectDangerousKeyFindings(installedStashRoot, checkEnvForDangerousKey
66
66
  }
67
67
  return allFindings;
68
68
  }
69
- /** Scan only; callers that already obtained approval use this for a final materialization fence. */
70
- export function scanStashForDangerousKeys(installedStashRoot) {
69
+ function scanStashForDangerousKeys(installedStashRoot) {
71
70
  const scanner = scannerOverride ??
72
71
  ((envPath, relPath) => scanEnvKeyNames(fs.readFileSync(envPath, "utf8"))
73
72
  .filter(isDangerousEnvKey)
@@ -11,7 +11,6 @@ import { error } from "../../core/warn.js";
11
11
  import { closeDatabase, openExistingDatabase } from "../../storage/repositories/index-connection.js";
12
12
  import { getEntryCount, getEntryCountByType } from "../../storage/repositories/index-entries-repository.js";
13
13
  import { getMeta } from "../../storage/repositories/index-meta-repository.js";
14
- import { isVecAvailable } from "../../storage/repositories/index-vec-repository.js";
15
14
  import { pkgVersion } from "../../version.js";
16
15
  /**
17
16
  * Assemble system info describing the current capabilities, configuration,
@@ -53,15 +52,9 @@ export function assembleInfo(options) {
53
52
  // Semantic status is read live from the index's own state, not a cached
54
53
  // verdict — a failed embed attempt at search time falls back to FTS and
55
54
  // reports that in the search response, it never disables the mode here.
56
- const semanticStatus = config.semanticSearchMode === "off"
57
- ? "disabled"
58
- : !indexStats.hasEmbeddings
59
- ? "pending"
60
- : indexStats.vecAvailable
61
- ? "ready-vec"
62
- : "ready-js";
55
+ const semanticStatus = config.semanticSearchMode === "off" ? "disabled" : indexStats.hasEmbeddings ? "ready-js" : "pending";
63
56
  const searchModes = ["fts"];
64
- if (semanticStatus === "ready-js" || semanticStatus === "ready-vec") {
57
+ if (semanticStatus === "ready-js") {
65
58
  searchModes.push("semantic", "hybrid");
66
59
  }
67
60
  return {
@@ -90,7 +83,6 @@ function readIndexStats(resolvedPath) {
90
83
  byType: {},
91
84
  lastBuiltAt: null,
92
85
  hasEmbeddings: false,
93
- vecAvailable: false,
94
86
  };
95
87
  // "Absent" is the ordinary first-run state; "inaccessible" is a fault that
96
88
  // must not present as an empty index (#791). `akm info` is the command an
@@ -112,7 +104,6 @@ function readIndexStats(resolvedPath) {
112
104
  byType: getEntryCountByType(db),
113
105
  lastBuiltAt: getMeta(db, "builtAt") ?? null,
114
106
  hasEmbeddings: getMeta(db, "hasEmbeddings") === "1",
115
- vecAvailable: isVecAvailable(db),
116
107
  };
117
108
  }
118
109
  catch (err) {