akm-cli 0.9.1 → 0.9.2-alpha.1

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 (341) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +3 -1
  3. package/SECURITY.md +1 -1
  4. package/STABILITY.md +1 -1
  5. package/dist/akm +2 -2
  6. package/dist/akm-migrate +2 -2
  7. package/dist/assets/hints/cli-hints-full.md +14 -9
  8. package/dist/assets/improve-strategies/proactive-maintenance.json +1 -1
  9. package/dist/assets/improve-strategies/reflect-distill.json +1 -1
  10. package/dist/assets/models.json +35 -0
  11. package/dist/assets/tasks/core/extract.yml +6 -5
  12. package/dist/assets/tasks/core/improve.yml +6 -5
  13. package/dist/assets/tasks/core/index-refresh.yml +6 -5
  14. package/dist/assets/tasks/core/sync.yml +6 -5
  15. package/dist/assets/tasks/core/version-check.yml +6 -5
  16. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +6 -5
  17. package/dist/assets/tasks/improve/akm-improve-catchup.yml +6 -5
  18. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +6 -5
  19. package/dist/assets/tasks/improve/akm-improve-frequent.yml +6 -5
  20. package/dist/assets/tasks/improve/akm-improve-nightly.yml +6 -5
  21. package/dist/cli/confirm.js +2 -2
  22. package/dist/cli/parse-args.js +3 -24
  23. package/dist/cli/retired-commands.js +1 -1
  24. package/dist/cli/shared.js +2 -2
  25. package/dist/cli.js +11 -9
  26. package/dist/commands/agent/agent-dispatch.js +55 -89
  27. package/dist/commands/agent/contribute-cli.js +12 -45
  28. package/dist/commands/command/builtin-action.js +32 -0
  29. package/dist/commands/command/command-cli.js +99 -0
  30. package/dist/commands/command/command-execution.js +308 -0
  31. package/dist/commands/command/execution-source-loader.js +176 -0
  32. package/dist/commands/command/portable-template.js +60 -0
  33. package/dist/commands/config-cli.js +10 -4
  34. package/dist/commands/env/env.js +4 -2
  35. package/dist/commands/feedback-cli.js +1 -1
  36. package/dist/commands/health/checks.js +241 -29
  37. package/dist/commands/health/html-report.js +0 -14
  38. package/dist/commands/health/report-view-model.js +0 -1
  39. package/dist/commands/health/surfaces.js +6 -7
  40. package/dist/commands/health/types.js +0 -2
  41. package/dist/commands/health.js +63 -18
  42. package/dist/commands/improve/collapse-detector.js +2 -2
  43. package/dist/commands/improve/consolidate.js +251 -214
  44. package/dist/commands/improve/distill/promote-memory.js +71 -34
  45. package/dist/commands/improve/distill/quality-gate.js +17 -5
  46. package/dist/commands/improve/distill.js +232 -155
  47. package/dist/commands/improve/eligibility.js +112 -79
  48. package/dist/commands/improve/execution.js +57 -0
  49. package/dist/commands/improve/extract-cli.js +5 -5
  50. package/dist/commands/improve/extract.js +521 -342
  51. package/dist/commands/improve/improve-strategies.js +43 -14
  52. package/dist/commands/improve/improve.js +249 -29
  53. package/dist/commands/improve/loop-stages.js +11 -17
  54. package/dist/commands/improve/memory/memory-contradiction-detect.js +90 -66
  55. package/dist/commands/improve/outcome-loop.js +22 -38
  56. package/dist/commands/improve/planner.js +134 -0
  57. package/dist/commands/improve/preparation.js +730 -409
  58. package/dist/commands/improve/reflect.js +386 -223
  59. package/dist/commands/improve/run-context.js +3 -4
  60. package/dist/commands/improve/salience.js +6 -58
  61. package/dist/commands/improve/session-asset.js +12 -12
  62. package/dist/commands/lint/index.js +101 -29
  63. package/dist/commands/migrate-cli.js +11 -69
  64. package/dist/commands/migration-tool.js +6 -9
  65. package/dist/commands/models-cli.js +27 -0
  66. package/dist/commands/proposal/drain.js +258 -186
  67. package/dist/commands/proposal/proposal-cli.js +32 -10
  68. package/dist/commands/proposal/proposal.js +2 -5
  69. package/dist/commands/proposal/propose.js +192 -172
  70. package/dist/commands/proposal/repository.js +54 -91
  71. package/dist/commands/proposal/validators/proposal-validators.js +9 -7
  72. package/dist/commands/read/curate.js +10 -0
  73. package/dist/commands/read/registry-search.js +25 -9
  74. package/dist/commands/read/remember-cli.js +14 -2
  75. package/dist/commands/read/search.js +10 -4
  76. package/dist/commands/read/show.js +139 -153
  77. package/dist/commands/registry-cli.js +16 -7
  78. package/dist/commands/remember.js +33 -18
  79. package/dist/commands/sources/add-cli.js +19 -178
  80. package/dist/commands/sources/bundle-cli.js +15 -3
  81. package/dist/commands/sources/dangerous-env-audit.js +135 -0
  82. package/dist/commands/sources/info.js +2 -1
  83. package/dist/commands/sources/installed-stashes.js +835 -152
  84. package/dist/commands/sources/schema-repair.js +174 -95
  85. package/dist/commands/sources/self-update.js +30 -74
  86. package/dist/commands/sources/source-add.js +3 -5
  87. package/dist/commands/sources/sources-cli.js +2 -15
  88. package/dist/commands/sources/update-transaction.js +220 -0
  89. package/dist/commands/tasks/tasks-cli.js +3 -3
  90. package/dist/commands/tasks/tasks.js +736 -317
  91. package/dist/commands/workflow-cli.js +2 -2
  92. package/dist/core/adapter/adapters/agent-skills-adapter.js +3 -0
  93. package/dist/core/adapter/adapters/akm-adapter.js +83 -34
  94. package/dist/core/adapter/adapters/akm-lint.js +54 -39
  95. package/dist/core/adapter/adapters/akm-metadata.js +45 -45
  96. package/dist/core/adapter/adapters/akm-task-adapter.js +32 -49
  97. package/dist/core/adapter/adapters/akm-workflow-adapter.js +38 -23
  98. package/dist/core/adapter/adapters/dotenv-adapter.js +30 -1
  99. package/dist/core/adapter/adapters/generic-files-adapter.js +11 -0
  100. package/dist/core/adapter/adapters/index.js +0 -9
  101. package/dist/core/adapter/adapters/llm-wiki-adapter.js +4 -0
  102. package/dist/core/adapter/adapters/okf-adapter.js +4 -0
  103. package/dist/core/adapter/adapters/opencode-adapter.js +5 -8
  104. package/dist/core/adapter/adapters/tool-dir-shared.js +63 -6
  105. package/dist/core/adapter/adapters/website-snapshot-adapter.js +4 -0
  106. package/dist/core/adapter/execution-source.js +308 -0
  107. package/dist/core/adapter/recognize-match.js +36 -13
  108. package/dist/core/adapter/registry.js +0 -9
  109. package/dist/core/asset/stash-meta.js +94 -4
  110. package/dist/core/common.js +6 -11
  111. package/dist/core/config/config-io.js +3 -3
  112. package/dist/core/config/config-schema.js +18 -40
  113. package/dist/core/config/config-sources.js +11 -21
  114. package/dist/core/config/config-walker.js +31 -13
  115. package/dist/core/config/config.js +21 -20
  116. package/dist/core/config/schema/engines.js +8 -7
  117. package/dist/core/config/schema/improve-processes.js +29 -5
  118. package/dist/core/config/schema/primitives.js +1 -23
  119. package/dist/core/config/schema/sources-bundles.js +13 -16
  120. package/dist/core/errors.js +2 -0
  121. package/dist/core/events.js +68 -32
  122. package/dist/core/extra-params.js +1 -0
  123. package/dist/core/improve-result.js +315 -0
  124. package/dist/core/lesson-lint.js +0 -6
  125. package/dist/core/maintenance-barrier.js +4 -4
  126. package/dist/core/network-policy.js +152 -0
  127. package/dist/core/paths.js +1 -1
  128. package/dist/core/recognition-util.js +4 -4
  129. package/dist/core/registry-url.js +456 -0
  130. package/dist/core/state/migrations.js +161 -47
  131. package/dist/core/state-db.js +453 -80
  132. package/dist/core/system-error.js +32 -0
  133. package/dist/core/time.js +2 -12
  134. package/dist/core/write-source.js +0 -18
  135. package/dist/execution/directory-identity.js +52 -0
  136. package/dist/execution/executable-identity.js +107 -0
  137. package/dist/execution/guarded-source.js +398 -0
  138. package/dist/execution/json.js +95 -0
  139. package/dist/{commands/health/types-session-log.js → execution/limits.js} +2 -1
  140. package/dist/execution/record.js +55 -0
  141. package/dist/execution/resolved-request.js +730 -0
  142. package/dist/execution/source.js +320 -0
  143. package/dist/indexer/bundle-identity-guard.js +5 -4
  144. package/dist/indexer/db/graph-db.js +33 -0
  145. package/dist/indexer/graph/graph-boost.js +3 -4
  146. package/dist/indexer/graph/graph-extraction.js +562 -373
  147. package/dist/indexer/index-written-assets.js +65 -34
  148. package/dist/indexer/indexer.js +443 -222
  149. package/dist/indexer/installations.js +6 -0
  150. package/dist/indexer/lookup/adapter-concept-owner.js +283 -0
  151. package/dist/indexer/passes/memory-inference.js +227 -174
  152. package/dist/indexer/scan/doc-to-entry.js +7 -9
  153. package/dist/indexer/scan/drain-dir.js +51 -23
  154. package/dist/indexer/search/db-search.js +98 -22
  155. package/dist/indexer/search/search-fields.js +1 -1
  156. package/dist/indexer/search/search-hit-enrichers.js +1 -1
  157. package/dist/indexer/search/search-source.js +7 -16
  158. package/dist/indexer/search/semantic-status.js +10 -1
  159. package/dist/indexer/usage/show-usage.js +105 -0
  160. package/dist/indexer/usage/usage-events.js +7 -2
  161. package/dist/indexer/walk/matchers.js +40 -10
  162. package/dist/indexer/walk/path-resolver.js +5 -2
  163. package/dist/indexer/walk/walker.js +20 -2
  164. package/dist/integrations/agent/builder-shared.js +3 -6
  165. package/dist/integrations/agent/conversation-fallback.js +16 -0
  166. package/dist/integrations/agent/engine-resolution.js +87 -87
  167. package/dist/integrations/agent/execution-cascade.js +566 -0
  168. package/dist/integrations/agent/execution-definitions.js +211 -0
  169. package/dist/integrations/agent/execution-lowering.js +811 -0
  170. package/dist/integrations/agent/execution-preparation.js +67 -0
  171. package/dist/integrations/agent/index.js +0 -2
  172. package/dist/integrations/agent/inline-execution.js +74 -0
  173. package/dist/integrations/agent/model-map.js +515 -0
  174. package/dist/integrations/agent/persona-fallback.js +30 -0
  175. package/dist/integrations/agent/request-lowering.js +186 -0
  176. package/dist/integrations/agent/runner-dispatch.js +230 -37
  177. package/dist/integrations/agent/runner.js +12 -83
  178. package/dist/integrations/harnesses/aider/agent-builder.js +8 -0
  179. package/dist/integrations/harnesses/aider/index.js +0 -1
  180. package/dist/integrations/harnesses/amazonq/agent-builder.js +8 -0
  181. package/dist/integrations/harnesses/amazonq/index.js +0 -1
  182. package/dist/integrations/harnesses/claude/agent-builder.js +14 -1
  183. package/dist/integrations/harnesses/claude/index.js +1 -5
  184. package/dist/integrations/harnesses/claude/session-log.js +3 -33
  185. package/dist/integrations/harnesses/codex/agent-builder.js +8 -0
  186. package/dist/integrations/harnesses/codex/index.js +0 -1
  187. package/dist/integrations/harnesses/copilot/agent-builder.js +8 -0
  188. package/dist/integrations/harnesses/copilot/index.js +0 -1
  189. package/dist/integrations/harnesses/gemini/agent-builder.js +8 -0
  190. package/dist/integrations/harnesses/gemini/index.js +0 -1
  191. package/dist/integrations/harnesses/index.js +4 -44
  192. package/dist/integrations/harnesses/opencode/agent-builder.js +16 -9
  193. package/dist/integrations/harnesses/opencode/index.js +0 -2
  194. package/dist/integrations/harnesses/opencode/session-log.js +14 -204
  195. package/dist/integrations/harnesses/opencode-sdk/harness.js +12 -1
  196. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +40 -42
  197. package/dist/integrations/harnesses/openhands/agent-builder.js +8 -0
  198. package/dist/integrations/harnesses/openhands/index.js +0 -1
  199. package/dist/integrations/harnesses/pi/agent-builder.js +8 -0
  200. package/dist/integrations/harnesses/pi/index.js +0 -1
  201. package/dist/integrations/harnesses/shared.js +0 -1
  202. package/dist/integrations/harnesses/types.js +1 -3
  203. package/dist/integrations/lockfile.js +82 -79
  204. package/dist/integrations/session-logs/index.js +6 -17
  205. package/dist/integrations/session-logs/provider-base.js +1 -29
  206. package/dist/llm/client.js +10 -5
  207. package/dist/llm/embedder.js +6 -7
  208. package/dist/llm/embedders/local.js +37 -88
  209. package/dist/llm/embedders/types.js +1 -1
  210. package/dist/llm/graph-extract.js +75 -50
  211. package/dist/llm/index-passes.js +43 -5
  212. package/dist/llm/memory-infer.js +8 -6
  213. package/dist/llm/metadata-enhance.js +5 -3
  214. package/dist/llm/structured-call.js +122 -25
  215. package/dist/output/format-exempt.js +1 -1
  216. package/dist/output/render-registry.js +0 -16
  217. package/dist/output/renderers.js +12 -7
  218. package/dist/output/shapes/curate.js +1 -0
  219. package/dist/output/shapes/helpers.js +10 -2
  220. package/dist/output/shapes/passthrough.js +2 -0
  221. package/dist/output/text/command-format.js +28 -32
  222. package/dist/output/text/health-format.js +1 -29
  223. package/dist/output/text/migrate.js +6 -56
  224. package/dist/output/text/proposal-format.js +16 -1
  225. package/dist/output/text/workflow-format.js +16 -0
  226. package/dist/registry/network.js +279 -0
  227. package/dist/registry/pinned-request-helper.js +247 -0
  228. package/dist/registry/pinned-transport.js +717 -0
  229. package/dist/registry/providers/skills-sh.js +18 -6
  230. package/dist/registry/providers/static-index.js +20 -7
  231. package/dist/registry/resolve.js +53 -28
  232. package/dist/scripts/akm-migrate-node.js +19122 -52218
  233. package/dist/scripts/akm-migrate.js +19064 -51567
  234. package/dist/setup/registry-stash-loader.js +64 -20
  235. package/dist/setup/semantic-assets.js +9 -34
  236. package/dist/setup/setup.js +12 -30
  237. package/dist/setup/source-identity.js +17 -0
  238. package/dist/setup/steps/sources.js +36 -15
  239. package/dist/setup/steps/tasks.js +39 -11
  240. package/dist/sources/providers/git-provider.js +3 -3
  241. package/dist/sources/providers/npm.js +2 -2
  242. package/dist/sources/providers/provider-utils.js +4 -3
  243. package/dist/sources/providers/website.js +11 -7
  244. package/dist/sources/snapshot-fetchers/host-guard.js +9 -136
  245. package/dist/sources/snapshot-fetchers/website-ingest.js +25 -109
  246. package/dist/sources/website-url.js +73 -0
  247. package/dist/storage/engines/sqlite-migrations.js +81 -26
  248. package/dist/storage/managed-db.js +27 -24
  249. package/dist/storage/repositories/events-repository.js +3 -0
  250. package/dist/storage/repositories/index-connection.js +42 -10
  251. package/dist/storage/repositories/index-entries-repository.js +167 -207
  252. package/dist/storage/repositories/index-entry-mapper.js +8 -12
  253. package/dist/storage/repositories/index-entry-schema.js +255 -0
  254. package/dist/storage/repositories/index-fts-repository.js +10 -10
  255. package/dist/storage/repositories/index-llm-cache-repository.js +8 -13
  256. package/dist/storage/repositories/index-meta-repository.js +0 -11
  257. package/dist/storage/repositories/index-schema.js +71 -342
  258. package/dist/storage/repositories/index-utility-repository.js +12 -17
  259. package/dist/storage/repositories/index-vec-repository.js +1 -1
  260. package/dist/storage/repositories/proposals-repository.js +4 -127
  261. package/dist/storage/repositories/registry-cache.js +2 -1
  262. package/dist/storage/repositories/task-history-repository.js +20 -40
  263. package/dist/storage/repositories/workflow-runs-repository.js +228 -129
  264. package/dist/storage/sqlite-read-snapshot.js +148 -0
  265. package/dist/tasks/backends/cron.js +170 -42
  266. package/dist/tasks/backends/index.js +1 -1
  267. package/dist/tasks/backends/launchd.js +787 -202
  268. package/dist/tasks/backends/schtasks.js +282 -83
  269. package/dist/tasks/embedded.js +7 -7
  270. package/dist/tasks/frozen-script.js +50 -0
  271. package/dist/tasks/resolve-akm-bin.js +5 -1
  272. package/dist/tasks/runner.js +239 -251
  273. package/dist/tasks/runtime-v3.js +281 -0
  274. package/dist/tasks/scheduler-binding.js +272 -0
  275. package/dist/tasks/scheduler-invocation.js +57 -43
  276. package/dist/tasks/scheduler-sync.js +654 -0
  277. package/dist/tasks/source-v3.js +752 -0
  278. package/dist/tasks/standalone-script-entry.js +5 -0
  279. package/dist/tasks/task-id.js +29 -0
  280. package/dist/workflows/authoring/authoring.js +15 -32
  281. package/dist/workflows/exec/dispatch-redaction.js +14 -8
  282. package/dist/workflows/exec/exec-unit.js +7 -28
  283. package/dist/workflows/exec/frozen-judge.js +57 -89
  284. package/dist/workflows/exec/lowering-notices.js +23 -0
  285. package/dist/workflows/exec/native-executor.js +301 -458
  286. package/dist/workflows/exec/param-secrets.js +4 -3
  287. package/dist/workflows/exec/run-workflow.js +26 -32
  288. package/dist/workflows/exec/step-work.js +105 -109
  289. package/dist/workflows/exec/unit-dispatch.js +103 -27
  290. package/dist/workflows/exec/unit-writer.js +3 -3
  291. package/dist/workflows/exec/worktree.js +2 -2
  292. package/dist/workflows/ir/compile.js +86 -72
  293. package/dist/workflows/ir/environment-v4.js +328 -0
  294. package/dist/workflows/ir/freeze-v4.js +122 -0
  295. package/dist/workflows/ir/plan-hash.js +13 -7
  296. package/dist/workflows/ir/schema-v4.js +525 -0
  297. package/dist/workflows/ir/schema.js +25 -284
  298. package/dist/workflows/ir/source-freeze-v4.js +506 -0
  299. package/dist/workflows/parser.js +27 -24
  300. package/dist/workflows/program/schema.js +1 -2
  301. package/dist/workflows/renderer.js +42 -29
  302. package/dist/workflows/resource-limits.js +4 -5
  303. package/dist/workflows/runtime/agent-identity.js +11 -13
  304. package/dist/workflows/runtime/plan-classifier.js +8 -8
  305. package/dist/workflows/runtime/runs.js +27 -43
  306. package/dist/workflows/runtime/workflow-asset-loader.js +45 -205
  307. package/dist/workflows/source-files.js +373 -0
  308. package/dist/workflows/source-ir/compile.js +196 -0
  309. package/dist/workflows/source-ir/github-yaml.js +577 -0
  310. package/dist/workflows/source-ir/ordering.js +38 -0
  311. package/dist/workflows/source-ir/program.js +50 -0
  312. package/dist/workflows/source-ir/result.js +26 -0
  313. package/dist/workflows/source-ir/schema.js +772 -0
  314. package/dist/workflows/source-ir/semantics.js +242 -0
  315. package/dist/workflows/source-ir/uses.js +14 -0
  316. package/docs/README.md +2 -0
  317. package/docs/migration/README.md +3 -1
  318. package/docs/migration/release-notes/0.9.2.md +55 -0
  319. package/docs/migration/release-notes/README.md +5 -0
  320. package/docs/migration/v0.8-to-v0.9.md +76 -1077
  321. package/docs/migration/v0.9.0-troubleshooting.md +104 -516
  322. package/docs/migration/v0.9.1-to-v0.9.2.md +150 -0
  323. package/docs/reference/README.md +1 -0
  324. package/docs/reference/cli.md +230 -98
  325. package/docs/reference/configuration.md +153 -27
  326. package/docs/reference/data-and-telemetry.md +19 -1
  327. package/docs/reference/supported-formats.md +23 -3
  328. package/docs/reference/tasks.md +182 -0
  329. package/docs/reference/workflow-schema.md +91 -40
  330. package/docs/reference/workflows.md +33 -6
  331. package/package.json +10 -6
  332. package/schemas/akm-config.json +372 -216
  333. package/schemas/akm-task.json +324 -80
  334. package/schemas/akm-workflow.json +6 -9
  335. package/dist/core/migration-operation.js +0 -75
  336. package/dist/integrations/agent/model-aliases.js +0 -74
  337. package/dist/tasks/parser.js +0 -380
  338. package/dist/tasks/schema.js +0 -123
  339. package/dist/tasks/validator.js +0 -80
  340. package/dist/workflows/ir/freeze.js +0 -320
  341. package/dist/workflows/runtime/document-cache.js +0 -13
