akm-cli 0.9.0-rc.1 → 0.9.0-rc.13
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.
- package/CHANGELOG.md +1190 -52
- package/README.md +62 -37
- package/SECURITY.md +46 -31
- package/dist/akm +162 -38
- package/dist/akm-migrate +44 -0
- package/dist/assets/backends/schtasks-template.xml +2 -1
- package/dist/assets/hints/cli-hints-full.md +268 -118
- package/dist/assets/hints/cli-hints-short.md +87 -24
- package/dist/assets/{profiles → improve-strategies}/catchup.json +3 -1
- package/dist/assets/{profiles → improve-strategies}/consolidate.json +3 -1
- package/dist/assets/{profiles → improve-strategies}/default.json +6 -7
- package/dist/assets/improve-strategies/frequent.json +15 -0
- package/dist/assets/{profiles → improve-strategies}/graph-refresh.json +4 -2
- package/dist/assets/{profiles → improve-strategies}/memory-focus.json +4 -1
- package/dist/assets/{profiles → improve-strategies}/proactive-maintenance.json +5 -5
- package/dist/assets/{profiles → improve-strategies}/quick.json +4 -2
- package/dist/assets/improve-strategies/reflect-distill.json +30 -0
- package/dist/assets/{profiles → improve-strategies}/thorough.json +1 -1
- package/dist/assets/prompts/consolidate-system.md +5 -5
- package/dist/assets/prompts/extract-session.md +2 -6
- package/dist/assets/prompts/memory-infer-user.md +2 -3
- package/dist/assets/prompts/reflect-llm-framed-contract.md +11 -0
- package/dist/assets/prompts/reflect-llm-schema-contract.md +3 -0
- package/dist/assets/prompts/reflect-output-repair.md +3 -0
- package/dist/assets/stash-skeleton/README.md +38 -10
- package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
- package/dist/assets/tasks/core/extract.yml +3 -2
- package/dist/assets/tasks/core/improve.yml +2 -1
- package/dist/assets/tasks/core/index-refresh.yml +1 -0
- package/dist/assets/tasks/core/sync.yml +1 -0
- package/dist/assets/tasks/core/version-check.yml +2 -1
- package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
- package/dist/assets/templates/html/health.html +5 -4
- package/dist/assets/workflows/workflow-template.md +31 -15
- package/dist/cli/invocation.js +279 -0
- package/dist/cli/parse-args.js +5 -90
- package/dist/cli/retired-commands.js +78 -0
- package/dist/cli/shared.js +158 -48
- package/dist/cli-node.mjs +2 -1
- package/dist/cli.js +747 -293
- package/dist/commands/agent/agent-dispatch.js +19 -18
- package/dist/commands/agent/agent-support.js +0 -24
- package/dist/commands/agent/contribute-cli.js +43 -97
- package/dist/commands/completions.js +80 -23
- package/dist/commands/config-cli.js +44 -281
- package/dist/commands/env/env-binding.js +13 -9
- package/dist/commands/env/env-cli.js +76 -159
- package/dist/commands/env/env.js +12 -163
- package/dist/commands/env/marker-path.js +6 -0
- package/dist/commands/env/secret-cli.js +45 -61
- package/dist/commands/env/secret.js +32 -62
- package/dist/commands/feedback-cli.js +179 -85
- package/dist/commands/health/accept-rate.js +58 -0
- package/dist/commands/health/advisories.js +7 -8
- package/dist/commands/health/checks.js +279 -94
- package/dist/commands/health/html-report.js +197 -578
- package/dist/commands/health/improve-metrics.js +277 -246
- package/dist/commands/health/llm-usage.js +19 -19
- package/dist/commands/health/md-report.js +16 -7
- package/dist/commands/health/metrics.js +67 -32
- package/dist/commands/health/renderers.js +47 -0
- package/dist/commands/health/report-view-model.js +508 -0
- package/dist/commands/health/stash-exposure.js +1 -1
- package/dist/commands/health/surfaces.js +16 -56
- package/dist/commands/health/task-runs.js +3 -67
- package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
- package/dist/commands/health/types-improve.js +29 -0
- package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
- package/dist/commands/health/types-result.js +7 -0
- package/dist/commands/health/types-runs.js +4 -0
- package/dist/commands/health/types-session-log.js +4 -0
- package/dist/commands/health/types-windows.js +4 -0
- package/dist/commands/health/types.js +26 -21
- package/dist/commands/health/windows.js +2 -3
- package/dist/commands/health.js +296 -167
- package/dist/commands/improve/anti-collapse.js +5 -5
- package/dist/commands/improve/autonomy-gate.js +68 -0
- package/dist/commands/improve/collapse-detector.js +65 -52
- package/dist/commands/improve/consolidate/chunking.js +9 -7
- package/dist/commands/improve/consolidate/eligibility.js +1 -23
- package/dist/commands/improve/consolidate/merge.js +4 -0
- package/dist/commands/improve/consolidate.js +454 -1354
- package/dist/commands/improve/content-hash.js +39 -0
- package/dist/commands/improve/distill/content-repair.js +4 -10
- package/dist/commands/improve/distill/promote-memory.js +89 -64
- package/dist/commands/improve/distill/quality-gate.js +118 -42
- package/dist/commands/improve/distill-guards.js +1 -1
- package/dist/commands/improve/distill-promotion-policy.js +33 -888
- package/dist/commands/improve/distill.js +607 -363
- package/dist/commands/improve/eligibility.js +165 -79
- package/dist/commands/improve/extract-cli.js +35 -126
- package/dist/commands/improve/extract-prompt.js +6 -35
- package/dist/commands/improve/extract.js +640 -391
- package/dist/commands/improve/feedback-valence.js +2 -12
- package/dist/commands/improve/improve-cli.js +134 -135
- package/dist/commands/improve/improve-result-file.js +30 -50
- package/dist/commands/improve/improve-run-types.js +4 -0
- package/dist/commands/improve/improve-strategies.js +135 -0
- package/dist/commands/improve/improve.js +904 -701
- package/dist/commands/improve/locks.js +64 -111
- package/dist/commands/improve/loop-stages.js +1110 -923
- package/dist/commands/improve/memory/derived-ref.js +124 -0
- package/dist/commands/improve/memory/memory-belief.js +79 -7
- package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
- package/dist/commands/improve/memory/memory-improve.js +25 -37
- package/dist/commands/improve/outcome-loop.js +25 -88
- package/dist/commands/improve/preparation.js +1034 -813
- package/dist/commands/improve/proactive-maintenance.js +34 -9
- package/dist/commands/improve/proposal-envelope.js +31 -0
- package/dist/commands/improve/reflect.js +983 -794
- package/dist/commands/improve/run-context.js +119 -0
- package/dist/commands/improve/salience.js +24 -127
- package/dist/commands/improve/session-asset.js +7 -3
- package/dist/commands/improve/shared.js +14 -34
- package/dist/commands/improve/source-identity.js +28 -0
- package/dist/commands/improve/triage.js +20 -17
- package/dist/commands/lint/base-linter.js +340 -313
- package/dist/commands/lint/env-key-rules.js +31 -47
- package/dist/commands/lint/index.js +185 -30
- package/dist/commands/{events.js → log.js} +28 -38
- package/dist/commands/migrate-cli.js +54 -0
- package/dist/commands/migration-tool.js +55 -0
- package/dist/commands/observability-cli.js +70 -208
- package/dist/commands/proposal/diff-format.js +50 -0
- package/dist/commands/proposal/drain-policies.js +0 -6
- package/dist/commands/proposal/drain.js +91 -40
- package/dist/commands/proposal/proposal-cli.js +134 -132
- package/dist/commands/proposal/proposal-types.js +56 -0
- package/dist/commands/proposal/proposal.js +83 -65
- package/dist/commands/proposal/propose-cli.js +88 -0
- package/dist/commands/proposal/propose.js +105 -88
- package/dist/commands/proposal/repository.js +1303 -278
- package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
- package/dist/commands/proposal/validators/proposal-validators.js +61 -12
- package/dist/commands/proposal/validators/proposals.js +6 -8
- package/dist/commands/read/curate.js +78 -73
- package/dist/commands/read/knowledge.js +510 -13
- package/dist/commands/read/registry-search.js +2 -2
- package/dist/commands/read/remember-cli.js +84 -15
- package/dist/commands/read/search-cli.js +203 -96
- package/dist/commands/read/search.js +126 -94
- package/dist/commands/read/show.js +226 -250
- package/dist/commands/registry-cli.js +34 -60
- package/dist/commands/remember.js +18 -57
- package/dist/commands/sources/add-cli.js +104 -49
- package/dist/commands/sources/bundle-cli.js +166 -0
- package/dist/commands/sources/bundle-config-ops.js +63 -0
- package/dist/commands/sources/info.js +27 -15
- package/dist/commands/sources/init.js +30 -40
- package/dist/commands/sources/installed-stashes.js +469 -172
- package/dist/commands/sources/schema-repair.js +10 -9
- package/dist/commands/sources/self-update.js +182 -121
- package/dist/commands/sources/source-add.js +169 -178
- package/dist/commands/sources/source-clone.js +144 -41
- package/dist/commands/sources/source-manage.js +94 -59
- package/dist/commands/sources/sources-cli.js +64 -205
- package/dist/commands/sources/stash-cli.js +91 -54
- package/dist/commands/sources/stash-skeleton.js +1 -1
- package/dist/commands/tasks/tasks-cli.js +106 -104
- package/dist/commands/tasks/tasks.js +445 -262
- package/dist/commands/workflow-cli.js +75 -228
- package/dist/core/action-contributors.js +1 -1
- package/dist/core/activation-policy.js +49 -0
- package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
- package/dist/core/adapter/adapters/akm-adapter.js +528 -0
- package/dist/core/adapter/adapters/akm-lint.js +392 -0
- package/dist/core/adapter/adapters/akm-metadata.js +387 -0
- package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
- package/dist/core/adapter/adapters/claude-adapter.js +61 -0
- package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
- package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
- package/dist/core/adapter/adapters/index.js +80 -0
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
- package/dist/core/adapter/adapters/okf-adapter.js +391 -0
- package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
- package/dist/core/adapter/adapters/shared.js +286 -0
- package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
- package/dist/core/adapter/bundle-adapter.js +4 -0
- package/dist/core/adapter/detect-adapter.js +17 -0
- package/dist/core/adapter/recognize-match.js +44 -0
- package/dist/core/adapter/registry.js +56 -0
- package/dist/core/adapter/types.js +4 -0
- package/dist/core/asset/akm-markdown.js +30 -0
- package/dist/core/asset/asset-placement.js +243 -0
- package/dist/core/asset/asset-ref.js +110 -79
- package/dist/core/asset/asset-serialize.js +20 -0
- package/dist/core/asset/frontmatter.js +28 -12
- package/dist/core/asset/markdown.js +40 -51
- package/dist/core/asset/resolve-ref.js +274 -0
- package/dist/core/asset/stash-meta.js +2 -2
- package/dist/core/bundle-id.js +51 -0
- package/dist/core/common.js +281 -86
- package/dist/core/config/config-io.js +42 -128
- package/dist/core/config/config-schema.js +233 -855
- package/dist/core/config/config-sources.js +162 -39
- package/dist/core/config/config-types.js +16 -11
- package/dist/core/config/config-version.js +29 -0
- package/dist/core/config/config-walker.js +126 -37
- package/dist/core/config/config.js +154 -331
- package/dist/core/config/deep-merge.js +41 -0
- package/dist/core/config/engine-semantics.js +28 -0
- package/dist/core/config/experimental.js +21 -0
- package/dist/core/config/schema/embedding.js +38 -0
- package/dist/core/config/schema/engines.js +116 -0
- package/dist/core/config/schema/experimental.js +47 -0
- package/dist/core/config/schema/feedback.js +31 -0
- package/dist/core/config/schema/improve-processes.js +389 -0
- package/dist/core/config/schema/improve.js +94 -0
- package/dist/core/config/schema/index-config.js +176 -0
- package/dist/core/config/schema/output.js +18 -0
- package/dist/core/config/schema/primitives.js +94 -0
- package/dist/core/config/schema/search.js +30 -0
- package/dist/core/config/schema/setup.js +18 -0
- package/dist/core/config/schema/sources-bundles.js +169 -0
- package/dist/core/config/schema/workflow.js +29 -0
- package/dist/core/env-secret-ref.js +155 -20
- package/dist/core/errors.js +17 -15
- package/dist/core/events-types.js +4 -0
- package/dist/core/events.js +46 -128
- package/dist/core/extra-params.js +62 -0
- package/dist/core/file-change.js +17 -0
- package/dist/core/file-lock.js +202 -57
- package/dist/core/fs-txn.js +392 -0
- package/dist/core/git-message.js +59 -0
- package/dist/core/improve-result.js +167 -0
- package/dist/core/lesson-lint.js +1 -17
- package/dist/core/logs-db.js +1 -1
- package/dist/core/maintenance-barrier.js +135 -0
- package/dist/core/migration-operation.js +44 -0
- package/dist/core/mutation-target.js +78 -0
- package/dist/core/paths.js +22 -25
- package/dist/core/platform.js +10 -0
- package/dist/core/recognition-util.js +128 -0
- package/dist/core/redaction.js +392 -0
- package/dist/core/standards/resolve-standards-context.js +36 -65
- package/dist/core/standards/resolve-stash-standards.js +2 -2
- package/dist/core/standards/resolve-type-conventions.js +5 -5
- package/dist/core/state/migrations.js +242 -11
- package/dist/core/state-db.js +98 -10
- package/dist/core/structured.js +1 -1
- package/dist/core/subprocess.js +303 -0
- package/dist/core/text-truncation.js +9 -5
- package/dist/core/time.js +20 -0
- package/dist/core/type-presentation.js +130 -0
- package/dist/core/warn.js +0 -3
- package/dist/core/write-source.js +834 -118
- package/dist/indexer/bundle-identity-guard.js +92 -0
- package/dist/indexer/db/graph-db.js +1 -25
- package/dist/indexer/db/llm-cache.js +1 -1
- package/dist/indexer/ensure-index.js +30 -9
- package/dist/indexer/graph/graph-boost.js +9 -30
- package/dist/indexer/graph/graph-extraction.js +41 -27
- package/dist/indexer/graph/graph-types.js +4 -0
- package/dist/indexer/index-writer-lock.js +93 -49
- package/dist/indexer/index-written-assets.js +100 -53
- package/dist/indexer/indexer.js +746 -329
- package/dist/indexer/init.js +18 -25
- package/dist/indexer/installations.js +142 -0
- package/dist/indexer/passes/dir-staleness.js +18 -10
- package/dist/indexer/passes/memory-inference.js +25 -15
- package/dist/indexer/passes/metadata.js +412 -243
- package/dist/indexer/scan/doc-to-entry.js +160 -0
- package/dist/indexer/scan/drain-dir.js +134 -0
- package/dist/indexer/search/db-search.js +292 -108
- package/dist/indexer/search/fts-query.js +64 -0
- package/dist/indexer/search/ranking-contributors.js +145 -25
- package/dist/indexer/search/ranking-types.js +4 -0
- package/dist/indexer/search/ranking.js +28 -71
- package/dist/indexer/search/search-attribution.js +67 -0
- package/dist/indexer/search/search-fields.js +18 -3
- package/dist/indexer/search/search-hit-enrichers.js +30 -40
- package/dist/indexer/search/search-source.js +157 -111
- package/dist/indexer/search/semantic-status.js +4 -1
- package/dist/indexer/usage/usage-events.js +10 -30
- package/dist/indexer/walk/file-context.js +3 -45
- package/dist/indexer/walk/matchers.js +42 -73
- package/dist/indexer/walk/path-resolver.js +11 -5
- package/dist/indexer/walk/walker.js +42 -14
- package/dist/integrations/agent/builder-shared.js +7 -0
- package/dist/integrations/agent/builders.js +5 -58
- package/dist/integrations/agent/config.js +3 -143
- package/dist/integrations/agent/detect.js +17 -2
- package/dist/integrations/agent/engine-resolution.js +231 -0
- package/dist/integrations/agent/index.js +1 -2
- package/dist/integrations/agent/model-aliases.js +8 -3
- package/dist/integrations/agent/profiles.js +6 -99
- package/dist/integrations/agent/prompts.js +46 -18
- package/dist/integrations/agent/runner-dispatch.js +78 -13
- package/dist/integrations/agent/runner.js +76 -208
- package/dist/integrations/agent/spawn.js +48 -279
- package/dist/integrations/harnesses/aider/agent-builder.js +9 -8
- package/dist/integrations/harnesses/aider/index.js +2 -12
- package/dist/integrations/harnesses/amazonq/agent-builder.js +10 -16
- package/dist/integrations/harnesses/amazonq/index.js +3 -17
- package/dist/integrations/harnesses/claude/agent-builder.js +2 -3
- package/dist/integrations/harnesses/claude/config-import.js +1 -3
- package/dist/integrations/harnesses/claude/index.js +1 -14
- package/dist/integrations/harnesses/claude/session-log.js +27 -75
- package/dist/integrations/harnesses/codex/agent-builder.js +8 -7
- package/dist/integrations/harnesses/codex/index.js +2 -13
- package/dist/integrations/harnesses/copilot/agent-builder.js +9 -9
- package/dist/integrations/harnesses/copilot/index.js +1 -13
- package/dist/integrations/harnesses/gemini/agent-builder.js +8 -9
- package/dist/integrations/harnesses/gemini/index.js +1 -13
- package/dist/integrations/harnesses/ids.js +24 -0
- package/dist/integrations/harnesses/index.js +31 -33
- package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
- package/dist/integrations/harnesses/opencode/config-import.js +1 -3
- package/dist/integrations/harnesses/opencode/index.js +1 -18
- package/dist/integrations/harnesses/opencode/session-log.js +67 -125
- package/dist/integrations/harnesses/opencode-sdk/harness.js +3 -17
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +274 -191
- package/dist/integrations/harnesses/openhands/agent-builder.js +12 -10
- package/dist/integrations/harnesses/openhands/index.js +2 -12
- package/dist/integrations/harnesses/pi/agent-builder.js +11 -18
- package/dist/integrations/harnesses/pi/index.js +3 -16
- package/dist/integrations/harnesses/shared.js +17 -0
- package/dist/integrations/harnesses/types.js +38 -34
- package/dist/integrations/lockfile.js +211 -24
- package/dist/integrations/session-logs/index.js +24 -40
- package/dist/integrations/session-logs/provider-base.js +113 -0
- package/dist/llm/client.js +182 -110
- package/dist/llm/embedders/deterministic.js +2 -2
- package/dist/llm/embedders/remote.js +21 -9
- package/dist/llm/feature-gate.js +17 -57
- package/dist/llm/graph-extract.js +12 -13
- package/dist/llm/index-passes.js +8 -42
- package/dist/llm/memory-infer.js +144 -1
- package/dist/llm/metadata-enhance.js +45 -30
- package/dist/llm/structured-call.js +16 -8
- package/dist/llm/usage-persist.js +30 -5
- package/dist/llm/usage-telemetry.js +59 -6
- package/dist/output/cli-hints.js +1 -2
- package/dist/output/command-registry.js +27 -0
- package/dist/output/context.js +22 -7
- package/dist/output/format-exempt.js +80 -0
- package/dist/output/generic-render.js +251 -0
- package/dist/output/html-render.js +11 -16
- package/dist/output/render-registry.js +57 -0
- package/dist/output/renderers.js +15 -281
- package/dist/output/shapes/curate.js +10 -1
- package/dist/output/shapes/events.js +12 -7
- package/dist/output/shapes/helpers.js +58 -84
- package/dist/output/shapes/passthrough.js +8 -40
- package/dist/output/shapes/proposal/producer.js +15 -7
- package/dist/output/shapes/registry.js +12 -6
- package/dist/output/shapes.js +0 -9
- package/dist/output/text/{init.js → bundle-create.js} +3 -1
- package/dist/output/text/bundle-show.js +7 -0
- package/dist/output/text/command-format.js +562 -0
- package/dist/output/text/env.js +1 -3
- package/dist/output/text/events.js +8 -7
- package/dist/output/text/helpers.js +15 -1375
- package/dist/output/text/proposal/producer.js +4 -2
- package/dist/output/text/proposal-format.js +202 -0
- package/dist/output/text/registry-commands.js +1 -2
- package/dist/output/text/registry.js +12 -6
- package/dist/output/text/show-directives.js +117 -0
- package/dist/output/text/show-format.js +103 -0
- package/dist/output/text/sync.js +5 -0
- package/dist/output/text/workflow-format.js +332 -0
- package/dist/output/text/workflow.js +1 -2
- package/dist/output/text.js +10 -19
- package/dist/registry/factory.js +4 -6
- package/dist/registry/origin-resolve.js +16 -27
- package/dist/registry/providers/skills-sh.js +3 -3
- package/dist/registry/providers/static-index.js +15 -25
- package/dist/registry/resolve.js +43 -94
- package/dist/registry/semver.js +43 -0
- package/dist/runtime.js +81 -12
- package/dist/scripts/akm-migrate.js +35529 -0
- package/dist/setup/detect.js +5 -7
- package/dist/setup/detected-engines.js +136 -0
- package/dist/setup/engine-config.js +100 -0
- package/dist/setup/registry-stash-loader.js +3 -3
- package/dist/setup/semantic-assets.js +12 -9
- package/dist/setup/setup.js +444 -208
- package/dist/setup/steps/connection-shared.js +120 -0
- package/dist/setup/steps/connection.js +108 -305
- package/dist/setup/steps/platforms.js +13 -12
- package/dist/setup/steps/semantic.js +15 -3
- package/dist/setup/steps/sources.js +21 -15
- package/dist/setup/steps/stashdir.js +6 -4
- package/dist/setup/steps/tasks.js +236 -119
- package/dist/setup/steps.js +3 -2
- package/dist/sources/freshness.js +39 -0
- package/dist/sources/provider-factory.js +11 -17
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +278 -34
- package/dist/sources/providers/git-provider.js +54 -56
- package/dist/sources/providers/git-stash.js +420 -91
- package/dist/sources/providers/git.js +2 -2
- package/dist/sources/providers/npm.js +16 -19
- package/dist/sources/providers/provider-utils.js +47 -22
- package/dist/sources/providers/sync-from-ref.js +3 -9
- package/dist/sources/providers/website.js +2 -2
- package/dist/sources/resolve.js +11 -10
- package/dist/sources/snapshot-fetchers/types.js +4 -0
- package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
- package/dist/storage/database.js +60 -4
- package/dist/storage/engines/sqlite-migrations.js +156 -5
- package/dist/storage/locations.js +1 -2
- package/dist/storage/repositories/canaries-repository.js +1 -1
- package/dist/storage/repositories/events-repository.js +51 -11
- package/dist/storage/repositories/improve-runs-repository.js +6 -32
- package/dist/storage/repositories/index-connection.js +79 -0
- package/dist/storage/repositories/index-db.js +4 -3
- package/dist/storage/repositories/index-entries-repository.js +863 -0
- package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
- package/dist/storage/repositories/index-entry-types.js +4 -0
- package/dist/storage/repositories/index-fts-repository.js +167 -0
- package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
- package/dist/storage/repositories/index-meta-repository.js +49 -0
- package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
- package/dist/storage/repositories/index-sql.js +12 -0
- package/dist/storage/repositories/index-utility-repository.js +356 -0
- package/dist/storage/repositories/index-vec-repository.js +250 -0
- package/dist/storage/repositories/outcome-repository.js +119 -0
- package/dist/storage/repositories/proposals-repository.js +317 -75
- package/dist/storage/repositories/registry-cache.js +1 -1
- package/dist/storage/repositories/salience-repository.js +172 -0
- package/dist/storage/repositories/task-history-repository.js +110 -3
- package/dist/storage/repositories/workflow-runs-repository.js +68 -35
- package/dist/tasks/backends/cron.js +169 -46
- package/dist/tasks/backends/exec-utils.js +76 -3
- package/dist/tasks/backends/index.js +6 -9
- package/dist/tasks/backends/launchd.js +292 -55
- package/dist/tasks/backends/schtasks.js +557 -70
- package/dist/tasks/backends/types.js +4 -0
- package/dist/tasks/command-executable.js +93 -0
- package/dist/tasks/embedded.js +56 -38
- package/dist/tasks/parser.js +156 -64
- package/dist/tasks/resolve-akm-bin.js +144 -51
- package/dist/tasks/runner.js +377 -209
- package/dist/tasks/schedule.js +108 -19
- package/dist/tasks/scheduler-invocation.js +296 -0
- package/dist/tasks/schema.js +1 -1
- package/dist/tasks/task-id.js +35 -0
- package/dist/tasks/validator.js +30 -16
- package/dist/workflows/authoring/authoring.js +96 -148
- package/dist/workflows/authoring/scope-key.js +1 -1
- package/dist/workflows/cli.js +0 -20
- package/dist/workflows/concurrency-policy.js +15 -0
- package/dist/workflows/exec/brief.js +25 -59
- package/dist/workflows/exec/frozen-judge.js +47 -0
- package/dist/workflows/exec/native-executor.js +157 -94
- package/dist/workflows/exec/report.js +365 -200
- package/dist/workflows/exec/run-workflow.js +46 -40
- package/dist/workflows/exec/scheduler.js +12 -41
- package/dist/workflows/exec/step-work.js +239 -205
- package/dist/workflows/exec/workflow-engine-gate.js +67 -0
- package/dist/workflows/ir/compile.js +141 -283
- package/dist/workflows/ir/freeze.js +233 -0
- package/dist/workflows/ir/plan-hash.js +40 -5
- package/dist/workflows/ir/schema.js +537 -1
- package/dist/workflows/parser.js +878 -306
- package/dist/workflows/program/expressions.js +20 -208
- package/dist/workflows/program/schema.js +7 -10
- package/dist/workflows/renderer.js +99 -121
- package/dist/workflows/resource-limits.js +22 -0
- package/dist/workflows/runtime/checkin.js +1 -1
- package/dist/workflows/runtime/plan-classifier.js +131 -0
- package/dist/workflows/runtime/runs.js +200 -113
- package/dist/workflows/runtime/unit-checkin.js +1 -1
- package/dist/workflows/runtime/unit-phases.js +20 -0
- package/dist/workflows/runtime/workflow-asset-loader.js +235 -97
- package/dist/workflows/schema.js +1 -11
- package/dist/workflows/validate-summary.js +4 -26
- package/dist/workflows/validator.js +52 -30
- package/docs/README.md +42 -78
- package/docs/migration/README.md +8 -0
- package/docs/migration/release-notes/0.6.0.md +1 -1
- package/docs/migration/release-notes/0.7.0.md +9 -8
- package/docs/migration/release-notes/0.9.0.md +158 -14
- package/docs/migration/v0.7-to-v0.8.md +46 -47
- package/docs/migration/v0.8-to-v0.9.md +844 -0
- package/docs/reference/README.md +12 -0
- package/docs/reference/data-and-telemetry.md +333 -0
- package/package.json +21 -17
- package/schemas/akm-asset-envelope.json +93 -0
- package/schemas/akm-config.json +4636 -0
- package/schemas/akm-task.json +87 -0
- package/{dist/schemas → schemas}/akm-workflow.json +127 -82
- package/dist/akm-migrate-storage +0 -38
- package/dist/assets/help/help-accept.md +0 -12
- package/dist/assets/help/help-improve.md +0 -84
- package/dist/assets/help/help-proposals.md +0 -17
- package/dist/assets/help/help-propose.md +0 -17
- package/dist/assets/help/help-reject.md +0 -11
- package/dist/assets/profiles/frequent.json +0 -13
- package/dist/assets/profiles/recombine-only.json +0 -21
- package/dist/assets/profiles/reflect-distill.json +0 -30
- package/dist/assets/profiles/synthesize.json +0 -15
- package/dist/assets/prompts/procedural-system.md +0 -44
- package/dist/assets/prompts/recombine-system.md +0 -40
- package/dist/assets/prompts/staleness-detect-system.md +0 -6
- package/dist/assets/tasks/core/backup.yml +0 -4
- package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
- package/dist/assets/templates/html/default.html +0 -78
- package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
- package/dist/assets/wiki/index-template.md +0 -12
- package/dist/assets/wiki/ingest-workflow-template.md +0 -83
- package/dist/assets/wiki/log-template.md +0 -8
- package/dist/assets/wiki/schema-template.md +0 -61
- package/dist/cli/config-migrate.js +0 -150
- package/dist/cli/config-validate.js +0 -39
- package/dist/commands/graph/graph-cli.js +0 -124
- package/dist/commands/graph/graph.js +0 -487
- package/dist/commands/improve/calibration.js +0 -161
- package/dist/commands/improve/dedup.js +0 -482
- package/dist/commands/improve/extract-watch.js +0 -140
- package/dist/commands/improve/hot-probation.js +0 -45
- package/dist/commands/improve/improve-auto-accept.js +0 -276
- package/dist/commands/improve/improve-profiles.js +0 -168
- package/dist/commands/improve/procedural.js +0 -398
- package/dist/commands/improve/recombine.js +0 -818
- package/dist/commands/improve/schema-similarity-gate.js +0 -168
- package/dist/commands/lint/agent-linter.js +0 -44
- package/dist/commands/lint/command-linter.js +0 -44
- package/dist/commands/lint/default-linter.js +0 -16
- package/dist/commands/lint/fact-linter.js +0 -39
- package/dist/commands/lint/knowledge-linter.js +0 -16
- package/dist/commands/lint/memory-linter.js +0 -61
- package/dist/commands/lint/registry.js +0 -41
- package/dist/commands/lint/skill-linter.js +0 -45
- package/dist/commands/lint/task-linter.js +0 -50
- package/dist/commands/lint/workflow-linter.js +0 -81
- package/dist/commands/proposal/legacy-import.js +0 -115
- package/dist/commands/sources/history.js +0 -196
- package/dist/commands/tasks/default-tasks.js +0 -186
- package/dist/commands/wiki-cli.js +0 -292
- package/dist/core/asset/asset-registry.js +0 -76
- package/dist/core/asset/asset-spec.js +0 -316
- package/dist/core/config/config-migration.js +0 -602
- package/dist/core/deep-merge.js +0 -38
- package/dist/core/eval/rank-metrics.js +0 -113
- package/dist/core/ripgrep/install.js +0 -163
- package/dist/core/ripgrep/resolve.js +0 -81
- package/dist/indexer/db/db.js +0 -1414
- package/dist/indexer/manifest.js +0 -170
- package/dist/indexer/passes/metadata-contributors.js +0 -31
- package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
- package/dist/integrations/harnesses/opencode-sdk/index.js +0 -25
- package/dist/llm/call-ai.js +0 -62
- package/dist/llm/memory-infer-impl.js +0 -138
- package/dist/output/shapes/distill.js +0 -14
- package/dist/output/shapes/history.js +0 -11
- package/dist/output/text/distill.js +0 -6
- package/dist/output/text/enable-disable.js +0 -8
- package/dist/output/text/history.js +0 -6
- package/dist/output/text/wiki.js +0 -16
- package/dist/registry/build-index.js +0 -386
- package/dist/schemas/akm-config.json +0 -14225
- package/dist/scripts/migrate-storage.js +0 -13169
- package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -10169
- package/dist/scripts/migrations/v16-to-v17.js +0 -141
- package/dist/setup/legacy-config.js +0 -106
- package/dist/storage/repositories/consolidation-repository.js +0 -38
- package/dist/storage/repositories/recombine-repository.js +0 -213
- package/dist/wiki/wiki-templates.js +0 -15
- package/dist/wiki/wiki.js +0 -1012
- package/dist/workflows/authoring/workflow-program-template.yaml +0 -31
- package/dist/workflows/db.js +0 -350
- package/dist/workflows/exec/watch.js +0 -116
- package/dist/workflows/program/parser.js +0 -760
- package/dist/workflows/program/project.js +0 -105
- package/docs/data-and-telemetry.md +0 -227
- package/docs/migration/release-notes/0.9.0-beta.60.md +0 -19
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
|
@@ -5,6 +5,7 @@ import fs from "node:fs";
|
|
|
5
5
|
import os from "node:os";
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
import { extractInlineRefMentions } from "../../session-logs/inline-refs.js";
|
|
8
|
+
import { AbstractSessionLogProvider } from "../../session-logs/provider-base.js";
|
|
8
9
|
/**
|
|
9
10
|
* Root directory holding Claude Code's per-project JSONL session logs.
|
|
10
11
|
*
|
|
@@ -100,22 +101,12 @@ function parseClaudeEvent(entry, sessionId, filePath, fallbackTsMs) {
|
|
|
100
101
|
* (`getHarness`), and the `--type` flag accepts both, so the canonical id and
|
|
101
102
|
* the persisted runtime string coexist without drift.
|
|
102
103
|
*/
|
|
103
|
-
export class ClaudeCodeProvider {
|
|
104
|
+
export class ClaudeCodeProvider extends AbstractSessionLogProvider {
|
|
104
105
|
// Runtime identity (NOT the canonical id) — see class doc. Equals
|
|
105
106
|
// HARNESS_BY_ID.get("claude").runtimeId.
|
|
106
107
|
name = "claude-code";
|
|
107
|
-
|
|
108
|
-
return
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Directory holding Claude Code's per-project session JSONL files
|
|
112
|
-
* (`~/.claude/projects`, honoring `AKM_CLAUDE_PROJECTS_DIR`). Returns `[]`
|
|
113
|
-
* when the directory does not exist on this machine. See {@link
|
|
114
|
-
* SessionLogHarness.watchRoots}.
|
|
115
|
-
*/
|
|
116
|
-
watchRoots() {
|
|
117
|
-
const dir = claudeProjectsDir();
|
|
118
|
-
return fs.existsSync(dir) ? [dir] : [];
|
|
108
|
+
availabilityRoot() {
|
|
109
|
+
return claudeProjectsDir();
|
|
119
110
|
}
|
|
120
111
|
*readEvents(input) {
|
|
121
112
|
try {
|
|
@@ -124,25 +115,13 @@ export class ClaudeCodeProvider {
|
|
|
124
115
|
if (stat.mtimeMs < input.sinceMs)
|
|
125
116
|
continue;
|
|
126
117
|
const lines = fs.readFileSync(jsonlPath, "utf8").split("\n").filter(Boolean);
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
harness: this.name,
|
|
135
|
-
text,
|
|
136
|
-
ts: typeof entry?.timestamp === "number" ? entry.timestamp : stat.mtimeMs,
|
|
137
|
-
sessionId: typeof entry?.session_id === "string" ? entry.session_id : undefined,
|
|
138
|
-
role: typeof entry?.role === "string" ? entry.role : "unknown",
|
|
139
|
-
filePath: jsonlPath,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
// skip malformed lines
|
|
144
|
-
}
|
|
145
|
-
}
|
|
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
|
+
});
|
|
146
125
|
}
|
|
147
126
|
}
|
|
148
127
|
catch {
|
|
@@ -151,39 +130,23 @@ export class ClaudeCodeProvider {
|
|
|
151
130
|
}
|
|
152
131
|
listSessions(input = {}) {
|
|
153
132
|
const root = input.location ?? claudeProjectsDir();
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
let stat;
|
|
159
|
-
try {
|
|
160
|
-
stat = fs.statSync(jsonlPath);
|
|
161
|
-
}
|
|
162
|
-
catch {
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
if (stat.mtimeMs < sinceMs)
|
|
166
|
-
continue;
|
|
167
|
-
const sessionId = path.basename(jsonlPath, ".jsonl");
|
|
168
|
-
const projectHint = path.basename(path.dirname(jsonlPath));
|
|
133
|
+
return this.listSessionsFromFiles({
|
|
134
|
+
sinceMs: input.sinceMs ?? 0,
|
|
135
|
+
enumerate: () => this.#walkJsonl(root),
|
|
136
|
+
summarize: (jsonlPath, stat) => {
|
|
169
137
|
// Peek first + last non-empty line to derive start/end timestamps and
|
|
170
138
|
// title. Reading the whole file would be wasteful for listing.
|
|
171
139
|
const peek = this.#peekJsonl(jsonlPath);
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
sessionId,
|
|
140
|
+
return this.sessionRef({
|
|
141
|
+
sessionId: path.basename(jsonlPath, ".jsonl"),
|
|
175
142
|
filePath: jsonlPath,
|
|
176
143
|
startedAt: peek.firstTsMs ?? stat.ctimeMs,
|
|
177
144
|
endedAt: peek.lastTsMs ?? stat.mtimeMs,
|
|
178
|
-
projectHint,
|
|
179
|
-
|
|
145
|
+
projectHint: path.basename(path.dirname(jsonlPath)),
|
|
146
|
+
title: peek.title,
|
|
180
147
|
});
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
catch {
|
|
184
|
-
// Root missing or unreadable — return what we have.
|
|
185
|
-
}
|
|
186
|
-
return summaries.sort((a, b) => (b.endedAt ?? 0) - (a.endedAt ?? 0));
|
|
148
|
+
},
|
|
149
|
+
});
|
|
187
150
|
}
|
|
188
151
|
readSession(ref) {
|
|
189
152
|
const stat = fs.statSync(ref.filePath);
|
|
@@ -220,15 +183,14 @@ export class ClaudeCodeProvider {
|
|
|
220
183
|
inlineRefs.push(...extractInlineRefMentions(parsed.text, parsed.ts));
|
|
221
184
|
}
|
|
222
185
|
return {
|
|
223
|
-
ref: {
|
|
224
|
-
harness: this.name,
|
|
186
|
+
ref: this.sessionRef({
|
|
225
187
|
sessionId: ref.sessionId,
|
|
226
188
|
filePath: ref.filePath,
|
|
227
189
|
startedAt: firstTsMs ?? stat.ctimeMs,
|
|
228
190
|
endedAt: lastTsMs ?? stat.mtimeMs,
|
|
229
191
|
projectHint,
|
|
230
|
-
|
|
231
|
-
},
|
|
192
|
+
title,
|
|
193
|
+
}),
|
|
232
194
|
events,
|
|
233
195
|
inlineRefs,
|
|
234
196
|
};
|
|
@@ -302,18 +264,8 @@ export class ClaudeCodeProvider {
|
|
|
302
264
|
}
|
|
303
265
|
return result;
|
|
304
266
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
const full = path.join(dir, entry.name);
|
|
309
|
-
if (entry.isDirectory())
|
|
310
|
-
yield* this.#walkJsonl(full);
|
|
311
|
-
else if (entry.name.endsWith(".jsonl") && entry.name !== "journal.jsonl")
|
|
312
|
-
yield full;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
catch {
|
|
316
|
-
// permission errors etc.
|
|
317
|
-
}
|
|
267
|
+
/** Session JSONL files under `dir`, excluding the shared journal file. */
|
|
268
|
+
#walkJsonl(dir) {
|
|
269
|
+
return this.walkFiles(dir, (name) => name.endsWith(".jsonl") && name !== "journal.jsonl");
|
|
318
270
|
}
|
|
319
271
|
}
|
|
@@ -46,14 +46,16 @@
|
|
|
46
46
|
* `-c model_reasoning_effort=<v>` — left to the integration task so the
|
|
47
47
|
* shared request contract's "no builder consumes it yet" note stays true).
|
|
48
48
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
49
|
+
* Registered: `codexBuilder` is `CodexHarness.agentBuilder` (`./index.ts`),
|
|
50
|
+
* one of the ten harnesses `HARNESS_REGISTRY` constructs
|
|
51
|
+
* (`harnesses/index.ts`); `agent/builders.ts` derives `BUILTIN_BUILDERS` from
|
|
52
|
+
* that registry, so this builder is reachable under the `"codex"` platform
|
|
53
|
+
* name without any further wiring.
|
|
51
54
|
*/
|
|
52
55
|
import { mkdtempSync, writeFileSync } from "node:fs";
|
|
53
56
|
import { tmpdir } from "node:os";
|
|
54
57
|
import { join } from "node:path";
|
|
55
|
-
import { assertNotFlag } from "../../agent/builder-shared.js";
|
|
56
|
-
import { resolveModel } from "../../agent/model-aliases.js";
|
|
58
|
+
import { assertNotFlag, resolveDispatchModel } from "../../agent/builder-shared.js";
|
|
57
59
|
/**
|
|
58
60
|
* Write a node's JSON Schema to a fresh temp file for `--output-schema`.
|
|
59
61
|
*
|
|
@@ -69,8 +71,7 @@ export function writeCodexOutputSchemaFile(schema) {
|
|
|
69
71
|
}
|
|
70
72
|
/**
|
|
71
73
|
* Argv prefix that resumes a previous codex session: `exec resume <id>`.
|
|
72
|
-
* Codex resume is a subcommand chain, not a flag
|
|
73
|
-
* `HarnessResumeSupport` seam is not force-fitted. The harness-native session
|
|
74
|
+
* Codex resume is a subcommand chain, not a flag. The harness-native session
|
|
74
75
|
* id comes from the unit row (stored opportunistically by the result
|
|
75
76
|
* extractor); akm never depends on it (plan §"Session, MCP, and identity").
|
|
76
77
|
*/
|
|
@@ -119,7 +120,7 @@ export const codexBuilder = {
|
|
|
119
120
|
const sandboxArgs = ensureSandboxFlags(extra);
|
|
120
121
|
const args = ["exec", ...sandboxArgs];
|
|
121
122
|
if (req.model) {
|
|
122
|
-
const resolved =
|
|
123
|
+
const resolved = resolveDispatchModel(req, profile, "codex");
|
|
123
124
|
args.push("--model", resolved);
|
|
124
125
|
}
|
|
125
126
|
// JSONL event stream on stdout — the codex result extractor's input.
|
|
@@ -12,22 +12,12 @@
|
|
|
12
12
|
* `HARNESS_REGISTRY` registers. Dispatch-only: no native session-log reader or
|
|
13
13
|
* config importer yet.
|
|
14
14
|
*/
|
|
15
|
+
import { caps } from "../shared.js";
|
|
15
16
|
import { BaseHarness } from "../types.js";
|
|
16
17
|
import { codexBuilder } from "./agent-builder.js";
|
|
17
18
|
import { codexResultExtractor } from "./result-extractor.js";
|
|
18
19
|
export { codexBuilder, codexResumeArgs, writeCodexOutputSchemaFile } from "./agent-builder.js";
|
|
19
20
|
export { codexResultExtractor } from "./result-extractor.js";
|
|
20
|
-
function caps(c) {
|
|
21
|
-
return {
|
|
22
|
-
sessionLogs: false,
|
|
23
|
-
agentDispatch: false,
|
|
24
|
-
detection: false,
|
|
25
|
-
configImport: false,
|
|
26
|
-
runtimeIdentity: false,
|
|
27
|
-
v1Migration: false,
|
|
28
|
-
...c,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
21
|
/**
|
|
32
22
|
* OpenAI Codex CLI.
|
|
33
23
|
*
|
|
@@ -45,8 +35,7 @@ export class CodexHarness extends BaseHarness {
|
|
|
45
35
|
// `--output-schema <file>` enforces a caller-supplied JSON schema natively.
|
|
46
36
|
structuredOutput = "native-schema";
|
|
47
37
|
// No flag-shaped resume: codex resume is the `exec resume <id>` SUBCOMMAND
|
|
48
|
-
// chain (see `codexResumeArgs` in ./agent-builder.ts)
|
|
49
|
-
// `HarnessResumeSupport` seam deliberately does not force-fit.
|
|
38
|
+
// chain (see `codexResumeArgs` in ./agent-builder.ts).
|
|
50
39
|
// Presence flag: CODEX_SANDBOX is stamped only on processes codex itself
|
|
51
40
|
// spawns inside its sandbox, so it genuinely means "running under codex" —
|
|
52
41
|
// but its VALUE (e.g. "seatbelt") is a sandbox mode, not a session id, so it
|
|
@@ -12,9 +12,8 @@
|
|
|
12
12
|
* copilot -p "<prompt>" --allow-all-tools
|
|
13
13
|
*
|
|
14
14
|
* with `--output-format json` for structured output, `--model <m>` for model
|
|
15
|
-
* selection, and `--resume <id>` for resume (
|
|
16
|
-
* `
|
|
17
|
-
* no session id).
|
|
15
|
+
* selection, and `--resume <id>` for resume (not built here because
|
|
16
|
+
* `AgentDispatchRequest` carries no session id).
|
|
18
17
|
*
|
|
19
18
|
* Platform-specific mapping decisions (all localized here, per the adapter
|
|
20
19
|
* contract):
|
|
@@ -40,12 +39,13 @@
|
|
|
40
39
|
* programmatic mode Copilot then denies unapproved tool calls, which is the
|
|
41
40
|
* conservative failure mode.
|
|
42
41
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
42
|
+
* Registered: `copilotBuilder` is `CopilotHarness.agentBuilder`
|
|
43
|
+
* (`./index.ts`), one of the ten harnesses `HARNESS_REGISTRY` constructs
|
|
44
|
+
* (`harnesses/index.ts`); `agent/builders.ts` derives `BUILTIN_BUILDERS` from
|
|
45
|
+
* that registry, so this builder is reachable under the `"copilot"` platform
|
|
46
|
+
* name without any further wiring.
|
|
46
47
|
*/
|
|
47
|
-
import { assertNotFlag } from "../../agent/builder-shared.js";
|
|
48
|
-
import { resolveModel } from "../../agent/model-aliases.js";
|
|
48
|
+
import { assertNotFlag, resolveDispatchModel, } from "../../agent/builder-shared.js";
|
|
49
49
|
/** Canonical harness/platform id used for model-alias resolution. */
|
|
50
50
|
export const COPILOT_PLATFORM = "copilot";
|
|
51
51
|
/**
|
|
@@ -94,7 +94,7 @@ export const copilotBuilder = {
|
|
|
94
94
|
assertNotFlag(req.model, "model");
|
|
95
95
|
const args = [...profile.args];
|
|
96
96
|
if (req.model) {
|
|
97
|
-
const resolved =
|
|
97
|
+
const resolved = resolveDispatchModel(req, profile, COPILOT_PLATFORM);
|
|
98
98
|
args.push("--model", resolved);
|
|
99
99
|
}
|
|
100
100
|
if (req.tools) {
|
|
@@ -13,22 +13,12 @@
|
|
|
13
13
|
* (`copilot -p …`); the cloud "Copilot coding agent" is the plan's
|
|
14
14
|
* cloud-delegate pattern and is a separate, future descriptor.
|
|
15
15
|
*/
|
|
16
|
+
import { caps } from "../shared.js";
|
|
16
17
|
import { BaseHarness } from "../types.js";
|
|
17
18
|
import { copilotBuilder } from "./agent-builder.js";
|
|
18
19
|
import { copilotResultExtractor } from "./result-extractor.js";
|
|
19
20
|
export { COPILOT_PLATFORM, copilotBuilder } from "./agent-builder.js";
|
|
20
21
|
export { copilotResultExtractor } from "./result-extractor.js";
|
|
21
|
-
function caps(c) {
|
|
22
|
-
return {
|
|
23
|
-
sessionLogs: false,
|
|
24
|
-
agentDispatch: false,
|
|
25
|
-
detection: false,
|
|
26
|
-
configImport: false,
|
|
27
|
-
runtimeIdentity: false,
|
|
28
|
-
v1Migration: false,
|
|
29
|
-
...c,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
22
|
/**
|
|
33
23
|
* GitHub Copilot CLI (local headless CLI, not the cloud coding agent).
|
|
34
24
|
*
|
|
@@ -46,8 +36,6 @@ export class CopilotHarness extends BaseHarness {
|
|
|
46
36
|
// `--output-format json` emits a documented JSON envelope akm parses, then
|
|
47
37
|
// validates against the node schema ⇒ native-json tier.
|
|
48
38
|
structuredOutput = "native-json";
|
|
49
|
-
// `copilot --resume <sessionId>` replays a previous session.
|
|
50
|
-
resume = { flag: "--resume", takesSessionId: true };
|
|
51
39
|
// Session-id env marker only. The matrix's other candidates (GH_TOKEN,
|
|
52
40
|
// bare COPILOT_* presence vars) are credential/presence flags that would
|
|
53
41
|
// stamp identity onto manual runs, so they are deliberately NOT registered
|
|
@@ -12,9 +12,7 @@
|
|
|
12
12
|
* gemini -p "<prompt>"
|
|
13
13
|
*
|
|
14
14
|
* with `--output-format json` for structured output, `--model <m>` for model
|
|
15
|
-
* selection, and `--resume <id>` for resume
|
|
16
|
-
* (`AkmHarness.resume` — Gemini's resume IS flag-shaped, so the shared
|
|
17
|
-
* `HarnessResumeSupport` seam covers it); it is not built here because
|
|
15
|
+
* selection, and `--resume <id>` for resume; resume is not built here because
|
|
18
16
|
* `AgentDispatchRequest` carries no session id. The `GEMINI_CLI=1` identity
|
|
19
17
|
* env marker is likewise registry-side (`AkmHarness.identityEnv` /
|
|
20
18
|
* `agent-identity.ts`), not a builder concern.
|
|
@@ -45,12 +43,13 @@
|
|
|
45
43
|
* `gemini -p "<p>"`; autonomy flags (`--yolo`, `--approval-mode`) belong in
|
|
46
44
|
* `profile.args` where the operator opts in explicitly.
|
|
47
45
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
46
|
+
* Registered: `geminiBuilder` is `GeminiHarness.agentBuilder` (`./index.ts`),
|
|
47
|
+
* one of the ten harnesses `HARNESS_REGISTRY` constructs
|
|
48
|
+
* (`harnesses/index.ts`); `agent/builders.ts` derives `BUILTIN_BUILDERS` from
|
|
49
|
+
* that registry, so this builder is reachable under the `"gemini"` platform
|
|
50
|
+
* name without any further wiring.
|
|
51
51
|
*/
|
|
52
|
-
import { assertNotFlag } from "../../agent/builder-shared.js";
|
|
53
|
-
import { resolveModel } from "../../agent/model-aliases.js";
|
|
52
|
+
import { assertNotFlag, resolveDispatchModel, } from "../../agent/builder-shared.js";
|
|
54
53
|
/** Canonical harness/platform id used for model-alias resolution. */
|
|
55
54
|
export const GEMINI_PLATFORM = "gemini";
|
|
56
55
|
/**
|
|
@@ -99,7 +98,7 @@ export const geminiBuilder = {
|
|
|
99
98
|
assertNotFlag(req.model, "model");
|
|
100
99
|
const args = [...profile.args];
|
|
101
100
|
if (req.model) {
|
|
102
|
-
const resolved =
|
|
101
|
+
const resolved = resolveDispatchModel(req, profile, GEMINI_PLATFORM);
|
|
103
102
|
args.push("--model", resolved);
|
|
104
103
|
}
|
|
105
104
|
if (req.tools) {
|
|
@@ -12,22 +12,12 @@
|
|
|
12
12
|
* that `HARNESS_REGISTRY` registers. Dispatch-only: no native session-log
|
|
13
13
|
* reader or config importer yet.
|
|
14
14
|
*/
|
|
15
|
+
import { caps } from "../shared.js";
|
|
15
16
|
import { BaseHarness } from "../types.js";
|
|
16
17
|
import { geminiBuilder } from "./agent-builder.js";
|
|
17
18
|
import { geminiResultExtractor } from "./result-extractor.js";
|
|
18
19
|
export { GEMINI_PLATFORM, geminiBuilder } from "./agent-builder.js";
|
|
19
20
|
export { geminiResultExtractor } from "./result-extractor.js";
|
|
20
|
-
function caps(c) {
|
|
21
|
-
return {
|
|
22
|
-
sessionLogs: false,
|
|
23
|
-
agentDispatch: false,
|
|
24
|
-
detection: false,
|
|
25
|
-
configImport: false,
|
|
26
|
-
runtimeIdentity: false,
|
|
27
|
-
v1Migration: false,
|
|
28
|
-
...c,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
21
|
/**
|
|
32
22
|
* Gemini CLI.
|
|
33
23
|
*
|
|
@@ -45,8 +35,6 @@ export class GeminiHarness extends BaseHarness {
|
|
|
45
35
|
// `--output-format json` emits a documented JSON envelope akm parses, then
|
|
46
36
|
// validates against the node schema ⇒ native-json tier.
|
|
47
37
|
structuredOutput = "native-json";
|
|
48
|
-
// `gemini --resume <id>` replays a previous session.
|
|
49
|
-
resume = { flag: "--resume", takesSessionId: true };
|
|
50
38
|
// The matrix's identity marker: Gemini CLI stamps GEMINI_CLI=1 only on
|
|
51
39
|
// processes it spawns, so it genuinely means "running under gemini" (it is
|
|
52
40
|
// not a user-profile config var) — but its VALUE ("1") is a bare flag, not
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
export const HARNESS_ID_TABLE = [
|
|
5
|
+
{ id: "opencode", agentDispatch: true },
|
|
6
|
+
{ id: "claude", agentDispatch: true },
|
|
7
|
+
{ id: "opencode-sdk", agentDispatch: true },
|
|
8
|
+
{ id: "codex", agentDispatch: true },
|
|
9
|
+
{ id: "copilot", agentDispatch: true },
|
|
10
|
+
{ id: "pi", agentDispatch: true },
|
|
11
|
+
{ id: "gemini", agentDispatch: true },
|
|
12
|
+
{ id: "aider", agentDispatch: true },
|
|
13
|
+
{ id: "amazonq", agentDispatch: true },
|
|
14
|
+
{ id: "openhands", agentDispatch: true },
|
|
15
|
+
];
|
|
16
|
+
/**
|
|
17
|
+
* Canonical, ordered list of valid harness / platform ids — the
|
|
18
|
+
* dependency-free counterpart of `./index.ts`'s `VALID_HARNESS_IDS` (which
|
|
19
|
+
* remains the barrel's own derivation for its own consumers). Both are
|
|
20
|
+
* asserted equal at `HARNESS_REGISTRY` construction time.
|
|
21
|
+
*/
|
|
22
|
+
export const VALID_HARNESS_IDS = Object.freeze(HARNESS_ID_TABLE.map((h) => h.id));
|
|
23
|
+
/** Harness ids whose `capabilities.agentDispatch` is `true`. */
|
|
24
|
+
export const HARNESS_AGENT_DISPATCH_IDS = new Set(HARNESS_ID_TABLE.filter((h) => h.agentDispatch).map((h) => h.id));
|
|
@@ -12,10 +12,6 @@
|
|
|
12
12
|
* This module is a dependency-graph LEAF: it imports nothing from
|
|
13
13
|
* `core/config`. `core/config/config-types.ts` derives `VALID_HARNESS_IDS`
|
|
14
14
|
* from here, which keeps the import direction acyclic (config ← harnesses).
|
|
15
|
-
*
|
|
16
|
-
* Implementations (session-log readers, agent profiles) are migrated under each
|
|
17
|
-
* harness in #563/#564; this step only owns ids + capability membership and
|
|
18
|
-
* wires the existing call sites to consult it (behaviour-preserving).
|
|
19
15
|
*/
|
|
20
16
|
import { AiderHarness } from "./aider/index.js";
|
|
21
17
|
import { AmazonqHarness } from "./amazonq/index.js";
|
|
@@ -23,6 +19,7 @@ import { ClaudeHarness } from "./claude/index.js";
|
|
|
23
19
|
import { CodexHarness } from "./codex/index.js";
|
|
24
20
|
import { CopilotHarness } from "./copilot/index.js";
|
|
25
21
|
import { GeminiHarness } from "./gemini/index.js";
|
|
22
|
+
import { HARNESS_ID_TABLE } from "./ids.js";
|
|
26
23
|
import { OpencodeHarness } from "./opencode/index.js";
|
|
27
24
|
// Import the descriptor from its LEAF module, not the per-harness barrel: the
|
|
28
25
|
// barrel re-exports `./sdk-runner` (which imports `core/config`, and
|
|
@@ -33,6 +30,8 @@ import { OpencodeHarness } from "./opencode/index.js";
|
|
|
33
30
|
import { OpencodeSdkHarness } from "./opencode-sdk/harness.js";
|
|
34
31
|
import { OpenhandsHarness } from "./openhands/index.js";
|
|
35
32
|
import { PiHarness } from "./pi/index.js";
|
|
33
|
+
import { isSessionLogHarness } from "./types.js";
|
|
34
|
+
export { isSessionLogHarness } from "./types.js";
|
|
36
35
|
// Each harness descriptor (ClaudeHarness, OpencodeHarness, OpencodeSdkHarness)
|
|
37
36
|
// lives in its own per-harness directory alongside that harness's session-log
|
|
38
37
|
// reader, agent builder, config importer, and/or SDK runner (#563/#564). They
|
|
@@ -48,9 +47,9 @@ import { PiHarness } from "./pi/index.js";
|
|
|
48
47
|
// Order is significant: VALID_HARNESS_IDS derives from this array and feeds the
|
|
49
48
|
// committed JSON-schema enum order. The original [opencode, claude,
|
|
50
49
|
// opencode-sdk] prefix is preserved so the pre-unification portion of the
|
|
51
|
-
// generated schema enum does not reorder
|
|
52
|
-
//
|
|
53
|
-
//
|
|
50
|
+
// generated schema enum does not reorder; the seven P2 harness adapters are
|
|
51
|
+
// appended after it, which extends the enum additively (schemas/akm-config.json
|
|
52
|
+
// is regenerated in lockstep).
|
|
54
53
|
export const HARNESS_REGISTRY = Object.freeze([
|
|
55
54
|
new OpencodeHarness(),
|
|
56
55
|
new ClaudeHarness(),
|
|
@@ -63,6 +62,23 @@ export const HARNESS_REGISTRY = Object.freeze([
|
|
|
63
62
|
new AmazonqHarness(),
|
|
64
63
|
new OpenhandsHarness(),
|
|
65
64
|
]);
|
|
65
|
+
// Construction-time drift guard (WI-9.8 KILL 3, D.3 edge B): ./ids.ts's
|
|
66
|
+
// HARNESS_ID_TABLE is config's dependency-free mirror of (id, agentDispatch)
|
|
67
|
+
// for every registered harness, kept out of core/config's import graph so
|
|
68
|
+
// config doesn't have to import this (heavier) barrel. Assert they match so
|
|
69
|
+
// the mirror can never silently drift — a new/reordered/recapability'd
|
|
70
|
+
// harness that forgets to update ./ids.ts fails loudly here instead of
|
|
71
|
+
// quietly breaking config's platform validation.
|
|
72
|
+
if (HARNESS_REGISTRY.length !== HARNESS_ID_TABLE.length) {
|
|
73
|
+
throw new Error(`harnesses/ids.ts HARNESS_ID_TABLE has ${HARNESS_ID_TABLE.length} entries but HARNESS_REGISTRY has ${HARNESS_REGISTRY.length} — update ids.ts to match.`);
|
|
74
|
+
}
|
|
75
|
+
HARNESS_REGISTRY.forEach((h, i) => {
|
|
76
|
+
const expected = HARNESS_ID_TABLE[i];
|
|
77
|
+
if (!expected || expected.id !== h.id || expected.agentDispatch !== h.capabilities.agentDispatch) {
|
|
78
|
+
throw new Error(`harnesses/ids.ts HARNESS_ID_TABLE[${i}] (${expected?.id ?? "<missing>"}, agentDispatch=${expected?.agentDispatch}) ` +
|
|
79
|
+
`does not match HARNESS_REGISTRY[${i}] (${h.id}, agentDispatch=${h.capabilities.agentDispatch}) — update ids.ts to match.`);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
66
82
|
/** Lookup by canonical id. */
|
|
67
83
|
export const HARNESS_BY_ID = new Map(HARNESS_REGISTRY.map((h) => [h.id, h]));
|
|
68
84
|
/**
|
|
@@ -82,12 +98,17 @@ const HARNESS_BY_ANY_ID = (() => {
|
|
|
82
98
|
})();
|
|
83
99
|
/**
|
|
84
100
|
* Canonical, ordered list of valid harness / platform ids. The Zod
|
|
85
|
-
* `AgentPlatformSchema` enum, the
|
|
101
|
+
* `AgentPlatformSchema` enum, the agent-engine platform union, and
|
|
86
102
|
* setup's `DetectedHarness` union all derive from this so they cannot drift.
|
|
87
103
|
*/
|
|
88
104
|
export const VALID_HARNESS_IDS = Object.freeze(HARNESS_REGISTRY.map((h) => h.id));
|
|
89
|
-
/**
|
|
90
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Harnesses that expose readable native session logs. Narrowed via the
|
|
107
|
+
* {@link isSessionLogHarness} type-predicate (rather than a plain boolean
|
|
108
|
+
* callback) so `sessionLogProvider` is known-present on every element — see
|
|
109
|
+
* that function's doc comment for why a plain predicate doesn't narrow here.
|
|
110
|
+
*/
|
|
111
|
+
export const SESSION_LOG_HARNESSES = HARNESS_REGISTRY.filter(isSessionLogHarness);
|
|
91
112
|
/** Harnesses that can be dispatched as an agent CLI / SDK. */
|
|
92
113
|
export const AGENT_DISPATCH_HARNESSES = HARNESS_REGISTRY.filter((h) => h.capabilities.agentDispatch);
|
|
93
114
|
/** Harnesses that can import an existing harness config into akm. */
|
|
@@ -112,29 +133,6 @@ export function getHarness(id) {
|
|
|
112
133
|
export function normalizeHarnessId(id) {
|
|
113
134
|
return HARNESS_BY_ANY_ID.get(id)?.id ?? id;
|
|
114
135
|
}
|
|
115
|
-
/**
|
|
116
|
-
* Resolve a legacy v1 agent-profile name to its v2 platform id (#566).
|
|
117
|
-
*
|
|
118
|
-
* v1 agent profiles never carried an explicit `platform`; it had to be inferred
|
|
119
|
-
* from the profile name. This is the SINGLE registry-backed resolver that
|
|
120
|
-
* replaces both the old standalone `guessAgentPlatform()` in config-migration
|
|
121
|
-
* and the `name.includes("claude") ? "claude" : "opencode"` heuristic in setup.
|
|
122
|
-
* Each harness owns its own `matchesV1ProfileName()`; an unknown name matches no
|
|
123
|
-
* harness and returns `undefined`, so the caller drops it instead of silently
|
|
124
|
-
* defaulting to `'opencode'`.
|
|
125
|
-
*
|
|
126
|
-
* Harnesses are consulted most-specific-id-first (longest id wins) so a
|
|
127
|
-
* decorated name like `"opencode-sdk-fast"` resolves to `'opencode-sdk'` rather
|
|
128
|
-
* than being over-matched by OpenCode's `"opencode"` prefix.
|
|
129
|
-
*/
|
|
130
|
-
const V1_RESOLUTION_ORDER = [...HARNESS_REGISTRY].sort((a, b) => b.id.length - a.id.length);
|
|
131
|
-
export function v1ProfilePlatform(name) {
|
|
132
|
-
for (const h of V1_RESOLUTION_ORDER) {
|
|
133
|
-
if (h.matchesV1ProfileName(name))
|
|
134
|
-
return h.id;
|
|
135
|
-
}
|
|
136
|
-
return undefined;
|
|
137
|
-
}
|
|
138
136
|
/**
|
|
139
137
|
* Default agent-profile name for a detected harness id (#566).
|
|
140
138
|
*
|
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
* pre-migration `opencodeBuilder`. The builder's `platform` stays `'opencode'`
|
|
15
15
|
* (the canonical harness id).
|
|
16
16
|
*/
|
|
17
|
-
import { assertNotFlag } from "../../agent/builder-shared.js";
|
|
18
|
-
import { resolveModel } from "../../agent/model-aliases.js";
|
|
17
|
+
import { assertNotFlag, resolveDispatchModel } from "../../agent/builder-shared.js";
|
|
19
18
|
/**
|
|
20
19
|
* OpenCode builder.
|
|
21
20
|
* Command shape: opencode run [--system-prompt "..."] [--model <m>] "<prompt>"
|
|
@@ -28,13 +27,32 @@ export const opencodeBuilder = {
|
|
|
28
27
|
build(profile, req) {
|
|
29
28
|
assertNotFlag(req.systemPrompt, "systemPrompt");
|
|
30
29
|
assertNotFlag(req.model, "model");
|
|
31
|
-
|
|
30
|
+
let configuredModel;
|
|
31
|
+
const args = req.model ? [] : [...profile.args];
|
|
32
|
+
if (req.model) {
|
|
33
|
+
for (let index = 0; index < profile.args.length; index += 1) {
|
|
34
|
+
const arg = profile.args[index];
|
|
35
|
+
if (arg === undefined)
|
|
36
|
+
continue;
|
|
37
|
+
if (arg === "--model") {
|
|
38
|
+
configuredModel = profile.args[index + 1];
|
|
39
|
+
index += 1;
|
|
40
|
+
}
|
|
41
|
+
else if (arg.startsWith("--model=")) {
|
|
42
|
+
configuredModel = arg.slice("--model=".length);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
args.push(arg);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
32
49
|
if (req.systemPrompt) {
|
|
33
50
|
args.push("--system-prompt", req.systemPrompt);
|
|
34
51
|
}
|
|
35
52
|
if (req.model) {
|
|
36
|
-
const resolved =
|
|
37
|
-
|
|
53
|
+
const resolved = resolveDispatchModel(req, profile, "opencode");
|
|
54
|
+
const provider = configuredModel?.split("/", 1)[0];
|
|
55
|
+
args.push("--model", provider && !resolved.includes("/") ? `${provider}/${resolved}` : resolved);
|
|
38
56
|
}
|
|
39
57
|
args.push("--");
|
|
40
58
|
args.push(req.prompt);
|
|
@@ -15,9 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import fs from "node:fs";
|
|
17
17
|
import path from "node:path";
|
|
18
|
-
|
|
19
|
-
return process.env.HOME ?? process.env.USERPROFILE ?? "";
|
|
20
|
-
}
|
|
18
|
+
import { homeDir } from "../shared.js";
|
|
21
19
|
/**
|
|
22
20
|
* Imports LLM config from an OpenCode installation.
|
|
23
21
|
*
|
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
import { caps } from "../shared.js";
|
|
4
5
|
import { BaseHarness } from "../types.js";
|
|
5
6
|
import { opencodeBuilder } from "./agent-builder.js";
|
|
6
7
|
import { OpenCodeProvider } from "./session-log.js";
|
|
7
8
|
export { opencodeBuilder } from "./agent-builder.js";
|
|
8
9
|
export { openCodeImporter } from "./config-import.js";
|
|
9
10
|
export { OpenCodeProvider } from "./session-log.js";
|
|
10
|
-
function caps(c) {
|
|
11
|
-
return {
|
|
12
|
-
sessionLogs: false,
|
|
13
|
-
agentDispatch: false,
|
|
14
|
-
detection: false,
|
|
15
|
-
configImport: false,
|
|
16
|
-
runtimeIdentity: false,
|
|
17
|
-
v1Migration: false,
|
|
18
|
-
...c,
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
11
|
/**
|
|
22
12
|
* OpenCode.
|
|
23
13
|
*
|
|
@@ -30,10 +20,6 @@ export class OpencodeHarness extends BaseHarness {
|
|
|
30
20
|
// Home-relative config dir scanned by `akm setup` (#567). OpenCode has a
|
|
31
21
|
// session-log provider, so offering it as a stash source is functional.
|
|
32
22
|
setupDetectionDir = ".config/opencode";
|
|
33
|
-
// Decorated v1 profile names like "opencode-fast" still belong to OpenCode.
|
|
34
|
-
// `v1ProfilePlatform()` resolves most-specific-id-first, so "opencode-sdk-*"
|
|
35
|
-
// is claimed by OpencodeSdkHarness before this prefix can over-match it.
|
|
36
|
-
v1ProfilePrefixes = ["opencode"];
|
|
37
23
|
agentBuilder = opencodeBuilder;
|
|
38
24
|
// ── Workflow-engine descriptor (plan §"Capability matrix", P2) ────────────
|
|
39
25
|
// This entry is the CLI spawn path (`opencode run …`): akm launches the
|
|
@@ -44,8 +30,6 @@ export class OpencodeHarness extends BaseHarness {
|
|
|
44
30
|
// engine uses the prompt-injected schema + embedded-JSON extraction tier
|
|
45
31
|
// (the matrix's "via prompt+validate"). The SDK entry is native-json.
|
|
46
32
|
structuredOutput = "none";
|
|
47
|
-
// `opencode run --session <id>` continues a previous session.
|
|
48
|
-
resume = { flag: "--session", takesSessionId: true };
|
|
49
33
|
// Session-id env marker for run attribution.
|
|
50
34
|
identityEnv = ["OPENCODE_SESSION_ID"];
|
|
51
35
|
sessionLogProvider = () => new OpenCodeProvider();
|
|
@@ -55,6 +39,5 @@ export class OpencodeHarness extends BaseHarness {
|
|
|
55
39
|
detection: true,
|
|
56
40
|
configImport: true,
|
|
57
41
|
runtimeIdentity: true,
|
|
58
|
-
v1Migration: true,
|
|
59
42
|
});
|
|
60
43
|
}
|