akm-cli 0.10.261013-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 (477) hide show
  1. package/CHANGELOG.md +494 -3
  2. package/README.md +15 -0
  3. package/SECURITY.md +9 -8
  4. package/STABILITY.md +45 -49
  5. package/dist/assets/hints/cli-hints-full.md +15 -12
  6. package/dist/assets/opencode/akm-plugin.js +177 -0
  7. package/dist/assets/stash-skeleton/README.md +1 -1
  8. package/dist/assets/tasks/core/improve.yml +1 -1
  9. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +1 -1
  10. package/dist/assets/ui/config.js +27 -10
  11. package/dist/assets/workflows/workflow-template.md +2 -2
  12. package/dist/cli/clack.js +3 -1
  13. package/dist/cli/selection.js +33 -0
  14. package/dist/cli/shared.js +14 -1
  15. package/dist/cli/unknown-flags.js +6 -37
  16. package/dist/cli.js +69 -48
  17. package/dist/commands/agent/agent-dispatch.js +17 -25
  18. package/dist/commands/agent/contribute-cli.js +9 -8
  19. package/dist/commands/command/command-cli.js +4 -8
  20. package/dist/commands/command/command-execution.js +25 -39
  21. package/dist/commands/completions.js +1 -1
  22. package/dist/commands/config-cli.js +14 -5
  23. package/dist/commands/env/child-env.js +12 -14
  24. package/dist/commands/env/env-cli.js +2 -2
  25. package/dist/commands/env/secret-cli.js +2 -2
  26. package/dist/commands/health/checks.js +10 -849
  27. package/dist/commands/health/connections-and-harnesses-check.js +109 -0
  28. package/dist/commands/health/egress.js +3 -3
  29. package/dist/commands/health/html-report.js +9 -10
  30. package/dist/commands/health/plugin-staleness.js +18 -11
  31. package/dist/commands/health/report-view-model.js +16 -12
  32. package/dist/commands/health/semantic-search-check.js +85 -0
  33. package/dist/commands/health/type-directory-check.js +0 -3
  34. package/dist/commands/health.js +30 -42
  35. package/dist/commands/improve/consolidate/pair-pass.js +10 -25
  36. package/dist/commands/improve/consolidate.js +10 -15
  37. package/dist/commands/improve/distill.js +5 -15
  38. package/dist/commands/improve/eligibility.js +1 -1
  39. package/dist/commands/improve/execution.js +37 -40
  40. package/dist/commands/improve/extract-cli.js +6 -11
  41. package/dist/commands/improve/extract-prompt.js +2 -2
  42. package/dist/commands/improve/extract.js +67 -97
  43. package/dist/commands/improve/improve-cli.js +22 -128
  44. package/dist/commands/improve/improve-report.js +1 -1
  45. package/dist/commands/improve/improve-strategies.js +25 -108
  46. package/dist/commands/improve/improve.js +10 -14
  47. package/dist/commands/improve/loop-stages.js +3 -0
  48. package/dist/commands/improve/memory/memory-improve.js +1 -1
  49. package/dist/commands/improve/preparation.js +8 -13
  50. package/dist/commands/improve/reflect.js +203 -332
  51. package/dist/commands/improve/retrieval-scope.js +1 -1
  52. package/dist/commands/improve/session-asset.js +3 -2
  53. package/dist/commands/improve/stage.js +87 -115
  54. package/dist/commands/lint/base-linter.js +3 -3
  55. package/dist/commands/lint/index.js +2 -2
  56. package/dist/commands/models-cli.js +103 -63
  57. package/dist/commands/proposal/drain.js +26 -39
  58. package/dist/commands/proposal/proposal-cli.js +14 -18
  59. package/dist/commands/proposal/propose-cli.js +4 -2
  60. package/dist/commands/proposal/propose.js +37 -64
  61. package/dist/commands/proposal/repository.js +17 -17
  62. package/dist/commands/proposal/validators/proposal-validators.js +2 -2
  63. package/dist/commands/read/curate.js +10 -6
  64. package/dist/commands/read/registry-search.js +2 -48
  65. package/dist/commands/read/search-cli.js +1 -8
  66. package/dist/commands/read/search.js +5 -6
  67. package/dist/commands/read/show.js +2 -4
  68. package/dist/commands/remember.js +25 -40
  69. package/dist/commands/sources/bundle-config-ops.js +2 -2
  70. package/dist/commands/sources/info.js +12 -1
  71. package/dist/commands/sources/init.js +1 -1
  72. package/dist/commands/sources/installed-stashes.js +2 -2
  73. package/dist/commands/sources/migration-help.js +1 -1
  74. package/dist/commands/sources/plugin-upgrade.js +8 -15
  75. package/dist/commands/sources/schema-repair.js +4 -8
  76. package/dist/commands/sources/source-add.js +2 -2
  77. package/dist/commands/sources/source-manage.js +4 -4
  78. package/dist/commands/targets.js +175 -0
  79. package/dist/commands/tasks/explain.js +103 -68
  80. package/dist/commands/tasks/tasks-cli.js +9 -11
  81. package/dist/commands/tasks/tasks.js +37 -41
  82. package/dist/commands/ui/api.js +11 -3
  83. package/dist/commands/ui/redact.js +1 -27
  84. package/dist/commands/ui/workspace-actions.js +1 -1
  85. package/dist/commands/workflow/plan.js +1 -1
  86. package/dist/commands/workflow-cli.js +3 -4
  87. package/dist/core/adapter/adapters/agent-skills-adapter.js +10 -11
  88. package/dist/core/adapter/adapters/akm-adapter.js +33 -38
  89. package/dist/core/adapter/adapters/akm-lint.js +7 -8
  90. package/dist/core/adapter/adapters/akm-task-adapter.js +3 -3
  91. package/dist/core/adapter/adapters/akm-workflow-adapter.js +5 -5
  92. package/dist/core/adapter/adapters/claude-adapter.js +1 -1
  93. package/dist/core/adapter/adapters/dotenv-adapter.js +3 -3
  94. package/dist/core/adapter/adapters/generic-files-adapter.js +5 -5
  95. package/dist/core/adapter/adapters/index.js +3 -4
  96. package/dist/core/adapter/adapters/llm-wiki-adapter.js +12 -14
  97. package/dist/core/adapter/adapters/okf-adapter.js +8 -10
  98. package/dist/core/adapter/adapters/opencode-adapter.js +1 -1
  99. package/dist/core/adapter/adapters/shared.js +3 -3
  100. package/dist/core/adapter/adapters/tool-dir-shared.js +7 -25
  101. package/dist/core/adapter/adapters/website-snapshot-adapter.js +3 -3
  102. package/dist/core/adapter/detect-adapter.js +1 -1
  103. package/dist/core/adapter/execution-source.js +13 -35
  104. package/dist/core/adapter/registry.js +1 -1
  105. package/dist/core/adapter/validate-context.js +2 -4
  106. package/dist/core/asset/asset-placement.js +1 -1
  107. package/dist/core/asset/asset-ref.js +3 -3
  108. package/dist/core/closest-match.js +37 -0
  109. package/dist/core/common.js +33 -5
  110. package/dist/core/config/config-io.js +26 -18
  111. package/dist/core/config/config-schema.js +19 -106
  112. package/dist/core/config/config-sources.js +3 -3
  113. package/dist/core/config/config-types.js +4 -4
  114. package/dist/core/config/config-walker.js +50 -77
  115. package/dist/core/config/config.js +385 -93
  116. package/dist/core/config/convert-engine-references.js +114 -0
  117. package/dist/core/config/convert-engines-shared.js +40 -0
  118. package/dist/core/config/convert-engines.js +300 -0
  119. package/dist/core/config/convert-models-overlay.js +137 -0
  120. package/dist/core/config/credentials.js +304 -0
  121. package/dist/core/config/engine-semantics.js +3 -3
  122. package/dist/core/config/migrate-keys.js +222 -0
  123. package/dist/core/config/model-aliases.js +37 -0
  124. package/dist/core/config/models-file.js +34 -0
  125. package/dist/core/config/retired-engines.js +53 -0
  126. package/dist/core/config/schema/connections.js +41 -0
  127. package/dist/core/config/schema/embedding.js +2 -2
  128. package/dist/core/config/schema/harnesses.js +41 -0
  129. package/dist/core/config/schema/improve-processes.js +9 -28
  130. package/dist/core/config/schema/improve.js +36 -1
  131. package/dist/core/config/schema/index-config.js +18 -20
  132. package/dist/core/config/schema/primitives.js +41 -22
  133. package/dist/core/config/schema/search.js +6 -11
  134. package/dist/core/config/schema/sources-bundles.js +7 -7
  135. package/dist/core/config/schema/workflow.js +2 -6
  136. package/dist/core/config/unusable-entries.js +66 -0
  137. package/dist/core/content-safety.js +3 -6
  138. package/dist/core/endpoint-url.js +47 -0
  139. package/dist/core/errors.js +9 -15
  140. package/dist/core/extra-params.js +3 -3
  141. package/dist/core/improve-result.js +8 -9
  142. package/dist/core/json-schema.js +1 -1
  143. package/dist/core/lesson-lint.js +1 -1
  144. package/dist/core/llm-inference.js +80 -0
  145. package/dist/core/parse.js +2 -2
  146. package/dist/core/paths.js +32 -4
  147. package/dist/core/recognition-util.js +8 -10
  148. package/dist/core/redaction.js +78 -52
  149. package/dist/core/state/migrations.js +17 -22
  150. package/dist/core/structured.js +2 -68
  151. package/dist/core/subprocess.js +63 -22
  152. package/dist/core/type-presentation.js +10 -14
  153. package/dist/execution/input-contract.js +3 -6
  154. package/dist/execution/notices.js +49 -0
  155. package/dist/execution/resolved-request.js +24 -40
  156. package/dist/execution/source.js +21 -45
  157. package/dist/execution/target-ref.js +2 -2
  158. package/dist/indexer/bundle-identity-guard.js +6 -5
  159. package/dist/indexer/ensure-index.js +1 -1
  160. package/dist/indexer/index-writer-lock.js +1 -1
  161. package/dist/indexer/indexer.js +19 -6
  162. package/dist/indexer/installations.js +11 -14
  163. package/dist/indexer/materialize-embeddings.js +20 -16
  164. package/dist/indexer/passes/memory-inference.js +21 -50
  165. package/dist/indexer/passes/metadata.js +5 -5
  166. package/dist/indexer/scan/doc-to-entry.js +1 -1
  167. package/dist/indexer/scan/drain-dir.js +6 -8
  168. package/dist/indexer/search/db-search.js +9 -7
  169. package/dist/indexer/search/search-source.js +40 -22
  170. package/dist/indexer/usage/usage-events.js +2 -3
  171. package/dist/indexer/walk/index-context.js +2 -1
  172. package/dist/indexer/walk/matchers.js +3 -11
  173. package/dist/indexer/walk/walker.js +14 -4
  174. package/dist/integrations/agent/akm-read-tools.js +81 -0
  175. package/dist/integrations/agent/config.js +1 -1
  176. package/dist/integrations/agent/detect.js +32 -36
  177. package/dist/integrations/agent/execution.js +130 -428
  178. package/dist/integrations/agent/index.js +1 -1
  179. package/dist/integrations/agent/profiles.js +24 -28
  180. package/dist/integrations/agent/prompts.js +17 -30
  181. package/dist/integrations/agent/request-lowering.js +67 -101
  182. package/dist/integrations/agent/resolution.js +332 -0
  183. package/dist/integrations/agent/runner-dispatch.js +154 -178
  184. package/dist/integrations/agent/runner.js +20 -72
  185. package/dist/integrations/agent/runtime-port.js +4 -0
  186. package/dist/integrations/agent/runtime.js +10 -0
  187. package/dist/integrations/agent/spawn.js +65 -190
  188. package/dist/integrations/harnesses/aider/index.js +19 -39
  189. package/dist/integrations/harnesses/amazonq/index.js +17 -32
  190. package/dist/integrations/harnesses/claude/index.js +59 -28
  191. package/dist/integrations/harnesses/claude/session-log.js +7 -5
  192. package/dist/integrations/harnesses/codex/index.js +19 -31
  193. package/dist/integrations/harnesses/copilot/index.js +17 -35
  194. package/dist/integrations/harnesses/gemini/index.js +18 -34
  195. package/dist/integrations/harnesses/harness.js +36 -0
  196. package/dist/integrations/harnesses/index.js +20 -51
  197. package/dist/integrations/harnesses/opencode/agent-builder.js +132 -100
  198. package/dist/integrations/harnesses/opencode/index.js +11 -33
  199. package/dist/integrations/harnesses/opencode/roots.js +50 -0
  200. package/dist/integrations/harnesses/opencode/runtime/binary.js +206 -0
  201. package/dist/integrations/harnesses/opencode/runtime/command.js +152 -0
  202. package/dist/integrations/harnesses/opencode/runtime/index.js +177 -0
  203. package/dist/integrations/harnesses/opencode/runtime/tar.js +107 -0
  204. package/dist/integrations/harnesses/opencode/session-log-v1.js +15 -7
  205. package/dist/integrations/harnesses/opencode/session-log-v2.js +72 -48
  206. package/dist/integrations/harnesses/opencode/session-log.js +58 -137
  207. package/dist/integrations/harnesses/opencode/version.js +34 -53
  208. package/dist/integrations/harnesses/openhands/index.js +13 -37
  209. package/dist/integrations/harnesses/pi/index.js +21 -32
  210. package/dist/integrations/lockfile.js +1 -1
  211. package/dist/integrations/session-logs/index.js +11 -31
  212. package/dist/llm/client.js +93 -111
  213. package/dist/llm/embedder.js +19 -34
  214. package/dist/llm/embedders/connection.js +31 -0
  215. package/dist/llm/embedders/local-model-files.js +56 -0
  216. package/dist/llm/embedders/local.js +146 -115
  217. package/dist/llm/embedders/remote.js +26 -24
  218. package/dist/llm/embedders/types.js +1 -1
  219. package/dist/llm/index-passes.js +33 -39
  220. package/dist/llm/memory-infer.js +67 -77
  221. package/dist/llm/model-list.js +35 -0
  222. package/dist/llm/rerank-client.js +8 -14
  223. package/dist/llm/structured-call.js +45 -99
  224. package/dist/llm/structured.js +60 -0
  225. package/dist/output/renderers.js +2 -7
  226. package/dist/output/shapes/helpers.js +18 -42
  227. package/dist/output/shapes/passthrough.js +1 -0
  228. package/dist/output/shapes.js +1 -7
  229. package/dist/output/text/command-format.js +29 -37
  230. package/dist/output/text/health-format.js +8 -2
  231. package/dist/output/text/helpers.js +1 -1
  232. package/dist/output/text/migrate.js +12 -0
  233. package/dist/output/text/models.js +3 -2
  234. package/dist/output/text/registry-commands.js +1 -2
  235. package/dist/output/text/show-format.js +0 -2
  236. package/dist/output/text/targets-table.js +70 -0
  237. package/dist/output/text/workflow-format.js +7 -8
  238. package/dist/output/text.js +1 -1
  239. package/dist/registry/providers/skills-sh.js +1 -28
  240. package/dist/registry/providers/static-index.js +1 -71
  241. package/dist/runtime.js +6 -2
  242. package/dist/scripts/akm-migrate-node.js +5280 -4263
  243. package/dist/scripts/akm-migrate.js +5280 -4263
  244. package/dist/setup/detect.js +28 -273
  245. package/dist/setup/endpoint.js +36 -0
  246. package/dist/setup/semantic-assets.js +13 -19
  247. package/dist/setup/setup-flags.js +77 -0
  248. package/dist/setup/setup-plan.js +144 -0
  249. package/dist/setup/setup.js +134 -358
  250. package/dist/setup/steps/connection-shared.js +49 -101
  251. package/dist/setup/steps/connection.js +121 -524
  252. package/dist/setup/steps/embeddings.js +151 -0
  253. package/dist/setup/steps/harnesses.js +118 -0
  254. package/dist/setup/steps/platforms.js +2 -81
  255. package/dist/setup/steps.js +10 -0
  256. package/dist/setup/summary.js +67 -0
  257. package/dist/sources/freshness.js +16 -21
  258. package/dist/sources/providers/git-provider.js +2 -9
  259. package/dist/sources/providers/provider-utils.js +1 -5
  260. package/dist/sources/snapshot-fetchers/robots.js +11 -12
  261. package/dist/sources/snapshot-fetchers/website-ingest.js +8 -15
  262. package/dist/standalone/onnxruntime-library.js +52 -0
  263. package/dist/storage/repositories/improve-ledger-repository.js +1 -1
  264. package/dist/storage/repositories/improve-runs-repository.js +0 -13
  265. package/dist/storage/repositories/index-entries-repository.js +2 -2
  266. package/dist/storage/repositories/workflow-runs-repository.js +8 -15
  267. package/dist/storage/sqlite-read-snapshot.js +33 -29
  268. package/dist/tasks/log-redaction.js +7 -119
  269. package/dist/tasks/prepare/prepare-support.js +5 -5
  270. package/dist/tasks/prepare/prepare.js +5 -5
  271. package/dist/tasks/prepare/script-capture.js +3 -5
  272. package/dist/tasks/run/attempt-lifecycle.js +17 -35
  273. package/dist/tasks/run/load-task.js +8 -13
  274. package/dist/tasks/run/run-command-task.js +15 -10
  275. package/dist/tasks/run/run-native-task.js +8 -13
  276. package/dist/tasks/run/run-task.js +5 -8
  277. package/dist/tasks/run/run-workflow-task.js +12 -19
  278. package/dist/tasks/run/task-history.js +9 -17
  279. package/dist/tasks/run/task-log.js +1 -5
  280. package/dist/tasks/scheduler-invocation.js +13 -18
  281. package/dist/tasks/source/bounded-document.js +31 -76
  282. package/dist/tasks/source/project-v4.js +5 -3
  283. package/dist/tasks/source/task-input-diagnostics.js +3 -4
  284. package/dist/tasks/source/task-source-v4.js +47 -68
  285. package/dist/tasks/source-v3.js +2 -5
  286. package/dist/tasks/task-run-reserved-flags.js +1 -2
  287. package/dist/workflows/authoring/authoring.js +2 -7
  288. package/dist/workflows/concurrency-policy.js +4 -4
  289. package/dist/workflows/exec/child-workflow.js +0 -2
  290. package/dist/workflows/exec/dispatch-redaction.js +14 -83
  291. package/dist/workflows/exec/environment.js +2 -3
  292. package/dist/workflows/exec/exec-unit.js +10 -59
  293. package/dist/workflows/exec/frozen-judge.js +10 -26
  294. package/dist/workflows/exec/native-executor.js +56 -45
  295. package/dist/workflows/exec/run-workflow.js +7 -24
  296. package/dist/workflows/exec/step-work.js +9 -14
  297. package/dist/workflows/exec/unit-dispatch.js +6 -13
  298. package/dist/workflows/freeze/freeze.js +14 -32
  299. package/dist/workflows/freeze/step-values.js +5 -11
  300. package/dist/workflows/freeze/targets/command.js +3 -6
  301. package/dist/workflows/freeze/task-bindings.js +0 -1
  302. package/dist/workflows/parser.js +44 -34
  303. package/dist/workflows/plan.js +3 -1
  304. package/dist/workflows/renderer.js +6 -5
  305. package/dist/workflows/resource-limits.js +2 -2
  306. package/dist/workflows/runtime/run-plan.js +2 -1
  307. package/dist/workflows/runtime/runs.js +14 -9
  308. package/docs/README.md +10 -16
  309. package/docs/architecture/README.md +2 -37
  310. package/docs/architecture/adapters.md +2 -2
  311. package/docs/architecture/akm-core-principles.md +256 -118
  312. package/docs/architecture/architecture.md +282 -98
  313. package/docs/architecture/improvement.md +8 -2
  314. package/docs/architecture/internals/classification.md +1 -3
  315. package/docs/architecture/internals/fresh-host-rebuild-runbook.md +7 -6
  316. package/docs/architecture/internals/health-advisories.md +35 -74
  317. package/docs/architecture/internals/improve-workflow.md +27 -26
  318. package/docs/architecture/internals/indexing.md +3 -3
  319. package/docs/architecture/internals/storage-locations.md +45 -12
  320. package/docs/architecture/persisted-data-compat.md +9 -6
  321. package/docs/architecture/specs/okf-support.md +9 -11
  322. package/docs/architecture/specs/ref.md +7 -9
  323. package/docs/architecture/testing/testing-workflow.md +164 -42
  324. package/docs/architecture/workflow-engine.md +17 -14
  325. package/docs/guides/README.md +0 -1
  326. package/docs/guides/author-bundles.md +1 -3
  327. package/docs/guides/author-workflows.md +61 -73
  328. package/docs/guides/bundles.md +4 -5
  329. package/docs/guides/discover-and-load.md +1 -1
  330. package/docs/guides/getting-started.md +49 -3
  331. package/docs/guides/improve-the-library.md +10 -4
  332. package/docs/guides/recipes/headless-install.md +11 -16
  333. package/docs/guides/run-workflows.md +6 -9
  334. package/docs/guides/scheduling.md +2 -2
  335. package/docs/guides/use-with-any-agent.md +20 -22
  336. package/docs/integration/bundling-akm.md +19 -9
  337. package/docs/maintainers/README.md +0 -3
  338. package/docs/migration/README.md +10 -3
  339. package/docs/migration/release-notes/0.10.0.md +81 -16
  340. package/docs/migration/release-notes/0.6.0.md +1 -1
  341. package/docs/migration/release-notes/0.7.0.md +1 -1
  342. package/docs/migration/release-notes/0.9.0.md +1 -1
  343. package/docs/migration/release-notes/README.md +1 -1
  344. package/docs/migration/v0.9-to-v0.10.md +295 -59
  345. package/docs/migration/v0.9.1-to-v0.9.2.md +6 -5
  346. package/docs/posts/config-v2-lessons-16.md +1 -1
  347. package/docs/posts/llm-mode-reflect-13.md +1 -1
  348. package/docs/posts/release-0.6.0.md +11 -11
  349. package/docs/posts/release-0.8.0.md +4 -4
  350. package/docs/posts/workflows-vaults-09.md +1 -1
  351. package/docs/reference/README.md +1 -1
  352. package/docs/reference/asset-types.md +2 -2
  353. package/docs/reference/cli.md +356 -279
  354. package/docs/reference/configuration.md +569 -557
  355. package/docs/reference/data-and-telemetry.md +8 -5
  356. package/docs/reference/env-and-secrets.md +11 -5
  357. package/docs/reference/refs.md +3 -20
  358. package/docs/reference/registry.md +6 -27
  359. package/docs/reference/supported-formats.md +1 -1
  360. package/docs/reference/tasks.md +11 -8
  361. package/docs/reference/ui-api.md +11 -6
  362. package/docs/reference/workflow-schema.md +106 -134
  363. package/docs/reference/workflows.md +4 -6
  364. package/package.json +9 -11
  365. package/schemas/akm-config.json +1696 -2922
  366. package/schemas/akm-task.json +2 -0
  367. package/schemas/akm-workflow.json +36 -9
  368. package/ROADMAP.md +0 -112
  369. package/dist/assets/models.json +0 -35
  370. package/dist/commands/health/engine-usage.js +0 -45
  371. package/dist/core/config/schema/engines.js +0 -160
  372. package/dist/core/config/schema/execution.js +0 -23
  373. package/dist/core/spawn-env.js +0 -268
  374. package/dist/integrations/agent/builder-shared.js +0 -33
  375. package/dist/integrations/agent/builders.js +0 -43
  376. package/dist/integrations/agent/engine-fallback.js +0 -59
  377. package/dist/integrations/agent/engine-resolution.js +0 -335
  378. package/dist/integrations/agent/model-map.js +0 -475
  379. package/dist/integrations/harnesses/aider/agent-builder.js +0 -107
  380. package/dist/integrations/harnesses/aider/result-extractor.js +0 -53
  381. package/dist/integrations/harnesses/amazonq/agent-builder.js +0 -138
  382. package/dist/integrations/harnesses/amazonq/result-extractor.js +0 -48
  383. package/dist/integrations/harnesses/claude/agent-builder.js +0 -106
  384. package/dist/integrations/harnesses/claude/config-import.js +0 -67
  385. package/dist/integrations/harnesses/claude/result-extractor.js +0 -67
  386. package/dist/integrations/harnesses/codex/agent-builder.js +0 -150
  387. package/dist/integrations/harnesses/codex/result-extractor.js +0 -110
  388. package/dist/integrations/harnesses/copilot/agent-builder.js +0 -117
  389. package/dist/integrations/harnesses/copilot/result-extractor.js +0 -178
  390. package/dist/integrations/harnesses/gemini/agent-builder.js +0 -114
  391. package/dist/integrations/harnesses/gemini/result-extractor.js +0 -149
  392. package/dist/integrations/harnesses/opencode/config-import.js +0 -149
  393. package/dist/integrations/harnesses/opencode/model-config.js +0 -33
  394. package/dist/integrations/harnesses/opencode/model-work-agent.js +0 -115
  395. package/dist/integrations/harnesses/opencode/session-log-types.js +0 -12
  396. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -44
  397. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +0 -1052
  398. package/dist/integrations/harnesses/opencode-sdk/v1-adapter.js +0 -199
  399. package/dist/integrations/harnesses/opencode-sdk/v2-adapter.js +0 -254
  400. package/dist/integrations/harnesses/opencode-sdk/wire.js +0 -66
  401. package/dist/integrations/harnesses/openhands/agent-builder.js +0 -120
  402. package/dist/integrations/harnesses/openhands/result-extractor.js +0 -135
  403. package/dist/integrations/harnesses/pi/agent-builder.js +0 -89
  404. package/dist/integrations/harnesses/pi/result-extractor.js +0 -168
  405. package/dist/integrations/harnesses/shared.js +0 -18
  406. package/dist/integrations/harnesses/types.js +0 -55
  407. package/dist/llm/feature-gate.js +0 -115
  408. package/dist/output/shapes/models-list.js +0 -16
  409. package/dist/output/shapes/registry-search.js +0 -10
  410. package/dist/setup/detected-engines.js +0 -136
  411. package/dist/setup/engine-config.js +0 -97
  412. package/dist/setup/harness-config-import.js +0 -47
  413. package/dist/setup/providers.js +0 -14
  414. package/dist/setup/steps/semantic.js +0 -39
  415. package/dist/workflows/exec/lowering-notices.js +0 -23
  416. package/docs/architecture/0.10-process-rules.md +0 -832
  417. package/docs/architecture/akm-architecture-decision-history.md +0 -2055
  418. package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +0 -544
  419. package/docs/architecture/decisions/0001-no-interpolation-attached-structured-context.md +0 -72
  420. package/docs/architecture/decisions/0002-unit-reuse-and-input-hash-scope.md +0 -142
  421. package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +0 -187
  422. package/docs/architecture/decisions/0004-task-input-contract-and-flag-coercion.md +0 -97
  423. package/docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md +0 -108
  424. package/docs/architecture/decisions/0006-task-source-version-routing.md +0 -124
  425. package/docs/architecture/decisions/0007-workflow-composition-bounds.md +0 -83
  426. package/docs/architecture/decisions/0008-task-binding-normalization.md +0 -88
  427. package/docs/architecture/decisions/0009-child-run-publication-column-parity.md +0 -80
  428. package/docs/architecture/decisions/0010-driver-protocol-cut.md +0 -36
  429. package/docs/architecture/decisions/0011-engine-run-loop-invariants.md +0 -125
  430. package/docs/architecture/decisions/README.md +0 -62
  431. package/docs/architecture/internals/functional-contract-patterns.md +0 -340
  432. package/docs/architecture/internals/registry-network-boundary.md +0 -57
  433. package/docs/architecture/internals/search.md +0 -248
  434. package/docs/architecture/reviews/env-secret-access.md +0 -319
  435. package/docs/architecture/runtime-boundary-design.md +0 -153
  436. package/docs/architecture/specs/0.9.0-close-out-plan.md +0 -361
  437. package/docs/architecture/specs/0.9.0-decisions.md +0 -532
  438. package/docs/architecture/specs/0.9.0-docs-code-drift-register.md +0 -745
  439. package/docs/architecture/specs/0.9.0-open-items-register.md +0 -135
  440. package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +0 -740
  441. package/docs/architecture/specs/0.9.0-release-surface-review.md +0 -636
  442. package/docs/architecture/specs/agent-command-engine-model-design.md +0 -513
  443. package/docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md +0 -501
  444. package/docs/architecture/specs/akm-0.9.0-ref-grammar-decision.md +0 -291
  445. package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +0 -2059
  446. package/docs/architecture/specs/di-seams-plan.md +0 -539
  447. package/docs/architecture/specs/driver-protocol-keep-or-cut.md +0 -275
  448. package/docs/architecture/specs/fact-asset-type.md +0 -142
  449. package/docs/architecture/specs/improve-collapse-churn-detector-design.md +0 -634
  450. package/docs/architecture/specs/reviews/task-workflow-unification/README.md +0 -72
  451. package/docs/architecture/specs/reviews/task-workflow-unification/findings-consolidated.md +0 -152
  452. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-alternatives.md +0 -352
  453. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-bunqueue.md +0 -300
  454. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md +0 -402
  455. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-1.md +0 -758
  456. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-2.md +0 -645
  457. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-3.md +0 -602
  458. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-adversarial.md +0 -27
  459. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-architecture.md +0 -27
  460. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-coverage.md +0 -74
  461. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-security.md +0 -15
  462. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-adversarial.md +0 -132
  463. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-verification.md +0 -147
  464. package/docs/architecture/specs/stash-conventions-code-spec.md +0 -275
  465. package/docs/architecture/specs/stash-organization-conventions.md +0 -377
  466. package/docs/architecture/specs/task-workflow-format-unification.md +0 -721
  467. package/docs/architecture/specs/workflow-engine-buy-vs-build.md +0 -231
  468. package/docs/architecture/specs/workflow-format-unification.md +0 -432
  469. package/docs/architecture/testing/manual-testing-checklist.md +0 -3379
  470. package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +0 -924
  471. package/docs/architecture/testing/task-workflow-manual-tests.md +0 -1702
  472. package/docs/guides/claude-code-vs-akm-workflows.md +0 -29
  473. package/docs/guides/knowledge-management.md +0 -18
  474. package/docs/maintainers/curate-workmap.md +0 -335
  475. package/docs/migration/v0.5-to-v0.6.md +0 -759
  476. package/docs/migration/v0.7-to-v0.8.md +0 -1378
  477. package/docs/plans/0.9.2-agent-command-workflow-plan.md +0 -423
