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
@@ -2,6 +2,6 @@
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
  export { DEFAULT_AGENT_TIMEOUT_MS } from "./config.js";
5
- export { _setAgentDetectForTests, defaultWhich, detectAgentCliProfiles, pickDefaultAgentProfile } from "./detect.js";
5
+ export { _setAgentDetectForTests, defaultWhich, detectAgentCliProfiles } from "./detect.js";
6
6
  export { getBuiltinAgentProfile, listBuiltinAgentProfiles, } from "./profiles.js";
7
7
  export { buildProposePrompt, buildReflectPrompt, parseAgentProposalPayload } from "./prompts.js";
@@ -2,19 +2,18 @@
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  /**
5
- * Built-in profile registry for external agent CLIs (v1 spec §12.1).
5
+ * Built-in profile registry for external agent CLIs.
6
6
  *
7
7
  * A `AgentProfile` is the minimum metadata required to shell-out to a
8
- * coding-agent CLI. Named engines lower canonical harness metadata into this
8
+ * coding-agent CLI. A harness lowers canonical harness metadata into this
9
9
  * intentionally small internal shape. The wrapper is in `./spawn.ts`.
10
10
  */
11
- import { COMMON_SPAWN_ENV_PASSTHROUGH } from "../../core/spawn-env.js";
12
11
  import { HARNESS_REGISTRY } from "../harnesses/index.js";
13
12
  /**
14
13
  * Built-in profiles for the agent CLIs akm knows out of the box, DERIVED from
15
14
  * the harness registry: each harness that declares `profile` defaults gets one,
16
15
  * named by its id. The fields are conservative defaults, overridable from user
17
- * config. Engine lowering selects captured stdio for unattended dispatch.
16
+ * config. Request lowering selects captured stdio for unattended dispatch.
18
17
  *
19
18
  * Built lazily: the registry transitively imports this module, so it cannot be
20
19
  * read at module load.
@@ -25,39 +24,15 @@ function builtinProfiles() {
25
24
  return builtins;
26
25
  builtins = {};
27
26
  for (const harness of HARNESS_REGISTRY) {
28
- if (!harness.profile)
29
- continue;
30
27
  builtins[harness.id] = {
31
28
  name: harness.id,
32
29
  bin: harness.profile.bin,
33
30
  args: harness.profile.args,
34
31
  stdio: "interactive",
35
- // AKM_EVENT_SOURCE (in the common set) carries usage-event provenance so akm
36
- // invocations a spawned agent makes are recorded as machine traffic; it is a
37
- // provenance tag, never a secret.
38
- envPassthrough: [...COMMON_SPAWN_ENV_PASSTHROUGH, ...harness.profile.envPassthrough],
39
- parseOutput: "text",
40
32
  };
41
33
  }
42
34
  return builtins;
43
35
  }
44
- /**
45
- * Binary the `opencode-sdk` harness needs on PATH.
46
- *
47
- * The embedded client is not self-contained, and that is the SDK's own design
48
- * rather than a consequence of how akm drives it: `@opencode-ai/sdk` (OpenCode 1)
49
- * ships with `"dependencies": {}` and its `createOpencodeServer` is itself a
50
- * `spawn("opencode", ["serve", ...])`; `@opencode/client` (OpenCode 2, the
51
- * default) is an HTTP client only and starts nothing. akm's runner spawns a
52
- * private `opencode serve` of the engine's detected major (
53
- * never the v2 background service) and talks HTTP to it through that major's
54
- * adapter (see `harnesses/opencode-sdk/sdk-runner.ts`, `v1-adapter.ts`, `v2-adapter.ts`),
55
- * so the `opencode` binary gates the SDK path exactly as it gates the CLI
56
- * path — a host with the npm package but no binary can dispatch neither.
57
- * `opencode-sdk` deliberately declares no `profile` — it dispatches
58
- * without argv construction — so this is the one place that pairing lives.
59
- */
60
- export const OPENCODE_SDK_SERVER_BIN = "opencode";
61
36
  /** Returns the built-in descriptor for a canonical harness id. */
62
37
  export function getBuiltinAgentProfile(name) {
63
38
  return builtinProfiles()[name];
@@ -73,3 +48,24 @@ export function listBuiltinAgentProfiles() {
73
48
  }
74
49
  return out;
75
50
  }
