akm-cli 0.9.17-alpha.2 → 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 +756 -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 +363 -679
  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 -427
  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
@@ -1,41 +1,12 @@
1
1
  // This Source Code Form is subject to the terms of the Mozilla Public
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
- /**
5
- * Per-command `md` / `html` renderer registries (D7).
6
- *
7
- * Mirrors `src/output/text/registry.ts`: a command may register a bespoke
8
- * renderer for a document format, and anything unregistered falls back to the
9
- * generic rendering of its shaped envelope (`./generic-render`). The fallback
10
- * is what makes all six `--format` values universal; the registry is what lets
11
- * a command that has something better to say — `akm health` and its report
12
- * templates — say it without the output pipeline knowing that command exists.
13
- *
14
- * Kept separate from the module that dispatches through it so per-command
15
- * renderer modules can import `registerMdRenderer` / `registerHtmlRenderer`
16
- * without a cycle back into the pipeline, exactly as the text registry does.
17
- *
18
- * Returning `null` from a handler means "I have nothing special for this
19
- * payload" and falls through to the generic renderer — `akm health` uses that
20
- * to keep its bespoke tables for the shapes that have them while still
21
- * rendering everything else.
22
- */
23
- import { createCommandRegistry } from "./command-registry.js";
24
- const MD_RENDERER_REGISTRY = createCommandRegistry();
25
- const HTML_RENDERER_REGISTRY = createCommandRegistry();
4
+ const mdRenderers = new Map();
26
5
  /** Register a Markdown renderer for a command name. */
27
6
  export function registerMdRenderer(command, handler) {
28
- MD_RENDERER_REGISTRY.register(command, handler);
7
+ mdRenderers.set(command, handler);
29
8
  }
30
9
  /** Look up a registered Markdown renderer, or `undefined` when unregistered. */
31
10
  export function getMdRendererHandler(command) {
32
- return MD_RENDERER_REGISTRY.get(command);
33
- }
34
- /** Register an HTML renderer for a command name. */
35
- export function registerHtmlRenderer(command, handler) {
36
- HTML_RENDERER_REGISTRY.register(command, handler);
37
- }
38
- /** Look up a registered HTML renderer, or `undefined` when unregistered. */
39
- export function getHtmlRendererHandler(command) {
40
- return HTML_RENDERER_REGISTRY.get(command);
11
+ return mdRenderers.get(command);
41
12
  }