@@ -1,126 +1,264 @@
1
1
  # akm Core Principles
2
2
 
3
- akm is a portable capability library for AI agents — give every coding agent
4
- the capabilities your team has already built. It indexes existing agent
5
- assets in place, loads only what a task needs, packages capabilities into
6
- shareable bundles, improves the library through reviewable proposals, and
7
- runs durable workflows, locally and without tying the library to one
8
- assistant.
3
+ How akm is built. These are the rules the code, the tests and the
4
+ documentation in this repository follow. What akm does for a user is
5
+ described in [Architecture](architecture.md), whose "Invariants" section
6
+ lists the behaviors every command keeps.
9
7
 
10
- This document lists the design constraints that keep that library
11
- predictable.
8
+ Each principle states the rule, why it exists, and what enforces it. A rule
9
+ with nothing enforcing it is held by review, and says so.
12
10
 
13
- ## What akm Does
11
+ ## Precedence
14
12
 
15
- An agent has a task. Across configured sources (local filesystem paths and
16
- cache-backed git/website/npm mirrors) and registry catalogs, akm helps it
17
- discover assets such as scripts, skills, commands, agents, knowledge docs,
18
- workflows, env files, secrets, and wiki pages.
19
-
20
- Core flow:
21
-
22
- ```text
23
- connect -> index -> curate -> show -> use/run -> feedback -> proposal
24
- ```
25
-
26
- Not every task uses every stage.
13
+ When two principles pull against each other: a user's data comes first,
14
+ then honesty (code and documentation that do what they say), then
15
+ simplicity, then convenience.
27
16
 