51
+ /** The profile a harness runner spawns: its platform's built-in defaults under what the config set. */
52
+ export function harnessProfile(runner) {
53
+ return {
54
+ name: runner.name,
55
+ platform: runner.platform,
56
+ bin: runner.bin,
57
+ args: runner.args,
58
+ stdio: "captured",
59
+ ...(runner.model ? { model: runner.model } : {}),
60
+ };
61
+ }
62
+ /** The profile of akm's own runtime, the pinned OpenCode process that runs agent work over a connection. It names the connection; the program is fetched and started by `harnesses/opencode/runtime/`. */
63
+ export function runtimeProfile(connection) {
64
+ return {
65
+ name: connection.name,
66
+ bin: "",
67
+ args: [],
68
+ stdio: "captured",
69
+ model: connection.model,
70
+ };
71
+ }
@@ -4,14 +4,14 @@
4
4
  /**
5
5
  * Shared prompt builders for proposal-producing agent commands (#226).
6
6
  *
7
- * `akm reflect` and `akm proposal new` both ask the configured engine for a
7
+ * `akm reflect` and `akm proposal new` both ask the connection or harness they run on for a
8
8
  * structured proposal payload. The prompts are intentionally similar and share
9
- * their construction here. `proposal new` asks every engine kind for the JSON
9
+ * their construction here. `proposal new` asks a connection and a harness alike for the JSON
10
10
  * object below, with {@link PROPOSAL_JSON_SCHEMA} as the request's output
11
- * schema. Reflect asks every engine kind for its own contract, JSON Schema or
11
+ * schema. Reflect asks both for its own contract, JSON Schema or
12
12
  * framed markdown ({@link ReflectOutputMode}).
13
13
  *
14
- * The output an engine must produce for `proposal new` is a strict JSON object:
14
+ * The output `proposal new` needs back is a strict JSON object:
15
15
  *
16
16
  * ```json
17
17
  * {
@@ -42,7 +42,7 @@ const TYPE_HINTS = {
42
42
  lesson: "lesson assets MUST start with frontmatter containing `description` and `when_to_use` keys (both non-empty). Body: 1–3 short paragraphs of practical guidance. A lesson is NOT a restatement of the source asset — it answers: When should I reach for this? What goes wrong without it? What did real use reveal that the asset itself doesn't say?",
43
43
  skill: "skill assets are stored as `skills/<name>/SKILL.md`. Frontmatter typically includes `name`, `description`, and `when_to_use`.",
44
44
  command: "command assets are markdown with optional frontmatter (`name`, `description`). The body is the prompt template the user invokes.",
45
- agent: "agent assets are markdown with frontmatter describing the agent role (`name`, `description`, optional `tools`, `model`).",
45
+ agent: "agent assets are markdown with frontmatter describing the agent role (`name`, `description`, optional `model`).",
46
46
  knowledge: "knowledge assets are reference markdown documents. Include a top-level `# Title` and concise sections.",
47
47
  memory: "memory assets are short factual notes the user wants persisted across sessions. Frontmatter usually includes `description`.",
48
48
  workflow: "workflow assets are markdown describing a multi-step process. Include `# <Title>` and ordered `## Step N` sections.",
@@ -75,7 +75,7 @@ export const REFLECT_CONTENT_CAP = 12_000;
75
75
  */
76
76
  export const REFLECT_TRUNCATION_MARKER = "... [truncated — focus on the visible portion]";
77
77
  /**
78
- * The JSON envelope `proposal new` asks the engine to honour. The wrapper code
78
+ * The JSON envelope `proposal new` asks the model to honour. The wrapper code
79
79
  * uses `JSON.parse(stdout)` to extract the payload — anything outside the JSON
80
80
  * object will be treated as a parse error.
81
81
  */
@@ -96,10 +96,10 @@ const RESPONSE_CONTRACT_JSON = [
96
96
  ].join("\n");
97
97
  /**
98
98
  * The JSON Schema of {@link RESPONSE_CONTRACT_JSON}'s object, the output
99
- * schema `proposal new` sends with its request: an LLM engine gets it as
100
- * `response_format`, codex as `--output-schema`, every agent engine as the
101
- * shared schema instruction. It is in the strict form those native channels
102
- * accept (every property required, no others), so it leaves out the optional
99
+ * schema `proposal new` sends with its request: a connection gets it as
100
+ * `response_format`, a harness as the shared schema instruction. It
101
+ * is in the strict form a provider's native channel accepts (every property
102
+ * required, no others), so it leaves out the optional
103
103
  * `frontmatter`, which `content` already carries. The reply is held only to
104
104
  * what {@link validateProposalPayload} needs.
105
105
  */
