akm-cli 0.10.261012-beta → 0.10.261014-beta

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 (518) hide show
  1. package/CHANGELOG.md +710 -3
  2. package/README.md +15 -0
  3. package/SECURITY.md +11 -10
  4. package/STABILITY.md +47 -51
  5. package/dist/assets/hints/cli-hints-full.md +21 -19
  6. package/dist/assets/hints/cli-hints-short.md +3 -4
  7. package/dist/assets/opencode/akm-plugin.js +177 -0
  8. package/dist/assets/stash-skeleton/README.md +1 -1
  9. package/dist/assets/tasks/core/improve.yml +1 -1
  10. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +1 -1
  11. package/dist/assets/ui/config.js +27 -10
  12. package/dist/assets/workflows/workflow-template.md +2 -2
  13. package/dist/cli/clack.js +3 -1
  14. package/dist/cli/selection.js +33 -0
  15. package/dist/cli/shared.js +14 -1
  16. package/dist/cli/unknown-flags.js +6 -37
  17. package/dist/cli.js +69 -48
  18. package/dist/commands/agent/agent-dispatch.js +17 -25
  19. package/dist/commands/agent/contribute-cli.js +9 -8
  20. package/dist/commands/command/command-cli.js +4 -8
  21. package/dist/commands/command/command-execution.js +25 -39
  22. package/dist/commands/command/execution-source-loader.js +10 -14
  23. package/dist/commands/completions.js +1 -1
  24. package/dist/commands/config-cli.js +14 -5
  25. package/dist/commands/env/child-env.js +12 -14
  26. package/dist/commands/env/env-binding.js +47 -58
  27. package/dist/commands/env/env-cli.js +22 -24
  28. package/dist/commands/env/env.js +10 -58
  29. package/dist/commands/env/secret-cli.js +11 -29
  30. package/dist/commands/env/secret.js +3 -10
  31. package/dist/commands/health/checks.js +10 -849
  32. package/dist/commands/health/connections-and-harnesses-check.js +109 -0
  33. package/dist/commands/health/egress.js +3 -3
  34. package/dist/commands/health/html-report.js +9 -10
  35. package/dist/commands/health/plugin-staleness.js +18 -11
  36. package/dist/commands/health/report-view-model.js +16 -12
  37. package/dist/commands/health/scheduler-binary.js +1 -1
  38. package/dist/commands/health/semantic-search-check.js +85 -0
  39. package/dist/commands/health/type-directory-check.js +0 -3
  40. package/dist/commands/health.js +30 -42
  41. package/dist/commands/improve/consolidate/pair-pass.js +10 -25
  42. package/dist/commands/improve/consolidate.js +10 -15
  43. package/dist/commands/improve/distill.js +5 -17
  44. package/dist/commands/improve/eligibility.js +1 -3
  45. package/dist/commands/improve/execution.js +37 -40
  46. package/dist/commands/improve/extract-cli.js +6 -11
  47. package/dist/commands/improve/extract-prompt.js +2 -2
  48. package/dist/commands/improve/extract.js +67 -97
  49. package/dist/commands/improve/improve-cli.js +22 -128
  50. package/dist/commands/improve/improve-report.js +1 -1
  51. package/dist/commands/improve/improve-strategies.js +25 -108
  52. package/dist/commands/improve/improve.js +10 -14
  53. package/dist/commands/improve/loop-stages.js +3 -0
  54. package/dist/commands/improve/memory/memory-improve.js +1 -1
  55. package/dist/commands/improve/preparation.js +8 -13
  56. package/dist/commands/improve/reflect.js +203 -332
  57. package/dist/commands/improve/retrieval-scope.js +1 -1
  58. package/dist/commands/improve/session-asset.js +3 -2
  59. package/dist/commands/improve/stage.js +87 -115
  60. package/dist/commands/lint/base-linter.js +3 -3
  61. package/dist/commands/lint/env-key-rules.js +7 -6
  62. package/dist/commands/lint/index.js +3 -3
  63. package/dist/commands/models-cli.js +103 -63
  64. package/dist/commands/proposal/drain.js +26 -39
  65. package/dist/commands/proposal/proposal-cli.js +14 -18
  66. package/dist/commands/proposal/propose-cli.js +4 -2
  67. package/dist/commands/proposal/propose.js +37 -64
  68. package/dist/commands/proposal/repository.js +17 -17
  69. package/dist/commands/proposal/validators/proposal-validators.js +3 -6
  70. package/dist/commands/read/curate.js +10 -6
  71. package/dist/commands/read/registry-search.js +2 -48
  72. package/dist/commands/read/search-cli.js +1 -8
  73. package/dist/commands/read/search.js +5 -6
  74. package/dist/commands/read/show.js +6 -29
  75. package/dist/commands/remember.js +25 -40
  76. package/dist/commands/sources/add-cli.js +8 -63
  77. package/dist/commands/sources/bundle-cli.js +8 -9
  78. package/dist/commands/sources/bundle-config-ops.js +2 -2
  79. package/dist/commands/sources/info.js +12 -1
  80. package/dist/commands/sources/init.js +1 -1
  81. package/dist/commands/sources/installed-stashes.js +119 -63
  82. package/dist/commands/sources/migration-help.js +1 -1
  83. package/dist/commands/sources/plugin-upgrade.js +8 -15
  84. package/dist/commands/sources/schema-repair.js +4 -10
  85. package/dist/commands/sources/source-add.js +2 -2
  86. package/dist/commands/sources/source-clone.js +31 -7
  87. package/dist/commands/sources/source-manage.js +4 -4
  88. package/dist/commands/targets.js +175 -0
  89. package/dist/commands/tasks/explain.js +104 -69
  90. package/dist/commands/tasks/tasks-cli.js +9 -11
  91. package/dist/commands/tasks/tasks.js +75 -97
  92. package/dist/commands/ui/api.js +11 -3
  93. package/dist/commands/ui/redact.js +5 -31
  94. package/dist/commands/ui/workspace-actions.js +1 -1
  95. package/dist/commands/workflow/plan.js +48 -9
  96. package/dist/commands/workflow-cli.js +40 -45
  97. package/dist/core/adapter/adapters/agent-skills-adapter.js +10 -11
  98. package/dist/core/adapter/adapters/akm-adapter.js +36 -41
  99. package/dist/core/adapter/adapters/akm-lint.js +10 -12
  100. package/dist/core/adapter/adapters/akm-metadata.js +2 -2
  101. package/dist/core/adapter/adapters/akm-task-adapter.js +8 -9
  102. package/dist/core/adapter/adapters/akm-workflow-adapter.js +5 -5
  103. package/dist/core/adapter/adapters/claude-adapter.js +1 -1
  104. package/dist/core/adapter/adapters/dotenv-adapter.js +7 -6
  105. package/dist/core/adapter/adapters/generic-files-adapter.js +5 -5
  106. package/dist/core/adapter/adapters/index.js +3 -4
  107. package/dist/core/adapter/adapters/llm-wiki-adapter.js +12 -14
  108. package/dist/core/adapter/adapters/okf-adapter.js +8 -10
  109. package/dist/core/adapter/adapters/opencode-adapter.js +1 -1
  110. package/dist/core/adapter/adapters/shared.js +3 -3
  111. package/dist/core/adapter/adapters/tool-dir-shared.js +7 -25
  112. package/dist/core/adapter/adapters/website-snapshot-adapter.js +3 -3
  113. package/dist/core/adapter/detect-adapter.js +1 -1
  114. package/dist/core/adapter/execution-source.js +13 -35
  115. package/dist/core/adapter/registry.js +1 -1
  116. package/dist/core/adapter/validate-context.js +2 -4
  117. package/dist/core/asset/asset-placement.js +1 -1
  118. package/dist/core/asset/asset-ref.js +3 -3
  119. package/dist/core/asset/resolve-ref.js +5 -0
  120. package/dist/core/bundle-rename.js +12 -4
  121. package/dist/core/closest-match.js +37 -0
  122. package/dist/core/common.js +37 -57
  123. package/dist/core/config/config-io.js +26 -18
  124. package/dist/core/config/config-schema.js +19 -106
  125. package/dist/core/config/config-sources.js +3 -3
  126. package/dist/core/config/config-types.js +4 -4
  127. package/dist/core/config/config-walker.js +50 -77
  128. package/dist/core/config/config.js +438 -109
  129. package/dist/core/config/convert-engine-references.js +114 -0
  130. package/dist/core/config/convert-engines-shared.js +40 -0
  131. package/dist/core/config/convert-engines.js +300 -0
  132. package/dist/core/config/convert-models-overlay.js +137 -0
  133. package/dist/core/config/credentials.js +304 -0
  134. package/dist/core/config/engine-semantics.js +3 -3
  135. package/dist/core/config/migrate-keys.js +222 -0
  136. package/dist/core/config/model-aliases.js +37 -0
  137. package/dist/core/config/models-file.js +34 -0
  138. package/dist/core/config/retired-engines.js +53 -0
  139. package/dist/core/config/schema/connections.js +41 -0
  140. package/dist/core/config/schema/embedding.js +2 -2
  141. package/dist/core/config/schema/harnesses.js +41 -0
  142. package/dist/core/config/schema/improve-processes.js +9 -28
  143. package/dist/core/config/schema/improve.js +36 -1
  144. package/dist/core/config/schema/index-config.js +18 -20
  145. package/dist/core/config/schema/primitives.js +42 -17
  146. package/dist/core/config/schema/search.js +6 -11
  147. package/dist/core/config/schema/sources-bundles.js +9 -9
  148. package/dist/core/config/schema/workflow.js +2 -6
  149. package/dist/core/config/unusable-entries.js +66 -0
  150. package/dist/core/content-safety.js +3 -6
  151. package/dist/core/endpoint-url.js +47 -0
  152. package/dist/core/env-secret-ref.js +84 -73
  153. package/dist/core/errors.js +10 -16
  154. package/dist/core/extra-params.js +3 -3
  155. package/dist/core/improve-result.js +8 -9
  156. package/dist/core/json-schema.js +1 -1
  157. package/dist/core/lesson-lint.js +1 -1
  158. package/dist/core/llm-inference.js +80 -0
  159. package/dist/core/parse.js +2 -2
  160. package/dist/core/paths.js +33 -10
  161. package/dist/core/recognition-util.js +8 -10
  162. package/dist/core/redaction.js +94 -55
  163. package/dist/core/ref-token.js +82 -0
  164. package/dist/core/secret-value.js +14 -0
  165. package/dist/core/state/migrations.js +17 -22
  166. package/dist/core/structured.js +2 -68
  167. package/dist/core/subprocess.js +63 -22
  168. package/dist/core/type-presentation.js +10 -14
  169. package/dist/core/write-source.js +20 -4
  170. package/dist/execution/input-contract.js +3 -6
  171. package/dist/execution/notices.js +49 -0
  172. package/dist/execution/resolved-request.js +24 -40
  173. package/dist/execution/source.js +21 -45
  174. package/dist/execution/target-ref.js +2 -2
  175. package/dist/indexer/bundle-identity-guard.js +6 -5
  176. package/dist/indexer/ensure-index.js +1 -1
  177. package/dist/indexer/index-writer-lock.js +1 -1
  178. package/dist/indexer/indexer.js +46 -42
  179. package/dist/indexer/installations.js +12 -22
  180. package/dist/indexer/lookup/adapter-concept-owner.js +40 -14
  181. package/dist/indexer/materialize-embeddings.js +20 -16
  182. package/dist/indexer/passes/memory-inference.js +21 -50
  183. package/dist/indexer/passes/metadata.js +5 -5
  184. package/dist/indexer/scan/doc-to-entry.js +1 -1
  185. package/dist/indexer/scan/drain-dir.js +9 -11
  186. package/dist/indexer/search/db-search.js +9 -7
  187. package/dist/indexer/search/search-source.js +42 -22
  188. package/dist/indexer/usage/usage-events.js +2 -3
  189. package/dist/indexer/walk/index-context.js +2 -1
  190. package/dist/indexer/walk/matchers.js +3 -11
  191. package/dist/indexer/walk/path-resolver.js +13 -68
  192. package/dist/indexer/walk/walker.js +32 -26
  193. package/dist/integrations/agent/akm-read-tools.js +81 -0
  194. package/dist/integrations/agent/config.js +1 -1
  195. package/dist/integrations/agent/detect.js +32 -36
  196. package/dist/integrations/agent/execution.js +130 -428
  197. package/dist/integrations/agent/index.js +1 -1
  198. package/dist/integrations/agent/profiles.js +24 -28
  199. package/dist/integrations/agent/prompts.js +17 -30
  200. package/dist/integrations/agent/request-lowering.js +67 -101
  201. package/dist/integrations/agent/resolution.js +332 -0
  202. package/dist/integrations/agent/runner-dispatch.js +156 -181
  203. package/dist/integrations/agent/runner.js +20 -70
  204. package/dist/integrations/agent/runtime-port.js +4 -0
  205. package/dist/integrations/agent/runtime.js +10 -0
  206. package/dist/integrations/agent/spawn.js +65 -190
  207. package/dist/integrations/harnesses/aider/index.js +19 -39
  208. package/dist/integrations/harnesses/amazonq/index.js +17 -32
  209. package/dist/integrations/harnesses/claude/index.js +59 -28
  210. package/dist/integrations/harnesses/claude/session-log.js +7 -5
  211. package/dist/integrations/harnesses/codex/index.js +19 -31
  212. package/dist/integrations/harnesses/copilot/index.js +17 -35
  213. package/dist/integrations/harnesses/gemini/index.js +18 -34
  214. package/dist/integrations/harnesses/harness.js +36 -0
  215. package/dist/integrations/harnesses/index.js +20 -51
  216. package/dist/integrations/harnesses/opencode/agent-builder.js +132 -100
  217. package/dist/integrations/harnesses/opencode/index.js +11 -33
  218. package/dist/integrations/harnesses/opencode/roots.js +50 -0
  219. package/dist/integrations/harnesses/opencode/runtime/binary.js +206 -0
  220. package/dist/integrations/harnesses/opencode/runtime/command.js +152 -0
  221. package/dist/integrations/harnesses/opencode/runtime/index.js +177 -0
  222. package/dist/integrations/harnesses/opencode/runtime/tar.js +107 -0
  223. package/dist/integrations/harnesses/opencode/session-log-v1.js +15 -7
  224. package/dist/integrations/harnesses/opencode/session-log-v2.js +72 -48
  225. package/dist/integrations/harnesses/opencode/session-log.js +58 -137
  226. package/dist/integrations/harnesses/opencode/version.js +34 -53
  227. package/dist/integrations/harnesses/openhands/index.js +13 -37
  228. package/dist/integrations/harnesses/pi/index.js +21 -32
  229. package/dist/integrations/lockfile.js +1 -1
  230. package/dist/integrations/session-logs/index.js +11 -31
  231. package/dist/llm/client.js +93 -111
  232. package/dist/llm/embedder.js +19 -34
  233. package/dist/llm/embedders/connection.js +31 -0
  234. package/dist/llm/embedders/local-model-files.js +56 -0
  235. package/dist/llm/embedders/local.js +146 -115
  236. package/dist/llm/embedders/remote.js +26 -23
  237. package/dist/llm/embedders/types.js +1 -1
  238. package/dist/llm/index-passes.js +33 -39
  239. package/dist/llm/memory-infer.js +67 -77
  240. package/dist/llm/model-list.js +35 -0
  241. package/dist/llm/rerank-client.js +8 -14
  242. package/dist/llm/structured-call.js +45 -99
  243. package/dist/llm/structured.js +60 -0
  244. package/dist/output/renderers.js +2 -8
  245. package/dist/output/shapes/helpers.js +18 -44
  246. package/dist/output/shapes/passthrough.js +1 -0
  247. package/dist/output/shapes.js +1 -7
  248. package/dist/output/text/command-format.js +41 -39
  249. package/dist/output/text/health-format.js +8 -2
  250. package/dist/output/text/helpers.js +1 -1
  251. package/dist/output/text/migrate.js +12 -0
  252. package/dist/output/text/models.js +3 -2
  253. package/dist/output/text/registry-commands.js +1 -2
  254. package/dist/output/text/show-directives.js +16 -28
  255. package/dist/output/text/show-format.js +0 -2
  256. package/dist/output/text/targets-table.js +70 -0
  257. package/dist/output/text/workflow-format.js +44 -15
  258. package/dist/output/text.js +1 -1
  259. package/dist/registry/providers/skills-sh.js +1 -28
  260. package/dist/registry/providers/static-index.js +1 -71
  261. package/dist/runtime.js +6 -2
  262. package/dist/scripts/akm-migrate-node.js +47095 -44905
  263. package/dist/scripts/akm-migrate.js +46946 -44755
  264. package/dist/setup/detect.js +28 -273
  265. package/dist/setup/endpoint.js +36 -0
  266. package/dist/setup/semantic-assets.js +13 -19
  267. package/dist/setup/setup-flags.js +77 -0
  268. package/dist/setup/setup-plan.js +144 -0
  269. package/dist/setup/setup.js +134 -358
  270. package/dist/setup/steps/connection-shared.js +49 -101
  271. package/dist/setup/steps/connection.js +121 -524
  272. package/dist/setup/steps/embeddings.js +151 -0
  273. package/dist/setup/steps/harnesses.js +118 -0
  274. package/dist/setup/steps/platforms.js +2 -81
  275. package/dist/setup/steps/tasks.js +1 -2
  276. package/dist/setup/steps.js +10 -0
  277. package/dist/setup/summary.js +67 -0
  278. package/dist/sources/freshness.js +16 -21
  279. package/dist/sources/providers/git-provider.js +2 -9
  280. package/dist/sources/providers/provider-utils.js +13 -5
  281. package/dist/sources/resolve.js +12 -16
  282. package/dist/sources/snapshot-fetchers/robots.js +11 -12
  283. package/dist/sources/snapshot-fetchers/secret-seam.js +2 -4
  284. package/dist/sources/snapshot-fetchers/website-ingest.js +8 -15
  285. package/dist/sources/snapshot-fetchers/x.js +1 -1
  286. package/dist/standalone/onnxruntime-library.js +52 -0
  287. package/dist/storage/repositories/improve-ledger-repository.js +1 -1
  288. package/dist/storage/repositories/improve-runs-repository.js +0 -13
  289. package/dist/storage/repositories/index-entries-repository.js +2 -2
  290. package/dist/storage/repositories/proposals-repository.js +2 -2
  291. package/dist/storage/repositories/task-history-repository.js +2 -2
  292. package/dist/storage/repositories/workflow-runs-repository.js +44 -129
  293. package/dist/storage/sqlite-read-snapshot.js +33 -29
  294. package/dist/tasks/embedded.js +1 -1
  295. package/dist/tasks/log-redaction.js +7 -119
  296. package/dist/tasks/prepare/prepare-support.js +8 -7
  297. package/dist/tasks/prepare/prepare.js +8 -9
  298. package/dist/tasks/prepare/script-capture.js +9 -25
  299. package/dist/tasks/run/attempt-lifecycle.js +17 -35
  300. package/dist/tasks/run/load-task.js +54 -27
  301. package/dist/tasks/run/run-command-task.js +15 -10
  302. package/dist/tasks/run/run-native-task.js +8 -21
  303. package/dist/tasks/run/run-task.js +5 -8
  304. package/dist/tasks/run/run-workflow-task.js +14 -21
  305. package/dist/tasks/run/task-history.js +9 -17
  306. package/dist/tasks/run/task-log.js +1 -5
  307. package/dist/tasks/scheduler-invocation.js +13 -18
  308. package/dist/tasks/scheduler-sync.js +0 -1
  309. package/dist/tasks/source/bounded-document.js +31 -117
  310. package/dist/tasks/source/parse-task-source.js +0 -1
  311. package/dist/tasks/source/project-v4.js +5 -3
  312. package/dist/tasks/source/task-input-diagnostics.js +3 -4
  313. package/dist/tasks/source/task-source-v4.js +48 -72
  314. package/dist/tasks/source-v3.js +2 -5
  315. package/dist/tasks/task-run-reserved-flags.js +1 -2
  316. package/dist/workflows/authoring/authoring.js +2 -7
  317. package/dist/workflows/compile.js +1 -15
  318. package/dist/workflows/concurrency-policy.js +4 -4
  319. package/dist/workflows/exec/child-workflow.js +1 -4
  320. package/dist/workflows/exec/dispatch-redaction.js +35 -86
  321. package/dist/workflows/exec/environment.js +13 -77
  322. package/dist/workflows/exec/exec-unit.js +14 -55
  323. package/dist/workflows/exec/frozen-judge.js +26 -28
  324. package/dist/workflows/exec/native-executor.js +126 -71
  325. package/dist/workflows/exec/run-workflow.js +38 -42
  326. package/dist/workflows/exec/step-work.js +13 -17
  327. package/dist/workflows/exec/unit-dispatch.js +7 -21
  328. package/dist/workflows/freeze/environment.js +14 -119
  329. package/dist/workflows/freeze/freeze.js +14 -33
  330. package/dist/workflows/freeze/step-values.js +6 -13
  331. package/dist/workflows/freeze/targets/child-workflow.js +3 -5
  332. package/dist/workflows/freeze/targets/command.js +9 -15
  333. package/dist/workflows/freeze/targets/shell.js +0 -3
  334. package/dist/workflows/freeze/task-bindings.js +0 -1
  335. package/dist/workflows/parser.js +50 -59
  336. package/dist/workflows/plan.js +8 -2
  337. package/dist/workflows/renderer.js +83 -9
  338. package/dist/workflows/resource-limits.js +2 -2
  339. package/dist/workflows/runtime/run-plan.js +38 -23
  340. package/dist/workflows/runtime/runs.js +55 -93
  341. package/dist/workflows/runtime/workflow-asset-loader.js +55 -86
  342. package/dist/workflows/source-files.js +7 -19
  343. package/docs/README.md +10 -16
  344. package/docs/architecture/README.md +2 -37
  345. package/docs/architecture/adapters.md +2 -2
  346. package/docs/architecture/akm-core-principles.md +256 -118
  347. package/docs/architecture/architecture.md +283 -99
  348. package/docs/architecture/improvement.md +8 -2
  349. package/docs/architecture/internals/classification.md +1 -3
  350. package/docs/architecture/internals/fresh-host-rebuild-runbook.md +7 -6
  351. package/docs/architecture/internals/health-advisories.md +35 -74
  352. package/docs/architecture/internals/improve-workflow.md +27 -26
  353. package/docs/architecture/internals/indexing.md +3 -3
  354. package/docs/architecture/internals/storage-locations.md +48 -15
  355. package/docs/architecture/persisted-data-compat.md +10 -6
  356. package/docs/architecture/specs/okf-support.md +9 -11
  357. package/docs/architecture/specs/ref.md +7 -9
  358. package/docs/architecture/testing/testing-workflow.md +172 -52
  359. package/docs/architecture/workflow-engine.md +51 -34
  360. package/docs/guides/README.md +0 -1
  361. package/docs/guides/author-bundles.md +15 -20
  362. package/docs/guides/author-workflows.md +93 -71
  363. package/docs/guides/bundles.md +20 -16
  364. package/docs/guides/discover-and-load.md +1 -1
  365. package/docs/guides/getting-started.md +49 -3
  366. package/docs/guides/improve-the-library.md +10 -4
  367. package/docs/guides/recipes/headless-install.md +11 -16
  368. package/docs/guides/run-workflows.md +29 -20
  369. package/docs/guides/scheduling.md +2 -2
  370. package/docs/guides/use-with-any-agent.md +20 -22
  371. package/docs/integration/bundling-akm.md +19 -9
  372. package/docs/maintainers/README.md +2 -6
  373. package/docs/maintainers/release-checklist.md +73 -126
  374. package/docs/migration/README.md +10 -3
  375. package/docs/migration/release-notes/0.10.0.md +81 -16
  376. package/docs/migration/release-notes/0.6.0.md +1 -1
  377. package/docs/migration/release-notes/0.7.0.md +1 -1
  378. package/docs/migration/release-notes/0.9.0.md +1 -1
  379. package/docs/migration/release-notes/README.md +1 -1
  380. package/docs/migration/v0.9-to-v0.10.md +300 -60
  381. package/docs/migration/v0.9.1-to-v0.9.2.md +6 -5
  382. package/docs/posts/config-v2-lessons-16.md +1 -1
  383. package/docs/posts/llm-mode-reflect-13.md +1 -1
  384. package/docs/posts/release-0.6.0.md +11 -11
  385. package/docs/posts/release-0.8.0.md +4 -4
  386. package/docs/posts/workflows-vaults-09.md +1 -1
  387. package/docs/reference/README.md +1 -1
  388. package/docs/reference/asset-types.md +2 -2
  389. package/docs/reference/cli.md +477 -388
  390. package/docs/reference/configuration.md +569 -550
  391. package/docs/reference/data-and-telemetry.md +9 -6
  392. package/docs/reference/env-and-secrets.md +72 -15
  393. package/docs/reference/refs.md +3 -20
  394. package/docs/reference/registry.md +12 -38
  395. package/docs/reference/supported-formats.md +1 -1
  396. package/docs/reference/tasks.md +22 -11
  397. package/docs/reference/ui-api.md +14 -9
  398. package/docs/reference/workflow-schema.md +199 -154
  399. package/docs/reference/workflows.md +4 -6
  400. package/package.json +9 -11
  401. package/schemas/akm-config.json +1696 -2922
  402. package/schemas/akm-task.json +4 -4
  403. package/schemas/akm-workflow.json +36 -9
  404. package/ROADMAP.md +0 -112
  405. package/dist/assets/models.json +0 -35
  406. package/dist/commands/health/engine-usage.js +0 -45
  407. package/dist/commands/sources/dangerous-env-audit.js +0 -134
  408. package/dist/core/activation-policy.js +0 -67
  409. package/dist/core/config/schema/engines.js +0 -160
  410. package/dist/core/config/schema/execution.js +0 -23
  411. package/dist/core/spawn-env.js +0 -268
  412. package/dist/execution/directory-identity.js +0 -78
  413. package/dist/integrations/agent/builder-shared.js +0 -33
  414. package/dist/integrations/agent/builders.js +0 -43
  415. package/dist/integrations/agent/engine-fallback.js +0 -59
  416. package/dist/integrations/agent/engine-resolution.js +0 -333
  417. package/dist/integrations/agent/model-map.js +0 -475
  418. package/dist/integrations/harnesses/aider/agent-builder.js +0 -107
  419. package/dist/integrations/harnesses/aider/result-extractor.js +0 -53
  420. package/dist/integrations/harnesses/amazonq/agent-builder.js +0 -138
  421. package/dist/integrations/harnesses/amazonq/result-extractor.js +0 -48
  422. package/dist/integrations/harnesses/claude/agent-builder.js +0 -106
  423. package/dist/integrations/harnesses/claude/config-import.js +0 -67
  424. package/dist/integrations/harnesses/claude/result-extractor.js +0 -67
  425. package/dist/integrations/harnesses/codex/agent-builder.js +0 -150
  426. package/dist/integrations/harnesses/codex/result-extractor.js +0 -110
  427. package/dist/integrations/harnesses/copilot/agent-builder.js +0 -117
  428. package/dist/integrations/harnesses/copilot/result-extractor.js +0 -178
  429. package/dist/integrations/harnesses/gemini/agent-builder.js +0 -114
  430. package/dist/integrations/harnesses/gemini/result-extractor.js +0 -149
  431. package/dist/integrations/harnesses/opencode/config-import.js +0 -149
  432. package/dist/integrations/harnesses/opencode/model-config.js +0 -33
  433. package/dist/integrations/harnesses/opencode/model-work-agent.js +0 -115
  434. package/dist/integrations/harnesses/opencode/session-log-types.js +0 -12
  435. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -44
  436. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +0 -1052
  437. package/dist/integrations/harnesses/opencode-sdk/v1-adapter.js +0 -199
  438. package/dist/integrations/harnesses/opencode-sdk/v2-adapter.js +0 -254
  439. package/dist/integrations/harnesses/opencode-sdk/wire.js +0 -66
  440. package/dist/integrations/harnesses/openhands/agent-builder.js +0 -120
  441. package/dist/integrations/harnesses/openhands/result-extractor.js +0 -135
  442. package/dist/integrations/harnesses/pi/agent-builder.js +0 -89
  443. package/dist/integrations/harnesses/pi/result-extractor.js +0 -168
  444. package/dist/integrations/harnesses/shared.js +0 -18
  445. package/dist/integrations/harnesses/types.js +0 -55
  446. package/dist/llm/feature-gate.js +0 -115
  447. package/dist/output/shapes/models-list.js +0 -16
  448. package/dist/output/shapes/registry-search.js +0 -10
  449. package/dist/setup/detected-engines.js +0 -136
  450. package/dist/setup/engine-config.js +0 -97
  451. package/dist/setup/harness-config-import.js +0 -47
  452. package/dist/setup/providers.js +0 -14
  453. package/dist/setup/steps/semantic.js +0 -39
  454. package/dist/workflows/authoring/scope-key.js +0 -79
  455. package/dist/workflows/exec/lowering-notices.js +0 -23
  456. package/dist/workflows/source-semantics.js +0 -110
  457. package/docs/architecture/0.10-process-rules.md +0 -832
  458. package/docs/architecture/akm-architecture-decision-history.md +0 -2055
  459. package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +0 -550
  460. package/docs/architecture/decisions/0001-no-interpolation-attached-structured-context.md +0 -72
  461. package/docs/architecture/decisions/0002-unit-reuse-and-input-hash-scope.md +0 -142
  462. package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +0 -189
  463. package/docs/architecture/decisions/0004-task-input-contract-and-flag-coercion.md +0 -97
  464. package/docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md +0 -108
  465. package/docs/architecture/decisions/0006-task-source-version-routing.md +0 -124
  466. package/docs/architecture/decisions/0007-workflow-composition-bounds.md +0 -83
  467. package/docs/architecture/decisions/0008-task-binding-normalization.md +0 -88
  468. package/docs/architecture/decisions/0009-child-run-publication-column-parity.md +0 -80
  469. package/docs/architecture/decisions/0010-driver-protocol-cut.md +0 -36
  470. package/docs/architecture/decisions/0011-engine-run-loop-invariants.md +0 -125
  471. package/docs/architecture/decisions/README.md +0 -62
  472. package/docs/architecture/internals/functional-contract-patterns.md +0 -340
  473. package/docs/architecture/internals/registry-network-boundary.md +0 -57
  474. package/docs/architecture/internals/search.md +0 -248
  475. package/docs/architecture/reviews/env-secret-access.md +0 -319
  476. package/docs/architecture/runtime-boundary-design.md +0 -153
  477. package/docs/architecture/specs/0.9.0-close-out-plan.md +0 -361
  478. package/docs/architecture/specs/0.9.0-decisions.md +0 -532
  479. package/docs/architecture/specs/0.9.0-docs-code-drift-register.md +0 -745
  480. package/docs/architecture/specs/0.9.0-open-items-register.md +0 -135
  481. package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +0 -740
  482. package/docs/architecture/specs/0.9.0-release-surface-review.md +0 -636
  483. package/docs/architecture/specs/agent-command-engine-model-design.md +0 -513
  484. package/docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md +0 -501
  485. package/docs/architecture/specs/akm-0.9.0-ref-grammar-decision.md +0 -291
  486. package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +0 -2059
  487. package/docs/architecture/specs/di-seams-plan.md +0 -539
  488. package/docs/architecture/specs/driver-protocol-keep-or-cut.md +0 -275
  489. package/docs/architecture/specs/fact-asset-type.md +0 -142
  490. package/docs/architecture/specs/improve-collapse-churn-detector-design.md +0 -634
  491. package/docs/architecture/specs/reviews/task-workflow-unification/README.md +0 -72
  492. package/docs/architecture/specs/reviews/task-workflow-unification/findings-consolidated.md +0 -152
  493. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-alternatives.md +0 -352
  494. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-bunqueue.md +0 -300
  495. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md +0 -402
  496. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-1.md +0 -758
  497. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-2.md +0 -645
  498. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-3.md +0 -602
  499. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-adversarial.md +0 -27
  500. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-architecture.md +0 -27
  501. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-coverage.md +0 -74
  502. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-security.md +0 -15
  503. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-adversarial.md +0 -132
  504. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-verification.md +0 -147
  505. package/docs/architecture/specs/stash-conventions-code-spec.md +0 -275
  506. package/docs/architecture/specs/stash-organization-conventions.md +0 -377
  507. package/docs/architecture/specs/task-workflow-format-unification.md +0 -721
  508. package/docs/architecture/specs/workflow-engine-buy-vs-build.md +0 -231
  509. package/docs/architecture/specs/workflow-format-unification.md +0 -432
  510. package/docs/architecture/testing/manual-testing-checklist.md +0 -3411
  511. package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +0 -924
  512. package/docs/architecture/testing/task-workflow-manual-tests.md +0 -1720
  513. package/docs/guides/claude-code-vs-akm-workflows.md +0 -29
  514. package/docs/guides/knowledge-management.md +0 -18
  515. package/docs/maintainers/curate-workmap.md +0 -335
  516. package/docs/migration/v0.5-to-v0.6.md +0 -759
  517. package/docs/migration/v0.7-to-v0.8.md +0 -1378
  518. package/docs/plans/0.9.2-agent-command-workflow-plan.md +0 -423