28
17
  ## Principles
29
18
 
30
- ### 1. Capabilities remain portable files
31
-
32
- Capabilities are ordinary files on disk — skills, scripts, workflows, agent
33
- definitions, instructions, memories, knowledge docs. akm indexes what's
34
- already there; the source files remain the source of truth, and akm's index
35
- is a derived, rebuildable view rather than a copy of record.
36
-
37
- ### 2. Materialize sources locally and use one retrieval layer
38
-
39
- Local filesystem paths and cache-backed git/website/npm mirrors all
40
- materialize into one local index, so `search`, `curate`, and `show` work the
41
- same way regardless of where a capability originated. Registries stay a
42
- conceptually separate, read-only catalog of installable bundles: registry
43
- results live in `registryHits`, never merged into source `hits`.
44
-
45
- ### 3. Every token must earn its place
46
-
47
- Default output should stay lean. Search and curate are for choosing; show is
48
- for using.
49
-
50
- - **Search is a menu.** Default search output should expose only enough to
51
- choose the next asset. In the current CLI that usually means:
52
- - `brief`: `type`, `name`, `ref`, `action`, `estimatedTokens`, `keys` —
53
- `ref` is deliberately present at the leanest level so an agent can run
54
- `akm show <ref>` without asking for fuller detail
55
- - `normal`: adds `description` and `score`
56
-
57
- Richer provenance/debug fields belong behind fuller detail modes.
58
-
59
- - **Show is a dispatch envelope.** Show should return the payload that lets
60
- the consumer act:
61
- - script execution hints
62
- - skill instructions
63
- - command templates
64
- - agent prompts
65
- - knowledge/wiki content
66
- - workflow steps and parameters
67
- - env key names without secret values
68
- - secret metadata without the secret value
69
-
70
- ### 4. Discovery chooses; show delivers
71
-
72
- Search and curate should not accumulate show-level detail. `full` detail
73
- modes can expose more metadata, but the base mental model stays:
74
-
75
- ```text
76
- search/curate decide
77
- show delivers
78
- filesystem is optional depth
79
- ```
80
-
81
- ### 5. Refs are opaque durable handles
82
-
83
- Consumers should treat refs as opaque lookup handles. The current wire
84
- format is `[bundle//]conceptId[#fragment]`, but agents should pass refs
85
- through rather than parse them. See `docs/architecture/specs/ref.md`.
86
-
87
- ### 6. Execution requires an explicit supported surface
88
-
89
- akm retrieves every supported capability type. It directly orchestrates
90
- defined execution surfaces such as workflows, agent dispatch, tasks, and
91
- guarded subprocess injection. It does not blindly execute arbitrary indexed
92
- content merely because that content appears in search results.
93
-
94
- ### 7. Improvement is evidence-driven and reviewable
95
-
96
- Feedback and usage signal drive `akm improve`, which produces reviewable,
97
- diffable proposals rather than silent rewrites. Accept, reject, and revert
98
- stay human- or policy-gated, and proposals target only writable bundles.
99
-
100
- ### 8. Writes are destination-aware and fail closed
101
-
102
- Writes target only writable bundles/adapters. Read-only adapters and
103
- protected env/secret values are never silently written through — a write
104
- aimed at a non-writable destination fails rather than falling back to an
105
- unintended target.
106
-
107
- ### 9. Output serves agents first
108
-
109
- The default consumer is structured-output automation. JSON-first and
110
- concise detail levels are the right defaults.
111
-
112
- ### 10. Complexity belongs behind indexing and source management
113
-
114
- The hard parts should stay inside indexing, source resolution, registry
115
- install, and provider plumbing, not in the hot path from `search`/`curate`
116
- to `show`/`use`.
117
-
118
- ## What akm Does Not Do
119
-
120
- - blindly execute arbitrary indexed content just because it appears in
121
- search results — akm orchestrates only defined execution surfaces
122
- (workflows, agent dispatch, tasks, guarded subprocess injection)
123
- - expose secret/env values through `show`
124
- - replace live-service integrations such as MCP — akm complements MCP and
125
- assistant-native skills rather than replacing them
126
- - require agents to understand source layouts or provider internals
19
+ ### 1. Delete before you add
20
+
21
+ The default answer to a new guard, cap, version gate, option, mode or layer
22
+ is no. A guard, cap, version gate, or fencing check survives only if it
23
+ passes **all three** tests:
24
+
25
+ 1. **It has demonstrably helped a real user.** Check the local evidence before defending it — the `events` table in `state.db`, task logs, issue history. A guard that has never fired in production is a candidate for deletion, not preservation.
26
+ 2. **Its failure mode costs less than the hazard it prevents.** A cap whose trip makes the CLI unusable is worse than the slowness it was guarding against.
27
+ 3. **The operation is not already gated behind a deliberate human command.** Anything a person explicitly typed does not get a second machine-level gate. The operator is not racing themselves.
28
+
29
+ "This hazard is conceivable" is not a justification — that always answers yes,
30
+ and it is how this codebase accumulated footguns. When in doubt, delete.
31
+
32
+ Preference order when something must change: **remove the limit** > degrade
33
+ with a warning > abort. Aborting is the last resort, not the default.
34
+
35
+ What this does not apply to: machinery that prevents **data loss or
36
+ corruption** passes test 2 on its own merits and stays: backups, atomic
37
+ writes, write-path validation that keeps malformed data out of the database,
38
+ and path-containment checks that stop writes outside the bundle. The target is
39
+ machinery that makes the tool refuse to do its job.
40
+
41
+ The same rule applies to code that is not a guard: build what the current
42
+ design needs and nothing for a future one (YAGNI). No speculative option,
43
+ abstraction, extension point or "flexibility" goes in until a real caller
44
+ needs it, and a mechanism nothing calls any more comes out.
45
+
46
+ Why: every footgun this codebase has removed was a guard added because a
47
+ hazard was conceivable; the limits made the tool refuse to do its job
48
+ more often than they protected anyone.
49
+
50
+ Worked examples, which are the precedent:
51
+
52
+ - **#857** — single-ref lookup walked the entire bundle tree, capped at 16,384 files, and aborted when tripped. Zero useful firings in months of local event history; its only production behavior was making the CLI unusable on a large bundle. Walk and cap deleted, replaced with closed-form candidate enumeration. Net −13 lines of source, every collision guarantee intact.
53
+ - **`extra-params` (#815/#816)** — hard-rejected legacy keys. Degraded to warn-and-auto-lift; only genuinely conflicting keys still reject. This is the template for a guard that had to stay but had the wrong failure mode.
54
+ - **`guarded-source` 1MiB cap** — kept once on the argument that the bytes are hashed, so a truncated read would be silently wrong. That argument rejects *truncation*; it never justified a *cap*. Correct answer was no truncation and no cap.
55
+ - **Migrator TOCTOU fencing** — inode/device/ctime identity checks defending a window inside a human-typed `akm migrate apply` that already holds a cross-process lock and writes backups. A multi-tenant-daemon threat model applied to a single-user CLI.
56
+
57
+ Enforced by: review.
58
+
59
+ ### 2. One place per policy
60
+
61
+ A rule lives in exactly one module and everything else calls it. Write
62
+ destinations branch on source kind only in `src/core/write-source.ts`.
63
+ Fan-out widths are decided once in `src/workflows/concurrency-policy.ts`.
64
+ A call's timeout is resolved once in `src/integrations/agent/resolution.ts`,
65
+ and no other layer adds one.
66
+ A child process's environment is built in `childProcessEnv`
67
+ (`src/core/paths.ts`): akm's own, with the directories this akm resolved set
68
+ over it.
69
+ Every agent harness registers once in `HARNESS_REGISTRY`
70
+ (`src/integrations/harnesses/index.ts`) and core imports the registry, not
71
+ a harness. Runtime-specific APIs (`bun:sqlite`, `Bun.*`) are reached only
72
+ through `src/storage/database.ts` and `src/runtime.ts`.
73
+
74
+ Why: a policy copied into three places drifts into three policies, and
75
+ the drift is invisible until a user hits the one that differs.
76
+
77
+ Enforced by: `tests/harnesses-registry.test.ts` for the registry;
78
+ `scripts/lint-secret-resolver-boundary.ts` for secret reads;
79
+ `tests/contracts/module-boundaries.test.ts` for the module table;
80
+ `tests/contracts/runtime-port-boundary.test.ts` for akm's own runtime, which
81
+ lowering and dispatch reach only through the `AgentRuntime` port
82
+ (`src/integrations/agent/runtime-port.ts`), composed in
83
+ `src/integrations/agent/runtime.ts`. The write chokepoint and the
84
+ no-direct-harness-imports rule are held by review; the OpenCode plugin upgrade
85
+ and staleness checks still import the OpenCode folder's installation helpers
86
+ directly, which is open work.
87
+
88
+ ### 3. One current shape per format, one converter
89
+
90
+ Each stored format has one current shape in code and one converter from older
91
+ shapes. A reader uses the converter and keeps no tolerance of its own. A user's
92
+ file (`config.json`, a task source, bundle content) is rewritten only by
93
+ `akm migrate apply`, with a backup, running that same converter; akm's own
94
+ stores (`state.db`, `index.db`) migrate forward when opened, with a backup
95
+ before any destructive step. Reads reach back to the 0.9.15 floor: above it a
96
+ reader converts in memory, warns once and names `akm migrate apply`; below it,
97
+ and for an older task source (the one named exception), the command stops and
98
+ names the migrator. What happens to data from a newer release differs by
99
+ format (a newer index layout or frozen plan is refused with "upgrade akm";
100
+ `state.db` and `config.json` warn and continue, and `akm health` reports the
101
+ config skew), so [Persisted-Data Compatibility](persisted-data-compat.md)
102
+ states the rule per format. Readers that still carry their own conversion, such
103
+ as the frozen-plan decoder, are listed there and move to the converter as they
104
+ are touched.
105
+
106
+ Why: tolerance scattered through readers is a shim nobody can delete. A
107
+ converter that the readers and the migrator share is written once, tested once
108
+ and leaves one shape behind.
109
+
110
+ Enforced by: `tests/integration/upgrade-rehearsal/`, which installs the
111
+ previous release, builds real state and runs the current build against it, and
112
+ `tests/integration/previous-release-corpus.test.ts`, which pins each older
113
+ shape as refused or converted. The compat page lists each format with its test;
114
+ a change to a format adds its old shape to the rehearsal.
115
+
116
+ ### 4. Sane defaults, flexible overrides
117
+
118
+ Every default works out of the box for the common case, which for anything
119
+ touching a model means a slow local model on a single-threaded server: no
120
+ `max_tokens` sent unless asked, one timeout, concurrency one against a
121
+ loopback endpoint. Every default is overridable where it applies, per
122
+ connection or harness under `connections.<name>.*` and `harnesses.<name>.*`, per workflow step, per command flag, and
123
+ the override is honored as given. The tool never second-guesses a value
124
+ the user set; the one place it still does, clamping a workflow fan-out width
125
+ above 64, is debt rather than policy.
126
+
127
+ Why: defaults that need tuning before the first useful result lose the
128
+ user; overrides that are ignored or capped behind the user's back lose
129
+ their trust.
130
+
131
+ Enforced by: `tests/workflows/concurrency-defaults.test.ts` and
132
+ `tests/resolution.test.ts`; the rest is review.
133
+
134
+ ### 5. If it matters, a test or lint checks it
135
+
136
+ Any rule we want to hold is pinned: output shapes and exit codes, the ref
137
+ grammar, the module table, the execution transport contract, that every command and
138
+ flag named in a doc exists, that shipped assets carry no dead refs. The pin
139
+ is a test under `tests/contracts/`, a unit test, or a script in the `lint`
140
+ chain. A rule nobody pinned is a preference, and may change without
141
+ ceremony.
142
+
143
+ Why: the documentation drifted from the code for months because the pages
144
+ said "normative" and nothing checked.
145
+
146
+ Enforced by: `bun run lint` (`scripts/lint-doc-examples.ts`,
147
+ `scripts/lint-shipped-assets.ts`, `scripts/lint-secret-resolver-boundary.ts`),
148
+ `tests/contracts/`, `tests/output-shapes-unit.test.ts`.
149
+
150
+ ### 6. The suite is green by default and sandboxed through the environment
151
+
152
+ `test:unit` and `test:integration` report zero failures at all times. A
153
+ red run is a real break, never noise to route around; a test that must be
154
+ disabled is disabled explicitly with a linked issue.
155
+
156
+ No test reads or writes a developer's real files: the runner scripts and the
157
+ preload point everything a test can resolve from the environment at a
158
+ sandbox, and a test that leaks fails.
159
+ [Testing Workflow](testing/testing-workflow.md) states the two targets, where
160
+ a test belongs, how the sandbox works and what it cannot cover.
161
+
162
+ Why: a suite that is "usually green" is a suite nobody trusts, and a test
163
+ that reads a developer's real config passes on one machine and fails on
164
+ the next.
165
+
166
+ Enforced by: `tests/_preload.ts` (the sandbox and the tripwire),
167
+ `scripts/test-unit.sh` and `scripts/test-integration.sh` (the split and the
168
+ per-shard `HOME`), `TEST_ISOLATION_MISSING` in `src/core/paths.ts`. Reads
169
+ through `os.homedir()` outside the runner scripts are held by review.
170
+
171
+ ### 7. Prose lives in files; comments say why
172
+
173
+ Multi-line markdown, XML or prose belongs in a standalone file next to the
174
+ module that uses it, imported as text
175
+ (`import x from "./x.md" with { type: "text" }`) and filled with
176
+ `{{PLACEHOLDER}}` tokens through `.replace` or `.replaceAll` at call time.
177
+ `src/tasks/backends/schtasks.ts` (which imports
178
+ `src/assets/backends/schtasks-template.xml`), `src/output/cli-hints.ts` and
179
+ `scripts/copy-assets.ts` are the established pattern.
180
+
181
+ A code comment explains a constraint or a decision the code cannot show; it
182
+ does not cite plans, specs, review rounds or history, and it does not restate
183
+ the line beneath it.
184
+
185
+ Why: templates inside template literals cannot be edited without touching
186
+ source, and a comment that points at a document nobody can find is noise
187
+ that looks like information.
188
+
189
+ Enforced by: review.
190
+
191
+ ### 8. Documentation describes the product that exists
192
+
193
+ One current-truth document per subsystem; no second one is forked. Plans,
194
+ decision records, review registers and future-work promises do not live
195
+ under `docs/`. Code is cited by file and symbol, not line number. A
196
+ document claims no guarantee the code does not enforce, and names no
197
+ command, flag or file that does not exist. When code and documentation
198
+ disagree, one of them is fixed in the same change.
199
+
200
+ Why: a user who reads a stale page loses more time than if the page had
201
+ not existed, and a "normative" document the code ignores teaches
202
+ contributors that documents do not matter.
203
+
204
+ Enforced by: `scripts/lint-doc-examples.ts`, which reads the fenced examples
205
+ in `docs/`, `src/assets/hints/`, `README.md`, `AGENTS.md` and `STABILITY.md`
206
+ and checks that every command and flag in them exists (the migration documents
207
+ of earlier releases, named in `HISTORICAL_MIGRATION_DOCS`, are exempt; the
208
+ current migration guide and release note are read), and the npm pack check in
209
+ `tests/integration/install/npm-pack-contents.test.ts` (no dead link ships).
210
+ Whether a statement is true of the product is held by review.
211
+
212
+ ### 9. CLI-first, Bun-first
213
+
214
+ This package is a command-line tool. `src/cli.ts` dispatches and commands
215
+ live under `src/commands/`. The one programmatic entry point is `akm-cli/api`
216
+ (`src/api.ts`, which exports only `curate`), so the akm plugins can recall
217
+ in-process; the `exports` map in `package.json` lists only `./api`,
218
+ `./package.json` and `./dist/*`, and there are no barrel exports. Bun is the
219
+ preferred runtime and the toolchain. Node 22 is the floor (`engines.node`):
220
+ the npm package bootstraps through Node, and its launcher falls back to Node
221
+ when no usable Bun is on `PATH`. Anything that would become another API for
222
+ other programs is a separate decision, not an incidental export.
223
+
224
+ Why: an accidental API is a compatibility promise nobody agreed to make.
225
+
226
+ Enforced by: `tests/contracts/api-surface.test.ts` (the export list),
227
+ `tests/integration/install/package-exports.test.ts` (the `exports` map),
228
+ `package.json` (`engines.node` and the `preinstall` check), and the
229
+ `node-smoke` job in `.github/workflows/ci.yml` (Node 22 and 24).
230
+
231
+ ### 10. Agent harnesses are thin, replaceable internals
232
+
233
+ akm is simple, lightweight tooling for agents and automated processes. A
234
+ harness such as OpenCode (pi or another later) is an internal detail akm
235
+ uses to enable agentic work. It sits behind one thin seam, is not woven into
236
+ akm core, and can be replaced without touching the rest of akm. What akm adds
237
+ to a harness run, for agent work and for model work, is stated once in
238
+ [Configuration](../reference/configuration.md#how-akm-runs-a-harness).
239
+
240
+ Why: heavy machinery and tight coupling are the opposite of akm's goals.
241
+
242
+ Enforced by: review. The seam is `HARNESS_REGISTRY` (principle 2); akm's own
243
+ runtime sits behind the `AgentRuntime` port (pinned by
244
+ `tests/contracts/runtime-port-boundary.test.ts`), and only the OpenCode plugin
245
+ checks still bypass the seam.
246
+
247
+ ### 11. Simple is not sloppy
248
+
249
+ Principle 1 removes machinery that is not justified; it does not lower the
250
+ standard of what remains. Code is kept simple with SOLID structure, not
251
+ instead of it: a module has one responsibility and one reason to change;
252
+ behaviour is extended by adding a case in its one place (principle 2), not
253
+ by editing every caller; a caller depends on the narrow interface it uses,
254
+ not on the internals behind it; types say what a value is. Shrinking a diff
255
+ by merging unrelated concerns, dropping the error handling the design calls
256
+ for, or flattening clear structure into one long function is not
257
+ simplification and is reverted in review.
258
+
259
+ Why: the layers this codebase has removed were added without need, but the
260
+ remedy for over-engineering is a small clean design, not a monolith. Both
261
+ cost the next reader.
262
+
263
+ Enforced by: review; `tests/contracts/module-boundaries.test.ts` for the
264
+ module seams it pins.