akm-cli 0.9.1 → 0.9.2-alpha.2
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 +103 -28
- 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/stash-skeleton/facts/conventions/backlinks.md +3 -4
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +1 -3
- 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 +5 -6
- 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-prompt.js +64 -22
- package/dist/commands/improve/extract.js +608 -360
- 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 +53 -22
- 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 +901 -177
- 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 +85 -35
- 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 +23 -26
- package/dist/core/config/schema/engines.js +8 -7
- package/dist/core/config/schema/improve-processes.js +29 -5
- package/dist/core/config/schema/index-config.js +0 -27
- 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 +78 -39
- package/dist/indexer/indexer.js +471 -432
- package/dist/indexer/installations.js +6 -0
- package/dist/indexer/lookup/adapter-concept-owner.js +283 -0
- package/dist/indexer/materialize-embeddings.js +155 -0
- package/dist/indexer/passes/memory-inference.js +227 -174
- package/dist/indexer/passes/metadata.js +263 -118
- package/dist/indexer/scan/doc-to-entry.js +7 -10
- package/dist/indexer/scan/drain-dir.js +51 -23
- package/dist/indexer/search/db-search.js +156 -50
- package/dist/indexer/search/fts-query.js +40 -40
- package/dist/indexer/search/ranking.js +36 -1
- package/dist/indexer/search/search-attribution.js +3 -1
- package/dist/indexer/search/search-fields.js +23 -14
- 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 +31 -33
- 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 +19334 -52269
- package/dist/scripts/akm-migrate.js +19270 -51612
- 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 +203 -229
- 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 +64 -71
- 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 +74 -350
- package/dist/storage/repositories/index-utility-repository.js +12 -17
- package/dist/storage/repositories/index-vec-repository.js +56 -7
- 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 +159 -36
- 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 -224
- 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
package/schemas/akm-task.json
CHANGED
|
@@ -1,109 +1,353 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://itlackey.github.io/akm/schemas/akm-task.json",
|
|
4
|
-
"title": "AKM
|
|
5
|
-
"description": "Strict
|
|
4
|
+
"title": "AKM Task v3",
|
|
5
|
+
"description": "Strict task-v3 source document. Exactly one executable selector and exactly one scheduling source are required. GitHub action refs are recognized source syntax but are not executed by AKM 0.9.2.",
|
|
6
|
+
"x-akm-runtimeConstraints": {
|
|
7
|
+
"authoritativeParser": "src/tasks/source-v3.ts",
|
|
8
|
+
"maxSourceUtf8Bytes": 1048576,
|
|
9
|
+
"maxStringUtf8Bytes": 262144,
|
|
10
|
+
"maxJsonDepth": 64,
|
|
11
|
+
"maxJsonNodes": 10000,
|
|
12
|
+
"canonicalRefsRequireNfc": true,
|
|
13
|
+
"workingDirectoryRequiresWorkspaceRoot": true
|
|
14
|
+
},
|
|
6
15
|
"type": "object",
|
|
7
|
-
"required": ["version"
|
|
16
|
+
"required": ["version"],
|
|
8
17
|
"additionalProperties": false,
|
|
9
18
|
"properties": {
|
|
10
|
-
"version": { "const":
|
|
11
|
-
"name": { "type": "string" },
|
|
12
|
-
"
|
|
13
|
-
"when_to_use": { "type": "string" },
|
|
14
|
-
"tags": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
15
|
-
"schedule": { "type": "string", "minLength": 1 },
|
|
16
|
-
"enabled": { "type": "boolean" },
|
|
17
|
-
"workflow": { "type": "string", "minLength": 1 },
|
|
18
|
-
"prompt": { "type": "string", "minLength": 1 },
|
|
19
|
-
"command": {
|
|
19
|
+
"version": { "const": 3 },
|
|
20
|
+
"name": { "type": "string", "maxLength": 262144 },
|
|
21
|
+
"uses": {
|
|
20
22
|
"oneOf": [
|
|
21
|
-
{ "
|
|
22
|
-
{ "
|
|
23
|
+
{ "const": "akm/command" },
|
|
24
|
+
{ "$ref": "#/definitions/akmExecutableRef" },
|
|
25
|
+
{ "$ref": "#/definitions/githubActionRef" }
|
|
23
26
|
]
|
|
24
27
|
},
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
},
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
"type": "
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
|
|
28
|
+
"run": { "$ref": "#/definitions/nonemptyLiteral" },
|
|
29
|
+
"with": { "$ref": "#/definitions/jsonObject" },
|
|
30
|
+
"env": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"maxProperties": 256,
|
|
33
|
+
"propertyNames": { "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" },
|
|
34
|
+
"additionalProperties": {
|
|
35
|
+
"oneOf": [
|
|
36
|
+
{ "type": "string", "maxLength": 262144 },
|
|
37
|
+
{ "type": "number" },
|
|
38
|
+
{ "type": "boolean" }
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"shell": { "enum": ["bash", "sh", "zsh", "pwsh", "powershell", "cmd"] },
|
|
43
|
+
"working-directory": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"minLength": 1,
|
|
46
|
+
"maxLength": 262144,
|
|
47
|
+
"pattern": "^(?![\\\\/])(?![A-Za-z]:[\\\\/])(?!.*(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$))(?!.*[\\\\/]{2})(?!.*[\\\\/]$)[^\\u0000]+$"
|
|
48
|
+
},
|
|
49
|
+
"akm": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"additionalProperties": false,
|
|
52
|
+
"properties": {
|
|
53
|
+
"schedule": { "$ref": "#/definitions/nonemptyLiteral" },
|
|
54
|
+
"enabled": { "type": "boolean" },
|
|
55
|
+
"description": { "type": "string", "maxLength": 262144 },
|
|
56
|
+
"when_to_use": { "type": "string", "maxLength": 262144 },
|
|
57
|
+
"tags": {
|
|
58
|
+
"type": "array",
|
|
59
|
+
"maxItems": 1024,
|
|
60
|
+
"items": { "type": "string", "minLength": 1, "maxLength": 262144 }
|
|
61
|
+
},
|
|
62
|
+
"agent": { "$ref": "#/definitions/nullableSelector" },
|
|
63
|
+
"engine": { "$ref": "#/definitions/nullableSelector" },
|
|
64
|
+
"model": { "$ref": "#/definitions/nullableSelector" },
|
|
65
|
+
"inference": {
|
|
66
|
+
"oneOf": [
|
|
67
|
+
{ "$ref": "#/definitions/jsonObject" },
|
|
68
|
+
{ "type": "null" }
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"outputSchema": {
|
|
72
|
+
"description": "A JSON Schema accepted by AKM's bounded execution-schema subset, or null. Runtime byte, depth, and node limits are declared by x-akm-runtimeConstraints.",
|
|
73
|
+
"oneOf": [
|
|
74
|
+
{ "$ref": "#/definitions/outputSchemaDefinition" },
|
|
75
|
+
{ "type": "null" }
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
"tools": {
|
|
79
|
+
"oneOf": [
|
|
80
|
+
{ "type": "string", "maxLength": 262144 },
|
|
81
|
+
{
|
|
82
|
+
"type": "array",
|
|
83
|
+
"maxItems": 1024,
|
|
84
|
+
"items": { "type": "string", "maxLength": 262144 }
|
|
85
|
+
},
|
|
86
|
+
{ "$ref": "#/definitions/jsonObject" },
|
|
87
|
+
{ "type": "null" }
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"timeout": {
|
|
91
|
+
"oneOf": [
|
|
92
|
+
{ "type": "integer", "minimum": 0, "maximum": 2147483647 },
|
|
93
|
+
{ "type": "string", "pattern": "^\\d+[mMhHdD]$" },
|
|
94
|
+
{ "type": "null" }
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
"redact": {
|
|
98
|
+
"type": "array",
|
|
99
|
+
"maxItems": 32,
|
|
100
|
+
"uniqueItems": true,
|
|
101
|
+
"items": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" }
|
|
102
|
+
},
|
|
103
|
+
"maxSteps": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
|
|
104
|
+
"maxRetries": { "type": "integer", "minimum": 0, "maximum": 100 }
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"on": {
|
|
108
|
+
"type": "object",
|
|
109
|
+
"minProperties": 1,
|
|
110
|
+
"additionalProperties": false,
|
|
111
|
+
"properties": {
|
|
112
|
+
"schedule": {
|
|
113
|
+
"type": "array",
|
|
114
|
+
"minItems": 1,
|
|
115
|
+
"maxItems": 64,
|
|
116
|
+
"items": {
|
|
117
|
+
"type": "object",
|
|
118
|
+
"required": ["cron"],
|
|
119
|
+
"additionalProperties": false,
|
|
120
|
+
"properties": {
|
|
121
|
+
"cron": { "$ref": "#/definitions/nonemptyLiteral" }
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"workflow_dispatch": {
|
|
126
|
+
"oneOf": [
|
|
127
|
+
{ "type": "null" },
|
|
128
|
+
{ "type": "object", "maxProperties": 0, "additionalProperties": false }
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
}
|
|
51
132
|
}
|
|
52
133
|
},
|
|
53
134
|
"oneOf": [
|
|
54
135
|
{
|
|
55
|
-
"
|
|
56
|
-
"
|
|
136
|
+
"description": "AKM's built-in anonymous/stored command action.",
|
|
137
|
+
"required": ["uses", "with"],
|
|
138
|
+
"properties": {
|
|
139
|
+
"uses": { "const": "akm/command" },
|
|
140
|
+
"with": { "$ref": "#/definitions/builtinCommandWith" }
|
|
141
|
+
},
|
|
142
|
+
"not": {
|
|
143
|
+
"anyOf": [
|
|
144
|
+
{ "required": ["run"] },
|
|
145
|
+
{ "required": ["shell"] },
|
|
146
|
+
{ "required": ["working-directory"] }
|
|
147
|
+
]
|
|
148
|
+
}
|
|
57
149
|
},
|
|
58
150
|
{
|
|
59
|
-
"
|
|
60
|
-
"
|
|
151
|
+
"description": "A canonical AKM executable ref or GitHub action ref.",
|
|
152
|
+
"required": ["uses"],
|
|
153
|
+
"properties": {
|
|
154
|
+
"uses": {
|
|
155
|
+
"oneOf": [
|
|
156
|
+
{ "$ref": "#/definitions/akmExecutableRef" },
|
|
157
|
+
{ "$ref": "#/definitions/githubActionRef" }
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"not": {
|
|
162
|
+
"anyOf": [
|
|
163
|
+
{ "required": ["run"] },
|
|
164
|
+
{ "required": ["shell"] },
|
|
165
|
+
{ "required": ["working-directory"] }
|
|
166
|
+
]
|
|
167
|
+
}
|
|
61
168
|
},
|
|
62
169
|
{
|
|
63
|
-
"
|
|
64
|
-
"
|
|
170
|
+
"description": "One exact host-shell string.",
|
|
171
|
+
"required": ["run"],
|
|
172
|
+
"not": {
|
|
173
|
+
"anyOf": [
|
|
174
|
+
{ "required": ["uses"] },
|
|
175
|
+
{ "required": ["with"] }
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
],
|
|
180
|
+
"allOf": [
|
|
181
|
+
{
|
|
182
|
+
"description": "Exactly one scheduling source: akm.schedule or on.",
|
|
183
|
+
"oneOf": [
|
|
184
|
+
{
|
|
185
|
+
"required": ["akm"],
|
|
186
|
+
"properties": { "akm": { "required": ["schedule"] } },
|
|
187
|
+
"not": { "required": ["on"] }
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"required": ["on"],
|
|
191
|
+
"not": {
|
|
192
|
+
"required": ["akm"],
|
|
193
|
+
"properties": { "akm": { "required": ["schedule"] } }
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
]
|
|
65
197
|
}
|
|
66
198
|
],
|
|
67
199
|
"definitions": {
|
|
68
|
-
"
|
|
200
|
+
"nonemptyLiteral": {
|
|
201
|
+
"type": "string",
|
|
202
|
+
"minLength": 1,
|
|
203
|
+
"maxLength": 262144,
|
|
204
|
+
"pattern": "^(?![\\s\\S]*\\$\\{\\{)[\\s\\S]*\\S[\\s\\S]*$"
|
|
205
|
+
},
|
|
206
|
+
"nullableSelector": {
|
|
207
|
+
"oneOf": [
|
|
208
|
+
{ "type": "string", "minLength": 1, "maxLength": 262144, "pattern": ".*\\S.*" },
|
|
209
|
+
{ "type": "null" }
|
|
210
|
+
]
|
|
211
|
+
},
|
|
212
|
+
"akmExecutableRef": {
|
|
213
|
+
"type": "string",
|
|
214
|
+
"maxLength": 262144,
|
|
215
|
+
"pattern": "^(?:[^\\s:.#/]+//)?(?:commands|workflows|scripts)/(?!\\.{1,2}(?:/|$))[^\\s#\\\\/\\u0000]+(?:/(?!\\.{1,2}(?:/|$))[^\\s#\\\\/\\u0000]+)*$"
|
|
216
|
+
},
|
|
217
|
+
"githubActionRef": {
|
|
218
|
+
"type": "string",
|
|
219
|
+
"maxLength": 262144,
|
|
220
|
+
"pattern": "^(?!(?:commands|workflows|scripts)/)[A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?/(?!\\.{1,2}(?:/|@))[A-Za-z0-9_.-]+(?:/(?!\\.{1,2}(?:/|@))[A-Za-z0-9_.-]+)*@(?![./])(?!.*(?:@|\\.\\.|//|/\\.|\\.(?:/|$)|\\.lock(?:/|$)))[^\\s\\u0000-\\u0020\\u007f~^:?*\\[\\\\/](?:[^\\s\\u0000-\\u0020\\u007f~^:?*\\[\\\\@]*[^\\s\\u0000-\\u0020\\u007f~^:?*\\[\\\\/.@])?$"
|
|
221
|
+
},
|
|
222
|
+
"outputSchemaDefinition": {
|
|
69
223
|
"type": "object",
|
|
70
|
-
"
|
|
224
|
+
"maxProperties": 256,
|
|
71
225
|
"properties": {
|
|
72
|
-
"
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
226
|
+
"type": {
|
|
227
|
+
"oneOf": [
|
|
228
|
+
{ "$ref": "#/definitions/outputSchemaTypeName" },
|
|
229
|
+
{
|
|
230
|
+
"type": "array",
|
|
231
|
+
"minItems": 1,
|
|
232
|
+
"maxItems": 1024,
|
|
233
|
+
"items": { "$ref": "#/definitions/outputSchemaTypeName" }
|
|
234
|
+
}
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
"enum": {
|
|
238
|
+
"type": "array",
|
|
239
|
+
"minItems": 1,
|
|
240
|
+
"maxItems": 1024,
|
|
241
|
+
"items": {
|
|
242
|
+
"oneOf": [
|
|
243
|
+
{ "type": "string", "maxLength": 262144 },
|
|
244
|
+
{ "type": "number" },
|
|
245
|
+
{ "type": "boolean" },
|
|
246
|
+
{ "type": "null" }
|
|
247
|
+
]
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"properties": {
|
|
251
|
+
"type": "object",
|
|
252
|
+
"maxProperties": 256,
|
|
253
|
+
"propertyNames": { "maxLength": 262144 },
|
|
254
|
+
"additionalProperties": { "$ref": "#/definitions/outputSchemaDefinition" }
|
|
255
|
+
},
|
|
256
|
+
"required": {
|
|
257
|
+
"type": "array",
|
|
258
|
+
"maxItems": 1024,
|
|
259
|
+
"items": { "type": "string", "maxLength": 262144 }
|
|
260
|
+
},
|
|
261
|
+
"items": { "$ref": "#/definitions/outputSchemaDefinition" },
|
|
262
|
+
"additionalProperties": { "type": "boolean" },
|
|
263
|
+
"minItems": { "type": "integer", "minimum": 0 },
|
|
264
|
+
"maxItems": { "type": "integer", "minimum": 0 },
|
|
265
|
+
"minLength": { "type": "integer", "minimum": 0 },
|
|
266
|
+
"maxLength": { "type": "integer", "minimum": 0 },
|
|
267
|
+
"minimum": { "type": "number" },
|
|
268
|
+
"maximum": { "type": "number" },
|
|
269
|
+
"allOf": { "$ref": "#/definitions/outputSchemaArray" },
|
|
270
|
+
"anyOf": { "$ref": "#/definitions/outputSchemaArray" },
|
|
271
|
+
"oneOf": { "$ref": "#/definitions/outputSchemaArray" },
|
|
272
|
+
"not": { "$ref": "#/definitions/outputSchemaDefinition" },
|
|
273
|
+
"$ref": false,
|
|
274
|
+
"$defs": false,
|
|
275
|
+
"definitions": false,
|
|
276
|
+
"$anchor": false,
|
|
277
|
+
"$dynamicRef": false,
|
|
278
|
+
"$dynamicAnchor": false,
|
|
279
|
+
"if": false,
|
|
280
|
+
"then": false,
|
|
281
|
+
"else": false,
|
|
282
|
+
"const": false,
|
|
283
|
+
"pattern": false,
|
|
284
|
+
"format": false,
|
|
285
|
+
"patternProperties": false,
|
|
286
|
+
"propertyNames": false,
|
|
287
|
+
"additionalItems": false,
|
|
288
|
+
"prefixItems": false,
|
|
289
|
+
"contains": false,
|
|
290
|
+
"minContains": false,
|
|
291
|
+
"maxContains": false,
|
|
292
|
+
"uniqueItems": false,
|
|
293
|
+
"multipleOf": false,
|
|
294
|
+
"exclusiveMinimum": false,
|
|
295
|
+
"exclusiveMaximum": false,
|
|
296
|
+
"minProperties": false,
|
|
297
|
+
"maxProperties": false,
|
|
298
|
+
"dependencies": false,
|
|
299
|
+
"dependentRequired": false,
|
|
300
|
+
"dependentSchemas": false,
|
|
301
|
+
"unevaluatedItems": false,
|
|
302
|
+
"unevaluatedProperties": false,
|
|
303
|
+
"contentEncoding": false,
|
|
304
|
+
"contentMediaType": false,
|
|
305
|
+
"contentSchema": false
|
|
306
|
+
},
|
|
307
|
+
"additionalProperties": { "$ref": "#/definitions/jsonValue" }
|
|
308
|
+
},
|
|
309
|
+
"outputSchemaArray": {
|
|
310
|
+
"type": "array",
|
|
311
|
+
"minItems": 1,
|
|
312
|
+
"maxItems": 1024,
|
|
313
|
+
"items": { "$ref": "#/definitions/outputSchemaDefinition" }
|
|
314
|
+
},
|
|
315
|
+
"outputSchemaTypeName": {
|
|
316
|
+
"enum": ["string", "number", "integer", "boolean", "object", "array", "null"]
|
|
79
317
|
},
|
|
80
|
-
"
|
|
318
|
+
"builtinCommandWith": {
|
|
81
319
|
"type": "object",
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
|
|
86
|
-
}
|
|
320
|
+
"additionalProperties": false,
|
|
321
|
+
"properties": {
|
|
322
|
+
"ref": { "type": "string", "minLength": 1, "maxLength": 262144 },
|
|
323
|
+
"content": { "type": "string", "maxLength": 262144 },
|
|
324
|
+
"arguments": { "type": "string", "maxLength": 262144 }
|
|
87
325
|
},
|
|
88
|
-
"
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
},
|
|
92
|
-
"extraParamValue": {
|
|
93
|
-
"anyOf": [
|
|
94
|
-
{ "type": ["string", "number", "boolean", "null"] },
|
|
95
|
-
{ "type": "array", "items": { "$ref": "#/definitions/extraParamValue" } },
|
|
96
|
-
{
|
|
97
|
-
"type": "object",
|
|
98
|
-
"propertyNames": {
|
|
99
|
-
"not": {
|
|
100
|
-
"enum": ["authorization", "headers", "apikey", "token", "password", "secret", "cookie", "setcookie"]
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
"additionalProperties": { "$ref": "#/definitions/extraParamValue" },
|
|
104
|
-
"x-akm-recursivelyForbiddenNormalizedKeys": ["authorization", "headers", "apikey", "token", "password", "secret", "cookie", "setcookie"]
|
|
105
|
-
}
|
|
326
|
+
"oneOf": [
|
|
327
|
+
{ "required": ["ref"], "not": { "required": ["content"] } },
|
|
328
|
+
{ "required": ["content"], "not": { "required": ["ref"] } }
|
|
106
329
|
]
|
|
330
|
+
},
|
|
331
|
+
"jsonValue": {
|
|
332
|
+
"oneOf": [
|
|
333
|
+
{ "type": "string", "maxLength": 262144 },
|
|
334
|
+
{ "type": "number" },
|
|
335
|
+
{ "type": "boolean" },
|
|
336
|
+
{ "type": "null" },
|
|
337
|
+
{ "$ref": "#/definitions/jsonArray" },
|
|
338
|
+
{ "$ref": "#/definitions/jsonObject" }
|
|
339
|
+
]
|
|
340
|
+
},
|
|
341
|
+
"jsonArray": {
|
|
342
|
+
"type": "array",
|
|
343
|
+
"maxItems": 1024,
|
|
344
|
+
"items": { "$ref": "#/definitions/jsonValue" }
|
|
345
|
+
},
|
|
346
|
+
"jsonObject": {
|
|
347
|
+
"type": "object",
|
|
348
|
+
"maxProperties": 256,
|
|
349
|
+
"propertyNames": { "maxLength": 262144 },
|
|
350
|
+
"additionalProperties": { "$ref": "#/definitions/jsonValue" }
|
|
107
351
|
}
|
|
108
352
|
}
|
|
109
353
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://itlackey.github.io/akm/schemas/akm-workflow.json",
|
|
4
4
|
"title": "AKM Workflow",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "This frontmatter schema applies to and validates the Markdown (.md) workflow source: the standard AKM asset envelope plus its orchestration graph. Markdown is not the sole or only workflow source; peer GitHub-shaped .yml sources use the bounded adapter and both formats compile to source IR v1. Per-step prose instructions and gate rubrics live in the Markdown body, joined to this graph by step id. Hand-authored alongside src/workflows/program/schema.ts; see docs/reference/workflow-schema.md.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"required": ["steps"],
|
|
8
8
|
"additionalProperties": false,
|
|
@@ -90,7 +90,8 @@
|
|
|
90
90
|
"supports_json_schema": { "type": "boolean" },
|
|
91
91
|
"extra_params": { "$ref": "#/definitions/extraParams" },
|
|
92
92
|
"context_length": { "type": "integer", "minimum": 1 },
|
|
93
|
-
"enable_thinking": { "type": "boolean" }
|
|
93
|
+
"enable_thinking": { "type": "boolean" },
|
|
94
|
+
"reasoning_effort": { "type": "string", "minLength": 1 }
|
|
94
95
|
}
|
|
95
96
|
},
|
|
96
97
|
"extraParams": {
|
|
@@ -98,11 +99,11 @@
|
|
|
98
99
|
"description": "Provider-specific request fields. Top-level AKM-owned fields are forbidden; credential-shaped keys are forbidden recursively after lowercase/non-alphanumeric normalization.",
|
|
99
100
|
"propertyNames": {
|
|
100
101
|
"not": {
|
|
101
|
-
"enum": ["model", "messages", "temperature", "maxtokens", "responseformat", "stream", "streamoptions", "enablethinking", "chattemplatekwargs", "authorization", "headers", "apikey", "token", "password", "secret", "cookie", "setcookie"]
|
|
102
|
+
"enum": ["model", "messages", "temperature", "maxtokens", "responseformat", "stream", "streamoptions", "enablethinking", "reasoningeffort", "chattemplatekwargs", "authorization", "headers", "apikey", "token", "password", "secret", "cookie", "setcookie"]
|
|
102
103
|
}
|
|
103
104
|
},
|
|
104
105
|
"additionalProperties": { "$ref": "#/definitions/extraParamValue" },
|
|
105
|
-
"x-akm-protectedTopLevelNormalizedKeys": ["model", "messages", "temperature", "maxtokens", "responseformat", "stream", "streamoptions", "enablethinking", "chattemplatekwargs"],
|
|
106
|
+
"x-akm-protectedTopLevelNormalizedKeys": ["model", "messages", "temperature", "maxtokens", "responseformat", "stream", "streamoptions", "enablethinking", "reasoningeffort", "chattemplatekwargs"],
|
|
106
107
|
"x-akm-recursivelyForbiddenNormalizedKeys": ["authorization", "headers", "apikey", "token", "password", "secret", "cookie", "setcookie"]
|
|
107
108
|
},
|
|
108
109
|
"extraParamValue": {
|
|
@@ -215,7 +216,7 @@
|
|
|
215
216
|
},
|
|
216
217
|
"exec": {
|
|
217
218
|
"type": "object",
|
|
218
|
-
"description": "Run a shell command as this unit instead of dispatching to an engine. `command` is an ARGV ARRAY and there is no shell-string form: the child is spawned directly, so shell metacharacters (`;` `|` `&&` `$(…)` `>` `*`) are inert literal argument bytes — the quoting/injection class simply does not exist. Write the interpreter explicitly (e.g. [\"bash\", \"-lc\", \"a | b\"]) when a pipeline is really wanted. stdout is the promoted step artifact with trailing newlines stripped (like shell `$(…)`); when the unit declares an `output` schema, stdout must instead be exactly one JSON value, which is validated against it. A non-zero exit fails the unit with failure reason `non_zero_exit`, honoring `retry:` and `on_error:` like any other unit. The child's environment is an ALLOWLIST by default (PATH, HOME, locale/temp vars, the Windows process-creation essentials) — widen it with `
|
|
219
|
+
"description": "Run a shell command as this unit instead of dispatching to an engine. `command` is an ARGV ARRAY and there is no shell-string form: the child is spawned directly, so shell metacharacters (`;` `|` `&&` `$(…)` `>` `*`) are inert literal argument bytes — the quoting/injection class simply does not exist. Write the interpreter explicitly (e.g. [\"bash\", \"-lc\", \"a | b\"]) when a pipeline is really wanted. stdout is the promoted step artifact with trailing newlines stripped (like shell `$(…)`); when the unit declares an `output` schema, stdout must instead be exactly one JSON value, which is validated against it. A non-zero exit fails the unit with failure reason `non_zero_exit`, honoring `retry:` and `on_error:` like any other unit. The child's environment is an ALLOWLIST by default (PATH, HOME, locale/temp vars, the Windows process-creation essentials) — widen it only with named `env:` environment bindings or `pass_env`.",
|
|
219
220
|
"required": ["command"],
|
|
220
221
|
"additionalProperties": false,
|
|
221
222
|
"properties": {
|
|
@@ -247,10 +248,6 @@
|
|
|
247
248
|
"type": "string",
|
|
248
249
|
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
|
|
249
250
|
}
|
|
250
|
-
},
|
|
251
|
-
"inherit_env": {
|
|
252
|
-
"type": "boolean",
|
|
253
|
-
"description": "Give the command akm's ENTIRE environment instead of the default allowlist. Opt in only when a command genuinely needs the caller's whole environment (a wrapper script, a toolchain with many ambient variables); prefer `pass_env` or `env:` bindings, which keep what the command can see explicit in the frontmatter diff. Dispatch-significant: toggling it changes the unit's input hash."
|
|
254
251
|
}
|
|
255
252
|
}
|
|
256
253
|
},
|
|
@@ -1,75 +0,0 @@
|
|
|
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
|
-
import crypto from "node:crypto";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
import { ConfigError } from "./errors.js";
|
|
7
|
-
import { classifyPathAccess, describeInaccessiblePath } from "./path-access.js";
|
|
8
|
-
import { getConfigPath, getDataDir } from "./paths.js";
|
|
9
|
-
let afterPendingCheckHook;
|
|
10
|
-
/** TEST-ONLY: run once after a clear pending-operation check. */
|
|
11
|
-
export function _setAfterPendingOperationCheckHookForTests(hook) {
|
|
12
|
-
afterPendingCheckHook = hook;
|
|
13
|
-
}
|
|
14
|
-
function installationId() {
|
|
15
|
-
return crypto
|
|
16
|
-
.createHash("sha256")
|
|
17
|
-
.update(path.resolve(path.dirname(getConfigPath())))
|
|
18
|
-
.update("\0")
|
|
19
|
-
.update(path.resolve(getDataDir()))
|
|
20
|
-
.digest("hex")
|
|
21
|
-
.slice(0, 24);
|
|
22
|
-
}
|
|
23
|
-
export function getMigrationOperationRoot() {
|
|
24
|
-
return path.join(getDataDir(), "backups", "migrations", installationId());
|
|
25
|
-
}
|
|
26
|
-
export function getMigrationRestoreJournalPath() {
|
|
27
|
-
return path.join(getMigrationOperationRoot(), "restore-active.json");
|
|
28
|
-
}
|
|
29
|
-
export function getMigrationApplyJournalPath() {
|
|
30
|
-
return path.join(getMigrationOperationRoot(), "apply-active.json");
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Predictable path for the config `akm migrate apply` auto-generates when no
|
|
34
|
-
* `--config` is given and the active config still carries the pre-cutover
|
|
35
|
-
* `stashDir`/`sources[]`/`installed[]` shape (see `config-migrate.ts`'s
|
|
36
|
-
* `buildMigrationPlan`/`writeGeneratedTargetConfig`). Deliberately NOT the
|
|
37
|
-
* live `config.json` — the live 0.8 file must stay byte-for-byte untouched
|
|
38
|
-
* until `publishConfigLast` performs its normal atomic install, so the
|
|
39
|
-
* generated draft lives here instead, next to the apply/restore sentinels.
|
|
40
|
-
* Stable across invocations (keyed only by installation id, not a run id) so
|
|
41
|
-
* a second `migrate apply`/`migrate status` with still no `--config` finds
|
|
42
|
-
* the same file an operator may have hand-edited (e.g. to add `engines`)
|
|
43
|
-
* after the first run generated it.
|
|
44
|
-
*/
|
|
45
|
-
export function getMigrationGeneratedConfigPath() {
|
|
46
|
-
return path.join(getMigrationOperationRoot(), "generated-config.json");
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Refuse canonical config/database access while a migration or restore is
|
|
50
|
-
* mid-flight.
|
|
51
|
-
*
|
|
52
|
-
* This is a SAFETY gate, so "I could not tell" must fail the same way "yes"
|
|
53
|
-
* does. `fs.existsSync` answered `false` for an unreadable journal exactly as
|
|
54
|
-
* for an absent one (#791), which meant a permission fault on the journal
|
|
55
|
-
* silently CLEARED the gate and let akm open the canonical databases on top of
|
|
56
|
-
* a half-applied migration. Absence is the only answer that may open the door.
|
|
57
|
-
*/
|
|
58
|
-
export function assertNoPendingMigrationOperation() {
|
|
59
|
-
for (const [kind, journalPath] of [
|
|
60
|
-
["restore", getMigrationRestoreJournalPath()],
|
|
61
|
-
["migration apply", getMigrationApplyJournalPath()],
|
|
62
|
-
]) {
|
|
63
|
-
const { access, code } = classifyPathAccess(journalPath);
|
|
64
|
-
if (access === "inaccessible") {
|
|
65
|
-
throw new ConfigError(`Cannot determine whether an AKM ${kind} recovery is pending: ${describeInaccessiblePath(journalPath, code)}. ` +
|
|
66
|
-
"Refusing canonical config/database access — proceeding could write on top of a half-applied migration.", "DATA_DIR_UNREADABLE");
|
|
67
|
-
}
|
|
68
|
-
if (access === "present") {
|
|
69
|
-
throw new ConfigError(`AKM ${kind} recovery is pending at ${journalPath}; refusing canonical config/database access until recovery completes.`, "INVALID_CONFIG_FILE");
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
const hook = afterPendingCheckHook;
|
|
73
|
-
afterPendingCheckHook = undefined;
|
|
74
|
-
hook?.();
|
|
75
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
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
|
-
/**
|
|
5
|
-
* Built-in alias table. Alias keys are lowercase.
|
|
6
|
-
*
|
|
7
|
-
* Platform model string conventions:
|
|
8
|
-
* opencode — "<provider>/<model>" e.g. "opencode/claude-opus-4-7"
|
|
9
|
-
* claude — bare model name e.g. "claude-opus-4-7"
|
|
10
|
-
* (Claude Code also accepts its own built-in shorthands, but we
|
|
11
|
-
* always resolve to the full name for determinism)
|
|
12
|
-
*/
|
|
13
|
-
const BUILTIN_ALIASES = [
|
|
14
|
-
{
|
|
15
|
-
// Anthropic's Mythos-class tier above Opus — the recommended resolution
|
|
16
|
-
// target for the `deep` workflow tier (see docs/reference/workflow-schema.md).
|
|
17
|
-
alias: "fable",
|
|
18
|
-
platforms: {
|
|
19
|
-
claude: "claude-fable-5",
|
|
20
|
-
opencode: "opencode/claude-fable-5",
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
alias: "opus",
|
|
25
|
-
platforms: {
|
|
26
|
-
claude: "claude-opus-4-7",
|
|
27
|
-
opencode: "opencode/claude-opus-4-7",
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
alias: "sonnet",
|
|
32
|
-
platforms: {
|
|
33
|
-
claude: "claude-sonnet-4-6",
|
|
34
|
-
opencode: "opencode/claude-sonnet-4-6",
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
alias: "haiku",
|
|
39
|
-
platforms: {
|
|
40
|
-
claude: "claude-haiku-4-5-20251001",
|
|
41
|
-
opencode: "opencode/claude-haiku-4-5",
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
];
|
|
45
|
-
/**
|
|
46
|
-
* Resolve a model alias or exact model ID to the string the target platform
|
|
47
|
-
* CLI expects for its --model flag.
|
|
48
|
-
*
|
|
49
|
-
* @param model Raw alias ("opus") or exact model ID ("claude-opus-4-7").
|
|
50
|
-
* @param platform Builder platform name ("claude", "opencode", ...).
|
|
51
|
-
* @param custom Profile-level aliases from config.json — take priority over globals and builtins.
|
|
52
|
-
* @param global Config-root `modelAliases` tier table (alias → platform → model, `"*"` fallback).
|
|
53
|
-
* @param fallbackPlatforms Additional global tier columns checked after `platform` and before `"*"`.
|
|
54
|
-
* @returns Resolved model string, or `model` verbatim when no alias matches.
|
|
55
|
-
*/
|
|
56
|
-
export function resolveModel(model, platform, custom, global, fallbackPlatforms = []) {
|
|
57
|
-
const key = model.toLowerCase();
|
|
58
|
-
if (custom?.[key])
|
|
59
|
-
return custom[key];
|
|
60
|
-
const tier = global?.[key];
|
|
61
|
-
const fromGlobal = tier?.[platform] ?? fallbackPlatforms.map((fallback) => tier?.[fallback]).find(Boolean) ?? tier?.["*"];
|
|
62
|
-
if (fromGlobal)
|
|
63
|
-
return fromGlobal;
|
|
64
|
-
const entry = BUILTIN_ALIASES.find((a) => a.alias === key);
|
|
65
|
-
return entry?.platforms[platform] ?? model;
|
|
66
|
-
}
|
|
67
|
-
/** Resolve a direct/fallback LLM model through engine-specific, `llm`, then `*` tiers. */
|
|
68
|
-
export function resolveLlmModel(model, engine, global) {
|
|
69
|
-
return resolveModel(model, engine, undefined, global, ["llm"]);
|
|
70
|
-
}
|
|
71
|
-
/** Return all built-in alias entries (for tests and documentation). */
|
|
72
|
-
export function listBuiltinModelAliases() {
|
|
73
|
-
return BUILTIN_ALIASES;
|
|
74
|
-
}
|