@@ -284,40 +284,14 @@ export function shapeSearchHit(hit, detail) {
284
284
  // `ref` is included at `brief` so agents can run `akm show <ref>` without
285
285
  // needing --detail full or --shape agent (REC-03).
286
286
  if (detail === "brief") {
287
- return pickFields(hit, [
288
- "type",
289
- "name",
290
- "ref",
291
- "action",
292
- "estimatedTokens",
293
- "keys",
294
- "selectedRef",
295
- "parentRef",
296
- "fragmentOrdinal",
297
- "fragmentCount",
298
- "parentEstimatedTokens",
299
- ]);
287
+ return pickFields(hit, ["type", "name", "ref", "action", "estimatedTokens", "keys"]);
300
288
  }
301
289
  if (detail === "normal") {
302
290
  // `warnings` is projected at `normal` so non-fatal hit-level issues are
303
291
  // visible without forcing callers up to `--detail full`. Optional
304
292
  // `quality` (v1 spec §4.2) is also surfaced when present so callers
305
293
  // can see why a `proposed` entry showed up under `--include-proposed`.
306
- // `matchStage` (issue #856) surfaces which stage of the progressive
307
- // AND->OR lexical ladder produced the hit; cheap compact enum, worth
308
- // showing without requiring `--detail full`.
309
- const shaped = capDescription(pickFields(hit, [
310
- "type",
311
- "name",
312
- "description",
313
- "action",
314
- "score",
315
- "estimatedTokens",
316
- "warnings",
317
- "quality",
318
- "matchStage",
319
- ...FRAGMENT_PROVENANCE_FIELDS,
320
- ]), NORMAL_DESCRIPTION_LIMIT);
294
+ const shaped = capDescription(pickFields(hit, ["type", "name", "description", "action", "score", "estimatedTokens", "warnings", "quality"]), NORMAL_DESCRIPTION_LIMIT);
321
295
  if (Array.isArray(hit.keys) && hit.keys.length > 0)
322
296
  shaped.keys = hit.keys;
323
297
  return shaped;
@@ -338,12 +312,6 @@ export function shapeSearchHitForAgent(hit) {
338
312
  "score",
339
313
  "estimatedTokens",
340
314
  "keys",
341
- // Issue #856: which stage of the progressive AND->OR lexical ladder
342
- // produced this hit. Agents need this to gauge how much to trust a
343
- // hit (a strict-AND match is stronger signal than an OR-fallback
344
- // recovery match) without going to `--detail full`.
345
- "matchStage",
346
- ...FRAGMENT_PROVENANCE_FIELDS,
347
315
  ]);
348
316
  if (picked.editable !== false)
349
317
  delete picked.editHint;
@@ -8,15 +8,6 @@
8
8
  // envelope. Never overwrites an existing `shape`, `schemaVersion`, or `ok`;
9
9
  // a command whose exit code grades the outcome emits through
10
10
  // `outputWithExitCode` (src/cli/shared.ts), which sets `ok` from that code.
11
- //
12
- // Builds a shallow copy rather than mutating `result` in place: several
13
- // command results (e.g. `akm task sync --dry-run`'s `SchedulerPlanPreview`,
14
- // see src/tasks/scheduler-sync-preview.ts) are deliberately `Object.freeze`d
15
- // by their producer as an immutability guarantee, and an in-place `obj.shape
16
- // = …` assignment throws ("Attempting to define property on object that is
17
- // not extensible") the moment it hits one. Copying tolerates both frozen and
18
- // mutable inputs uniformly, and `output()` never uses the result's identity
19
- // past this call, so a copy is safe here.
20
11
  function makeStampHandler(command) {
21
12
  return (result) => {
22
13
  if (result === null || result === undefined)
@@ -39,6 +30,7 @@ const PASSTHROUGH_COMMANDS = [
39
30
  "add",
40
31
  "agent-result",
41
32
  "bundle-create",
33
+ "bundle-rename",
42
34
  "bundle-show",
43
35
  "clone",
44
36
  "command-dry-run",
@@ -1,4 +1,7 @@
1
1
  // This Source Code Form is subject to the terms of the Mozilla Public
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
- export {};
4
+ import { formatBundleRenamePlain } from "./helpers.js";
5
+ export const bundleRenameFormatters = [
6
+ { command: "bundle-rename", handler: (r) => formatBundleRenamePlain(r) },
7
+ ];
@@ -270,32 +270,10 @@ export function formatSearchPlain(r, detail) {
270
270
  // Optional v1 spec §4.2 quality marker (e.g. "curated" / "proposed").
271
271
  if (typeof hit.quality === "string" && hit.quality)
272
272
  lines.push(` quality: ${hit.quality}`);
273
- // Issue #856: which stage of the progressive AND->OR lexical ladder
274
- // produced this hit ("exact" | "prefix" | "relaxed").
275
- if (typeof hit.matchStage === "string" && hit.matchStage)
276
- lines.push(` matchStage: ${hit.matchStage}`);
277
273
  // Surface optional hit-level warnings (v1 spec §4.2).
278
274
  if (Array.isArray(hit.warnings) && hit.warnings.length > 0) {
279
275
  lines.push(` warnings: ${hit.warnings.join("; ")}`);
280
276
  }
281
- const graph = typeof hit.graph === "object" && hit.graph !== null ? hit.graph : undefined;
282
- if (graph) {
283
- const entities = Array.isArray(graph.entities) ? graph.entities : [];
284
- if (entities.length > 0) {
285
- const matched = entities
286
- .filter((entity) => String(entity.kind ?? "") === "matched")
287
- .map((entity) => String(entity.name ?? "?"));
288
- const neighbors = entities
289
- .filter((entity) => String(entity.kind ?? "") !== "matched")
290
- .map((entity) => String(entity.name ?? "?"));
291
- lines.push(` graph: ${[
292
- matched.length > 0 ? `query match=${matched.join(", ")}` : undefined,
293
- neighbors.length > 0 ? `neighbors=${neighbors.join(", ")}` : undefined,
294
- ]
295
- .filter(Boolean)
296
- .join("; ")}`);
297
- }
298
- }
299
277
  if (detail === "full") {
300
278
  if (hit.path)
301
279
  lines.push(` path: ${String(hit.path)}`);
@@ -556,7 +534,8 @@ export function formatAddPlain(r) {
556
534
  const index = r.index;
557
535
  const scanned = index?.directoriesScanned ?? 0;
558
536
  const total = index?.totalEntries ?? 0;
559
- const lines = [`Installed ${r.ref} (${scanned} directories scanned, ${total} total assets indexed)`];
537
+ const bundleSuffix = typeof r.bundleId === "string" && r.bundleId.length > 0 ? ` as bundle "${r.bundleId}"` : "";
538
+ const lines = [`Installed ${r.ref}${bundleSuffix} (${scanned} directories scanned, ${total} total assets indexed)`];
560
539
  const warnings = index?.warnings;
561
540
  if (Array.isArray(warnings) && warnings.length > 0) {
562
541
  lines.push(`Warnings (${warnings.length}):`);
@@ -589,6 +568,64 @@ export function formatRemovePlain(r) {
589
568
  const ok = r.ok !== false ? "OK" : "FAILED";
590
569
  return `remove: ${target} ${ok}`;
591
570
  }
571
+ export function formatBundleRenamePlain(r) {
572
+ const oldId = String(r.oldId ?? "?");
573
+ const newId = String(r.newId ?? "?");
574
+ const applied = r.applied === true;
575
+ const config = r.config ?? {};
576
+ const state = r.state ?? {};
577
+ const index = r.index ?? {};
578
+ const schedulerRefs = Array.isArray(config.schedulerRefs) ? config.schedulerRefs.length : 0;
579
+ const proposalRefs = Number(state.proposalRefs ?? 0);
580
+ const proposalTargets = Number(state.proposalTargets ?? 0);
581
+ const taskHistoryRefs = Number(state.taskHistoryRefs ?? 0);
582
+ const entries = Number(index.entries ?? 0);
583
+ const contentRefs = Array.isArray(r.contentRefs) ? r.contentRefs : [];
584
+ const nativeSchedulerRows = Array.isArray(r.nativeSchedulerRows) ? r.nativeSchedulerRows : [];
585
+ const verb = applied ? "Renamed" : "Would rename";
586
+ const lines = [
587
+ `${verb} bundle "${oldId}" to "${newId}" (${entries} index entries, ${schedulerRefs} scheduler ref(s), ` +
588
+ `${proposalRefs + proposalTargets} proposal reference(s), ${taskHistoryRefs} task-history row(s)).`,
589
+ ];
590
+ if (!applied) {
591
+ lines.push("Re-run without --dry-run to apply. It also re-syncs native scheduler bindings under the new name.");
592
+ if (nativeSchedulerRows.length > 0) {
593
+ lines.push(`Native scheduler rows naming "${oldId}//" that the sync would replace:`);
594
+ for (const row of nativeSchedulerRows)
595
+ lines.push(` - ${String(row)}`);
596
+ }
597
+ }
598
+ else {
599
+ const taskSync = r.taskSync;
600
+ const syncResult = taskSync?.result;
601
+ if (syncResult) {
602
+ const installed = Array.isArray(syncResult.installed) ? syncResult.installed.length : 0;
603
+ const updated = Array.isArray(syncResult.updated) ? syncResult.updated.length : 0;
604
+ const removed = Array.isArray(syncResult.removed) ? syncResult.removed.length : 0;
605
+ const failures = Array.isArray(syncResult.failures)
606
+ ? syncResult.failures
607
+ : [];
608
+ if (failures.length === 0) {
609
+ lines.push(`Native scheduler bindings re-synced under the new name (${installed} installed, ${updated} updated, ${removed} removed).`);
610
+ }
611
+ else {
612
+ lines.push(`Native scheduler sync after rename: ${installed} installed, ${updated} updated, ${removed} removed, ${failures.length} failed.`);
613
+ for (const failure of failures)
614
+ lines.push(` - ${failure.ref ?? failure.path}: ${failure.reason}`);
615
+ lines.push("Run `akm task sync` to retry.");
616
+ }
617
+ }
618
+ else if (taskSync?.ok === false && taskSync.error) {
619
+ lines.push(`Re-syncing native scheduler bindings failed: ${taskSync.error}. Run \`akm task sync\` to retry.`);
620
+ }
621
+ }
622
+ if (contentRefs.length > 0) {
623
+ lines.push(`Content still spelling "${oldId}//" (not rewritten — edit these by hand):`);
624
+ for (const file of contentRefs)
625
+ lines.push(` - ${String(file)}`);
626
+ }
627
+ return lines.join("\n");
628
+ }
592
629
  export function formatUpdatePlain(r) {
593
630
  // R-015: `processed` alone conflated three cases into one empty array —
594
631
  // a true no-op (--all with nothing configured), a source this call flatly
@@ -15,7 +15,7 @@
15
15
  *
16
16
  * No registry imports — no circular dependencies.
17
17
  */
18
- export { formatAddPlain, formatBundleShowPlain, formatClonePlain, formatConfigPlain, formatCuratePlain, formatEnvCreatePlain, formatEnvExportPlain, formatEnvListPlain, formatEnvRemovePlain, formatEventLine, formatEventsPlain, formatFeedbackPlain, formatImportPlain, formatIndexPlain, formatInfoPlain, formatInitPlain, formatListPlain, formatModelsListPlain, formatRegistryAddPlain, formatRegistryListPlain, formatRegistryRemovePlain, formatRegistrySearchPlain, formatRememberPlain, formatRemovePlain, formatSearchPlain, formatSyncPlain, formatUpdatePlain, formatUpgradePlain, } from "./command-format.js";
18
+ export { formatAddPlain, formatBundleRenamePlain, formatBundleShowPlain, formatClonePlain, formatConfigPlain, formatCuratePlain, formatEnvCreatePlain, formatEnvExportPlain, formatEnvListPlain, formatEnvRemovePlain, formatEventLine, formatEventsPlain, formatFeedbackPlain, formatImportPlain, formatIndexPlain, formatInfoPlain, formatInitPlain, formatListPlain, formatModelsListPlain, formatRegistryAddPlain, formatRegistryListPlain, formatRegistryRemovePlain, formatRegistrySearchPlain, formatRememberPlain, formatRemovePlain, formatSearchPlain, formatSyncPlain, formatUpdatePlain, formatUpgradePlain, } from "./command-format.js";
19
19
  export { formatHealthPlain } from "./health-format.js";
20
20
  export { formatLintPlain } from "./lint-format.js";
21
21
  export { formatGateDecisionSummary, formatProposalAcceptPlain, formatProposalDiffPlain, formatProposalDrainPlain, formatProposalListPlain, formatProposalProducerPlain, formatProposalRejectPlain, formatProposalShowPlain, } from "./proposal-format.js";
@@ -18,27 +18,18 @@ export function formatMigratePlain(result) {
18
18
  if (typeof plan.status !== "string")
19
19
  return null;
20
20
  const lines = [`${planGlyph(plan.status)} ${plan.status}`];
21
- if (plan.taskV3Migration) {
22
- const tasks = plan.taskV3Migration;
23
- lines.push(` task-v2->v3: ${tasks.changed} change, ${tasks.skipped} current, ${tasks.blocked} blocked`);
24
- }
25
- if (plan.taskV4Migration) {
26
- const tasks = plan.taskV4Migration;
27
- lines.push(` task-v3->v4: ${tasks.changed} change, ${tasks.skipped} current, ${tasks.blocked} blocked`);
21
+ if (plan.taskFiles) {
22
+ const tasks = plan.taskFiles;
23
+ lines.push(` task files: ${tasks.changed} change, ${tasks.skipped} current, ${tasks.blocked} blocked`);
28
24
  }
29
25
  if (plan.blockers?.length) {
30
26
  lines.push("", "blockers:", ...plan.blockers.map((blocker) => ` - ${blocker}`));
31
27
  }
32
28
  if (plan.backupPath) {
33
- lines.push("", `backup (v2->v3): ${plan.backupPath}`);
29
+ lines.push("", `backup: ${plan.backupPath}`);
34
30
  }
35
31
  if (plan.applied !== undefined)
36
- lines.push(`applied (v2->v3): ${plan.applied}`);
37
- if (plan.taskV4BackupPath) {
38
- lines.push(`backup (v3->v4): ${plan.taskV4BackupPath}`);
39
- }
40
- if (plan.taskV4Applied !== undefined)
41
- lines.push(`applied (v3->v4): ${plan.taskV4Applied}`);
32
+ lines.push(`applied: ${plan.applied}`);
42
33
  return lines.join("\n");
43
34
  }
44
35
  export const migrateFormatters = [
@@ -184,7 +184,6 @@ export function formatProposalRejectPlain(r) {
184
184
  return `Rejected proposal ${String(r.id)} (${String(r.ref)})${reason}`;
185
185
  }
186
186
  export function formatProposalDrainPlain(r) {
187
- const policy = String(r.policy ?? "?");
188
187
  const applyMode = String(r.applyMode ?? "queue");
189
188
  const promoted = Array.isArray(r.promoted) ? r.promoted : [];
190
189
  const rejected = Array.isArray(r.rejected) ? r.rejected : [];
@@ -194,7 +193,7 @@ export function formatProposalDrainPlain(r) {
194
193
  const failed = Array.isArray(r.failed) ? r.failed : [];
195
194
  const prefix = r.dryRun === true ? "[dry-run] " : "";
196
195
  const lines = [
197
- `${prefix}Drained proposal queue (strategy=${String(r.strategy ?? "?")}, policy=${policy}, applyMode=${applyMode})`,
196
+ `${prefix}Drained proposal queue (strategy=${String(r.strategy ?? "?")}, applyMode=${applyMode})`,
198
197
  ` promoted: ${promoted.length}`,
199
198
  ` rejected: ${rejected.length}`,
200
199
  ` deferred: ${deferred.length}`,
@@ -108,13 +108,6 @@ export function formatWorkflowStatusPlain(result) {
108
108
  const attempts = typeof unit.attempts === "number" ? unit.attempts : undefined;
109
109
  const suffix = attempts !== undefined && attempts > 1 ? `, attempt ${attempts}` : "";
110
110
  lines.push(` - ${id} [${node}] (${status}${suffix})`);
111
- // Codex round-3 finding B: a `running` claim gone silent past the check-in
112
- // window — the process holding it likely died. Surface it (with the claim
113
- // holder) so a human can reclaim/re-run the unit.
114
- if (unit.stale === true) {
115
- const holder = typeof unit.claimHolder === "string" && unit.claimHolder.trim() ? ` claimed by ${unit.claimHolder}` : "";
116
- lines.push(` stale: claim went silent past the check-in window${holder} — its driver may have died`);
117
- }
118
111
  if (typeof unit.failureReason === "string" && unit.failureReason.trim()) {
119
112
  lines.push(` failure_reason: ${unit.failureReason}`);
120
113
  }
@@ -126,27 +119,8 @@ export function formatWorkflowStatusPlain(result) {
126
119
  }
127
120
  }
128
121
  }
129
- // Review C2: the check-in `continue` directive must survive plain-text
130
- // rendering — JSON consumers saw `checkin` but the text path dropped it.
131
- const checkinLine = formatWorkflowCheckinLine(result);
132
- if (checkinLine) {
133
- lines.push("");
134
- lines.push(checkinLine);
135
- }
136
122
  return lines.join("\n");
137
123
  }
138
- /**
139
- * Render the stalled-run check-in directive (#506) when present on a
140
- * workflow-status result. Returns null when the run is healthy.
141
- */
142
- function formatWorkflowCheckinLine(result) {
143
- const checkin = typeof result.checkin === "object" && result.checkin !== null
144
- ? result.checkin
145
- : undefined;
146
- if (!checkin || typeof checkin.directive !== "string" || !checkin.directive.trim())
147
- return null;
148
- return checkin.directive.trim();
149
- }
150
124
  /**
151
125
  * One `! lowering[<severity>] <code> (<adapter>[; <field>]): <message>` line
152
126
  * from a `{code, severity, adapter, field?, message}` lowering notice, or
@@ -346,12 +320,6 @@ export function formatWorkflowPlanPlain(result) {
346
320
  for (const [index, step] of steps.entries()) {
347
321
  renderPlanStepLines(step, index + 1, lines);
348
322
  }
349
- const sourceReadSet = Array.isArray(result.sourceReadSet) ? result.sourceReadSet : [];
350
- if (sourceReadSet.length > 0) {
351
- lines.push("read set:");
352
- for (const entry of sourceReadSet)
353
- lines.push(` ${String(entry)}`);
354
- }
355
323
  const notices = Array.isArray(result.notices) ? result.notices : [];
356
324
  if (notices.length > 0) {
357
325
  lines.push("notices:");
@@ -4,6 +4,7 @@
4
4
  import { writeStdout } from "./stdout.js";
5
5
  import { addFormatters } from "./text/add.js";
6
6
  import { bundleCreateFormatters } from "./text/bundle-create.js";
7
+ import { bundleRenameFormatters } from "./text/bundle-rename.js";
7
8
  import { bundleShowFormatters } from "./text/bundle-show.js";
8
9
  import { cloneFormatters } from "./text/clone.js";
9
10
  import { configFormatters } from "./text/config.js";
@@ -40,6 +41,7 @@ import { workflowFormatters } from "./text/workflow.js";
40
41
  // compile instead of silently disappearing at runtime.
41
42
  const BUILT_IN_TEXT_FORMATTERS = [
42
43
  ...bundleCreateFormatters,
44
+ ...bundleRenameFormatters,
43
45
  ...bundleShowFormatters,
44
46
  ...indexFormatters,
45
47
  ...showFormatters,
@@ -1,30 +1,15 @@
1
1
  // This Source Code Form is subject to the terms of the Mozilla Public
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
- /**
5
- * Registry provider factory map.
6
- *
7
- * Maps registry provider type identifiers (e.g. "static-index", "skills-sh")
8
- * to factory functions that create RegistryProvider instances.
9
- *
10
- * "Registry" here refers to the stash discovery registries (static index files,
11
- * skills.sh API) — not to be confused with the source provider factory map in
12
- * `sources/provider-factory.ts` or the installed-source operations in
13
- * `installed-stashes.ts`.
14
- *
15
- * Factories use the `RegistryProviderFactory` type owned by
16
- * `src/registry/providers/types.ts`.
17
- */
18
- import { createProviderRegistry } from "./create-provider-registry.js";
19
4
  // ── Factory map ─────────────────────────────────────────────────────────────
20
- const registry = createProviderRegistry();
5
+ const factories = new Map();
21
6
  export function registerRegistryProvider(type, factory) {
22
- registry.register(type, factory);
7
+ factories.set(type, factory);
23
8
  }
24
9
  export function resolveRegistryProviderFactory(type) {
25
- return registry.resolve(type);
10
+ return factories.get(type) ?? null;
26
11
  }
27
12
  /** Test-only seam: removes a registration made with {@link registerRegistryProvider}. */
28
13
  export function unregisterRegistryProvider(type) {
29
- registry.unregister(type);
14
+ factories.delete(type);
30
15
  }