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