@@ -262,49 +262,17 @@ export function shapeSearchOutput(result, detail, shape = "human") {
262
262
  ...(result.tip ? { tip: result.tip } : {}),
263
263
  };
264
264
  }
265
- export function shapeRegistrySearchOutput(result, detail) {
266
- const hits = Array.isArray(result.hits) ? result.hits : [];
267
- const assetHits = Array.isArray(result.assetHits) ? result.assetHits : [];
268
- // Shape stash hits as registry type
269
- const shapedKitHits = hits.map((hit) => shapeSearchHit({ ...hit, type: "registry" }, detail));
270
- // Shape asset hits by detail level
271
- const shapedAssetHits = assetHits.map((hit) => shapeAssetHit(hit, detail));
272
- const shaped = {
273
- hits: shapedKitHits,
274
- ...(shapedAssetHits.length > 0 ? { assetHits: shapedAssetHits } : {}),
275
- ...(Array.isArray(result.warnings) && result.warnings.length > 0 ? { warnings: result.warnings } : {}),
276
- };
277
- if (detail === "full") {
278
- shaped.query = result.query;
279
- }
280
- return shaped;
281
- }
282
- export function shapeAssetHit(hit, detail) {
283
- if (detail === "brief")
284
- return pickFields(hit, ["assetName", "assetType", "action", "estimatedTokens"]);
285
- if (detail === "normal") {
286
- return capDescription(pickFields(hit, ["assetName", "assetType", "description", "stash", "action", "estimatedTokens"]), NORMAL_DESCRIPTION_LIMIT);
287
- }
288
- return hit;
289
- }
290
265
  export function shapeSearchHit(hit, detail) {
291
266
  if (hit.type === "registry") {
292
267
  if (detail === "brief") {
293
- // RegistrySearchHit uses `title` (not `name`); always project installRef
294
- // and score so callers can use the result without --detail full (QA #28).
295
- const out = pickFields(hit, ["title", "name", "installRef", "score"]);
296
- // Normalise: if only title exists, expose it as `name` for consistency
297
- if (out.title && !out.name)
298
- out.name = out.title;
299
- return out;
268
+ // Always project installRef and score so callers can use the result
269
+ // without --detail full (QA #28).
270
+ return pickFields(hit, ["name", "installRef", "score"]);
300
271
  }
301
272
  if (detail === "normal") {
302
- // `curated` was removed in v1 (spec §4.2). Renderers project optional
303
- // hit-level `warnings` instead so providers can surface non-fatal issues.
304
- const out = capDescription(pickFields(hit, ["title", "name", "description", "action", "installRef", "score", "warnings"]), NORMAL_DESCRIPTION_LIMIT);
305
- if (out.title && !out.name)
306
- out.name = out.title;
307
- return out;
273
+ // Renderers project optional hit-level `warnings` so providers can
274
+ // surface non-fatal issues.
275
+ return capDescription(pickFields(hit, ["name", "description", "action", "installRef", "score", "warnings"]), NORMAL_DESCRIPTION_LIMIT);
308
276
  }
309
277
  return hit;
310
278
  }
@@ -317,9 +285,19 @@ export function shapeSearchHit(hit, detail) {
317
285
  if (detail === "normal") {
318
286
  // `warnings` is projected at `normal` so non-fatal hit-level issues are
319
287
  // visible without forcing callers up to `--detail full`. Optional
320
- // `quality` (v1 spec §4.2) is also surfaced when present so callers
288
+ // `quality` is also surfaced when present so callers
321
289
  // can see why a `proposed` entry showed up under `--include-proposed`.
322
- const shaped = capDescription(pickFields(hit, ["type", "name", "description", "action", "score", "estimatedTokens", "warnings", "quality"]), NORMAL_DESCRIPTION_LIMIT);
290
+ const shaped = capDescription(pickFields(hit, [
291
+ "type",
292
+ "name",
293
+ "ref",
294
+ "description",
295
+ "action",
296
+ "score",
297
+ "estimatedTokens",
298
+ "warnings",
299
+ "quality",
300
+ ]), NORMAL_DESCRIPTION_LIMIT);
323
301
  if (Array.isArray(hit.keys) && hit.keys.length > 0)
324
302
  shaped.keys = hit.keys;
325
303
  return shaped;
@@ -376,8 +354,6 @@ export function shapeShowOutput(result, detail, shape = "human") {
376
354
  "run",
377
355
  "setup",
378
356
  "cwd",
379
- "activeRun",
380
- "toolPolicy",
381
357
  "modelHint",
382
358
  "agent",
383
359
  "parameters",
@@ -408,7 +384,6 @@ export function shapeShowOutput(result, detail, shape = "human") {
408
384
  "content",
409
385
  "template",
410
386
  "prompt",
411
- "toolPolicy",
412
387
  "modelHint",
413
388
  "agent",
414
389
  "parameters",
@@ -418,7 +393,6 @@ export function shapeShowOutput(result, detail, shape = "human") {
418
393
  "run",
419
394
  "setup",
420
395
  "cwd",
421
- "activeRun",
422
396
  "keys",
423
397
  "links",
424
398
  "evidence",
@@ -52,6 +52,7 @@ const PASSTHROUGH_COMMANDS = [
52
52
  "list",
53
53
  "metrics",
54
54
  "models",
55
+ "models-set",
55
56
  "proposal-accept-batch",
56
57
  "proposal-drain",
57
58
  "proposal-reject-batch",
@@ -5,7 +5,6 @@ import { curateShapes } from "./shapes/curate.js";
5
5
  import { envListShapes } from "./shapes/env-list.js";
6
6
  import { eventsShapes } from "./shapes/events.js";
7
7
  import { migrateShapes } from "./shapes/migrate.js";
8
- import { modelsListShapes } from "./shapes/models-list.js";
9
8
  import { passthroughShapes } from "./shapes/passthrough.js";
10
9
  import { proposalAcceptShapes } from "./shapes/proposal/accept.js";
11
10
  import { proposalDiffShapes } from "./shapes/proposal/diff.js";
@@ -15,7 +14,6 @@ import { proposalRejectShapes } from "./shapes/proposal/reject.js";
15
14
  import { proposalReopenShapes } from "./shapes/proposal/reopen.js";
16
15
  import { proposalShowShapes } from "./shapes/proposal/show.js";
17
16
  import { getOutputShapeHandler, registerOutputShapes } from "./shapes/registry.js";
18
- import { registrySearchShapes } from "./shapes/registry-search.js";
19
17
  import { searchShapes } from "./shapes/search.js";
20
18
  import { secretListShapes } from "./shapes/secret-list.js";
21
19
  import { showShapes } from "./shapes/show.js";
@@ -28,7 +26,6 @@ import { showShapes } from "./shapes/show.js";
28
26
  const BUILT_IN_OUTPUT_SHAPES = [
29
27
  ...searchShapes,
30
28
  ...curateShapes,
31
- ...registrySearchShapes,
32
29
  ...showShapes,
33
30
  ...eventsShapes,
34
31
  ...proposalListShapes,
@@ -41,7 +38,6 @@ const BUILT_IN_OUTPUT_SHAPES = [
41
38
  ...envListShapes,
42
39
  ...secretListShapes,
43
40
  ...migrateShapes,
44
- ...modelsListShapes,
45
41
  // Passthrough commands are registered last so an explicit dedicated handler
46
42
  // above always wins over the identity-stamp fallback for the same name.
47
43
  ...passthroughShapes,
@@ -66,7 +62,6 @@ registerOutputShapes(BUILT_IN_OUTPUT_SHAPES);
66
62
  const LIST_RESULT_COLLECTION_KEYS = {
67
63
  search: "hits",
68
64
  curate: "items",
69
- "registry-search": "hits",
70
65
  "proposal-list": "proposals",
71
66
  list: "sources", // `akm bundle list`
72
67
  "env-list": "envs",
@@ -76,7 +71,6 @@ const LIST_RESULT_COLLECTION_KEYS = {
76
71
  "task-history": "rows",
77
72
  "log-list": "events", // `akm log list`
78
73
  "config-diff": "rows", // `akm config diff`
79
- "models-list": "rows", // `akm models list`
80
74
  };
81
75
  function withResultsAlias(command, shaped) {
82
76
  const key = LIST_RESULT_COLLECTION_KEYS[command];
@@ -99,7 +93,7 @@ export function shapeForCommand(command, result, detail, shape = "human") {
99
93
  if (handler) {
100
94
  return withResultsAlias(command, handler(result, detail, shape));
101
95
  }
102
- // v1 spec §9 (output-shape registry exhaustive): no silent JSON.stringify
96
+ // Output-shape registry is exhaustive: no silent JSON.stringify
103
97
  // fallback. A missing case here is a registration bug — fail loudly so
104
98
  // the caller (or its tests) sees the missing command name.
105
99
  throw new Error(`output shape not registered for command: ${command}`);
@@ -10,11 +10,10 @@
10
10
  * Split out of `helpers.ts` (formerly 1418 lines / 59 fns) as its own
11
11
  * sibling module: unlike `show`/`workflow`/`proposal` (each a stateful,
12
12
  * multi-branch renderer with its own module), these are flat
13
- * field-extraction formatters with no shared state beyond
14
- * `formatRegistrySearchPlain` delegating to `formatSearchPlain` in this
15
- * same file.
13
+ * field-extraction formatters with no shared state.
16
14
  */
17
15
  import { formatRegistryUrl } from "../../core/registry-url.js";
16
+ import { renderTargetsTable } from "./targets-table.js";
18
17
  /** Render the current `InfoResponse` shape. */
19
18
  export function formatInfoPlain(r) {
20
19
  const lines = [];
@@ -69,6 +68,8 @@ export function formatInfoPlain(r) {
69
68
  lines.push(` [${String(source.type ?? "?")}] ${String(label)}${disabled}`);
70
69
  }
71
70
  }
71
+ if (Array.isArray(r.connectionsAndHarnesses))
72
+ lines.push(...renderTargetsTable(r.connectionsAndHarnesses));
72
73
  const indexStats = r.indexStats;
73
74
  if (indexStats) {
74
75
  lines.push("indexStats:");
@@ -169,15 +170,11 @@ export function formatRegistryRemovePlain(r) {
169
170
  const url = entry ? (typeof entry.url === "string" ? formatRegistryUrl(entry.url) : String(entry.name ?? "?")) : "?";
170
171
  return `Removed registry ${url}`;
171
172
  }
172
- export function formatRegistrySearchPlain(r, detail) {
173
- // Reuse the same renderer as `search` — both share `hits` / `registryHits`.
174
- return formatSearchPlain(r, detail);
175
- }
176
173
  export function formatEnvListPlain(r) {
177
174
  // Multi-env listing: { envs: [{ ref, path, keys }, ...] }
178
175
  const envs = Array.isArray(r.envs) ? r.envs : [];
179
176
  if (envs.length === 0) {
180
- return "No env files. Create one with `akm env create <name>`, then edit the .env file directly.";
177
+ return "No env files. Create one with `akm env create env/<name>`, then edit the .env file directly.";
181
178
  }
182
179
  const lines = [];
183
180
  for (const v of envs) {
@@ -272,14 +269,16 @@ export function formatSearchPlain(r, detail) {
272
269
  lines.push(` size: ${String(hit.size)}`);
273
270
  if (hit.action)
274
271
  lines.push(` action: ${String(hit.action)}`);
272
+ if (hit.installRef)
273
+ lines.push(` installRef: ${String(hit.installRef)}`);
275
274
  if (hit.run)
276
275
  lines.push(` run: ${String(hit.run)}`);
277
276
  if (Array.isArray(hit.tags) && hit.tags.length > 0)
278
277
  lines.push(` tags: ${hit.tags.join(", ")}`);
279
- // Optional v1 spec §4.2 quality marker (e.g. "curated" / "proposed").
278
+ // Optional quality marker (e.g. "curated" / "proposed").
280
279
  if (typeof hit.quality === "string" && hit.quality)
281
280
  lines.push(` quality: ${hit.quality}`);
282
- // Surface optional hit-level warnings (v1 spec §4.2).
281
+ // Surface optional hit-level warnings.
283
282
  if (Array.isArray(hit.warnings) && hit.warnings.length > 0) {
284
283
  lines.push(` warnings: ${hit.warnings.join("; ")}`);
285
284
  }
@@ -457,34 +456,27 @@ export function formatListPlain(r) {
457
456
  lines.push("To search: akm search '<query>' | To view an asset: akm show <ref>");
458
457
  return lines.join("\n");
459
458
  }
460
- /** Render `akm models list`'s `{ rows }` as a column-aligned table (#946). */
461
- export function formatModelsListPlain(r) {
462
- const rows = Array.isArray(r.rows) ? r.rows : [];
463
- if (rows.length === 0)
464
- return "No model aliases configured.";
465
- const headers = ["ALIAS", "COLUMN", "MODEL", "SOURCE", "VIA", "ENGINE"];
466
- const cells = rows.map((row) => [
467
- String(row.alias ?? "?"),
468
- String(row.column ?? "?"),
469
- String(row.model ?? "?"),
470
- String(row.source ?? "?"),
471
- String(row.via ?? "?"),
472
- row.engine !== undefined ? String(row.engine) : "-",
473
- ]);
474
- const widths = headers.map((header, i) => {
475
- let width = header.length;
476
- for (const cols of cells) {
477
- const cell = cols[i];
478
- if (cell !== undefined && cell.length > width)
479
- width = cell.length;
480
- }
481
- return width;
482
- });
483
- const renderRow = (cols) => cols
484
- .map((cell, i) => cell.padEnd(widths[i] ?? cell.length))
485
- .join(" ")
486
- .trimEnd();
487
- return [renderRow(headers), ...cells.map(renderRow)].join("\n");
459
+ /** Render `akm models`'s `{ connection, aliases, available }`: each alias's model, then the models the endpoint lists. */
460
+ export function formatModelsPlain(r) {
461
+ const aliases = r.aliases && typeof r.aliases === "object" ? Object.entries(r.aliases) : [];
462
+ const available = Array.isArray(r.available) ? r.available.map(String) : [];
463
+ const title = `Connection ${String(r.connection ?? "?")}`;
464
+ if (aliases.length === 0 && available.length === 0) {
465
+ return `${title} has no model aliases. Set one with \`akm models set <alias> <model>\`.`;
466
+ }
467
+ const lines = [title];
468
+ if (aliases.length > 0) {
469
+ const width = Math.max("ALIAS".length, ...aliases.map(([alias]) => alias.length));
470
+ lines.push(`${"ALIAS".padEnd(width)} MODEL`, ...aliases.map(([alias, model]) => `${alias.padEnd(width)} ${String(model)}`));
471
+ }
472
+ if (available.length > 0)
473
+ lines.push(...(aliases.length > 0 ? [""] : []), "AVAILABLE", ...available.map((model) => ` ${model}`));
474
+ return lines.join("\n");
475
+ }
476
+ /** Render `akm models set`'s result. */
477
+ export function formatModelsSetPlain(r) {
478
+ const was = typeof r.previous === "string" ? ` (was ${r.previous})` : "";
479
+ return `${String(r.alias)} -> ${String(r.model)} on connection ${String(r.connection)}${was}`;
488
480
  }
489
481
  /** Render a single `SourceEntry` — `akm bundle show <name>`'s detail view of one `list` row. */
490
482
  export function formatBundleShowPlain(r) {
@@ -580,14 +572,24 @@ export function formatBundleRenamePlain(r) {
580
572
  const proposalRefs = Number(state.proposalRefs ?? 0);
581
573
  const proposalTargets = Number(state.proposalTargets ?? 0);
582
574
  const taskHistoryRefs = Number(state.taskHistoryRefs ?? 0);
575
+ const workflowRunRefs = Number(state.workflowRunRefs ?? 0);
576
+ const activeWorkflowRuns = Array.isArray(r.activeWorkflowRuns)
577
+ ? r.activeWorkflowRuns
578
+ : [];
583
579
  const entries = Number(index.entries ?? 0);
584
580
  const contentRefs = Array.isArray(r.contentRefs) ? r.contentRefs : [];
585
581
  const nativeSchedulerRows = Array.isArray(r.nativeSchedulerRows) ? r.nativeSchedulerRows : [];
586
582
  const verb = applied ? "Renamed" : "Would rename";
587
583
  const lines = [
588
584
  `${verb} bundle "${oldId}" to "${newId}" (${entries} index entries, ${schedulerRefs} scheduler ref(s), ` +
589
- `${proposalRefs + proposalTargets} proposal reference(s), ${taskHistoryRefs} task-history row(s)).`,
585
+ `${proposalRefs + proposalTargets} proposal reference(s), ${taskHistoryRefs} task-history row(s), ` +
586
+ `${workflowRunRefs} workflow run(s)).`,
590
587
  ];
588
+ if (activeWorkflowRuns.length > 0) {
589
+ lines.push("Active and blocked workflow runs keep the old bundle name in their frozen plan; continue them (`akm workflow run <id>`, after `akm workflow resume <id>` for a blocked one) or abandon them (`akm workflow abandon <id>`):");
590
+ for (const run of activeWorkflowRuns)
591
+ lines.push(` - ${run.id} (${run.workflowRef}, ${run.status})`);
592
+ }
591
593
  if (!applied) {
592
594
  lines.push("Re-run without --dry-run to apply. It also re-syncs native scheduler bindings under the new name.");
593
595
  if (nativeSchedulerRows.length > 0) {
@@ -3,6 +3,7 @@
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  import { flattenForText } from "../generic-render.js";
5
5
  import { renderStatusEntries, summarizeCounts } from "./status-list.js";
6
+ import { renderTargetsTable } from "./targets-table.js";
6
7
  const STATUS_GLYPH = { fail: "✗", warn: "⚠", unknown: "?", pass: "✓" };
7
8
  const STATUS_RANK = { fail: 0, warn: 1, unknown: 2, pass: 3 };
8
9
  /** Worst-first, for both the section summary and (via `STATUS_RANK`) row order. */
@@ -23,7 +24,12 @@ function checkStatusEntry(check, detail) {
23
24
  // Evidence is diagnostic detail, not the headline signal — gated behind
24
25
  // --detail the same way `formatSearchPlain`/`formatCuratePlain` gate
25
26
  // their own verbose fields (full path/editHint/whyMatched, "why" reasoning).
26
- detailLines: detail === "brief" ? [] : evidenceLines(check.evidence),
27
+ // The `connections-and-harnesses` table is the exception: it is the check's answer, so it always shows.
28
+ detailLines: check.name === "connections-and-harnesses" && Array.isArray(check.evidence?.rows)
29
+ ? renderTargetsTable(check.evidence.rows)
30
+ : detail === "brief"
31
+ ? []
32
+ : evidenceLines(check.evidence),
27
33
  };
28
34
  }
29
35
  /** Render one `hardChecks`/`advisories` section: a count summary header, then worst-first rows. */
@@ -56,7 +62,7 @@ export function formatHealthPlain(r, detail) {
56
62
  lines.push("", ...renderCheckSection("hardChecks", hardChecks, detail));
57
63
  lines.push("", ...renderCheckSection("advisories", advisories, detail));
58
64
  if (detail === "brief" &&
59
- [...hardChecks, ...advisories].some((c) => c.evidence && Object.keys(c.evidence).length > 0)) {
65
+ [...hardChecks, ...advisories].some((c) => c.name !== "connections-and-harnesses" && c.evidence && Object.keys(c.evidence).length > 0)) {
60
66
  lines.push("", "(evidence omitted at --detail brief; re-run with --detail normal or --detail full to see it)");
61
67
  }
62
68
  // Everything else (metrics, improve, and the optional runs/windows/deltas/
@@ -15,7 +15,7 @@
15
15
  *
16
16
  * No registry imports — no circular dependencies.
17
17
  */
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";
18
+ export { formatAddPlain, formatBundleRenamePlain, formatBundleShowPlain, formatClonePlain, formatConfigPlain, formatCuratePlain, formatEnvCreatePlain, formatEnvExportPlain, formatEnvListPlain, formatEnvRemovePlain, formatEventLine, formatEventsPlain, formatFeedbackPlain, formatImportPlain, formatIndexPlain, formatInfoPlain, formatInitPlain, formatListPlain, formatModelsPlain, formatModelsSetPlain, formatRegistryAddPlain, formatRegistryListPlain, formatRegistryRemovePlain, 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, formatProposalReopenBatchPlain, formatProposalReopenPlain, formatProposalShowPlain, } from "./proposal-format.js";
@@ -18,13 +18,25 @@ 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.configFile?.credentials?.length) {
22
+ lines.push(` credentials.json: ${plan.configFile.credentials.length} key(s) (${plan.configFile.credentials.join(", ")})`);
23
+ }
21
24
  if (plan.taskFiles) {
22
25
  const tasks = plan.taskFiles;
23
26
  lines.push(` task files: ${tasks.changed} change, ${tasks.skipped} current, ${tasks.blocked} blocked`);
24
27
  }
28
+ if (plan.assetEngineKeys) {
29
+ lines.push(` asset engine keys: ${plan.assetEngineKeys.changed} change, ${plan.assetEngineKeys.skipped} skipped`);
30
+ }
25
31
  if (plan.blockers?.length) {
26
32
  lines.push("", "blockers:", ...plan.blockers.map((blocker) => ` - ${blocker}`));
27
33
  }
34
+ if (plan.configFile?.notes?.length) {
35
+ lines.push("", "config notes:", ...plan.configFile.notes.map((note) => ` - ${note}`));
36
+ }
37
+ if (plan.assetEngineKeys?.notes?.length) {
38
+ lines.push("", "engine name notes:", ...plan.assetEngineKeys.notes.map((note) => ` - ${note}`));
39
+ }
28
40
  if (plan.backupPath) {
29
41
  lines.push("", `backup: ${plan.backupPath}`);
30
42
  }
@@ -1,7 +1,8 @@
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
- import { formatModelsListPlain } from "./helpers.js";
4
+ import { formatModelsPlain, formatModelsSetPlain } from "./helpers.js";
5
5
  export const modelsFormatters = [
6
- { command: "models-list", handler: (r) => formatModelsListPlain(r) },
6
+ { command: "models", handler: (r) => formatModelsPlain(r) },
7
+ { command: "models-set", handler: (r) => formatModelsSetPlain(r) },
7
8
  ];
@@ -2,10 +2,9 @@
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  // Output text formatters for `akm registry *` commands.
5
- import { formatRegistryAddPlain, formatRegistryListPlain, formatRegistryRemovePlain, formatRegistrySearchPlain, } from "./helpers.js";
5
+ import { formatRegistryAddPlain, formatRegistryListPlain, formatRegistryRemovePlain } from "./helpers.js";
6
6
  export const registryCommandFormatters = [
7
7
  { command: "registry-list", handler: (r) => formatRegistryListPlain(r) },
8
8
  { command: "registry-add", handler: (r) => formatRegistryAddPlain(r) },
9
9
  { command: "registry-remove", handler: (r) => formatRegistryRemovePlain(r) },
10
- { command: "registry-search", handler: (r, detail) => formatRegistrySearchPlain(r, detail) },
11
10
  ];
@@ -43,36 +43,24 @@ export function appendShowDirectives(lines, r) {
43
43
  lines.push(` - If this asset does not contain what you need, run \`akm feedback '${assetRef ?? "<ref>"}' --negative\` and search for a different asset.`);
44
44
  }
45
45
  if (assetType === "skill" || assetType === "knowledge") {
46
- const activeRun = r.activeRun;
47
- if (activeRun) {
48
- lines.unshift("Read this reference, follow the active unit's instructions, and return the result to the workflow runner. Step completion is automatic.");
49
- lines.unshift(`WORKFLOW ACTIVE — schema shown as reference (run: ${activeRun.runId})`);
50
- lines.unshift("---");
51
- lines.unshift("");
52
- // Still show feedback line at the end but skip the APPLY directive
53
- lines.push("");
54
- lines.push(`Run \`akm feedback ${assetRef ? `'${assetRef}'` : "<ref>"} --positive\` if the step succeeds, or \`--negative\` if this schema did not help.`);
46
+ // Show the APPLY directive. Branch on whether this
47
+ // skill primarily teaches CLI commands (shell output) vs YAML schema.
48
+ const preApplyLines = [...lines];
49
+ lines.push("");
50
+ lines.push("---");
51
+ if (isCommandOutputSkill(preApplyLines)) {
52
+ lines.push("APPLY (only if no workflow step is required for this task):");
53
+ lines.push(" 1. Identify the output file from README.md (typically commands.txt).");
54
+ lines.push(" 2. Write the exact command syntax from the code blocks above — replace every placeholder (`<name>`, `<value>`) with a real, concrete value from your task context. Do not write placeholder text.");
55
+ lines.push(" 3. Each command should be on a single line (no backslash line continuation unless the verifier expects it).");
56
+ lines.push(`Run \`akm feedback ${assetRef ? `'${assetRef}'` : "<ref>"} --positive\` after the task succeeds, or \`--negative\` if this reference did not contain the needed command syntax.`);
55
57
  }
56
58
  else {
57
- // No active workflow: show the APPLY directive. Branch on whether this
58
- // skill primarily teaches CLI commands (shell output) vs YAML schema.
59
- const preApplyLines = [...lines];
60
- lines.push("");
61
- lines.push("---");
62
- if (isCommandOutputSkill(preApplyLines)) {
63
- lines.push("APPLY (only if no workflow step is required for this task):");
64
- lines.push(" 1. Identify the output file from README.md (typically commands.txt).");
65
- lines.push(" 2. Write the exact command syntax from the code blocks above — replace every placeholder (`<name>`, `<value>`) with a real, concrete value from your task context. Do not write placeholder text.");
66
- lines.push(" 3. Each command should be on a single line (no backslash line continuation unless the verifier expects it).");
67
- lines.push(`Run \`akm feedback ${assetRef ? `'${assetRef}'` : "<ref>"} --positive\` after the task succeeds, or \`--negative\` if this reference did not contain the needed command syntax.`);
68
- }
69
- else {
70
- lines.push("APPLY (only if no workflow step is required for this task):");
71
- lines.push(" 1. Identify the target file from README.md — write or edit it. If the file does not yet exist, CREATE it with the full structure from this schema.");
72
- lines.push(" 2. Add/edit the fields shown above using the exact field names from this schema.");
73
- lines.push(" 3. COPY the exact YAML structure and field names from the code blocks above — do not substitute synonyms or invent nesting. Replace every placeholder value with a real, concrete value from your task context. Do not leave any field as null, empty, or a placeholder.");
74
- lines.push(`Run \`akm feedback ${assetRef ? `'${assetRef}'` : "<ref>"} --positive\` after the task succeeds, or \`--negative\` if the task fails after following this guidance.`);
75
- }
59
+ lines.push("APPLY (only if no workflow step is required for this task):");
60
+ lines.push(" 1. Identify the target file from README.md — write or edit it. If the file does not yet exist, CREATE it with the full structure from this schema.");
61
+ lines.push(" 2. Add/edit the fields shown above using the exact field names from this schema.");
62
+ lines.push(" 3. COPY the exact YAML structure and field names from the code blocks above — do not substitute synonyms or invent nesting. Replace every placeholder value with a real, concrete value from your task context. Do not leave any field as null, empty, or a placeholder.");
63
+ lines.push(`Run \`akm feedback ${assetRef ? `'${assetRef}'` : "<ref>"} --positive\` after the task succeeds, or \`--negative\` if the task fails after following this guidance.`);
76
64
  }
77
65
  }
78
66
  else if (assetType === "workflow") {
@@ -43,8 +43,6 @@ export function formatShowPlain(r, detail) {
43
43
  }
44
44
  if (r.modelHint != null)
45
45
  lines.push(`modelHint: ${String(r.modelHint)}`);
46
- if (r.toolPolicy != null)
47
- lines.push(`toolPolicy: ${JSON.stringify(r.toolPolicy)}`);
48
46
  if (r.run)
49
47
  lines.push(`run: ${String(r.run)}`);
50
48
  if (r.setup)
@@ -0,0 +1,70 @@
1
+ // This Source Code Form is subject to the terms of the Mozilla Public
2
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+ const text = (value) => (value === undefined || value === null ? "-" : String(value));
5
+ const yesNo = (value) => (value === undefined ? "-" : value ? "yes" : "no");
6
+ /** Left-aligned columns, two spaces apart, the header first. */
7
+ function table(headers, cells) {
8
+ const widths = headers.map((header, i) => Math.max(header.length, ...cells.map((row) => row[i]?.length ?? 0)));
9
+ const line = (row) => row
10
+ .map((cell, i) => cell.padEnd(widths[i] ?? cell.length))
11
+ .join(" ")
12
+ .trimEnd();
13
+ return [line(headers), ...cells.map(line)];
14
+ }
15
+ /** The reachability column: answered, or why not. */
16
+ function reachable(row) {
17
+ return row.reachable === true ? "yes" : `no${row.error ? ` (${text(row.error)})` : ""}`;
18
+ }
19
+ /** The work column: where it runs, or that it does not. */
20
+ function runsOn(row) {
21
+ if (row.kind === null || row.kind === undefined)
22
+ return "off";
23
+ return row.kind === "local" ? "built-in embedder" : `${text(row.kind)} ${text(row.target)}`;
24
+ }
25
+ /** `triage judgment → connection second (qwen3-8b)`: a part of the work that runs elsewhere, and where. */
26
+ function override(entry) {
27
+ const where = entry.target === null || entry.target === undefined ? "off" : `${text(entry.kind)} ${text(entry.target)}`;
28
+ return `${text(entry.name)} → ${where}${entry.model ? ` (${text(entry.model)})` : ""}`;
29
+ }
30
+ /** What to look at in a work row: what resolves elsewhere, or what is wrong. */
31
+ function notes(row) {
32
+ const elsewhere = Array.isArray(row.overrides) ? row.overrides.map(override) : [];
33
+ return [...elsewhere, ...(row.problem ? [text(row.problem)] : [])].join("; ");
34
+ }
35
+ const CONNECTION_COLUMNS = [
36
+ { header: "NAME", cell: (row) => text(row.name) },
37
+ { header: "DEFAULT", cell: (row) => (row.default ? "yes" : "") },
38
+ { header: "ENDPOINT", cell: (row) => text(row.endpoint) },
39
+ { header: "KEY", cell: (row) => text(row.key) },
40
+ { header: "REACHABLE", cell: reachable, field: "reachable" },
41
+ ];
42
+ const HARNESS_COLUMNS = [
43
+ { header: "NAME", cell: (row) => text(row.name) },
44
+ { header: "DEFAULT", cell: (row) => (row.default ? "yes" : "") },
45
+ { header: "PLATFORM", cell: (row) => text(row.platform) },
46
+ { header: "INSTALLED", cell: (row) => yesNo(row.installed) },
47
+ { header: "MODEL CALLS", cell: (row) => (row.modelWork === false ? "off" : ""), field: "modelWork" },
48
+ { header: "VERSION", cell: (row) => text(row.version), field: "version" },
49
+ ];
50
+ const WORK_COLUMNS = [
51
+ { header: "WORK", cell: (row) => text(row.process) },
52
+ { header: "RUNS ON", cell: runsOn },
53
+ { header: "MODEL", cell: (row) => text(row.model) },
54
+ { header: "NOTES", cell: notes },
55
+ ];
56
+ function section(title, columns, rows) {
57
+ if (rows.length === 0)
58
+ return [];
59
+ const shown = columns.filter((column) => column.field === undefined || rows.some((row) => row[column.field] !== undefined));
60
+ const body = table(shown.map((column) => column.header), rows.map((row) => shown.map((column) => column.cell(row))));
61
+ return [`${title}:`, ...body.map((line) => ` ${line}`)];
62
+ }
63
+ export function renderTargetsTable(rows) {
64
+ const of = (type) => rows.filter((row) => row?.type === type);
65
+ return [
66
+ ...section("connections", CONNECTION_COLUMNS, of("connection")),
67
+ ...section("harnesses", HARNESS_COLUMNS, of("harness")),
68
+ ...section("work", WORK_COLUMNS, of("process")),
69
+ ];
70
+ }