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

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 (343) hide show
  1. package/CHANGELOG.md +731 -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/proposal/drain.js +251 -644
  53. package/dist/commands/proposal/proposal-cli.js +3 -18
  54. package/dist/commands/proposal/proposal-types.js +20 -41
  55. package/dist/commands/proposal/proposal.js +1 -2
  56. package/dist/commands/proposal/propose.js +134 -160
  57. package/dist/commands/proposal/repository.js +502 -1487
  58. package/dist/commands/proposal/validators/proposal-quality-validators.js +71 -174
  59. package/dist/commands/proposal/validators/proposal-validators.js +1 -1
  60. package/dist/commands/proposal/validators/proposals.js +13 -89
  61. package/dist/commands/read/curate.js +63 -413
  62. package/dist/commands/read/search-cli.js +16 -33
  63. package/dist/commands/read/search.js +17 -23
  64. package/dist/commands/read/show.js +2 -13
  65. package/dist/commands/sources/bundle-cli.js +25 -2
  66. package/dist/commands/sources/bundle-config-ops.js +7 -0
  67. package/dist/commands/sources/dangerous-env-audit.js +1 -2
  68. package/dist/commands/sources/info.js +2 -11
  69. package/dist/commands/sources/installed-stashes.js +197 -746
  70. package/dist/commands/sources/schema-repair.js +98 -129
  71. package/dist/commands/sources/source-add.js +62 -12
  72. package/dist/commands/sources/stash-cli.js +1 -1
  73. package/dist/commands/tasks/explain.js +10 -13
  74. package/dist/commands/tasks/tasks-cli.js +9 -8
  75. package/dist/commands/tasks/tasks.js +326 -930
  76. package/dist/commands/tasks/validate.js +42 -21
  77. package/dist/commands/workflow/plan.js +22 -29
  78. package/dist/commands/workflow-cli.js +4 -4
  79. package/dist/core/adapter/adapters/akm-adapter.js +0 -1
  80. package/dist/core/adapter/adapters/akm-lint.js +2 -3
  81. package/dist/core/adapter/adapters/akm-metadata.js +11 -12
  82. package/dist/core/adapter/adapters/akm-workflow-adapter.js +1 -1
  83. package/dist/core/adapter/execution-source.js +17 -29
  84. package/dist/core/asset/resolve-ref.js +1 -1
  85. package/dist/core/bundle-id.js +42 -5
  86. package/dist/core/bundle-rename.js +291 -0
  87. package/dist/core/config/config-io.js +1 -2
  88. package/dist/core/config/config-schema.js +1 -33
  89. package/dist/core/config/config-walker.js +1 -1
  90. package/dist/core/config/config.js +163 -68
  91. package/dist/core/config/legacy-source-shape-shim.js +38 -9
  92. package/dist/core/config/schema/embedding.js +20 -5
  93. package/dist/core/config/schema/engines.js +5 -0
  94. package/dist/core/config/schema/execution.js +1 -1
  95. package/dist/core/config/schema/experimental.js +1 -1
  96. package/dist/core/config/schema/improve-processes.js +21 -95
  97. package/dist/core/config/schema/improve.js +4 -42
  98. package/dist/core/config/schema/scheduler.js +12 -12
  99. package/dist/core/config/schema/search.js +6 -22
  100. package/dist/core/env-secret-ref.js +0 -1
  101. package/dist/core/errors.js +8 -9
  102. package/dist/core/file-lock.js +76 -173
  103. package/dist/core/logs-db.js +2 -2
  104. package/dist/core/paths.js +0 -27
  105. package/dist/core/redaction.js +109 -2
  106. package/dist/core/run-lock.js +2 -5
  107. package/dist/core/spawn-env.js +1 -1
  108. package/dist/core/state/migrations.js +108 -61
  109. package/dist/core/state-db-scope.js +2 -4
  110. package/dist/core/state-db.js +126 -692
  111. package/dist/core/type-presentation.js +1 -9
  112. package/dist/core/write-source.js +293 -1012
  113. package/dist/execution/input-contract.js +1 -1
  114. package/dist/execution/resolved-request.js +135 -689
  115. package/dist/execution/source.js +63 -257
  116. package/dist/execution/target-ref.js +1 -1
  117. package/dist/indexer/bundle-identity-guard.js +2 -2
  118. package/dist/indexer/db/graph-db.js +106 -46
  119. package/dist/indexer/ensure-index.js +44 -85
  120. package/dist/indexer/graph/graph-extraction.js +340 -562
  121. package/dist/indexer/graph/graph-related.js +130 -0
  122. package/dist/indexer/index-rebuild-lock.js +3 -11
  123. package/dist/indexer/index-writer-lock.js +8 -17
  124. package/dist/indexer/index-written-assets.js +139 -151
  125. package/dist/indexer/indexer.js +524 -846
  126. package/dist/indexer/materialize-embeddings.js +60 -397
  127. package/dist/indexer/passes/memory-inference.js +81 -90
  128. package/dist/indexer/passes/metadata.js +132 -200
  129. package/dist/indexer/read-preflight.js +0 -7
  130. package/dist/indexer/scan/doc-to-entry.js +1 -3
  131. package/dist/indexer/scan/drain-dir.js +1 -1
  132. package/dist/indexer/search/db-search.js +181 -590
  133. package/dist/indexer/search/fts-query.js +30 -41
  134. package/dist/indexer/search/ranking.js +28 -154
  135. package/dist/indexer/search/search-attribution.js +12 -32
  136. package/dist/indexer/search/search-fields.js +11 -15
  137. package/dist/indexer/search/search-hit-enrichers.js +54 -85
  138. package/dist/indexer/search/search-source.js +1 -4
  139. package/dist/indexer/usage/usage-events.js +2 -7
  140. package/dist/integrations/agent/engine-fallback.js +23 -40
  141. package/dist/integrations/agent/engine-resolution.js +93 -183
  142. package/dist/integrations/agent/execution.js +507 -0
  143. package/dist/integrations/agent/model-map.js +28 -156
  144. package/dist/integrations/agent/request-lowering.js +66 -141
  145. package/dist/integrations/agent/runner-dispatch.js +143 -321
  146. package/dist/integrations/agent/runner.js +54 -14
  147. package/dist/integrations/lockfile.js +53 -101
  148. package/dist/llm/embedders/deterministic.js +2 -3
  149. package/dist/llm/embedders/profile.js +71 -0
  150. package/dist/llm/embedders/remote.js +10 -15
  151. package/dist/llm/graph-extract.js +3 -12
  152. package/dist/llm/index-passes.js +3 -5
  153. package/dist/llm/memory-infer.js +1 -2
  154. package/dist/llm/metadata-enhance.js +1 -2
  155. package/dist/llm/structured-call.js +5 -24
  156. package/dist/output/generic-render.js +23 -11
  157. package/dist/output/html-render.js +13 -10
  158. package/dist/output/render-registry.js +3 -32
  159. package/dist/output/shapes/helpers.js +2 -34
  160. package/dist/output/shapes/passthrough.js +1 -9
  161. package/dist/{indexer/search/ranking-types.js → output/text/bundle-rename.js} +4 -1
  162. package/dist/output/text/command-format.js +60 -23
  163. package/dist/output/text/helpers.js +1 -1
  164. package/dist/output/text/migrate.js +5 -14
  165. package/dist/output/text/proposal-format.js +1 -2
  166. package/dist/output/text/workflow-format.js +0 -32
  167. package/dist/output/text.js +2 -0
  168. package/dist/registry/factory.js +4 -19
  169. package/dist/registry/network.js +66 -220
  170. package/dist/registry/providers/index.js +0 -2
  171. package/dist/registry/providers/skills-sh.js +3 -14
  172. package/dist/registry/providers/static-index.js +24 -26
  173. package/dist/registry/resolve.js +55 -131
  174. package/dist/scripts/akm-migrate-node.js +43937 -93313
  175. package/dist/scripts/akm-migrate.js +43697 -93071
  176. package/dist/setup/registry-stash-loader.js +4 -13
  177. package/dist/setup/semantic-assets.js +3 -44
  178. package/dist/setup/setup.js +1 -1
  179. package/dist/setup/steps/tasks.js +25 -15
  180. package/dist/sources/provider-factory.js +17 -18
  181. package/dist/sources/providers/filesystem.js +2 -3
  182. package/dist/sources/providers/git-install.js +7 -1
  183. package/dist/sources/providers/git-provider.js +0 -3
  184. package/dist/sources/providers/git-stash.js +0 -17
  185. package/dist/sources/providers/npm.js +2 -4
  186. package/dist/sources/providers/provider-utils.js +5 -10
  187. package/dist/sources/providers/website.js +0 -2
  188. package/dist/sources/snapshot-fetchers/website-ingest.js +1 -1
  189. package/dist/sources/website-url.js +2 -2
  190. package/dist/storage/database.js +9 -35
  191. package/dist/storage/repositories/improve-ledger-repository.js +168 -0
  192. package/dist/storage/repositories/index-connection.js +34 -70
  193. package/dist/storage/repositories/index-entries-repository.js +69 -111
  194. package/dist/storage/repositories/index-entry-mapper.js +1 -2
  195. package/dist/storage/repositories/index-entry-schema.js +83 -269
  196. package/dist/storage/repositories/index-fts-repository.js +86 -256
  197. package/dist/storage/repositories/index-llm-cache-repository.js +17 -0
  198. package/dist/storage/repositories/index-meta-repository.js +6 -4
  199. package/dist/storage/repositories/index-schema.js +192 -220
  200. package/dist/storage/repositories/index-utility-repository.js +8 -29
  201. package/dist/storage/repositories/index-vec-repository.js +133 -414
  202. package/dist/storage/repositories/outcome-repository.js +2 -1
  203. package/dist/storage/repositories/proposals-repository.js +35 -0
  204. package/dist/storage/repositories/registry-index-cache-repository.js +100 -0
  205. package/dist/storage/repositories/task-history-repository.js +26 -4
  206. package/dist/storage/repositories/workflow-runs-repository.js +53 -244
  207. package/dist/storage/sqlite-migrations.js +136 -0
  208. package/dist/storage/sqlite-pragmas.js +11 -9
  209. package/dist/storage/sqlite-transaction.js +170 -0
  210. package/dist/storage/state-db-integrity.js +34 -27
  211. package/dist/tasks/activation-config.js +134 -62
  212. package/dist/tasks/backends/cron.js +129 -277
  213. package/dist/tasks/backends/exec-utils.js +2 -5
  214. package/dist/tasks/backends/launchd.js +125 -745
  215. package/dist/tasks/backends/schtasks.js +101 -620
  216. package/dist/tasks/prepare/prepare-support.js +5 -15
  217. package/dist/tasks/prepare/prepare.js +0 -2
  218. package/dist/tasks/resolve-akm-bin.js +20 -79
  219. package/dist/tasks/run/attempt-lifecycle.js +0 -1
  220. package/dist/tasks/scheduler-binding.js +18 -238
  221. package/dist/tasks/scheduler-invocation.js +52 -52
  222. package/dist/tasks/scheduler-lock.js +53 -0
  223. package/dist/tasks/scheduler-sync.js +361 -751
  224. package/dist/tasks/source/parse-task-source.js +160 -10
  225. package/dist/tasks/source/task-source-v3-frozen.js +3 -4
  226. package/dist/tasks/source/task-to-v4.js +2 -2
  227. package/dist/workflows/authoring/authoring.js +3 -12
  228. package/dist/workflows/compile.js +211 -0
  229. package/dist/workflows/concurrency-policy.js +13 -74
  230. package/dist/workflows/exec/child-invocation.js +3 -17
  231. package/dist/workflows/exec/child-workflow.js +32 -141
  232. package/dist/workflows/exec/dispatch-redaction.js +13 -53
  233. package/dist/workflows/exec/environment.js +98 -0
  234. package/dist/workflows/exec/exec-unit.js +33 -140
  235. package/dist/workflows/exec/frozen-judge.js +7 -59
  236. package/dist/workflows/exec/native-executor.js +82 -341
  237. package/dist/workflows/exec/param-secrets.js +29 -47
  238. package/dist/workflows/exec/run-workflow.js +154 -387
  239. package/dist/workflows/exec/scheduler.js +9 -36
  240. package/dist/workflows/exec/step-work.js +127 -430
  241. package/dist/workflows/exec/unit-dispatch.js +11 -63
  242. package/dist/workflows/exec/unit-writer.js +8 -52
  243. package/dist/workflows/exec/worktree.js +39 -273
  244. package/dist/workflows/freeze/child-output-references.js +4 -15
  245. package/dist/workflows/freeze/environment.js +99 -92
  246. package/dist/workflows/freeze/freeze.js +172 -0
  247. package/dist/workflows/freeze/step-values.js +19 -21
  248. package/dist/workflows/freeze/targets/child-workflow.js +23 -92
  249. package/dist/workflows/freeze/targets/command.js +10 -33
  250. package/dist/workflows/freeze/targets/script.js +5 -12
  251. package/dist/workflows/freeze/targets/shell.js +3 -6
  252. package/dist/workflows/freeze/targets/task.js +25 -80
  253. package/dist/workflows/freeze/task-bindings.js +20 -67
  254. package/dist/workflows/{source-ir/github-yaml.js → github-yaml.js} +88 -206
  255. package/dist/workflows/ir/params.js +6 -51
  256. package/dist/workflows/ir/plan-hash.js +2 -34
  257. package/dist/workflows/parser.js +140 -43
  258. package/dist/{commands/improve/consolidate/types.js → workflows/plan.js} +2 -1
  259. package/dist/workflows/renderer.js +36 -69
  260. package/dist/workflows/resource-limits.js +12 -120
  261. package/dist/workflows/runtime/agent-identity.js +8 -40
  262. package/dist/workflows/runtime/run-outputs.js +3 -6
  263. package/dist/workflows/runtime/run-plan.js +316 -0
  264. package/dist/workflows/runtime/runs.js +48 -200
  265. package/dist/workflows/runtime/workflow-asset-loader.js +24 -57
  266. package/dist/workflows/{source-ir/semantics.js → source-semantics.js} +16 -20
  267. package/dist/workflows/validate-summary.js +2 -7
  268. package/docs/integration/bundling-akm.md +49 -42
  269. package/docs/migration/README.md +1 -0
  270. package/docs/migration/release-notes/0.9.17.md +41 -0
  271. package/docs/migration/v0.9.1-to-v0.9.2.md +19 -7
  272. package/docs/reference/cli.md +182 -125
  273. package/docs/reference/configuration.md +49 -56
  274. package/docs/reference/data-and-telemetry.md +19 -20
  275. package/docs/reference/tasks.md +86 -38
  276. package/docs/reference/workflow-schema.md +14 -18
  277. package/docs/reference/workflows.md +6 -9
  278. package/package.json +1 -1
  279. package/schemas/akm-config.json +87 -406
  280. package/dist/commands/health/advisories.js +0 -150
  281. package/dist/commands/health/metrics.js +0 -329
  282. package/dist/commands/health/surfaces.js +0 -102
  283. package/dist/commands/improve/anti-collapse.js +0 -83
  284. package/dist/commands/improve/collapse-detector.js +0 -432
  285. package/dist/commands/improve/consolidate/eligibility.js +0 -48
  286. package/dist/commands/improve/consolidate/merge.js +0 -146
  287. package/dist/commands/improve/distill/promote-memory.js +0 -329
  288. package/dist/commands/improve/distill/quality-gate.js +0 -500
  289. package/dist/commands/improve/memory/memory-contradiction-detect.js +0 -291
  290. package/dist/commands/improve/proposal-envelope.js +0 -31
  291. package/dist/commands/improve/run-context.js +0 -123
  292. package/dist/commands/improve/shared.js +0 -21
  293. package/dist/commands/improve/source-identity.js +0 -28
  294. package/dist/commands/improve/triage.js +0 -96
  295. package/dist/commands/proposal/drain-policies.js +0 -151
  296. package/dist/commands/sources/update-transaction.js +0 -220
  297. package/dist/core/action-contributors.js +0 -28
  298. package/dist/core/config/config-version-shim.js +0 -101
  299. package/dist/core/config/retired-experimental-keys-shim.js +0 -62
  300. package/dist/core/fs-txn.js +0 -405
  301. package/dist/core/lexical-score.js +0 -25
  302. package/dist/core/maintenance-barrier.js +0 -167
  303. package/dist/execution/executable-identity.js +0 -105
  304. package/dist/execution/guarded-source.js +0 -441
  305. package/dist/indexer/graph/graph-boost.js +0 -427
  306. package/dist/indexer/graph/graph-dedup.js +0 -95
  307. package/dist/indexer/search/name-match.js +0 -35
  308. package/dist/indexer/search/ranking-contributors.js +0 -515
  309. package/dist/indexer/walk/project-context.js +0 -192
  310. package/dist/integrations/agent/execution-cascade.js +0 -566
  311. package/dist/integrations/agent/execution-definitions.js +0 -202
  312. package/dist/integrations/agent/execution-lowering.js +0 -841
  313. package/dist/integrations/agent/execution-preparation.js +0 -98
  314. package/dist/integrations/agent/inline-execution.js +0 -74
  315. package/dist/registry/create-provider-registry.js +0 -29
  316. package/dist/registry/pinned-request-helper.js +0 -247
  317. package/dist/registry/pinned-transport.js +0 -717
  318. package/dist/sources/providers/index.js +0 -14
  319. package/dist/storage/engines/sqlite-migrations.js +0 -271
  320. package/dist/storage/repositories/canaries-repository.js +0 -107
  321. package/dist/storage/repositories/embedding-salvage-repository.js +0 -184
  322. package/dist/storage/repositories/registry-cache.js +0 -113
  323. package/dist/tasks/scheduler-sync-preview.js +0 -52
  324. package/dist/workflows/freeze/resolve-steps.js +0 -86
  325. package/dist/workflows/freeze/source-freeze.js +0 -64
  326. package/dist/workflows/ir/compile.js +0 -321
  327. package/dist/workflows/ir/environment-v4.js +0 -330
  328. package/dist/workflows/ir/freeze-v4.js +0 -153
  329. package/dist/workflows/ir/schema-v4.js +0 -745
  330. package/dist/workflows/ir/schema.js +0 -354
  331. package/dist/workflows/program/schema.js +0 -78
  332. package/dist/workflows/runtime/checkin.js +0 -57
  333. package/dist/workflows/runtime/plan-classifier.js +0 -196
  334. package/dist/workflows/runtime/unit-checkin.js +0 -45
  335. package/dist/workflows/runtime/unit-phases.js +0 -20
  336. package/dist/workflows/schema.js +0 -4
  337. package/dist/workflows/source-ir/compile.js +0 -200
  338. package/dist/workflows/source-ir/program.js +0 -50
  339. package/dist/workflows/source-ir/result.js +0 -26
  340. package/dist/workflows/source-ir/schema.js +0 -786
  341. package/dist/workflows/source-ir/triggers.js +0 -79
  342. package/dist/workflows/source-ir/uses.js +0 -40
  343. 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,13 @@ 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
+ * This helper stays forgiving (no `--name` contract enforcement): it is also
97
+ * used by `akm source add` (`source-manage.ts`'s `addStash`), which predates
98
+ * and is not in scope for the D6 `--name` contract. A caller that DOES need
99
+ * the D6 contract (an illegal or already-taken explicit name failing loudly)
100
+ * validates with {@link validateExplicitBundleName} itself before calling in,
101
+ * as `source-add.ts`'s local/website/registry add paths do.
95
102
  */
96
103
  export function nextBundleKey(bundles, preferredName, seedLocator) {
97
104
  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) {