@@ -252,12 +252,12 @@ export function buildReflectPrompt(input) {
252
252
  }
253
253
  if (input.assetContent?.trim()) {
254
254
  // Cap defaults to REFLECT_CONTENT_CAP (12 000 chars) to stay well under OS
255
- // ARG_MAX when the prompt is passed as a CLI argument to opencode/claude
256
- // — large assets (wiki snapshots, long runbooks) would otherwise trigger
257
- // E2BIG on posix_spawn. Direct-LLM callers never touch argv, so they may
258
- // pass a larger, context-aware `contentBudgetChars` (#952); it is never
259
- // allowed below the flat floor, which the caller enforces before calling in.
260
- const contentCap = input.contentBudgetChars ?? REFLECT_CONTENT_CAP;
255
+ // ARG_MAX when the prompt is passed as a CLI argument — large assets (wiki
256
+ // snapshots, long runbooks) would otherwise trigger E2BIG on posix_spawn.
257
+ // A prompt on stdin or over HTTP never touches argv, so the caller passes a
258
+ // larger, context-aware `contentBudgetChars` (#952), or `null` for none; a
259
+ // number is never allowed below the flat floor, which the caller enforces.
260
+ const contentCap = input.contentBudgetChars === null ? Number.POSITIVE_INFINITY : (input.contentBudgetChars ?? REFLECT_CONTENT_CAP);
261
261
  const body = input.assetContent.trimEnd();
262
262
  const truncated = body.length > contentCap;
263
263
  sections.push(truncated
@@ -297,19 +297,6 @@ export function buildReflectPrompt(input) {
297
297
  if (input.avoidPatterns && input.avoidPatterns.length > 0) {
298
298
  sections.push(`## Avoid These Patterns\nRun-only guidance: do not copy this heading, explanation, or any diagnostic below into the proposed asset.\nPrevious assets in this run produced these errors — do not repeat them:\n${input.avoidPatterns.map((e) => `- ${e}`).join("\n")}`);
299
299
  }
300
- // R-1 / #372: Self-Refine (arXiv:2303.17651) — inject prior draft as critique target.
301
- // On refinement iterations (iter > 0), the agent is shown its previous proposal
302
- // and asked to self-critique and improve it rather than starting from scratch.
303
- if (input.priorDraft?.trim()) {
304
- sections.push("## Self-Refine: Critique and Improve\n" +
305
- "The following is your previous draft proposal. " +
306
- "Identify specific weaknesses: missing evidence, vague wording, incomplete frontmatter, " +
307
- "or claims that duplicate existing content without adding new signal. " +
308
- "Then produce an improved version that addresses those weaknesses.\n\n" +
309
- "Previous draft:\n```\n" +
310
- input.priorDraft.trimEnd() +
311
- "\n```");
312
- }
313
300
  if (input.ref && input.assetContent?.trim()) {
314
301
  const problems = frontmatterProblems(input.assetContent);
315
302
  sections.push(problems.length > 0
@@ -321,7 +308,7 @@ export function buildReflectPrompt(input) {
321
308
  }
322
309
  /**
323
310
  * Build the prompt for `akm proposal new <type> <name> --task ...`. Asks the
324
- * engine to author a brand-new asset of the given type fulfilling `task`, and
311
+ * model to author a brand-new asset of the given type fulfilling `task`, and
325
312
  * to return it as the JSON object of {@link RESPONSE_CONTRACT_JSON}.
326
313
  */
327
314
  export function buildProposePrompt(input) {
@@ -3,25 +3,8 @@
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  import { ConfigError } from "../../core/errors.js";
5
5
  import { withSchemaInstruction } from "../../core/structured.js";
6
- import { MODEL_WORK_POLICY_ID } from "../../execution/source.js";
7
- import { getHarness } from "../harnesses/index.js";
8
6
  import { composeConversationFallbackPrompt } from "./conversation-fallback.js";
9
7
  import { composePersonaFallbackPrompt } from "./persona-fallback.js";
10
- /** A tool selection that actually names tools (not omitted, null, or empty). */
11
- export function hasToolSelection(value) {
12
- if (value === null || value === undefined)
13
- return false;
14
- if (typeof value === "string" || Array.isArray(value))
15
- return value.length > 0;
16
- return Object.keys(value).length > 0;
17
- }
18
- function translatesTools(mode, value) {
19
- if (mode === "all")
20
- return true;
21
- if (typeof value === "string" || Array.isArray(value))
22
- return mode === "flat" || mode === "sdk";
23
- return mode === "sdk" && value !== null && Object.values(value).every((entry) => typeof entry === "boolean");
24
- }
25
8
  /** The notice for a request field a transport does not carry; dispatch continues. */
26
9
  export function untranslated(adapter, field) {
27
10
  return {
@@ -32,94 +15,77 @@ export function untranslated(adapter, field) {
32
15
  message: `The ${adapter} lowerer does not translate resolved field ${field}; dispatch will continue optimistically.`,
33
16
  };
34
17
  }
35
- /** Request fields carrying adapter-owned extensions, which no transport translates. */
36
- export function extensionFields(request) {
37
- return [
38
- ...(request.extensions ? ["extensions"] : []),
39
- ...(request.command.extensions ? ["command.extensions"] : []),
40
- ...(request.persona?.extensions ? ["persona.extensions"] : []),
41
- ...(request.engine.extensions ? ["engine.extensions"] : []),
42
- ...(request.runtime.extensions ? ["runtime.extensions"] : []),
43
- ];
44
- }
45
18
  /**
46
- * Build one harness's request builder: map a resolved request onto the
47
- * harness-neutral {@link AgentDispatchRequest} its argv builder consumes,
48
- * composing into the prompt what the harness has no channel for.
19
+ * Lower a resolved request for one target (a harness, or akm's own runtime): map
20
+ * it onto the harness-neutral {@link AgentDispatchRequest} its builder consumes,
21
+ * composing into the prompt what the target has no channel for.
49
22
  */
50
- export function createAgentRequestLowerer(options) {
51
- const supportedInference = new Set(options.inference ?? []);
52
- return (_profile, request) => {
53
- const modelWork = request.authorization.policy?.id === MODEL_WORK_POLICY_ID;
54
- const notices = [];
55
- const skip = (field) => {
56
- notices.push(untranslated(options.adapter, field));
57
- };
58
- let prompt = request.command.content;
59
- if (request.conversation && request.conversation.length > 0) {
60
- prompt = composeConversationFallbackPrompt(request.conversation, prompt);
61
- notices.push({
62
- code: "conversation-prompt-composed",
63
- severity: "warning",
64
- adapter: options.adapter,
65
- field: "conversation",
66
- message: `The ${options.adapter} transport has no native multi-message channel; AKM composed the conversation prefix into one deterministic JSON prompt block.`,
67
- });
68
- }
69
- const dispatch = { prompt };
70
- if (request.persona) {
71
- if (options.personaChannel === "native")
72
- dispatch.systemPrompt = request.persona.content;
73
- else {
74
- const composed = composePersonaFallbackPrompt(request.persona.content, prompt, options.adapter);
75
- prompt = composed.prompt;
76
- notices.push(...composed.notices);
77
- }
78
- }
79
- else if (typeof request.agent === "string") {
80
- if (!getHarness(options.adapter)?.capabilities.nativeAgent) {
81
- throw new ConfigError(`The ${options.adapter} transport cannot consume native agent selector ${JSON.stringify(request.agent)}.`, "INVALID_CONFIG_FILE");
82
- }
83
- dispatch.agent = request.agent;
84
- }
85
- // Every agent transport gets the schema as the one instruction; a harness
86
- // with a native channel (codex --output-schema) also reads dispatch.schema.
87
- if (request.outputSchema) {
88
- prompt = withSchemaInstruction(prompt, request.outputSchema);
89
- dispatch.schema = request.outputSchema;
23
+ export function lowerRequest(target, request) {
24
+ const supportedInference = new Set(target.inference ?? []);
25
+ const adapter = target.id;
26
+ const notices = [];
27
+ const skip = (field) => {
28
+ notices.push(untranslated(adapter, field));
29
+ };
30
+ let prompt = request.command.content;
31
+ if (request.conversation && request.conversation.length > 0) {
32
+ prompt = composeConversationFallbackPrompt(request.conversation, prompt);
33
+ notices.push({
34
+ code: "conversation-prompt-composed",
35
+ severity: "warning",
36
+ adapter,
37
+ field: "conversation",
38
+ message: `The ${adapter} transport has no native multi-message channel; AKM composed the conversation prefix into one deterministic JSON prompt block.`,
39
+ });
40
+ }
41
+ const dispatch = { prompt };
42
+ if (request.persona) {
43
+ if (target.systemPrompt)
44
+ dispatch.systemPrompt = request.persona.content;
45
+ else {
46
+ const composed = composePersonaFallbackPrompt(request.persona.content, prompt, adapter);
47
+ prompt = composed.prompt;
48
+ notices.push(...composed.notices);
90
49
  }
91
- dispatch.prompt = prompt;
92
- if (request.model)
93
- dispatch.model = request.model.resolved;
94
- if (Object.hasOwn(request, "inference")) {
95
- dispatch.inference = request.inference ?? null;
96
- for (const key of Object.keys(request.inference ?? {}).sort()) {
97
- if (!(modelWork && supportedInference.has(key)))
98
- skip(`inference.${key}`);
99
- }
50
+ }
51
+ else if (typeof request.agent === "string" && request.modelWork) {
52
+ // Model work is not agent work: a native agent would replace the confined run.
53
+ notices.push({
54
+ code: "model-work-agent-ignored",
55
+ severity: "warning",
56
+ adapter,
57
+ field: "agent",
58
+ message: `The ${adapter} transport ignores native agent ${JSON.stringify(request.agent)} for model work.`,
59
+ });
60
+ }
61
+ else if (typeof request.agent === "string") {
62
+ if (!target.nativeAgent) {
63
+ throw new ConfigError(`The ${adapter} transport cannot consume native agent selector ${JSON.stringify(request.agent)}.`, "INVALID_CONFIG_FILE");
100
64
  }
101
- if (modelWork) {
102
- if (!getHarness(options.adapter)?.capabilities.modelWork) {
103
- throw new ConfigError(`The ${options.adapter} transport cannot enforce the model-work tool policy.`, "INVALID_CONFIG_FILE");
104
- }
105
- // The builder selects its own confined agent or flags; another agent would replace them.
106
- if (dispatch.agent) {
107
- throw new ConfigError(`The ${options.adapter} transport cannot run native agent ${JSON.stringify(dispatch.agent)} under the model-work tool policy.`, "INVALID_CONFIG_FILE");
108
- }
65
+ dispatch.agent = request.agent;
66
+ }
67
+ // Every agent transport gets the schema as the one instruction.
68
+ if (request.outputSchema)
69
+ prompt = withSchemaInstruction(prompt, request.outputSchema);
70
+ dispatch.prompt = prompt;
71
+ if (request.model)
72
+ dispatch.model = request.model.model;
73
+ for (const key of Object.keys(request.inference ?? {}).sort()) {
74
+ if (!supportedInference.has(key))
75
+ skip(`inference.${key}`);
76
+ }
77
+ if (request.modelWork) {
78
+ if (target.confinable)
109
79
  dispatch.modelWork = true;
80
+ else {
81
+ notices.push({
82
+ code: "model-work-unrestricted",
83
+ severity: "info",
84
+ adapter,
85
+ field: "modelWork",
86
+ message: `The ${adapter} transport cannot restrict its tools for model work; the run is unrestricted, in a scratch directory.`,
87
+ });
110
88
  }
111
- else if (request.tools !== undefined) {
112
- // An explicit empty selection still reaches the builder (e.g. an empty allowlist).
113
- if (hasToolSelection(request.tools) && !translatesTools(options.tools, request.tools)) {
114
- throw new ConfigError(`The ${options.adapter} transport cannot enforce the resolved tool policy.`, "INVALID_CONFIG_FILE");
115
- }
116
- dispatch.tools = request.tools;
117
- }
118
- const settings = request.runtime.settings;
119
- if (settings && Object.keys(settings).length > 0)
120
- skip("runtime.settings");
121
- for (const field of extensionFields(request))
122
- skip(field);
123
- return { prompt, dispatch, notices };
124
- };
89
+ }
90
+ return { dispatch, notices };
125
91
  }