@@ -68,6 +68,7 @@
68
68
  * `structuredOutput: "none"` alongside it (`./index.ts`).
69
69
  */
70
70
  import { assertNotFlag, resolveDispatchModel, } from "../../agent/builder-shared.js";
71
+ import { createAgentRequestLowerer } from "../../agent/request-lowering.js";
71
72
  /** Canonical harness/platform id used for model-alias resolution. */
72
73
  export const AIDER_PLATFORM = "aider";
73
74
  /**
@@ -94,6 +95,13 @@ function buildMessagePayload(req) {
94
95
  */
95
96
  export const aiderBuilder = {
96
97
  platform: AIDER_PLATFORM,
98
+ personaChannel: "prompt",
99
+ lower: createAgentRequestLowerer({
100
+ adapter: AIDER_PLATFORM,
101
+ personaChannel: "prompt",
102
+ tools: "none",
103
+ outputSchema: true,
104
+ }),
97
105
  build(profile, req) {
98
106
  assertNotFlag(req.systemPrompt, "systemPrompt");
99
107
  assertNotFlag(req.model, "model");
@@ -26,7 +26,6 @@ export { aiderResultExtractor } from "./result-extractor.js";
26
26
  export class AiderHarness extends BaseHarness {
27
27
  id = "aider";
28
28
  displayName = "Aider";
29
- aliases = [];
30
29
  agentBuilder = aiderBuilder;
31
30
  resultExtractor = aiderResultExtractor;
32
31
  // ── Workflow-engine descriptor (plan §"Capability matrix", P2) ────────────
@@ -63,6 +63,7 @@
63
63
  * (`./index.ts`).
64
64
  */
65
65
  import { assertNotFlag, resolveDispatchModel, } from "../../agent/builder-shared.js";
66
+ import { createAgentRequestLowerer } from "../../agent/request-lowering.js";
66
67
  /** Canonical harness/platform id used for model-alias resolution. */
67
68
  export const AMAZONQ_PLATFORM = "amazonq";
68
69
  /**
@@ -107,6 +108,13 @@ function buildPromptPayload(req) {
107
108
  */
108
109
  export const amazonqBuilder = {
109
110
  platform: AMAZONQ_PLATFORM,
111
+ personaChannel: "prompt",
112
+ lower: createAgentRequestLowerer({
113
+ adapter: AMAZONQ_PLATFORM,
114
+ personaChannel: "prompt",
115
+ tools: "flat",
116
+ outputSchema: true,
117
+ }),
110
118
  build(profile, req) {
111
119
  assertNotFlag(req.systemPrompt, "systemPrompt");
112
120
  assertNotFlag(req.model, "model");
@@ -27,7 +27,6 @@ export { amazonqResultExtractor, stripTerminalFraming } from "./result-extractor
27
27
  export class AmazonqHarness extends BaseHarness {
28
28
  id = "amazonq";
29
29
  displayName = "Amazon Q Developer CLI";
30
- aliases = [];
31
30
  agentBuilder = amazonqBuilder;
32
31
  resultExtractor = amazonqResultExtractor;
33
32
  // ── Workflow-engine descriptor (plan §"Capability matrix", P2) ────────────
@@ -35,6 +35,7 @@
35
35
  * The builder's `platform` stays `'claude'` (the canonical harness id).
36
36
  */
37
37
  import { assertNotFlag, normalizeTools, resolveDispatchModel, } from "../../agent/builder-shared.js";
38
+ import { createAgentRequestLowerer } from "../../agent/request-lowering.js";
38
39
  /**
39
40
  * Assemble the positional prompt: the task prompt and — when a schema is
40
41
  * requested — the same schema directive the workflow engine's prompt assembly
@@ -51,17 +52,29 @@ function buildPromptPayload(req) {
51
52
  /**
52
53
  * Claude Code builder.
53
54
  * Command shape:
54
- * claude [--system-prompt "..."] [--model <m>] [--allowedTools <t>]
55
+ * claude [--agent <name>] [--system-prompt "..."] [--model <m>] [--allowedTools <t>]
55
56
  * [--output-format json] --print -- "<prompt (+ schema directive)>"
56
57
  *
57
58
  * --print switches Claude Code to non-interactive captured output mode.
58
59
  */
59
60
  export const claudeBuilder = {
60
61
  platform: "claude",
62
+ personaChannel: "native",
63
+ lower: createAgentRequestLowerer({
64
+ adapter: "claude",
65
+ personaChannel: "native",
66
+ nativeAgentSelector: true,
67
+ tools: "all",
68
+ outputSchema: true,
69
+ }),
61
70
  build(profile, req) {
62
71
  assertNotFlag(req.systemPrompt, "systemPrompt");
63
72
  assertNotFlag(req.model, "model");
73
+ assertNotFlag(req.agent, "agent");
64
74
  const args = [...profile.args];
75
+ if (req.agent) {
76
+ args.push("--agent", req.agent);
77
+ }
65
78
  if (req.systemPrompt) {
66
79
  args.push("--system-prompt", req.systemPrompt);
67
80
  }
@@ -13,14 +13,11 @@ export { ClaudeCodeProvider } from "./session-log.js";
13
13
  /**
14
14
  * Claude Code.
15
15
  *
16
- * Canonical id is `'claude'`; `'claude-code'` is the runtime/session-log
17
- * identity and is registered as an alias so both directions round-trip.
16
+ * `claude` is the sole runtime and persisted id.
18
17
  */
19
18
  export class ClaudeHarness extends BaseHarness {
20
19
  id = "claude";
21
20
  displayName = "Claude Code";
22
- aliases = ["claude-code"];
23
- runtimeId = "claude-code";
24
21
  // Home-relative config dir scanned by `akm setup` (#567). Claude Code has a
25
22
  // session-log provider, so offering it as a stash source is functional.
26
23
  setupDetectionDir = ".claude";
@@ -50,6 +47,5 @@ export class ClaudeHarness extends BaseHarness {
50
47
  agentDispatch: true,
51
48
  detection: true,
52
49
  configImport: true,
53
- runtimeIdentity: true,
54
50
  });
55
51
  }
@@ -80,7 +80,7 @@ function parseClaudeEvent(entry, sessionId, filePath, fallbackTsMs) {
80
80
  if (!text || text.length < 1)
81
81
  return undefined;
82
82
  return {
83
- harness: "claude-code",
83
+ harness: "claude",
84
84
  text,
85
85
  ts,
86
86
  sessionId,
@@ -91,43 +91,13 @@ function parseClaudeEvent(entry, sessionId, filePath, fallbackTsMs) {
91
91
  /**
92
92
  * Claude Code native session-log reader.
93
93
  *
94
- * id-normalization note (#563): the canonical harness id is `'claude'`, but
95
- * the provider's `name` — which is STAMPED onto every {@link SessionEvent} /
96
- * {@link SessionRef} (`harness: this.name`), used as the extracted-session
97
- * dedup key, and embedded in `session:<harness>:<id>` proposal refs — stays
98
- * `'claude-code'` (the harness runtimeId). Changing it would silently break
99
- * round-tripping of already-persisted session-tracking rows and refs. Registry
100
- * lookups normalize `'claude-code'` → `'claude'` via the #562 bridge
101
- * (`getHarness`), and the `--type` flag accepts both, so the canonical id and
102
- * the persisted runtime string coexist without drift.
94
+ * Events, refs, extraction keys, and the harness registry all use `claude`.
103
95
  */
104
96
  export class ClaudeCodeProvider extends AbstractSessionLogProvider {
105
- // Runtime identity (NOT the canonical id) — see class doc. Equals
106
- // HARNESS_BY_ID.get("claude").runtimeId.
107
- name = "claude-code";
97
+ name = "claude";
108
98
  availabilityRoot() {
109
99
  return claudeProjectsDir();
110
100
  }
111
- *readEvents(input) {
112
- try {
113
- for (const jsonlPath of this.#walkJsonl(claudeProjectsDir())) {
114
- const stat = fs.statSync(jsonlPath);
115
- if (stat.mtimeMs < input.sinceMs)
116
- continue;
117
- const lines = fs.readFileSync(jsonlPath, "utf8").split("\n").filter(Boolean);
118
- yield* this.logLineEvents({
119
- lines,
120
- filePath: jsonlPath,
121
- fallbackTsMs: stat.mtimeMs,
122
- selectText: (entry) => entry?.message?.content ?? entry?.content ?? "",
123
- selectSessionId: (entry) => entry?.session_id,
124
- });
125
- }
126
- }
127
- catch {
128
- return;
129
- }
130
- }
131
101
  listSessions(input = {}) {
132
102
  const root = input.location ?? claudeProjectsDir();
133
103
  return this.listSessionsFromFiles({
@@ -56,6 +56,7 @@ import { mkdtempSync, writeFileSync } from "node:fs";
56
56
  import { tmpdir } from "node:os";
57
57
  import { join } from "node:path";
58
58
  import { assertNotFlag, resolveDispatchModel } from "../../agent/builder-shared.js";
59
+ import { createAgentRequestLowerer } from "../../agent/request-lowering.js";
59
60
  /**
60
61
  * Write a node's JSON Schema to a fresh temp file for `--output-schema`.
61
62
  *
@@ -105,6 +106,13 @@ function ensureSandboxFlags(base) {
105
106
  */
106
107
  export const codexBuilder = {
107
108
  platform: "codex",
109
+ personaChannel: "prompt",
110
+ lower: createAgentRequestLowerer({
111
+ adapter: "codex",
112
+ personaChannel: "prompt",
113
+ tools: "none",
114
+ outputSchema: true,
115
+ }),
108
116
  build(profile, req) {
109
117
  assertNotFlag(req.systemPrompt, "systemPrompt");
110
118
  assertNotFlag(req.model, "model");
@@ -26,7 +26,6 @@ export { codexResultExtractor } from "./result-extractor.js";
26
26
  export class CodexHarness extends BaseHarness {
27
27
  id = "codex";
28
28
  displayName = "OpenAI Codex CLI";
29
- aliases = [];
30
29
  agentBuilder = codexBuilder;
31
30
  resultExtractor = codexResultExtractor;
32
31
  // ── Workflow-engine descriptor (plan §"Capability matrix", P2) ────────────
@@ -46,6 +46,7 @@
46
46
  * name without any further wiring.
47
47
  */
48
48
  import { assertNotFlag, resolveDispatchModel, } from "../../agent/builder-shared.js";
49
+ import { createAgentRequestLowerer } from "../../agent/request-lowering.js";
49
50
  /** Canonical harness/platform id used for model-alias resolution. */
50
51
  export const COPILOT_PLATFORM = "copilot";
51
52
  /**
@@ -89,6 +90,13 @@ function buildPromptPayload(req) {
89
90
  */
90
91
  export const copilotBuilder = {
91
92
  platform: COPILOT_PLATFORM,
93
+ personaChannel: "prompt",
94
+ lower: createAgentRequestLowerer({
95
+ adapter: COPILOT_PLATFORM,
96
+ personaChannel: "prompt",
97
+ tools: "flat",
98
+ outputSchema: true,
99
+ }),
92
100
  build(profile, req) {
93
101
  assertNotFlag(req.systemPrompt, "systemPrompt");
94
102
  assertNotFlag(req.model, "model");
@@ -27,7 +27,6 @@ export { copilotResultExtractor } from "./result-extractor.js";
27
27
  export class CopilotHarness extends BaseHarness {
28
28
  id = "copilot";
29
29
  displayName = "GitHub Copilot CLI";
30
- aliases = [];
31
30
  agentBuilder = copilotBuilder;
32
31
  resultExtractor = copilotResultExtractor;
33
32
  // ── Workflow-engine descriptor (plan §"Capability matrix", P2) ────────────
@@ -50,6 +50,7 @@
50
50
  * name without any further wiring.
51
51
  */
52
52
  import { assertNotFlag, resolveDispatchModel, } from "../../agent/builder-shared.js";
53
+ import { createAgentRequestLowerer } from "../../agent/request-lowering.js";
53
54
  /** Canonical harness/platform id used for model-alias resolution. */
54
55
  export const GEMINI_PLATFORM = "gemini";
55
56
  /**
@@ -93,6 +94,13 @@ function buildPromptPayload(req) {
93
94
  */
94
95
  export const geminiBuilder = {
95
96
  platform: GEMINI_PLATFORM,
97
+ personaChannel: "prompt",
98
+ lower: createAgentRequestLowerer({
99
+ adapter: GEMINI_PLATFORM,
100
+ personaChannel: "prompt",
101
+ tools: "flat",
102
+ outputSchema: true,
103
+ }),
96
104
  build(profile, req) {
97
105
  assertNotFlag(req.systemPrompt, "systemPrompt");
98
106
  assertNotFlag(req.model, "model");
@@ -26,7 +26,6 @@ export { geminiResultExtractor } from "./result-extractor.js";
26
26
  export class GeminiHarness extends BaseHarness {
27
27
  id = "gemini";
28
28
  displayName = "Gemini CLI";
29
- aliases = [];
30
29
  agentBuilder = geminiBuilder;
31
30
  resultExtractor = geminiResultExtractor;
32
31
  // ── Workflow-engine descriptor (plan §"Capability matrix", P2) ────────────
@@ -79,23 +79,8 @@ HARNESS_REGISTRY.forEach((h, i) => {
79
79
  `does not match HARNESS_REGISTRY[${i}] (${h.id}, agentDispatch=${h.capabilities.agentDispatch}) — update ids.ts to match.`);
80
80
  }
81
81
  });
82
- /** Lookup by canonical id. */
82
+ /** Lookup by the one supported harness id. */
83
83
  export const HARNESS_BY_ID = new Map(HARNESS_REGISTRY.map((h) => [h.id, h]));
84
- /**
85
- * Lookup by canonical id OR any alias OR runtime id — the normalization bridge
86
- * resolver. Both 'claude' and 'claude-code' map to the Claude harness.
87
- */
88
- const HARNESS_BY_ANY_ID = (() => {
89
- const m = new Map();
90
- for (const h of HARNESS_REGISTRY) {
91
- m.set(h.id, h);
92
- if (h.runtimeId)
93
- m.set(h.runtimeId, h);
94
- for (const a of h.aliases)
95
- m.set(a, h);
96
- }
97
- return m;
98
- })();
99
84
  /**
100
85
  * Canonical, ordered list of valid harness / platform ids. The Zod
101
86
  * `AgentPlatformSchema` enum, the agent-engine platform union, and
@@ -116,22 +101,10 @@ export const CONFIG_IMPORTER_HARNESSES = HARNESS_REGISTRY.filter((h) => h.capabi
116
101
  /** Harnesses that participate in `akm setup` detection. */
117
102
  export const DETECTION_HARNESSES = HARNESS_REGISTRY.filter((h) => h.capabilities.detection);
118
103
  /**
119
- * Resolve any id form (canonical id, alias, or runtime id) to the harness
120
- * descriptor, or `undefined` if unknown.
104
+ * Resolve an exact harness id to its descriptor, or `undefined` if unknown.
121
105
  */
122
106
  export function getHarness(id) {
123
- return HARNESS_BY_ANY_ID.get(id);
124
- }
125
- /**
126
- * id normalization bridge — alias → canonical.
127
- *
128
- * Maps any known alias/runtime id to its canonical persisted id (e.g.
129
- * 'claude-code' → 'claude'). Unknown ids pass through unchanged so callers can
130
- * still validate them. This is what keeps existing persisted configs that say
131
- * 'claude-code' working against the canonical 'claude' registry.
132
- */
133
- export function normalizeHarnessId(id) {
134
- return HARNESS_BY_ANY_ID.get(id)?.id ?? id;
107
+ return HARNESS_BY_ID.get(id);
135
108
  }
136
109
  /**
137
110
  * Default agent-profile name for a detected harness id (#566).
@@ -143,21 +116,8 @@ export function normalizeHarnessId(id) {
143
116
  * capable.
144
117
  */
145
118
  export function defaultProfileName(detected) {
146
- const h = HARNESS_BY_ANY_ID.get(detected);
119
+ const h = HARNESS_BY_ID.get(detected);
147
120
  if (!h?.capabilities.agentDispatch)
148
121
  return undefined;
149
122
  return h.id;
150
123
  }
151
- /**
152
- * id normalization bridge — canonical → runtime identity.
153
- *
154
- * Maps a canonical id to the string a harness reports at runtime / in its
155
- * session logs (e.g. 'claude' → 'claude-code'). Used by workflow run
156
- * attribution and the session-logs provider name so the persisted runtime
157
- * identity stays stable. Falls back to the canonical id when the harness has no
158
- * distinct runtime identity.
159
- */
160
- export function denormalizeRuntimeIdentity(id) {
161
- const h = HARNESS_BY_ANY_ID.get(id);
162
- return h?.runtimeId ?? h?.id ?? id;
163
- }
@@ -15,19 +15,28 @@
15
15
  * (the canonical harness id).
16
16
  */
17
17
  import { assertNotFlag, resolveDispatchModel } from "../../agent/builder-shared.js";
18
+ import { createAgentRequestLowerer } from "../../agent/request-lowering.js";
18
19
  /**
19
20
  * OpenCode builder.
20
- * Command shape: opencode run [--system-prompt "..."] [--model <m>] "<prompt>"
21
+ * Command shape: opencode run [--system-prompt "..."] [--agent <name>] [--model <m>] "<prompt>"
21
22
  *
22
23
  * Tool policy is omitted — opencode manages tool access through its own agent
23
24
  * config files, not via CLI flags.
24
25
  */
25
26
  export const opencodeBuilder = {
26
27
  platform: "opencode",
28
+ personaChannel: "native",
29
+ lower: createAgentRequestLowerer({
30
+ adapter: "opencode",
31
+ personaChannel: "native",
32
+ nativeAgentSelector: true,
33
+ tools: "none",
34
+ outputSchema: false,
35
+ }),
27
36
  build(profile, req) {
28
37
  assertNotFlag(req.systemPrompt, "systemPrompt");
29
38
  assertNotFlag(req.model, "model");
30
- let configuredModel;
39
+ assertNotFlag(req.agent, "agent");
31
40
  const args = req.model ? [] : [...profile.args];
32
41
  if (req.model) {
33
42
  for (let index = 0; index < profile.args.length; index += 1) {
@@ -35,13 +44,9 @@ export const opencodeBuilder = {
35
44
  if (arg === undefined)
36
45
  continue;
37
46
  if (arg === "--model") {
38
- configuredModel = profile.args[index + 1];
39
47
  index += 1;
40
48
  }
41
- else if (arg.startsWith("--model=")) {
42
- configuredModel = arg.slice("--model=".length);
43
- }
44
- else {
49
+ else if (!arg.startsWith("--model=")) {
45
50
  args.push(arg);
46
51
  }
47
52
  }
@@ -49,10 +54,12 @@ export const opencodeBuilder = {
49
54
  if (req.systemPrompt) {
50
55
  args.push("--system-prompt", req.systemPrompt);
51
56
  }
57
+ if (req.agent) {
58
+ args.push("--agent", req.agent);
59
+ }
52
60
  if (req.model) {
53
61
  const resolved = resolveDispatchModel(req, profile, "opencode");
54
- const provider = configuredModel?.split("/", 1)[0];
55
- args.push("--model", provider && !resolved.includes("/") ? `${provider}/${resolved}` : resolved);
62
+ args.push("--model", resolved);
56
63
  }
57
64
  args.push("--");
58
65
  args.push(req.prompt);
@@ -16,7 +16,6 @@ export { OpenCodeProvider } from "./session-log.js";
16
16
  export class OpencodeHarness extends BaseHarness {
17
17
  id = "opencode";
18
18
  displayName = "OpenCode";
19
- aliases = [];
20
19
  // Home-relative config dir scanned by `akm setup` (#567). OpenCode has a
21
20
  // session-log provider, so offering it as a stash source is functional.
22
21
  setupDetectionDir = ".config/opencode";
@@ -38,6 +37,5 @@ export class OpencodeHarness extends BaseHarness {
38
37
  agentDispatch: true,
39
38
  detection: true,
40
39
  configImport: true,
41
- runtimeIdentity: true,
42
40
  });
43
41
  }