@aiwg/cli 2026.10.10 → 2026.10.12
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/agentic/code/providers/model-capabilities.v1.json +78 -14
- package/agentic/code/providers/model-catalog.v1.json +62 -12
- package/dist/src/artifacts/binding-target-identity.js +51 -0
- package/dist/src/artifacts/checksum-manifest.js +12 -0
- package/dist/src/artifacts/index-builder.js +11 -13
- package/dist/src/artifacts/query-engine.js +5 -11
- package/dist/src/cli/handlers/doctor-help.js +32 -0
- package/dist/src/cli/handlers/gates.js +19 -18
- package/dist/src/cli/handlers/models-help.js +7 -1
- package/dist/src/cli/handlers/models.js +3 -3
- package/dist/src/cli/handlers/script-runner.js +8 -5
- package/dist/src/cli/handlers/sessions-intake.js +104 -0
- package/dist/src/cli/handlers/sessions-tail.js +172 -0
- package/dist/src/cli/handlers/sessions.js +287 -31
- package/dist/src/cli/handlers/skill-lint.js +10 -3
- package/dist/src/cli/handlers/steward-format.js +100 -0
- package/dist/src/cli/handlers/steward-models.js +167 -0
- package/dist/src/cli/handlers/steward.js +14 -248
- package/dist/src/cli/handlers/use-bundle-counts.js +61 -0
- package/dist/src/cli/handlers/use.js +18 -28
- package/dist/src/cli/handlers/utilities.js +1 -24
- package/dist/src/config/aiwg-config.js +7 -0
- package/dist/src/config/authorization-cli.js +89 -0
- package/dist/src/config/cli-help.js +1 -0
- package/dist/src/config/cli.js +10 -1
- package/dist/src/config/worker-context.js +337 -0
- package/dist/src/decision/context-pruning.js +3 -2
- package/dist/src/decision/ensemble/contract.js +15 -4
- package/dist/src/decision/ensemble-study/artifacts.js +5 -0
- package/dist/src/decision/ensemble-study/score.js +4 -3
- package/dist/src/decision/feature-export.js +3 -9
- package/dist/src/decision/heldout/collector.js +2 -2
- package/dist/src/decision/issue-triage/runtime.js +3 -9
- package/dist/src/decision/qualification/gates.js +2 -1
- package/dist/src/decision/qualification/release.js +2 -3
- package/dist/src/decision/routing/report.js +2 -0
- package/dist/src/decision/sdlc-screening.js +3 -5
- package/dist/src/decision/sensitivity/comparative.js +5 -3
- package/dist/src/gates/driver.js +6 -77
- package/dist/src/gates/evaluate.js +4 -11
- package/dist/src/gates/floors.js +4 -4
- package/dist/src/gates/index.js +3 -3
- package/dist/src/gates/lattice.js +26 -0
- package/dist/src/gates/registry.js +2 -1
- package/dist/src/gates/report.js +19 -7
- package/dist/src/issues/audit-cli.js +120 -0
- package/dist/src/issues/audit-contract.js +64 -0
- package/dist/src/issues/audit-local.js +82 -0
- package/dist/src/issues/audit.js +220 -0
- package/dist/src/lint/rule-activation.js +15 -1
- package/dist/src/mcp/tools/worker-invoke.mjs +108 -10
- package/dist/src/mission-protocol/canonical-codecs.js +270 -0
- package/dist/src/mission-protocol/codecs.js +22 -550
- package/dist/src/mission-protocol/health-trace-codecs.js +281 -0
- package/dist/src/mission-protocol/health-trace-types.js +43 -0
- package/dist/src/mission-protocol/types.js +2 -42
- package/dist/src/mission-protocol/worker-contract-json.js +10 -0
- package/dist/src/mission-protocol/worker-review-gate.js +100 -0
- package/dist/src/mission-protocol/worker-review-types.js +2 -0
- package/dist/src/models/catalog-policy.js +280 -0
- package/dist/src/models/index.js +1 -1
- package/dist/src/models/model-capabilities.v1.json +78 -14
- package/dist/src/models/model-catalog.v1.json +62 -12
- package/dist/src/models/policy-resources.js +28 -0
- package/dist/src/models/provider-policy.js +10 -539
- package/dist/src/models/resolver.js +26 -8
- package/dist/src/models/router.js +15 -2
- package/dist/src/models/tiers.js +13 -0
- package/dist/src/models/types.js +0 -6
- package/dist/src/models/worker-ceilings.js +59 -0
- package/dist/src/models/worker-invocation-policy.js +243 -0
- package/dist/src/models/worker-plan.js +16 -20
- package/dist/src/models/worker-review-lineage.js +55 -0
- package/dist/src/models/worker-selection-policy.js +1 -1
- package/dist/src/models/wrapper-route.js +6 -3
- package/dist/src/policy/authorization.js +30 -1
- package/dist/src/policy/hitl-config.js +63 -0
- package/dist/src/policy/hitl-receipt.js +57 -0
- package/dist/src/policy/hitl-types.js +4 -0
- package/dist/src/policy/hitl-validation.js +39 -0
- package/dist/src/policy/hitl.js +117 -0
- package/dist/src/process/aiwg-probe-command.d.mts +15 -0
- package/dist/src/process/aiwg-probe-command.mjs +37 -0
- package/dist/src/rules/activation.d.mts +1 -1
- package/dist/src/rules/activation.mjs +0 -2
- package/dist/src/rules/gate-coverage.js +51 -0
- package/dist/src/rules/gate-references.js +16 -0
- package/dist/src/rules/rule-frontmatter.schema.json +7 -1
- package/dist/src/serve/worker-command-request.js +21 -4
- package/dist/src/serve/worker-invocation-preparation.js +3 -1
- package/dist/src/serve/worker-invocation.js +21 -10
- package/dist/src/sessions/adapters/deepseek-harness.js +1 -0
- package/dist/src/sessions/adapters/grok-build-native.js +269 -0
- package/dist/src/sessions/adapters/grok-build.js +57 -15
- package/dist/src/sessions/adapters/grokbot.js +7 -0
- package/dist/src/sessions/adapters/hermes-state-db.js +252 -0
- package/dist/src/sessions/adapters/hermes.js +42 -3
- package/dist/src/sessions/adapters/warp.js +1 -1
- package/dist/src/sessions/batch-import.js +44 -6
- package/dist/src/sessions/contracts.js +20 -1
- package/dist/src/sessions/coverage-preflight.js +7 -1
- package/dist/src/sessions/discovery-capability.js +38 -0
- package/dist/src/sessions/fortemi-export-mapping.js +33 -3
- package/dist/src/sessions/host-catalog.js +157 -0
- package/dist/src/sessions/image-blobs.js +141 -0
- package/dist/src/sessions/importer.js +9 -232
- package/dist/src/sessions/index.js +6 -0
- package/dist/src/sessions/intake-dir.js +71 -0
- package/dist/src/sessions/normalization.js +251 -0
- package/dist/src/sessions/refresh.js +25 -2
- package/dist/src/sessions/repository.js +164 -22
- package/dist/src/sessions/tail.js +91 -0
- package/dist/src/sessions/workspace-discovery.js +88 -9
- package/dist/src/skills/agent-skill-sidecar.js +28 -0
- package/dist/src/skills/agent-skills.js +4 -23
- package/dist/src/skills/claude-surface-projection.js +25 -0
- package/dist/src/skills/deployer.js +8 -288
- package/dist/src/skills/deployment-policy.js +114 -0
- package/dist/src/skills/deployment-projection.js +152 -0
- package/dist/src/skills/deployment-types.js +20 -0
- package/dist/src/skills/exporter.js +8 -31
- package/dist/src/skills/provider-extensions.js +41 -0
- package/dist/src/skills/run.js +6 -0
- package/dist/src/skills/types.js +0 -8
- package/dist/src/skills/validator-resources.js +68 -0
- package/dist/src/skills/validator.js +6 -55
- package/dist/src/storage/cli-migrate-options.js +125 -0
- package/dist/src/storage/cli-migrate.js +111 -0
- package/dist/src/storage/cli.js +4 -279
- package/dist/src/storage/migration-adapter.js +79 -0
- package/dist/src/storage/migration-copy.js +108 -0
- package/dist/src/storage/migration-protocol.js +14 -197
- package/dist/src/storage/migration-records.js +186 -0
- package/dist/src/storage/migration-types.js +12 -0
- package/dist/src/tracker/forge-http.js +2 -1
- package/dist/src/tracker/issue-pages.js +110 -0
- package/package.json +7 -1
- package/schemas/mission-v1.schema.json +335 -0
- package/schemas/models/model-catalog.v1.schema.json +19 -1
- package/schemas/models/model-config-compatibility.v1.schema.json +3 -2
- package/schemas/models/model-policy.v1.schema.json +1 -1
- package/tools/agents/providers/provider-paths-staging.mjs +35 -0
- package/tools/agents/providers/rule-binding-targets.mjs +146 -0
- package/tools/agents/providers/rule-delivery.mjs +7 -126
- package/tools/ralph-external/lib/muse-adapter.mjs +10 -0
- package/tools/ralph-external/lib/worker-context.mjs +237 -0
- package/tools/ralph-external/lib/worker-invocation-ancestry.mjs +132 -0
- package/tools/ralph-external/lib/worker-invocation-processes.mjs +123 -0
- package/tools/ralph-external/lib/worker-isolation-status.mjs +48 -0
- package/tools/ralph-external/lib/worker-isolation.mjs +17 -29
- package/tools/ralph-external/lib/worker-launch-cli.mjs +3 -1
- package/tools/ralph-external/lib/worker-overflow.mjs +48 -13
- package/tools/ralph-external/lib/worker-retry-evidence.mjs +103 -0
- package/tools/ralph-external/lib/worker-termination.mjs +82 -0
- package/tools/ralph-external/session-launcher.mjs +51 -96
- package/vscode-extension/schemas/aiwg.config.v1.json +177 -0
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
"verifiedAt": "2026-07-20",
|
|
5
5
|
"providers": {
|
|
6
6
|
"antigravity": {
|
|
7
|
+
"sessionEnvAllowlist": [
|
|
8
|
+
"GEMINI_API_KEY"
|
|
9
|
+
],
|
|
7
10
|
"agent": "native",
|
|
8
11
|
"skill": "native",
|
|
9
12
|
"globalChild": "inherited",
|
|
@@ -19,7 +22,7 @@
|
|
|
19
22
|
"invalidPinFallback": "Provider validation/error; never assume fallback",
|
|
20
23
|
"configTarget": "agy launch arguments; custom-agent model tiers are not projected from generic AIWG model ids",
|
|
21
24
|
"artifactFormat": "YAML frontmatter plus Markdown; runtime --model and --effort flags",
|
|
22
|
-
"verification": "Pinned offline contract (--help/--version only); authenticated model selection was not executed",
|
|
25
|
+
"verification": "Pinned offline contract (--help/--version only); authenticated model selection was not executed. Session credential evidence: $AIWG_ROOT/docs/cli/sensitive-values.md#provider-recipient-exceptions (#3624).",
|
|
23
26
|
"sourceUrl": "https://antigravity.google/docs/cli/subagents/",
|
|
24
27
|
"verifiedAt": "2026-09-04",
|
|
25
28
|
"workerHealthAdapter": {
|
|
@@ -154,7 +157,7 @@
|
|
|
154
157
|
"Native MCP/client, MSP/ACP, gateway and conversation capabilities do not establish worker authority.",
|
|
155
158
|
"--dangerously-skip-permissions and --remote-control are never part of the direct profile; neither was ever shipped as a new argv-prompt path.",
|
|
156
159
|
"A soft-denied tool permission request (exit 0, stderr notice naming the allow-rule needed) is NOT the same as success; its exact stderr wording is not evidenced from help or changelog, so this is an open, honestly-marked detection gap rather than an invented check (tools/ralph-external/lib/antigravity-adapter.mjs ANTIGRAVITY_SOFT_DENY_RISK_NOTE).",
|
|
157
|
-
"GEMINI_API_KEY
|
|
160
|
+
"GEMINI_API_KEY is documented at https://antigravity.google/docs/install/ (reviewed 2026-10-26): settings.json must also set modelProvider to gemini; the key alone has no effect. Earlier 1.3.3 probes only exercised missing account login. This documentation confirms the credential name, not authenticated execution or qualification of this version-bound worker profile.",
|
|
158
161
|
"The 1.3.3 --effort enum (low|medium|high|xhigh|max) supersedes the stale 1.1.26-pinned three-value set in tools/providers/antigravity-transport.mjs (a separate, unedited legacy transport used by the MCP/doctor bridge, not this direct-shell profile).",
|
|
159
162
|
"Flag validation happens BEFORE auth: live probe F, `agy --print=x --input-format bogus --output-format stream-json`, returned \"Error: unknown --input-format \\\"bogus\\\" (want text or stream-json)\" without reaching the auth stop, confirming --input-format is validated against exactly {text, stream-json} independent of login state.",
|
|
160
163
|
"The brief reaches agy through adapter-frame: the installed buildWorkerStdinFrame hook supplies exactly one NDJSON user message and EOF. The stdin control stays unqualified pending one authenticated smoke run."
|
|
@@ -865,6 +868,9 @@
|
|
|
865
868
|
}
|
|
866
869
|
},
|
|
867
870
|
"cursor": {
|
|
871
|
+
"sessionEnvAllowlist": [
|
|
872
|
+
"CURSOR_API_KEY"
|
|
873
|
+
],
|
|
868
874
|
"agent": "native",
|
|
869
875
|
"skill": "unsupported",
|
|
870
876
|
"globalChild": "inherited",
|
|
@@ -873,7 +879,7 @@
|
|
|
873
879
|
"invalidPinFallback": "Plan/admin fallback may apply; record observed result",
|
|
874
880
|
"configTarget": ".cursor/agents/*.md",
|
|
875
881
|
"artifactFormat": "YAML frontmatter plus Markdown",
|
|
876
|
-
"verification": "Schema fixture and entitled Cursor invocation",
|
|
882
|
+
"verification": "Schema fixture and entitled Cursor invocation. Session credential evidence: $AIWG_ROOT/docs/cli/sensitive-values.md#provider-recipient-exceptions (#3624).",
|
|
877
883
|
"sourceUrl": "https://cursor.com/docs/subagents",
|
|
878
884
|
"verifiedAt": "2026-07-20",
|
|
879
885
|
"workerHealthAdapter": {
|
|
@@ -1465,6 +1471,9 @@
|
|
|
1465
1471
|
}
|
|
1466
1472
|
},
|
|
1467
1473
|
"warp": {
|
|
1474
|
+
"sessionEnvAllowlist": [
|
|
1475
|
+
"WARP_API_KEY"
|
|
1476
|
+
],
|
|
1468
1477
|
"agent": "global-only",
|
|
1469
1478
|
"skill": "unsupported",
|
|
1470
1479
|
"globalChild": "native",
|
|
@@ -1473,7 +1482,7 @@
|
|
|
1473
1482
|
"invalidPinFallback": "Profile availability dependent",
|
|
1474
1483
|
"configTarget": "Warp agent profile or run configuration",
|
|
1475
1484
|
"artifactFormat": "Saved profile / run control plane",
|
|
1476
|
-
"verification": "Inspect active profile and run metadata",
|
|
1485
|
+
"verification": "Inspect active profile and run metadata. Session credential evidence: $AIWG_ROOT/docs/cli/sensitive-values.md#provider-recipient-exceptions (#3624).",
|
|
1477
1486
|
"sourceUrl": "https://docs.warp.dev/agent-platform/capabilities/agent-profiles-permissions",
|
|
1478
1487
|
"verifiedAt": "2026-07-20",
|
|
1479
1488
|
"workerHealthAdapter": {
|
|
@@ -2284,6 +2293,7 @@
|
|
|
2284
2293
|
}
|
|
2285
2294
|
},
|
|
2286
2295
|
"windsurf": {
|
|
2296
|
+
"sessionEnvAllowlist": [],
|
|
2287
2297
|
"agent": "unsupported",
|
|
2288
2298
|
"skill": "unsupported",
|
|
2289
2299
|
"globalChild": "inherited",
|
|
@@ -2292,7 +2302,7 @@
|
|
|
2292
2302
|
"invalidPinFallback": "No portable custom-child selector",
|
|
2293
2303
|
"configTarget": "No supported portable artifact field",
|
|
2294
2304
|
"artifactFormat": "Informational policy only",
|
|
2295
|
-
"verification": "Assert unsupported fields are omitted",
|
|
2305
|
+
"verification": "Assert unsupported fields are omitted. Session environment is explicitly empty: desktop/cloud login owns authentication; no CLI credential variable is evidenced. Coverage-only: no worker execution or qualified worker adapter. See $AIWG_ROOT/docs/cli/sensitive-values.md#provider-recipient-exceptions (#3624).",
|
|
2296
2306
|
"sourceUrl": "https://docs.devin.ai/desktop/cascade/skills",
|
|
2297
2307
|
"verifiedAt": "2026-07-20",
|
|
2298
2308
|
"workerHealthCoverage": {
|
|
@@ -2312,6 +2322,22 @@
|
|
|
2312
2322
|
}
|
|
2313
2323
|
},
|
|
2314
2324
|
"openclaw": {
|
|
2325
|
+
"sessionEnvAllowlist": [
|
|
2326
|
+
"OPENAI_API_KEY",
|
|
2327
|
+
"ANTHROPIC_API_KEY",
|
|
2328
|
+
"ANTHROPIC_OAUTH_TOKEN",
|
|
2329
|
+
"GEMINI_API_KEY",
|
|
2330
|
+
"GOOGLE_API_KEY",
|
|
2331
|
+
"OPENROUTER_API_KEY",
|
|
2332
|
+
"MISTRAL_API_KEY",
|
|
2333
|
+
"XAI_API_KEY",
|
|
2334
|
+
"OPENCLAW_HOME",
|
|
2335
|
+
"OPENCLAW_STATE_DIR",
|
|
2336
|
+
"OPENCLAW_CONFIG_PATH",
|
|
2337
|
+
"OPENCLAW_GATEWAY_URL",
|
|
2338
|
+
"OPENCLAW_GATEWAY_TOKEN",
|
|
2339
|
+
"OPENCLAW_GATEWAY_PASSWORD"
|
|
2340
|
+
],
|
|
2315
2341
|
"agent": "native",
|
|
2316
2342
|
"skill": "unsupported",
|
|
2317
2343
|
"globalChild": "native",
|
|
@@ -2320,7 +2346,7 @@
|
|
|
2320
2346
|
"invalidPinFallback": "Provider/account fallback must be observed",
|
|
2321
2347
|
"configTarget": "OpenClaw subagent configuration",
|
|
2322
2348
|
"artifactFormat": "JSON/JSONC runtime configuration",
|
|
2323
|
-
"verification": "Inspect resolved subagent metadata",
|
|
2349
|
+
"verification": "Inspect resolved subagent metadata. Session credential evidence: $AIWG_ROOT/docs/cli/sensitive-values.md#provider-recipient-exceptions (#3624).",
|
|
2324
2350
|
"sourceUrl": "https://docs.openclaw.ai/tools/subagents",
|
|
2325
2351
|
"verifiedAt": "2026-07-20",
|
|
2326
2352
|
"workerHealthAdapter": {
|
|
@@ -2508,6 +2534,7 @@
|
|
|
2508
2534
|
}
|
|
2509
2535
|
},
|
|
2510
2536
|
"grokbot": {
|
|
2537
|
+
"sessionEnvAllowlist": [],
|
|
2511
2538
|
"agent": "unsupported",
|
|
2512
2539
|
"skill": "unsupported",
|
|
2513
2540
|
"globalChild": "informational",
|
|
@@ -2516,7 +2543,7 @@
|
|
|
2516
2543
|
"invalidPinFallback": "Report unsupported; do not fabricate xAI/Grok model pins as native",
|
|
2517
2544
|
"configTarget": "Grok Bot has no verified AIWG-owned model config path",
|
|
2518
2545
|
"artifactFormat": "Informational only",
|
|
2519
|
-
"verification": "Confirm steward models --route --provider grokbot emits unsupported/informational",
|
|
2546
|
+
"verification": "Confirm steward models --route --provider grokbot emits unsupported/informational. Session environment is explicitly empty: desktop/cloud login owns authentication; no CLI credential variable is evidenced. Coverage-only: no worker execution or qualified worker adapter. See $AIWG_ROOT/docs/cli/sensitive-values.md#provider-recipient-exceptions (#3624).",
|
|
2520
2547
|
"sourceUrl": "https://github.com/jmagly/aiwg/blob/main/docs/architecture/adr-grokbot-provider-target.md",
|
|
2521
2548
|
"verifiedAt": "2026-09-15",
|
|
2522
2549
|
"workerHealthCoverage": {
|
|
@@ -2536,6 +2563,10 @@
|
|
|
2536
2563
|
}
|
|
2537
2564
|
},
|
|
2538
2565
|
"grok-build": {
|
|
2566
|
+
"sessionEnvAllowlist": [
|
|
2567
|
+
"XAI_API_KEY",
|
|
2568
|
+
"GROK_HOME"
|
|
2569
|
+
],
|
|
2539
2570
|
"agent": "inherited",
|
|
2540
2571
|
"skill": "inherited",
|
|
2541
2572
|
"globalChild": "native",
|
|
@@ -2544,7 +2575,7 @@
|
|
|
2544
2575
|
"invalidPinFallback": "Report the unavailable alias; use the sole discovered model only when exactly one is available",
|
|
2545
2576
|
"configTarget": "$GROK_HOME/config.toml [models] and [model.<alias>] (read-only discovery)",
|
|
2546
2577
|
"artifactFormat": "Grok Build model alias",
|
|
2547
|
-
"verification": "grok inspect --json plus bounded parsing of model fields from reported config layers",
|
|
2578
|
+
"verification": "grok inspect --json plus bounded parsing of model fields from reported config layers. Session credential evidence: $AIWG_ROOT/docs/cli/sensitive-values.md#provider-recipient-exceptions (#3624).",
|
|
2548
2579
|
"sourceUrl": "https://docs.x.ai/build/settings",
|
|
2549
2580
|
"verifiedAt": "2026-09-21",
|
|
2550
2581
|
"workerHealthAdapter": {
|
|
@@ -2736,6 +2767,25 @@
|
|
|
2736
2767
|
}
|
|
2737
2768
|
},
|
|
2738
2769
|
"hermes": {
|
|
2770
|
+
"sessionEnvAllowlist": [
|
|
2771
|
+
"OPENAI_API_KEY",
|
|
2772
|
+
"ANTHROPIC_API_KEY",
|
|
2773
|
+
"ANTHROPIC_TOKEN",
|
|
2774
|
+
"CLAUDE_CODE_OAUTH_TOKEN",
|
|
2775
|
+
"GEMINI_API_KEY",
|
|
2776
|
+
"GOOGLE_API_KEY",
|
|
2777
|
+
"OPENROUTER_API_KEY",
|
|
2778
|
+
"GROQ_API_KEY",
|
|
2779
|
+
"MISTRAL_API_KEY",
|
|
2780
|
+
"XAI_API_KEY",
|
|
2781
|
+
"DEEPSEEK_API_KEY",
|
|
2782
|
+
"OPENAI_BASE_URL",
|
|
2783
|
+
"ANTHROPIC_BASE_URL",
|
|
2784
|
+
"OPENROUTER_BASE_URL",
|
|
2785
|
+
"CUSTOM_BASE_URL",
|
|
2786
|
+
"HERMES_HOME",
|
|
2787
|
+
"HERMES_INFERENCE_PROVIDER"
|
|
2788
|
+
],
|
|
2739
2789
|
"agent": "global-only",
|
|
2740
2790
|
"skill": "unsupported",
|
|
2741
2791
|
"globalChild": "native",
|
|
@@ -2744,7 +2794,7 @@
|
|
|
2744
2794
|
"invalidPinFallback": "Provider resolution is global; report actual model",
|
|
2745
2795
|
"configTarget": "Hermes delegation configuration",
|
|
2746
2796
|
"artifactFormat": "Global CLI/config setting",
|
|
2747
|
-
"verification": "Inspect Hermes delegation configuration",
|
|
2797
|
+
"verification": "Inspect Hermes delegation configuration. Session credential evidence: $AIWG_ROOT/docs/cli/sensitive-values.md#provider-recipient-exceptions (#3624).",
|
|
2748
2798
|
"sourceUrl": "https://hermes-agent.nousresearch.com/docs/user-guide/features/delegation",
|
|
2749
2799
|
"verifiedAt": "2026-07-20",
|
|
2750
2800
|
"workerHealthAdapter": {
|
|
@@ -2927,6 +2977,19 @@
|
|
|
2927
2977
|
}
|
|
2928
2978
|
},
|
|
2929
2979
|
"openhuman": {
|
|
2980
|
+
"sessionEnvAllowlist": [
|
|
2981
|
+
"OPENHUMAN_CORE_TOKEN",
|
|
2982
|
+
"OPENHUMAN_CORE_RPC_URL",
|
|
2983
|
+
"OPENHUMAN_CORE_HOST",
|
|
2984
|
+
"OPENHUMAN_CORE_PORT",
|
|
2985
|
+
"OPENHUMAN_WORKSPACE",
|
|
2986
|
+
"OPENHUMAN_DOTENV_PATH",
|
|
2987
|
+
"OPENHUMAN_KEYRING_MASTER_KEY",
|
|
2988
|
+
"OPENHUMAN_KEYRING_MASTER_KEY_FILE",
|
|
2989
|
+
"OPENHUMAN_APP_ENV",
|
|
2990
|
+
"BACKEND_URL",
|
|
2991
|
+
"OPENHUMAN_MODEL"
|
|
2992
|
+
],
|
|
2930
2993
|
"agent": "compiled",
|
|
2931
2994
|
"skill": "unsupported",
|
|
2932
2995
|
"globalChild": "inherited",
|
|
@@ -2935,7 +2998,7 @@
|
|
|
2935
2998
|
"invalidPinFallback": "Exact pins validate; semantic hints route dynamically",
|
|
2936
2999
|
"configTarget": "OpenHuman agent TOML",
|
|
2937
3000
|
"artifactFormat": "Standalone TOML agent definition",
|
|
2938
|
-
"verification": "Parse against OpenHuman definition schema",
|
|
3001
|
+
"verification": "Parse against OpenHuman definition schema. Session credential evidence: $AIWG_ROOT/docs/cli/sensitive-values.md#provider-recipient-exceptions (#3624).",
|
|
2939
3002
|
"sourceUrl": "https://github.com/tinyhumansai/openhuman/blob/main/src/openhuman/agent/harness/definition.rs",
|
|
2940
3003
|
"verifiedAt": "2026-07-20",
|
|
2941
3004
|
"workerHealthAdapter": {
|
|
@@ -3154,6 +3217,7 @@
|
|
|
3154
3217
|
"${effort}",
|
|
3155
3218
|
"--workspace",
|
|
3156
3219
|
"${workspace}",
|
|
3220
|
+
"--trust-workspace",
|
|
3157
3221
|
"--approval-mode",
|
|
3158
3222
|
"never",
|
|
3159
3223
|
"--approval-judge",
|
|
@@ -3246,8 +3310,8 @@
|
|
|
3246
3310
|
},
|
|
3247
3311
|
"trust": {
|
|
3248
3312
|
"support": "unqualified",
|
|
3249
|
-
"mapping": "[]",
|
|
3250
|
-
"evidence": "Installed muse exec --help (Muse Code 1.4.12, 2026-10-23); bounded renderer checked on operator qualification; no backend attestation."
|
|
3313
|
+
"mapping": "[\"--trust-workspace\"]",
|
|
3314
|
+
"evidence": "Installed muse exec --help (Muse Code 1.4.12, 2026-10-23); bounded renderer checked on operator qualification; no backend attestation. Tier 0 workspaces are conductor-prepared worker trees the conductor owns, so the profile binds --trust-workspace by default (#3685: untrusted Muse loads project_sources=0 with user skills only and empty hook admission; trusted loads project_sources=1, project skills and hooks)."
|
|
3251
3315
|
},
|
|
3252
3316
|
"children": {
|
|
3253
3317
|
"support": "unqualified",
|
|
@@ -3268,13 +3332,13 @@
|
|
|
3268
3332
|
"Live qualification is an open S1 blocker; installed help and synthetic/echo mechanics are not paid inference qualification.",
|
|
3269
3333
|
"Configured-model events provide runtime-configured identity only, never backend attestation.",
|
|
3270
3334
|
"Contributor data policy is explicit; shared policy denies contributor models and never silently selects the CLI default.",
|
|
3271
|
-
"Workspace trust
|
|
3335
|
+
"Workspace trust is bound on for conductor-prepared worker trees (the conductor owns the worktree), so project rules/skills/hooks load; only a host-qualified trust mapping may change it. Approval-mode never and approval-judge off retain the sandbox. Muse requires a qualified external boundary.",
|
|
3272
3336
|
"Host qualification must bind an absolute output-schema mapping and include that schema in runtimeFiles.",
|
|
3273
3337
|
"Muse JSONL strict normalization needs the shared strict-parser hook; the MCP bridge must consume the selected provider parser. MSP is not MCP.",
|
|
3274
3338
|
"Semantic step/tool completion grammar and native session-log layout remain unavailable; unrelated logs, deltas and CPU cannot establish progress.",
|
|
3275
3339
|
"Shared version gate: installation requires the raw trimmed banner Muse Code 1.4.4 (1.4.4-R5419.1), but semver selection requires 1.4.4-R5419.1. No normalization exists; keep unqualified until the shared owner binds raw and normalized versions.",
|
|
3276
3340
|
"Operator qualification approves the installed direct renderer, not authenticated inference or backend model identity.",
|
|
3277
|
-
"Workspace trust
|
|
3341
|
+
"Workspace trust is on for conductor-prepared worker trees. Only never approval is supported. Explicit unsupported controls block dispatch.",
|
|
3278
3342
|
"Self-delegation must be explicitly allowed by policy; no native child-denial flag is assumed."
|
|
3279
3343
|
],
|
|
3280
3344
|
"health": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "../../../schemas/models/model-catalog.v1.schema.json",
|
|
3
3
|
"version": "1.0.0",
|
|
4
|
-
"refreshedAt": "2026-
|
|
4
|
+
"refreshedAt": "2026-10-27",
|
|
5
5
|
"staleAfterDays": 90,
|
|
6
6
|
"providers": {
|
|
7
7
|
"antigravity": {
|
|
@@ -28,44 +28,94 @@
|
|
|
28
28
|
"claude": {
|
|
29
29
|
"roles": {
|
|
30
30
|
"reasoning": {
|
|
31
|
-
"id": "claude-opus-5",
|
|
31
|
+
"id": "claude-opus-5-5",
|
|
32
32
|
"status": "active",
|
|
33
|
-
"observed":
|
|
33
|
+
"observed": true
|
|
34
34
|
},
|
|
35
35
|
"coding": {
|
|
36
|
-
"id": "claude-sonnet-5",
|
|
36
|
+
"id": "claude-sonnet-5-5",
|
|
37
37
|
"status": "active",
|
|
38
|
-
"observed":
|
|
38
|
+
"observed": true
|
|
39
39
|
},
|
|
40
40
|
"efficiency": {
|
|
41
|
-
"id": "claude-haiku-
|
|
41
|
+
"id": "claude-haiku-5-5",
|
|
42
42
|
"status": "active",
|
|
43
|
-
"observed":
|
|
43
|
+
"observed": true
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview",
|
|
47
|
-
"verifiedAt": "2026-
|
|
47
|
+
"verifiedAt": "2026-10-27",
|
|
48
|
+
"tiers": {
|
|
49
|
+
"flagship": {
|
|
50
|
+
"id": "claude-fable-5-1",
|
|
51
|
+
"status": "active",
|
|
52
|
+
"observed": true,
|
|
53
|
+
"selection": "user-elected"
|
|
54
|
+
},
|
|
55
|
+
"premium": {
|
|
56
|
+
"id": "claude-opus-5-5",
|
|
57
|
+
"status": "active",
|
|
58
|
+
"observed": true
|
|
59
|
+
},
|
|
60
|
+
"standard": {
|
|
61
|
+
"id": "claude-sonnet-5-5",
|
|
62
|
+
"status": "active",
|
|
63
|
+
"observed": true
|
|
64
|
+
},
|
|
65
|
+
"economy": {
|
|
66
|
+
"id": "claude-haiku-5-5",
|
|
67
|
+
"status": "active",
|
|
68
|
+
"observed": true
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"verified_at": "2026-10-27",
|
|
72
|
+
"evidence": "Conductor-verified Claude Code harness current model list, 2026-10-27."
|
|
48
73
|
},
|
|
49
74
|
"codex": {
|
|
50
75
|
"roles": {
|
|
51
76
|
"reasoning": {
|
|
52
|
-
"id": "gpt-
|
|
77
|
+
"id": "gpt-6.1-sol",
|
|
53
78
|
"status": "active",
|
|
54
79
|
"observed": true
|
|
55
80
|
},
|
|
56
81
|
"coding": {
|
|
57
|
-
"id": "gpt-
|
|
82
|
+
"id": "gpt-6.1-terra",
|
|
58
83
|
"status": "active",
|
|
59
84
|
"observed": true
|
|
60
85
|
},
|
|
61
86
|
"efficiency": {
|
|
62
|
-
"id": "gpt-
|
|
87
|
+
"id": "gpt-6-luna",
|
|
63
88
|
"status": "active",
|
|
64
89
|
"observed": true
|
|
65
90
|
}
|
|
66
91
|
},
|
|
67
92
|
"sourceUrl": "https://learn.chatgpt.com/docs/models",
|
|
68
|
-
"verifiedAt": "2026-
|
|
93
|
+
"verifiedAt": "2026-10-27",
|
|
94
|
+
"tiers": {
|
|
95
|
+
"flagship": {
|
|
96
|
+
"id": "gpt-6-astra",
|
|
97
|
+
"status": "active",
|
|
98
|
+
"observed": true,
|
|
99
|
+
"selection": "user-elected"
|
|
100
|
+
},
|
|
101
|
+
"premium": {
|
|
102
|
+
"id": "gpt-6.1-sol",
|
|
103
|
+
"status": "active",
|
|
104
|
+
"observed": true
|
|
105
|
+
},
|
|
106
|
+
"standard": {
|
|
107
|
+
"id": "gpt-6.1-terra",
|
|
108
|
+
"status": "active",
|
|
109
|
+
"observed": true
|
|
110
|
+
},
|
|
111
|
+
"economy": {
|
|
112
|
+
"id": "gpt-6-luna",
|
|
113
|
+
"status": "active",
|
|
114
|
+
"observed": true
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"verified_at": "2026-10-27",
|
|
118
|
+
"evidence": "Conductor-verified Codex CLI local model cache on titan (codex-cli 0.165.0), plus ~/.cache/aiwg/model-catalog.v1.json, 2026-10-27; no network verification by this worker."
|
|
69
119
|
},
|
|
70
120
|
"copilot": {
|
|
71
121
|
"roles": {
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Resolve source aliases and bundle ownership before rule-target precedence. */
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
function realpath(file) {
|
|
5
|
+
try {
|
|
6
|
+
return fs.realpathSync(file);
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return path.resolve(file);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function sourcePath(file, options) {
|
|
13
|
+
const normalized = file.replace(/\\/g, '/');
|
|
14
|
+
const anchor = normalized.startsWith('agentic/code/') ? options.packageRoot : options.cwd;
|
|
15
|
+
return path.resolve(anchor ?? process.cwd(), normalized);
|
|
16
|
+
}
|
|
17
|
+
function identity(file, options) {
|
|
18
|
+
const absolute = sourcePath(file, options);
|
|
19
|
+
// Realpath handles symlinks; the supplied mapping handles materialized copies.
|
|
20
|
+
return realpath(options.logicalPath?.(realpath(absolute)) ?? absolute);
|
|
21
|
+
}
|
|
22
|
+
function inside(root, file) {
|
|
23
|
+
const relative = path.relative(root, file);
|
|
24
|
+
return relative === '' || (!path.isAbsolute(relative) && relative !== '..' && !relative.startsWith(`..${path.sep}`));
|
|
25
|
+
}
|
|
26
|
+
export function selectBindingTargetIdentities(entries, options = {}) {
|
|
27
|
+
const bundle = options.bundleRoot && identity(options.bundleRoot, options);
|
|
28
|
+
const snapshot = options.bundleRoot && sourcePath(options.bundleRoot, options);
|
|
29
|
+
const preferred = bundle && snapshot ? entries.filter(entry => inside(snapshot, sourcePath(entry.path, options)) || inside(bundle, identity(entry.path, options))) : [];
|
|
30
|
+
const candidates = preferred.length ? preferred : entries;
|
|
31
|
+
const unique = new Map();
|
|
32
|
+
for (const entry of candidates) {
|
|
33
|
+
const key = `${entry.type}:${identity(entry.path, options)}`;
|
|
34
|
+
const previous = unique.get(key);
|
|
35
|
+
// The projector must receive the entry in the bundle's current snapshot.
|
|
36
|
+
const inSnapshot = snapshot && inside(snapshot, sourcePath(entry.path, options));
|
|
37
|
+
if (!previous || inSnapshot)
|
|
38
|
+
unique.set(key, entry);
|
|
39
|
+
}
|
|
40
|
+
return [...unique.values()];
|
|
41
|
+
}
|
|
42
|
+
/** Retain the existing preference for canonical sources over packaged mirrors. */
|
|
43
|
+
export function preferCanonicalBindingTargets(matches) {
|
|
44
|
+
if (matches.length > 1) {
|
|
45
|
+
const canonical = matches.filter(entry => !/(^|\/)agentic\/code\/plugins\//.test(entry.path.replace(/\\/g, '/')));
|
|
46
|
+
if (canonical.length === 1)
|
|
47
|
+
return canonical;
|
|
48
|
+
}
|
|
49
|
+
return matches;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=binding-target-identity.js.map
|
|
@@ -89,4 +89,16 @@ export function pruneManifest(manifest, cwd) {
|
|
|
89
89
|
}
|
|
90
90
|
return removed;
|
|
91
91
|
}
|
|
92
|
+
/** Format change-detection diagnostics from the same counters returned to callers. */
|
|
93
|
+
export function formatManifestStats(stats) {
|
|
94
|
+
if (stats.checked === 0)
|
|
95
|
+
return [];
|
|
96
|
+
const messages = [
|
|
97
|
+
` Change detection: ${stats.checked} checked, ${stats.statSkipped} skipped via stat, ${stats.checked - stats.statSkipped} content-read, ${stats.reindexed} re-indexed`,
|
|
98
|
+
];
|
|
99
|
+
if (stats.pruned > 0) {
|
|
100
|
+
messages.push(` Pruned ${stats.pruned} stale manifest entries (files no longer on disk)`);
|
|
101
|
+
}
|
|
102
|
+
return messages;
|
|
103
|
+
}
|
|
92
104
|
//# sourceMappingURL=checksum-manifest.js.map
|
|
@@ -19,7 +19,7 @@ import { validateGateDocument } from '../gates/schema.js';
|
|
|
19
19
|
import { INDEX_EXTRACTOR_VERSION, INDEX_VERSION, INDEX_DIR, OPERATIONAL_DISCOVERY_TYPES, PHASE_DIRECTORIES, GRAPH_CONFIGS, TEMPLATE_INDEX_EXTENSIONS, resolveGraphScanDir, loadUserGraphConfigs, loadGlobalGraphConfigs, resolveGraphBackendType, } from './types.js';
|
|
20
20
|
import { parseCitationSidecar, citationResultToEdges, buildRefToPathMap } from './citation-parser.js';
|
|
21
21
|
import { writeIndexFile, resolveIndexDir, loadGraphIndexFile, publishIndexFiles } from './index-reader.js';
|
|
22
|
-
import { loadManifest, writeManifest, statMatches, makeEntry } from './checksum-manifest.js';
|
|
22
|
+
import { loadManifest, writeManifest, statMatches, makeEntry, formatManifestStats } from './checksum-manifest.js';
|
|
23
23
|
import { FRAMEWORK_RELATIONS_REVISION } from './framework-source-digest.js';
|
|
24
24
|
import { normalizeOperationalState } from './operational-state.js';
|
|
25
25
|
import { DEFAULT_PROJECT_AIWG_DIR, resolveProjectAiwgDir, } from '../config/project-artifacts.js';
|
|
@@ -963,6 +963,7 @@ function extractIndexArtifact(job, bindingOnly, warnings = []) {
|
|
|
963
963
|
};
|
|
964
964
|
return { checksum, entry };
|
|
965
965
|
}
|
|
966
|
+
/** Return change-detection counts for artifact builds; skipped/source builds return void. */
|
|
966
967
|
export async function buildIndex(cwd, options = {}) {
|
|
967
968
|
loadUserGraphConfigs(cwd);
|
|
968
969
|
loadGlobalGraphConfigs();
|
|
@@ -993,7 +994,7 @@ export async function buildIndex(cwd, options = {}) {
|
|
|
993
994
|
fs.mkdirSync(directory, { recursive: true });
|
|
994
995
|
return staging ??= fs.mkdtempSync(path.join(directory, '.build-'));
|
|
995
996
|
};
|
|
996
|
-
await buildIndexSnapshot(cwd, options, preparePublication, owned ? observation : undefined);
|
|
997
|
+
const stats = await buildIndexSnapshot(cwd, options, preparePublication, owned ? observation : undefined);
|
|
997
998
|
// A receipt hit verifies the existing snapshot directly against the scan's
|
|
998
999
|
// stats. There is no extraction interval to recheck. Real builds still probe
|
|
999
1000
|
// again after preparation so concurrent source changes remain pending.
|
|
@@ -1004,6 +1005,7 @@ export async function buildIndex(cwd, options = {}) {
|
|
|
1004
1005
|
recordIndexVerification(owned, cwd, { before: observation.before, after, wallMs: Date.now() - start }, staging);
|
|
1005
1006
|
if (staging)
|
|
1006
1007
|
publishIndexFiles(staging, directory);
|
|
1008
|
+
return stats;
|
|
1007
1009
|
}
|
|
1008
1010
|
catch (error) {
|
|
1009
1011
|
if (owned) {
|
|
@@ -1141,14 +1143,9 @@ async function buildIndexSnapshot(cwd, options, preparePublication, observation)
|
|
|
1141
1143
|
log(`Artifact index built in ${buildTimeMs}ms`);
|
|
1142
1144
|
log(` Indexed ${newCount} new, updated ${updatedCount}, unchanged ${unchangedCount}`);
|
|
1143
1145
|
log(` Total: ${total} artifacts`);
|
|
1144
|
-
if (!force
|
|
1145
|
-
const
|
|
1146
|
-
|
|
1147
|
-
log(` Change detection: ${manifestStats.checked} checked, ${fastPath} skipped via stat, ${slowPath} content-read, ${manifestStats.reindexed} re-indexed`);
|
|
1148
|
-
if (manifestStats.pruned > 0) {
|
|
1149
|
-
log(` Pruned ${manifestStats.pruned} stale manifest entries (files no longer on disk)`);
|
|
1150
|
-
}
|
|
1151
|
-
}
|
|
1146
|
+
if (!force)
|
|
1147
|
+
for (const message of formatManifestStats(manifestStats))
|
|
1148
|
+
log(message);
|
|
1152
1149
|
const displayDir = graph ? indexOutputDir : `${INDEX_DIR}/`;
|
|
1153
1150
|
log(` Output: ${displayDir}`);
|
|
1154
1151
|
};
|
|
@@ -1211,7 +1208,7 @@ async function buildIndexSnapshot(cwd, options, preparePublication, observation)
|
|
|
1211
1208
|
if (observation)
|
|
1212
1209
|
observation.unchanged = true;
|
|
1213
1210
|
reportBuild(buildTimeMs, files.length);
|
|
1214
|
-
return;
|
|
1211
|
+
return manifestStats;
|
|
1215
1212
|
}
|
|
1216
1213
|
}
|
|
1217
1214
|
const publicationDir = preparePublication();
|
|
@@ -1245,6 +1242,7 @@ async function buildIndexSnapshot(cwd, options, preparePublication, observation)
|
|
|
1245
1242
|
...(!force && existingEntries[relativePath] ? { existingChecksum: existingEntries[relativePath].checksum } : {}) });
|
|
1246
1243
|
}
|
|
1247
1244
|
const preparation = await runIndexPreparation(jobs, prepareIndexArtifact, import.meta.url, workers, options.onDiagnostic ?? (message => console.warn(`Index preparation: ${message}`)));
|
|
1245
|
+
manifestStats.reindexed = preparation.results.filter(result => result.entry !== undefined).length;
|
|
1248
1246
|
for (const result of preparation.results)
|
|
1249
1247
|
for (const warning of result.warnings ?? []) {
|
|
1250
1248
|
(options.onDiagnostic ?? (message => console.warn(`Index preparation: ${message}`)))(warning);
|
|
@@ -1313,7 +1311,6 @@ async function buildIndexSnapshot(cwd, options, preparePublication, observation)
|
|
|
1313
1311
|
log(` unchanged (checksum): ${relativePath}`);
|
|
1314
1312
|
continue;
|
|
1315
1313
|
}
|
|
1316
|
-
manifestStats.reindexed++;
|
|
1317
1314
|
nextManifestEntries[relativePath] = makeEntry(checksum, stat);
|
|
1318
1315
|
entry = prepared.entry;
|
|
1319
1316
|
}
|
|
@@ -1363,7 +1360,7 @@ async function buildIndexSnapshot(cwd, options, preparePublication, observation)
|
|
|
1363
1360
|
if (manifestStats.checksumSkipped > 0 || projectionNeedsRepair)
|
|
1364
1361
|
writeBuildManifest(nextManifestEntries);
|
|
1365
1362
|
reportBuild(buildTimeMs, total);
|
|
1366
|
-
return;
|
|
1363
|
+
return manifestStats;
|
|
1367
1364
|
}
|
|
1368
1365
|
}
|
|
1369
1366
|
// Apply metadata supplements if configured (enriches filename-metadata nodes from sidecars)
|
|
@@ -1563,5 +1560,6 @@ async function buildIndexSnapshot(cwd, options, preparePublication, observation)
|
|
|
1563
1560
|
writeBuildManifest(nextManifestEntries);
|
|
1564
1561
|
// Report
|
|
1565
1562
|
reportBuild(buildTimeMs, total);
|
|
1563
|
+
return manifestStats;
|
|
1566
1564
|
}
|
|
1567
1565
|
//# sourceMappingURL=index-builder.js.map
|
|
@@ -12,6 +12,7 @@ import { refreshFrameworkCapabilities, resolveFrameworkCorpusRoot, isCorpusBundl
|
|
|
12
12
|
import { resolveFrameworkIndexRoot } from './framework-index-paths.js';
|
|
13
13
|
import { ensureRelations, selectPrebuiltRelations, emptyRuleStats } from './relations.js';
|
|
14
14
|
import { minimatch } from 'minimatch';
|
|
15
|
+
import { selectBindingTargetIdentities, preferCanonicalBindingTargets } from './binding-target-identity.js';
|
|
15
16
|
import { inferRuleActivation } from '../rules/activation.mjs';
|
|
16
17
|
import * as fs from 'node:fs';
|
|
17
18
|
import * as path from 'node:path';
|
|
@@ -1624,7 +1625,7 @@ function findShowMatches(entries, types, needle) {
|
|
|
1624
1625
|
return matches;
|
|
1625
1626
|
}
|
|
1626
1627
|
/** Preselect exact candidates once; the canonical resolver still owns precedence and ambiguity. */
|
|
1627
|
-
export function createRuleBindingTargetResolver(entries) {
|
|
1628
|
+
export function createRuleBindingTargetResolver(entries, options = {}) {
|
|
1628
1629
|
const candidates = new Map();
|
|
1629
1630
|
for (const entry of entries) {
|
|
1630
1631
|
if (!['skill', 'agent', 'flow'].includes(entry.type))
|
|
@@ -1643,13 +1644,13 @@ export function createRuleBindingTargetResolver(entries) {
|
|
|
1643
1644
|
candidates.set(key, selected);
|
|
1644
1645
|
}
|
|
1645
1646
|
}
|
|
1646
|
-
return (type, id) => resolveRuleBindingTarget(candidates.get(`${type}\0${id}`) ?? [], type, id);
|
|
1647
|
+
return (type, id, bundleRoot = options.bundleRoot) => resolveRuleBindingTarget(candidates.get(`${type}\0${id}`) ?? [], type, id, { ...options, bundleRoot });
|
|
1647
1648
|
}
|
|
1648
1649
|
/** Resolve exact rule binding IDs using the same precedence and ambiguity as show.
|
|
1649
1650
|
* Canonical layout slugs remain valid when frontmatter names are display names.
|
|
1650
1651
|
* Titles and filesystem paths are deliberately excluded (#2938).
|
|
1651
1652
|
*/
|
|
1652
|
-
export function resolveRuleBindingTarget(entries, type, id) {
|
|
1653
|
+
export function resolveRuleBindingTarget(entries, type, id, options = {}) {
|
|
1653
1654
|
const exact = entries.filter(entry => {
|
|
1654
1655
|
if (entry.type !== type)
|
|
1655
1656
|
return false;
|
|
@@ -1660,14 +1661,7 @@ export function resolveRuleBindingTarget(entries, type, id) {
|
|
|
1660
1661
|
: basename.replace(/\.[^.]+$/, '');
|
|
1661
1662
|
return entry.name === id || discoveryIdForEntry(entry) === id || slug === id;
|
|
1662
1663
|
});
|
|
1663
|
-
|
|
1664
|
-
// Generated plugin copies (agentic/code/plugins/*) mirror canonical framework
|
|
1665
|
-
// and addon artifacts. Prefer the canonical source when it is unambiguous.
|
|
1666
|
-
if (matches.length > 1) {
|
|
1667
|
-
const canonical = matches.filter(entry => !/(^|\/)agentic\/code\/plugins\//.test(normalizeIndexedPath(entry.path)));
|
|
1668
|
-
if (canonical.length === 1)
|
|
1669
|
-
matches = canonical;
|
|
1670
|
-
}
|
|
1664
|
+
const matches = preferCanonicalBindingTargets(findShowMatches(selectBindingTargetIdentities(exact, options), [type], id));
|
|
1671
1665
|
if (matches.length === 0)
|
|
1672
1666
|
throw new Error(`Missing ${type} binding target: ${id}`);
|
|
1673
1667
|
if (matches.length > 1)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Public doctor options and exit-status contract.
|
|
2
|
+
export const DOCTOR_HELP = `aiwg doctor — check AIWG installation health
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
aiwg doctor [options]
|
|
6
|
+
aiwg -doctor [options]
|
|
7
|
+
aiwg --doctor [options]
|
|
8
|
+
|
|
9
|
+
Options:
|
|
10
|
+
--deployment Verify configured provider deployments
|
|
11
|
+
--provider <name> Limit deployment verification to one provider
|
|
12
|
+
--bundle <name> Limit deployment verification to one bundle
|
|
13
|
+
--scope <scope> Verification scope: project or user
|
|
14
|
+
--user Alias for --scope user
|
|
15
|
+
--qualify With --probe-workers, record installation and configured model/role approval
|
|
16
|
+
--yes Confirm worker qualification without a terminal
|
|
17
|
+
--dry-run With --probe-workers, preview qualification without writes
|
|
18
|
+
--cli NAME Limit worker probes/qualification to one configured CLI
|
|
19
|
+
--decision-offload Show offline advisory decision readiness and adoption report
|
|
20
|
+
--probe-workers Run bounded worker CLI version probes (default: config-only, no subprocess)
|
|
21
|
+
--project-local Include project-local artifact diagnostics
|
|
22
|
+
--json Emit machine-readable output (with --probe-workers: one worker-probe record per CLI; with --deployment: deployment verification; with --decision-offload: offline snapshot)
|
|
23
|
+
--verbose, -v Include verbose diagnostics
|
|
24
|
+
--help, -h Show this help
|
|
25
|
+
|
|
26
|
+
Exit status:
|
|
27
|
+
0 Checks completed; ordinary doctor warnings are advisory.
|
|
28
|
+
1 Diagnostic errors, failed or partial explicit worker qualification, or blocked recorded invocations.
|
|
29
|
+
2 Invalid usage.
|
|
30
|
+
--qualify uses the same exit status in text and JSON output.
|
|
31
|
+
`;
|
|
32
|
+
//# sourceMappingURL=doctor-help.js.map
|