@aiwg/cli 2026.9.20 → 2026.9.21
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/capability-matrix.yaml +58 -6
- package/agentic/code/providers/model-capabilities.v1.json +34 -0
- package/agentic/code/providers/model-catalog.v1.json +55 -13
- package/bin/aiwg.mjs +2 -0
- package/dist/src/api/index.d.ts +1 -0
- package/dist/src/api/index.js +1 -0
- package/dist/src/artifacts/enrichment/cli.js +1 -1
- package/dist/src/artifacts/views/cli.js +1 -1
- package/dist/src/audit/operator-decision.js +10 -0
- package/dist/src/auth/credential-store.js +127 -27
- package/dist/src/catalog/builtin-models.json +272 -40
- package/dist/src/catalog/cli.js +1 -1
- package/dist/src/catalog/cli.mjs +1 -1
- package/dist/src/cli/handlers/effect.js +872 -0
- package/dist/src/cli/handlers/help.js +2 -0
- package/dist/src/cli/handlers/index.js +4 -2
- package/dist/src/cli/handlers/models.js +41 -10
- package/dist/src/cli/handlers/ralph.js +1 -1
- package/dist/src/cli/handlers/sessions.js +113 -37
- package/dist/src/cli/handlers/subcommands.js +31 -0
- package/dist/src/cli/handlers/use.js +46 -9
- package/dist/src/cli/handlers/utilities.js +10 -0
- package/dist/src/cli/handlers/workspace.js +3 -1
- package/dist/src/cli/scope-resolver.js +112 -9
- package/dist/src/cli/services/deployment-verification.js +5 -0
- package/dist/src/config/aiwg-config.js +3 -0
- package/dist/src/decision/acceptance-rollout.js +93 -0
- package/dist/src/decision/acceptance.js +175 -0
- package/dist/src/decision/adapters/jev.js +234 -13
- package/dist/src/decision/adapters/llm-subagent.js +60 -12
- package/dist/src/decision/admission.js +550 -0
- package/dist/src/decision/batch-benchmark.js +47 -0
- package/dist/src/decision/batch-receipts/accounting.js +75 -0
- package/dist/src/decision/batch-receipts/export.js +40 -0
- package/dist/src/decision/batch-receipts/index.js +9 -0
- package/dist/src/decision/batch-receipts/protection.js +40 -0
- package/dist/src/decision/batch-receipts/receipt.js +44 -0
- package/dist/src/decision/batch-receipts/result-store.js +341 -0
- package/dist/src/decision/batch-receipts/store.js +362 -0
- package/dist/src/decision/batch-receipts/types.js +2 -0
- package/dist/src/decision/batch-receipts/validate.js +127 -0
- package/dist/src/decision/batch.js +68 -0
- package/dist/src/decision/calibration/index.js +4 -0
- package/dist/src/decision/calibration/receipts.js +130 -0
- package/dist/src/decision/calibration/registry.js +258 -0
- package/dist/src/decision/calibration/types.js +2 -0
- package/dist/src/decision/compile-cache/benchmark.js +62 -0
- package/dist/src/decision/compile-cache/compatibility.js +65 -0
- package/dist/src/decision/compile-cache/file-store.js +280 -0
- package/dist/src/decision/compile-cache/identity.js +26 -0
- package/dist/src/decision/compile-cache/index.js +9 -0
- package/dist/src/decision/compile-cache/prefix.js +21 -0
- package/dist/src/decision/compile-cache/records.js +86 -0
- package/dist/src/decision/compile-cache/runtime.js +68 -0
- package/dist/src/decision/compile-cache/store.js +108 -0
- package/dist/src/decision/compile-cache/types.js +2 -0
- package/dist/src/decision/context-plan.js +234 -0
- package/dist/src/decision/context-qualification.js +60 -0
- package/dist/src/decision/ensemble/aggregate.js +215 -0
- package/dist/src/decision/ensemble/contract.js +316 -0
- package/dist/src/decision/ensemble/drift.js +51 -0
- package/dist/src/decision/ensemble/index.js +6 -0
- package/dist/src/decision/ensemble/report.js +71 -0
- package/dist/src/decision/ensemble/types.js +2 -0
- package/dist/src/decision/evaluate.js +1024 -78
- package/dist/src/decision/file-lifecycle-store.js +168 -0
- package/dist/src/decision/graph-beam.js +40 -0
- package/dist/src/decision/graph-budget.js +110 -0
- package/dist/src/decision/graph-decision-bridge.js +93 -0
- package/dist/src/decision/graph-evidence.js +123 -0
- package/dist/src/decision/graph-flow-adapter.js +56 -0
- package/dist/src/decision/graph-flow.js +105 -0
- package/dist/src/decision/graph-parallel.js +79 -0
- package/dist/src/decision/graph-patterns.js +20 -0
- package/dist/src/decision/graph-run-store.js +66 -0
- package/dist/src/decision/graph-run.js +166 -0
- package/dist/src/decision/graph-skill-bridge.js +91 -0
- package/dist/src/decision/graph-templates.js +56 -0
- package/dist/src/decision/graph.js +115 -0
- package/dist/src/decision/index.js +35 -0
- package/dist/src/decision/job-accounting.js +93 -0
- package/dist/src/decision/job-contract.js +186 -0
- package/dist/src/decision/job-effects.js +95 -0
- package/dist/src/decision/job-evaluate.js +80 -0
- package/dist/src/decision/job-gateway.js +121 -0
- package/dist/src/decision/job-http.js +194 -0
- package/dist/src/decision/job-payload-store.js +258 -0
- package/dist/src/decision/job-poll-limiter.js +92 -0
- package/dist/src/decision/job-quota.js +158 -0
- package/dist/src/decision/job-runtime.js +240 -0
- package/dist/src/decision/job-scheduler.js +26 -0
- package/dist/src/decision/job-service.js +117 -0
- package/dist/src/decision/job-store.js +264 -0
- package/dist/src/decision/job-worker.js +141 -0
- package/dist/src/decision/lifecycle.js +148 -0
- package/dist/src/decision/patterns/artifacts.js +173 -0
- package/dist/src/decision/patterns/catalog.js +108 -0
- package/dist/src/decision/patterns/durable-review.js +237 -0
- package/dist/src/decision/patterns/index.js +8 -0
- package/dist/src/decision/patterns/playground.js +401 -0
- package/dist/src/decision/patterns/recorded.js +43 -0
- package/dist/src/decision/patterns/specs.js +174 -0
- package/dist/src/decision/patterns/types.js +2 -0
- package/dist/src/decision/portable-secrets.js +53 -0
- package/dist/src/decision/projection.js +210 -0
- package/dist/src/decision/qualification/capture.js +67 -0
- package/dist/src/decision/qualification/drift.js +68 -0
- package/dist/src/decision/qualification/gate-evidence.js +172 -0
- package/dist/src/decision/qualification/gates.js +83 -0
- package/dist/src/decision/qualification/index.js +12 -0
- package/dist/src/decision/qualification/load.js +275 -0
- package/dist/src/decision/qualification/manifest.js +37 -0
- package/dist/src/decision/qualification/privacy.js +41 -0
- package/dist/src/decision/qualification/quality.js +213 -0
- package/dist/src/decision/qualification/release.js +116 -0
- package/dist/src/decision/qualification/runner.js +408 -0
- package/dist/src/decision/qualification/types.js +2 -0
- package/dist/src/decision/receipts.js +30 -7
- package/dist/src/decision/result-cache/index.js +6 -0
- package/dist/src/decision/result-cache/integrity.js +28 -0
- package/dist/src/decision/result-cache/key.js +28 -0
- package/dist/src/decision/result-cache/service.js +92 -0
- package/dist/src/decision/result-cache/store.js +327 -0
- package/dist/src/decision/result-cache/types.js +3 -0
- package/dist/src/decision/review/authorization.js +110 -0
- package/dist/src/decision/review/effect-ledger-adapter.js +321 -0
- package/dist/src/decision/review/index.js +12 -0
- package/dist/src/decision/review/migrate.js +34 -0
- package/dist/src/decision/review/operator-audit.js +59 -0
- package/dist/src/decision/review/recovery-adapters.js +252 -0
- package/dist/src/decision/review/recovery.js +33 -0
- package/dist/src/decision/review/service.js +498 -0
- package/dist/src/decision/review/store.js +219 -0
- package/dist/src/decision/review/types.js +2 -0
- package/dist/src/decision/review/validate.js +205 -0
- package/dist/src/decision/scheduler.js +115 -0
- package/dist/src/decision/telemetry/context.js +42 -0
- package/dist/src/decision/telemetry/debug-sidecar.js +152 -0
- package/dist/src/decision/telemetry/exporter.js +77 -0
- package/dist/src/decision/telemetry/file-debug-backend.js +112 -0
- package/dist/src/decision/telemetry/index.js +13 -0
- package/dist/src/decision/telemetry/mapping.js +146 -0
- package/dist/src/decision/telemetry/metrics.js +164 -0
- package/dist/src/decision/telemetry/otlp-http.js +183 -0
- package/dist/src/decision/telemetry/redaction.js +93 -0
- package/dist/src/decision/telemetry/retention.js +109 -0
- package/dist/src/decision/telemetry/runtime.js +310 -0
- package/dist/src/decision/telemetry/trace.js +158 -0
- package/dist/src/decision/telemetry/types.js +3 -0
- package/dist/src/decision/validate.js +135 -5
- package/dist/src/effects/checkpoint-sinks.js +94 -0
- package/dist/src/effects/checkpoint.js +76 -0
- package/dist/src/effects/decision-links.js +54 -0
- package/dist/src/effects/errors.js +48 -0
- package/dist/src/effects/identity.js +178 -0
- package/dist/src/effects/index.js +25 -0
- package/dist/src/effects/keyring.js +160 -0
- package/dist/src/effects/keys.js +130 -0
- package/dist/src/effects/ledger.js +435 -0
- package/dist/src/effects/lifecycle.js +110 -0
- package/dist/src/effects/lock-recovery.js +269 -0
- package/dist/src/effects/reader.js +103 -0
- package/dist/src/effects/records.js +114 -0
- package/dist/src/effects/redaction.js +51 -0
- package/dist/src/effects/schema.js +73 -0
- package/dist/src/effects/store.js +239 -0
- package/dist/src/effects/types.js +49 -0
- package/dist/src/effects/verifiers/decision.js +168 -0
- package/dist/src/effects/verifiers/file.js +106 -0
- package/dist/src/effects/verifiers/git.js +206 -0
- package/dist/src/effects/verifiers/index.js +90 -0
- package/dist/src/effects/verifiers/registry.js +148 -0
- package/dist/src/effects/verifiers/review.js +123 -0
- package/dist/src/effects/verifiers/tracker.js +299 -0
- package/dist/src/effects/verifiers/types.js +21 -0
- package/dist/src/effects/verify.js +295 -0
- package/dist/src/evidence/bundle.js +2 -0
- package/dist/src/extensions/commands/definitions.js +28 -0
- package/dist/src/extensions/manifest.js +1 -0
- package/dist/src/marketplace/provenance.js +25 -27
- package/dist/src/mcp/cli.mjs +11 -1
- package/dist/src/mcp/grok-build-config.mjs +189 -0
- package/dist/src/mcp/registry.js +21 -1
- package/dist/src/mcp/registry.mjs +20 -1
- package/dist/src/models/grok-build-models.js +356 -0
- package/dist/src/models/index.js +1 -0
- package/dist/src/models/model-capabilities.v1.json +34 -0
- package/dist/src/models/model-catalog.v1.json +55 -13
- package/dist/src/models/model-discovery.js +41 -5
- package/dist/src/models/provider-policy.js +3 -2
- package/dist/src/plugin/skill-command-translator.js +1 -0
- package/dist/src/providers/capability-matrix.yaml +58 -6
- package/dist/src/providers/grok-build-acp.js +192 -0
- package/dist/src/providers/grok-build-dispatch.js +251 -0
- package/dist/src/providers/grok-build-headless.js +170 -0
- package/dist/src/providers/muse-paths.js +105 -0
- package/dist/src/providers/provider-definitions.js +93 -7
- package/dist/src/providers/provider-definitions.mjs +21 -1
- package/dist/src/providers/provider-inventory.js +3 -0
- package/dist/src/security/artifact-attestation.js +4 -8
- package/dist/src/security/signing.js +119 -0
- package/dist/src/sessions/adapters/grok-build.js +187 -0
- package/dist/src/sessions/adapters/muse.js +412 -0
- package/dist/src/sessions/contracts.js +1 -1
- package/dist/src/sessions/grok-build-cli.js +196 -0
- package/dist/src/sessions/index.js +3 -0
- package/dist/src/sessions/workspace-discovery.js +9 -5
- package/dist/src/skills/deployer.js +33 -5
- package/dist/src/smiths/context-pipeline/claude-hook.js +2 -0
- package/dist/src/smiths/context-pipeline/context-file-safety.js +18 -0
- package/dist/src/smiths/context-pipeline/finalization.js +1 -32
- package/dist/src/smiths/context-pipeline/generator.js +12 -0
- package/dist/src/smiths/context-pipeline/index.js +1 -1
- package/dist/src/smiths/context-pipeline/managed-hook.js +2 -0
- package/dist/src/smiths/context-pipeline/muse-bridge.js +50 -0
- package/dist/src/smiths/context-pipeline/provider-policy.js +5 -0
- package/dist/src/smiths/context-pipeline/workspace-context.js +22 -16
- package/dist/src/smiths/hook-bridge/grok-build-translator.js +64 -0
- package/dist/src/smiths/hook-bridge/index.js +3 -0
- package/dist/src/smiths/hook-bridge/shim.js +2 -0
- package/dist/src/smiths/hook-bridge/types.js +5 -0
- package/dist/src/smiths/skillsmith/collision-detector.js +1 -0
- package/dist/src/storage/protected-files.js +102 -0
- package/dist/src/tracker/forge-http.js +371 -0
- package/dist/src/tracker/project-inputs.js +41 -0
- package/package.json +2 -1
- package/schemas/decision/BatchReceipt.v1.schema.json +50 -0
- package/schemas/decision/CalibrationArtifact.v1.schema.json +76 -0
- package/schemas/decision/CalibrationCompatibility.v1.schema.json +18 -0
- package/schemas/decision/CalibrationGovernanceReceipt.v1.schema.json +44 -0
- package/schemas/decision/DecisionAdmissionEvidence.v1.schema.json +43 -0
- package/schemas/decision/DecisionBinding.schema.json +309 -0
- package/schemas/decision/DecisionBinding.v1alpha2.schema.json +369 -0
- package/schemas/decision/DecisionCacheTelemetry.v1.schema.json +20 -0
- package/schemas/decision/DecisionChampionChallenger.v1.schema.json +100 -0
- package/schemas/decision/DecisionCompileCacheEntry.v1.schema.json +35 -0
- package/schemas/decision/DecisionCompileCacheIdentity.v1.schema.json +26 -0
- package/schemas/decision/DecisionCompileCacheTombstone.v1.schema.json +31 -0
- package/schemas/decision/DecisionContextEvidence.v1.schema.json +136 -0
- package/schemas/decision/DecisionDefinition.schema.json +159 -0
- package/schemas/decision/DecisionDefinition.v1alpha2.schema.json +203 -0
- package/schemas/decision/DecisionDriftResponse.v1.schema.json +55 -0
- package/schemas/decision/DecisionEnsembleAggregate.v1.schema.json +86 -0
- package/schemas/decision/DecisionEnsembleIntegrityReport.v1.schema.json +64 -0
- package/schemas/decision/DecisionEnsemblePolicy.v1.schema.json +130 -0
- package/schemas/decision/DecisionGraph.v1.schema.json +77 -0
- package/schemas/decision/DecisionJob.v1.schema.json +71 -0
- package/schemas/decision/DecisionLifecyclePolicy.v1.schema.json +52 -0
- package/schemas/decision/DecisionProjectionPolicy.v1.schema.json +65 -0
- package/schemas/decision/DecisionProviderPrefixCompatibility.v1.schema.json +45 -0
- package/schemas/decision/DecisionProviderPrefixEvidence.v1.schema.json +17 -0
- package/schemas/decision/DecisionProviderPrefixIdentity.v1.schema.json +36 -0
- package/schemas/decision/DecisionResult.schema.json +524 -0
- package/schemas/decision/DecisionResult.v1alpha2.schema.json +619 -0
- package/schemas/decision/DecisionResultCacheEntry.v1.schema.json +53 -0
- package/schemas/decision/DecisionReview.schema.json +29 -0
- package/schemas/decision/DecisionRuleset.schema.json +313 -0
- package/schemas/decision/DecisionRuleset.v1alpha2.schema.json +313 -0
- package/schemas/decision/DecisionTelemetryTrace.v1.schema.json +95 -0
- package/schemas/decision/RulesetResult.schema.json +721 -0
- package/schemas/decision/RulesetResult.v1alpha2.schema.json +891 -0
- package/schemas/security/pr-evidence-receipt.v1.schema.json +77 -0
- package/schemas/security/threat-assessment-report.v1.schema.json +71 -1
- package/tools/agents/deploy-agents.mjs +21 -6
- package/tools/agents/providers/base.mjs +7 -4
- package/tools/agents/providers/codex.mjs +1 -1
- package/tools/agents/providers/grok-build.d.mts +7 -0
- package/tools/agents/providers/grok-build.mjs +249 -9
- package/tools/agents/providers/model-role.mjs +6 -3
- package/tools/agents/providers/muse-hooks.mjs +785 -0
- package/tools/agents/providers/muse-paths.mjs +112 -0
- package/tools/agents/providers/muse.mjs +336 -0
|
@@ -405,11 +405,18 @@ providers:
|
|
|
405
405
|
display_name: Grok Build
|
|
406
406
|
status: experimental
|
|
407
407
|
# xAI Grok Build CLI/TUI. Distinct from Grok Bot (`grokbot`).
|
|
408
|
-
#
|
|
408
|
+
# #2577: fixture-backed native subagents and background tasks; see
|
|
409
|
+
# test/unit/providers/grok-build-provider.test.ts and
|
|
410
|
+
# test/unit/providers/grok-build-dispatch.test.ts. MCP is independently
|
|
411
|
+
# covered by test/unit/providers/grok-build-native-integration.test.ts.
|
|
412
|
+
# Headless and ACP protocol contracts are tested in grok-build-headless.test.ts
|
|
413
|
+
# and grok-build-acp.test.ts. ACP does not establish a daemon lifecycle.
|
|
414
|
+
# No fixture supports native cron, multi-agent teams, mission control,
|
|
415
|
+
# or AIWG behavior registration; those claims remain false.
|
|
409
416
|
daemon_tier: unsupported
|
|
410
417
|
daemon_pty_adapter: false
|
|
411
418
|
artifact_paths:
|
|
412
|
-
agents:
|
|
419
|
+
agents: .grok/agents/ # qualified AIWG model workers only
|
|
413
420
|
commands: null
|
|
414
421
|
skills: .grok/skills/
|
|
415
422
|
skills_cross_agent: .grok/.aiwg/skills/ # --copy-all opt-in mirror
|
|
@@ -417,16 +424,16 @@ providers:
|
|
|
417
424
|
behaviors: null
|
|
418
425
|
native_features:
|
|
419
426
|
cron: false
|
|
420
|
-
agent_teams: false
|
|
421
|
-
tasks:
|
|
427
|
+
agent_teams: false # independent subagents do not imply native team orchestration
|
|
428
|
+
tasks: true # native background subagents/tasks
|
|
422
429
|
mcp: true
|
|
423
430
|
behaviors: false
|
|
424
431
|
mission_control: false
|
|
425
432
|
daemon: false
|
|
426
433
|
emulation:
|
|
427
434
|
cron: null
|
|
428
|
-
agent_teams:
|
|
429
|
-
tasks:
|
|
435
|
+
agent_teams: aiwg-mc
|
|
436
|
+
tasks: native
|
|
430
437
|
mcp: null
|
|
431
438
|
behaviors: aiwg-mc
|
|
432
439
|
mission_control: aiwg-mc
|
|
@@ -479,6 +486,51 @@ providers:
|
|
|
479
486
|
deploy_target: mixed
|
|
480
487
|
aggregated_output: true
|
|
481
488
|
|
|
489
|
+
muse:
|
|
490
|
+
display_name: Muse Code
|
|
491
|
+
status: experimental
|
|
492
|
+
# Meta's terminal/CI coding agent (Muse Spark-powered). Explicitly not a
|
|
493
|
+
# model-API surface: Glimmer/Image/Voice are out of scope.
|
|
494
|
+
# Skill writer (.agents/skills + XDG user root), discover-first AGENTS.md
|
|
495
|
+
# bridge, managed .muse/hooks.json, and opt-in MCP settings profile.
|
|
496
|
+
# ADR: docs/architecture/adr-muse-provider-target.md · epic #223.
|
|
497
|
+
daemon_tier: unsupported
|
|
498
|
+
daemon_pty_adapter: false
|
|
499
|
+
artifact_paths:
|
|
500
|
+
agents: "Indexed: aiwg discover / aiwg show agent (native writer deferred)"
|
|
501
|
+
commands: null
|
|
502
|
+
# Project root is fixed; the user root resolves at deploy time from
|
|
503
|
+
# XDG_CONFIG_HOME (default ~/.config/muse/skills when unset). Never
|
|
504
|
+
# advertise ~/.muse as a skill root, and never silently mirror into
|
|
505
|
+
# ~/.agents/skills (#226).
|
|
506
|
+
skills: .agents/skills/
|
|
507
|
+
skills_cross_agent: null
|
|
508
|
+
rules: "Indexed: aiwg show rule + AGENTS.md discover-first bridge"
|
|
509
|
+
behaviors: null
|
|
510
|
+
native_features:
|
|
511
|
+
cron: false
|
|
512
|
+
agent_teams: false
|
|
513
|
+
tasks: false
|
|
514
|
+
mcp: true
|
|
515
|
+
behaviors: false
|
|
516
|
+
mission_control: false
|
|
517
|
+
daemon: false
|
|
518
|
+
emulation:
|
|
519
|
+
cron: null
|
|
520
|
+
agent_teams: null
|
|
521
|
+
tasks: aiwg-mc
|
|
522
|
+
mcp: null
|
|
523
|
+
behaviors: aiwg-mc
|
|
524
|
+
mission_control: aiwg-mc
|
|
525
|
+
daemon: null
|
|
526
|
+
hook_wiring:
|
|
527
|
+
at_link_support: false
|
|
528
|
+
hook_file: .muse/hooks.json
|
|
529
|
+
fallback: full-inject
|
|
530
|
+
context_file: AGENTS.md
|
|
531
|
+
deploy_target: mixed
|
|
532
|
+
aggregated_output: false
|
|
533
|
+
|
|
482
534
|
openclaw:
|
|
483
535
|
display_name: OpenClaw
|
|
484
536
|
status: stable
|
|
@@ -228,6 +228,19 @@
|
|
|
228
228
|
"sourceUrl": "https://github.com/jmagly/aiwg/blob/main/docs/architecture/adr-grokbot-provider-target.md",
|
|
229
229
|
"verifiedAt": "2026-09-15"
|
|
230
230
|
},
|
|
231
|
+
"grok-build": {
|
|
232
|
+
"agent": "inherited",
|
|
233
|
+
"skill": "inherited",
|
|
234
|
+
"globalChild": "native",
|
|
235
|
+
"identifierSyntax": "Provider-local alias from grok inspect and $GROK_HOME config; distinct from API model id",
|
|
236
|
+
"inheritance": "Agent and skill roles resolve through the session model unless a validated Grok Build alias is selected",
|
|
237
|
+
"invalidPinFallback": "Report the unavailable alias; use the sole discovered model only when exactly one is available",
|
|
238
|
+
"configTarget": "$GROK_HOME/config.toml [models] and [model.<alias>] (read-only discovery)",
|
|
239
|
+
"artifactFormat": "Grok Build model alias",
|
|
240
|
+
"verification": "grok inspect --json plus bounded parsing of model fields from reported config layers",
|
|
241
|
+
"sourceUrl": "https://docs.x.ai/build/settings",
|
|
242
|
+
"verifiedAt": "2026-09-21"
|
|
243
|
+
},
|
|
231
244
|
"hermes": {
|
|
232
245
|
"agent": "global-only",
|
|
233
246
|
"skill": "unsupported",
|
|
@@ -253,6 +266,27 @@
|
|
|
253
266
|
"verification": "Parse against OpenHuman definition schema",
|
|
254
267
|
"sourceUrl": "https://github.com/tinyhumansai/openhuman/blob/main/src/openhuman/agent/harness/definition.rs",
|
|
255
268
|
"verifiedAt": "2026-07-20"
|
|
269
|
+
},
|
|
270
|
+
"muse": {
|
|
271
|
+
"agent": "unsupported",
|
|
272
|
+
"skill": "unsupported",
|
|
273
|
+
"globalChild": "informational",
|
|
274
|
+
"identifierSyntax": "Meta provider catalog model_id (Muse Code 1.4.0: muse-spark-1.3 current, muse-spark-1.3-contributor default, muse-spark-1.2, muse-spark-1.2-contributor), passed as muse exec --model",
|
|
275
|
+
"inheritance": "The session model comes from --model, else settings.json `model`, else the provider catalog default; per-agent and per-skill pins are not verified",
|
|
276
|
+
"invalidPinFallback": "muse exits 1 with run.terminal.failed (\"model `<id>` does not exist or you lack access\"); never falls back to another model",
|
|
277
|
+
"configTarget": "$XDG_CONFIG_HOME/muse/settings.json `model` (read-only; AIWG never writes it)",
|
|
278
|
+
"artifactFormat": "Meta provider model id (session-level only)",
|
|
279
|
+
"verification": "muse exec --json --model <id> emits run.model.configured with model_id; observed muse-spark-1.3 and muse-spark-1.3-contributor in native session logs on Muse Code 1.4.0",
|
|
280
|
+
"sourceUrl": "https://github.com/jmagly/aiwg/blob/main/docs/architecture/adr-muse-provider-target.md",
|
|
281
|
+
"verifiedAt": "2026-09-25",
|
|
282
|
+
"effortValues": [
|
|
283
|
+
"minimal",
|
|
284
|
+
"low",
|
|
285
|
+
"medium",
|
|
286
|
+
"high",
|
|
287
|
+
"xhigh",
|
|
288
|
+
"max"
|
|
289
|
+
]
|
|
256
290
|
}
|
|
257
291
|
}
|
|
258
292
|
}
|
|
@@ -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-09-21",
|
|
5
5
|
"staleAfterDays": 90,
|
|
6
6
|
"providers": {
|
|
7
7
|
"antigravity": {
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
"claude": {
|
|
29
29
|
"roles": {
|
|
30
30
|
"reasoning": {
|
|
31
|
-
"id": "claude-opus-
|
|
31
|
+
"id": "claude-opus-5",
|
|
32
32
|
"status": "active",
|
|
33
33
|
"observed": false
|
|
34
34
|
},
|
|
35
35
|
"coding": {
|
|
36
|
-
"id": "claude-sonnet-
|
|
36
|
+
"id": "claude-sonnet-5",
|
|
37
37
|
"status": "active",
|
|
38
38
|
"observed": false
|
|
39
39
|
},
|
|
@@ -43,29 +43,29 @@
|
|
|
43
43
|
"observed": false
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
|
-
"sourceUrl": "https://
|
|
47
|
-
"verifiedAt": "2026-
|
|
46
|
+
"sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview",
|
|
47
|
+
"verifiedAt": "2026-09-21"
|
|
48
48
|
},
|
|
49
49
|
"codex": {
|
|
50
50
|
"roles": {
|
|
51
51
|
"reasoning": {
|
|
52
|
-
"id": "gpt-5.
|
|
52
|
+
"id": "gpt-5.6-sol",
|
|
53
53
|
"status": "active",
|
|
54
54
|
"observed": true
|
|
55
55
|
},
|
|
56
56
|
"coding": {
|
|
57
|
-
"id": "gpt-5.
|
|
57
|
+
"id": "gpt-5.6-terra",
|
|
58
58
|
"status": "active",
|
|
59
59
|
"observed": true
|
|
60
60
|
},
|
|
61
61
|
"efficiency": {
|
|
62
|
-
"id": "gpt-5.
|
|
62
|
+
"id": "gpt-5.6-luna",
|
|
63
63
|
"status": "active",
|
|
64
64
|
"observed": true
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
|
-
"sourceUrl": "https://learn.chatgpt.com/docs/
|
|
68
|
-
"verifiedAt": "2026-
|
|
67
|
+
"sourceUrl": "https://learn.chatgpt.com/docs/models",
|
|
68
|
+
"verifiedAt": "2026-09-21"
|
|
69
69
|
},
|
|
70
70
|
"copilot": {
|
|
71
71
|
"roles": {
|
|
@@ -133,12 +133,12 @@
|
|
|
133
133
|
"opencode": {
|
|
134
134
|
"roles": {
|
|
135
135
|
"reasoning": {
|
|
136
|
-
"id": "anthropic/claude-opus-
|
|
136
|
+
"id": "anthropic/claude-opus-5",
|
|
137
137
|
"status": "unverified",
|
|
138
138
|
"observed": false
|
|
139
139
|
},
|
|
140
140
|
"coding": {
|
|
141
|
-
"id": "anthropic/claude-sonnet-
|
|
141
|
+
"id": "anthropic/claude-sonnet-5",
|
|
142
142
|
"status": "unverified",
|
|
143
143
|
"observed": false
|
|
144
144
|
},
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
}
|
|
150
150
|
},
|
|
151
151
|
"sourceUrl": "https://opencode.ai/docs/models",
|
|
152
|
-
"verifiedAt": "2026-
|
|
152
|
+
"verifiedAt": "2026-09-21"
|
|
153
153
|
},
|
|
154
154
|
"omp": {
|
|
155
155
|
"roles": {
|
|
@@ -298,6 +298,27 @@
|
|
|
298
298
|
"sourceUrl": "https://github.com/jmagly/aiwg/blob/main/docs/architecture/adr-grokbot-provider-target.md",
|
|
299
299
|
"verifiedAt": "2026-09-15"
|
|
300
300
|
},
|
|
301
|
+
"grok-build": {
|
|
302
|
+
"roles": {
|
|
303
|
+
"reasoning": {
|
|
304
|
+
"id": "configured/reasoning",
|
|
305
|
+
"status": "unverified",
|
|
306
|
+
"observed": false
|
|
307
|
+
},
|
|
308
|
+
"coding": {
|
|
309
|
+
"id": "configured/coding",
|
|
310
|
+
"status": "unverified",
|
|
311
|
+
"observed": false
|
|
312
|
+
},
|
|
313
|
+
"efficiency": {
|
|
314
|
+
"id": "configured/efficiency",
|
|
315
|
+
"status": "unverified",
|
|
316
|
+
"observed": false
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
"sourceUrl": "https://docs.x.ai/build/settings",
|
|
320
|
+
"verifiedAt": "2026-09-21"
|
|
321
|
+
},
|
|
301
322
|
"hermes": {
|
|
302
323
|
"roles": {
|
|
303
324
|
"reasoning": {
|
|
@@ -339,6 +360,27 @@
|
|
|
339
360
|
},
|
|
340
361
|
"sourceUrl": "https://github.com/tinyhumansai/openhuman/blob/main/src/openhuman/agent/harness/definition.rs",
|
|
341
362
|
"verifiedAt": "2026-07-20"
|
|
363
|
+
},
|
|
364
|
+
"muse": {
|
|
365
|
+
"roles": {
|
|
366
|
+
"reasoning": {
|
|
367
|
+
"id": "muse-spark-1.3",
|
|
368
|
+
"status": "active",
|
|
369
|
+
"observed": true
|
|
370
|
+
},
|
|
371
|
+
"coding": {
|
|
372
|
+
"id": "muse-spark-1.3",
|
|
373
|
+
"status": "active",
|
|
374
|
+
"observed": true
|
|
375
|
+
},
|
|
376
|
+
"efficiency": {
|
|
377
|
+
"id": "muse-spark-1.3",
|
|
378
|
+
"status": "active",
|
|
379
|
+
"observed": true
|
|
380
|
+
}
|
|
381
|
+
},
|
|
382
|
+
"sourceUrl": "https://dev.meta.ai/docs/models",
|
|
383
|
+
"verifiedAt": "2026-09-25"
|
|
342
384
|
}
|
|
343
385
|
}
|
|
344
386
|
}
|
package/bin/aiwg.mjs
CHANGED
|
@@ -149,6 +149,8 @@ const FAST_HELP_TEXT = `
|
|
|
149
149
|
EVIDENCE
|
|
150
150
|
evidence export --output <dir> Package portable activity, report, source, eval, and provenance evidence
|
|
151
151
|
evidence verify <bundle> Verify every member hash and the bundle checkpoint
|
|
152
|
+
effect record|lookup|reconcile Record, look up or reconcile a side effect in the signed effect ledger
|
|
153
|
+
effect verify|checkpoint|keys Verify the effect ledger, checkpoint it, or manage its signing key
|
|
152
154
|
|
|
153
155
|
SCAFFOLDING
|
|
154
156
|
new-bundle <name> Create project-local bundle (--type extension|addon|framework|plugin|provider, --starter skill|rule|agent|minimal, --dry-run)
|
package/dist/src/api/index.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export * from '../schema/index.js';
|
|
|
25
25
|
export * from '../dataset/index.js';
|
|
26
26
|
export * from '../network-analysis/index.js';
|
|
27
27
|
export * from '../decision/index.js';
|
|
28
|
+
export * from '../effects/index.js';
|
|
28
29
|
export { ARTIFACT_TRUST_ROOT_MEDIA_TYPE, ARTIFACT_TRUST_ROOT_SCHEMA_VERSION, ARTIFACT_TRUST_STATE_SCHEMA_VERSION, bootstrapTrustRoot, parseTrustRoot, parseTrustState, readTrustState, validateTrustRoot, validateTrustState, verifyRootTransition, writeTrustState, channelStateKey, canonicalJson, dssePae, publicKeyFingerprint, sha256, type ArtifactTrustRoot, type ArtifactTrustState, type RootBootstrapResult, type RootTransitionResult, type ArtifactTrustPolicySettings, type TrustedChannelState, } from '../security/artifact-trust.js';
|
|
29
30
|
export * from '../writing/writer-profile.js';
|
|
30
31
|
export * from '../writing/writer-profile-store.js';
|
package/dist/src/api/index.js
CHANGED
|
@@ -25,6 +25,7 @@ export * from '../schema/index.js';
|
|
|
25
25
|
export * from '../dataset/index.js';
|
|
26
26
|
export * from '../network-analysis/index.js';
|
|
27
27
|
export * from '../decision/index.js';
|
|
28
|
+
export * from '../effects/index.js';
|
|
28
29
|
export { ARTIFACT_TRUST_ROOT_MEDIA_TYPE, ARTIFACT_TRUST_ROOT_SCHEMA_VERSION, ARTIFACT_TRUST_STATE_SCHEMA_VERSION, bootstrapTrustRoot, parseTrustRoot, parseTrustState, readTrustState, validateTrustRoot, validateTrustState, verifyRootTransition, writeTrustState, channelStateKey, canonicalJson, dssePae, publicKeyFingerprint, sha256, } from '../security/artifact-trust.js';
|
|
29
30
|
export * from '../writing/writer-profile.js';
|
|
30
31
|
export * from '../writing/writer-profile-store.js';
|
|
@@ -187,7 +187,7 @@ function handleUsingRlm(args) {
|
|
|
187
187
|
inputs: [{ artifactId: f, contentHash }],
|
|
188
188
|
query: ENRICHMENT_PROMPT,
|
|
189
189
|
subPrompt: ENRICHMENT_PROMPT,
|
|
190
|
-
model: 'claude-sonnet-
|
|
190
|
+
model: 'claude-sonnet-5',
|
|
191
191
|
aggregateStrategy: 'json-merge',
|
|
192
192
|
});
|
|
193
193
|
plans.push({
|
|
@@ -154,6 +154,16 @@ function validateInput(input) {
|
|
|
154
154
|
function hashRecord(value) {
|
|
155
155
|
return `sha256:${createHash('sha256').update(canonicalJson(value)).digest('hex')}`;
|
|
156
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Deterministic JSON for decision hashes. This is deliberately NOT the RFC 8785
|
|
159
|
+
* canonicalizer (`security/artifact-trust.canonicalJson`): keys are ordered with
|
|
160
|
+
* `localeCompare` rather than by UTF-16 code unit, and `undefined` members are
|
|
161
|
+
* dropped. The two agree when no sibling keys differ in case or punctuation
|
|
162
|
+
* order, but not in general (for example `{"B","_c","a"}` orders as
|
|
163
|
+
* `_c,a,B` here and `B,_c,a` under RFC 8785). Existing record_hash and
|
|
164
|
+
* context_digest values in stored decision chains depend on this ordering, so
|
|
165
|
+
* it is kept; test/unit/security/canonical-json-parity.test.ts pins it.
|
|
166
|
+
*/
|
|
157
167
|
function canonicalJson(value) {
|
|
158
168
|
if (Array.isArray(value))
|
|
159
169
|
return `[${value.map(canonicalJson).join(',')}]`;
|
|
@@ -38,51 +38,84 @@ function parseCredentials(raw) {
|
|
|
38
38
|
}
|
|
39
39
|
return value;
|
|
40
40
|
}
|
|
41
|
-
const
|
|
42
|
-
const
|
|
41
|
+
export const DEFAULT_CREDENTIAL_SERVICE = "releases.aiwg.io";
|
|
42
|
+
export const DEFAULT_CREDENTIAL_ACCOUNT = "aiwg-cli";
|
|
43
|
+
function resolveIdentity(identity = {}) {
|
|
44
|
+
const service = identity.service ?? DEFAULT_CREDENTIAL_SERVICE;
|
|
45
|
+
const account = identity.account ?? DEFAULT_CREDENTIAL_ACCOUNT;
|
|
46
|
+
for (const [label, value] of [["service", service], ["account", account]]) {
|
|
47
|
+
// Values reach native helpers as argv entries or PowerShell string literals; refuse
|
|
48
|
+
// empty values and control characters rather than depend on each helper's parsing.
|
|
49
|
+
if (typeof value !== "string" || !value || value.length > 256 || /[\u0000-\u001f\u007f]/.test(value)) {
|
|
50
|
+
throw new Error(`credential store ${label} must be a non-empty string without control characters`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { service, account };
|
|
54
|
+
}
|
|
55
|
+
/** Quote a value as a PowerShell single-quoted string literal. */
|
|
56
|
+
function powershellLiteral(value) {
|
|
57
|
+
return `'${value.replace(/['\u2018\u2019\u201a\u201b]/g, "$&$&")}'`;
|
|
58
|
+
}
|
|
43
59
|
class NativeCredentialStore {
|
|
44
60
|
run;
|
|
45
|
-
|
|
61
|
+
service;
|
|
62
|
+
account;
|
|
63
|
+
constructor(run = defaultCommandRunner, identity = {}) {
|
|
46
64
|
this.run = run;
|
|
65
|
+
({ service: this.service, account: this.account } = resolveIdentity(identity));
|
|
47
66
|
}
|
|
67
|
+
async load() { const raw = await this.loadRaw(); return raw === null ? null : this.parse(raw); }
|
|
68
|
+
async save(credentials) { await this.saveRaw(JSON.stringify(credentials)); }
|
|
69
|
+
async loadSecret() { const raw = await this.loadRaw(); return raw === null ? null : raw.trim(); }
|
|
70
|
+
async saveSecret(value) { await this.saveRaw(requireSecretValue(value)); }
|
|
71
|
+
async deleteSecret() { await this.delete(); }
|
|
48
72
|
parse(raw) { return parseCredentials(raw.trim()); }
|
|
49
73
|
}
|
|
74
|
+
function requireSecretValue(value) {
|
|
75
|
+
if (typeof value !== "string" || !value || value.length > 16384 || /[\u0000-\u001f\u007f]/.test(value)) {
|
|
76
|
+
throw new Error("secret value must be a non-empty single-line string");
|
|
77
|
+
}
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
50
80
|
export class MacOsKeychainStore extends NativeCredentialStore {
|
|
51
|
-
metadata = { provider: "macos-keychain", location: `Keychain:${
|
|
52
|
-
async
|
|
53
|
-
const result = await this.run("security", ["find-generic-password", "-a",
|
|
54
|
-
return result.exitCode === 44 ? null : result.exitCode === 0 ?
|
|
81
|
+
metadata = { provider: "macos-keychain", location: `Keychain:${this.service}/${this.account}` };
|
|
82
|
+
async loadRaw() {
|
|
83
|
+
const result = await this.run("security", ["find-generic-password", "-a", this.account, "-s", this.service, "-w"]);
|
|
84
|
+
return result.exitCode === 44 ? null : result.exitCode === 0 ? result.stdout : Promise.reject(new Error("macOS Keychain read failed"));
|
|
55
85
|
}
|
|
56
|
-
async
|
|
57
|
-
const result = await this.run("security", ["add-generic-password", "-U", "-a",
|
|
86
|
+
async saveRaw(value) {
|
|
87
|
+
const result = await this.run("security", ["add-generic-password", "-U", "-a", this.account, "-s", this.service, "-w"], value);
|
|
58
88
|
if (result.exitCode !== 0)
|
|
59
89
|
throw new Error("macOS Keychain write failed");
|
|
60
90
|
}
|
|
61
|
-
async delete() { await this.run("security", ["delete-generic-password", "-a",
|
|
91
|
+
async delete() { await this.run("security", ["delete-generic-password", "-a", this.account, "-s", this.service]); }
|
|
62
92
|
}
|
|
63
93
|
export class LinuxSecretServiceStore extends NativeCredentialStore {
|
|
64
|
-
metadata = { provider: "linux-secret-service", location: `SecretService:${
|
|
65
|
-
async
|
|
66
|
-
const result = await this.run("secret-tool", ["lookup", "service",
|
|
67
|
-
return result.exitCode === 1 ? null : result.exitCode === 0 ?
|
|
94
|
+
metadata = { provider: "linux-secret-service", location: `SecretService:${this.service}/${this.account}` };
|
|
95
|
+
async loadRaw() {
|
|
96
|
+
const result = await this.run("secret-tool", ["lookup", "service", this.service, "account", this.account]);
|
|
97
|
+
return result.exitCode === 1 ? null : result.exitCode === 0 ? result.stdout : Promise.reject(new Error("Linux Secret Service read failed"));
|
|
68
98
|
}
|
|
69
|
-
async
|
|
70
|
-
const result = await this.run("secret-tool", ["store", `--label=AIWG ${
|
|
99
|
+
async saveRaw(value) {
|
|
100
|
+
const result = await this.run("secret-tool", ["store", `--label=AIWG ${this.service}`, "service", this.service, "account", this.account], value);
|
|
71
101
|
if (result.exitCode !== 0)
|
|
72
102
|
throw new Error("Linux Secret Service write failed");
|
|
73
103
|
}
|
|
74
|
-
async delete() { await this.run("secret-tool", ["clear", "service",
|
|
104
|
+
async delete() { await this.run("secret-tool", ["clear", "service", this.service, "account", this.account]); }
|
|
75
105
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const
|
|
106
|
+
// Scripts are built from the store identity; the default identity yields the exact
|
|
107
|
+
// scripts used before the identity became configurable.
|
|
108
|
+
const windowsRead = (target) => `$v=New-Object Windows.Security.Credentials.PasswordVault;try{$c=$v.Retrieve(${target});$c.RetrievePassword();[Console]::Out.Write($c.Password)}catch{exit 1}`;
|
|
109
|
+
const windowsWrite = (target) => `$s=[Console]::In.ReadToEnd();$v=New-Object Windows.Security.Credentials.PasswordVault;$v.Add((New-Object Windows.Security.Credentials.PasswordCredential(${target},$s)))`;
|
|
110
|
+
const windowsDelete = (target) => `$v=New-Object Windows.Security.Credentials.PasswordVault;try{$c=$v.Retrieve(${target});$v.Remove($c)}catch{}`;
|
|
79
111
|
export class WindowsCredentialManagerStore extends NativeCredentialStore {
|
|
80
|
-
metadata = { provider: "windows-credential-manager", location: `CredentialManager:${
|
|
112
|
+
metadata = { provider: "windows-credential-manager", location: `CredentialManager:${this.service}/${this.account}` };
|
|
113
|
+
get target() { return `${powershellLiteral(this.service)},${powershellLiteral(this.account)}`; }
|
|
81
114
|
execute(script, stdin = "") { return this.run("powershell.exe", ["-NoLogo", "-NoProfile", "-NonInteractive", "-Command", script], stdin); }
|
|
82
|
-
async
|
|
83
|
-
async
|
|
115
|
+
async loadRaw() { const result = await this.execute(windowsRead(this.target)); return result.exitCode === 1 ? null : result.exitCode === 0 ? result.stdout : Promise.reject(new Error("Windows Credential Manager read failed")); }
|
|
116
|
+
async saveRaw(value) { if ((await this.execute(windowsWrite(this.target), value)).exitCode !== 0)
|
|
84
117
|
throw new Error("Windows Credential Manager write failed"); }
|
|
85
|
-
async delete() { await this.execute(
|
|
118
|
+
async delete() { await this.execute(windowsDelete(this.target)); }
|
|
86
119
|
}
|
|
87
120
|
export class FileCredentialStore {
|
|
88
121
|
pathname;
|
|
@@ -136,12 +169,79 @@ export function createCredentialStore(options = {}) {
|
|
|
136
169
|
if (options.useFile)
|
|
137
170
|
return new FileCredentialStore(options.pathname || defaultCredentialFile(), options.allowFile === true);
|
|
138
171
|
const platform = options.platform || process.platform;
|
|
172
|
+
const identity = { service: options.service, account: options.account };
|
|
139
173
|
if (platform === "darwin")
|
|
140
|
-
return new MacOsKeychainStore(options.runner);
|
|
174
|
+
return new MacOsKeychainStore(options.runner, identity);
|
|
141
175
|
if (platform === "win32")
|
|
142
|
-
return new WindowsCredentialManagerStore(options.runner);
|
|
176
|
+
return new WindowsCredentialManagerStore(options.runner, identity);
|
|
143
177
|
if (platform === "linux")
|
|
144
|
-
return new LinuxSecretServiceStore(options.runner);
|
|
178
|
+
return new LinuxSecretServiceStore(options.runner, identity);
|
|
145
179
|
throw new Error("no native credential store is available; explicitly opt in to the mode-0600 file fallback");
|
|
146
180
|
}
|
|
181
|
+
/** Mode-0600 file secret, used only on explicit opt-in (tests, or hosts without a native store). */
|
|
182
|
+
export class FileSecretStore {
|
|
183
|
+
pathname;
|
|
184
|
+
explicitlyAllowed;
|
|
185
|
+
metadata;
|
|
186
|
+
constructor(pathname, explicitlyAllowed) {
|
|
187
|
+
this.pathname = pathname;
|
|
188
|
+
this.explicitlyAllowed = explicitlyAllowed;
|
|
189
|
+
this.pathname = path.resolve(pathname);
|
|
190
|
+
this.metadata = { provider: "file", location: this.pathname };
|
|
191
|
+
}
|
|
192
|
+
assertAllowed() { if (!this.explicitlyAllowed)
|
|
193
|
+
throw new Error("secret file fallback requires an explicit opt-in"); }
|
|
194
|
+
async loadSecret() {
|
|
195
|
+
this.assertAllowed();
|
|
196
|
+
try {
|
|
197
|
+
const stat = await fs.lstat(this.pathname);
|
|
198
|
+
if (!stat.isFile() || stat.isSymbolicLink() || (stat.mode & 0o077) !== 0)
|
|
199
|
+
throw new Error("secret file must be a non-symlink mode-0600 regular file");
|
|
200
|
+
return (await fs.readFile(this.pathname, "utf8")).trim() || null;
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
if (error.code === "ENOENT")
|
|
204
|
+
return null;
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async saveSecret(value) {
|
|
209
|
+
this.assertAllowed();
|
|
210
|
+
requireSecretValue(value);
|
|
211
|
+
await fs.mkdir(path.dirname(this.pathname), { recursive: true, mode: 0o700 });
|
|
212
|
+
const temporary = `${this.pathname}.${process.pid}.tmp`;
|
|
213
|
+
await fs.writeFile(temporary, `${value}\n`, { mode: 0o600, flag: "wx" });
|
|
214
|
+
await fs.rename(temporary, this.pathname);
|
|
215
|
+
await fs.chmod(this.pathname, 0o600);
|
|
216
|
+
}
|
|
217
|
+
async deleteSecret() { this.assertAllowed(); await fs.unlink(this.pathname).catch((error) => { if (error.code !== "ENOENT")
|
|
218
|
+
throw error; }); }
|
|
219
|
+
}
|
|
220
|
+
export class MemorySecretStore {
|
|
221
|
+
metadata = { provider: "memory", location: "injected-memory-store" };
|
|
222
|
+
#value = null;
|
|
223
|
+
async loadSecret() { return this.#value; }
|
|
224
|
+
async saveSecret(value) { this.#value = requireSecretValue(value); }
|
|
225
|
+
async deleteSecret() { this.#value = null; }
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Raw-secret store on the host secret service. `service` and `account` name the
|
|
229
|
+
* entry; callers pick an identity distinct from the release credential.
|
|
230
|
+
*/
|
|
231
|
+
export function createSecretStore(options) {
|
|
232
|
+
if (options.useFile) {
|
|
233
|
+
if (!options.pathname)
|
|
234
|
+
throw new Error("secret file fallback requires an explicit pathname");
|
|
235
|
+
return new FileSecretStore(options.pathname, options.allowFile === true);
|
|
236
|
+
}
|
|
237
|
+
const platform = options.platform || process.platform;
|
|
238
|
+
const identity = { service: options.service, account: options.account };
|
|
239
|
+
if (platform === "darwin")
|
|
240
|
+
return new MacOsKeychainStore(options.runner, identity);
|
|
241
|
+
if (platform === "win32")
|
|
242
|
+
return new WindowsCredentialManagerStore(options.runner, identity);
|
|
243
|
+
if (platform === "linux")
|
|
244
|
+
return new LinuxSecretServiceStore(options.runner, identity);
|
|
245
|
+
throw new Error("no native secret store is available; explicitly opt in to the mode-0600 file fallback");
|
|
246
|
+
}
|
|
147
247
|
//# sourceMappingURL=credential-store.js.map
|