@aiwg/cli 2026.9.19 → 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.
Files changed (272) hide show
  1. package/agentic/code/providers/capability-matrix.yaml +58 -6
  2. package/agentic/code/providers/model-capabilities.v1.json +34 -0
  3. package/agentic/code/providers/model-catalog.v1.json +55 -13
  4. package/bin/aiwg.mjs +2 -0
  5. package/dist/src/api/index.d.ts +1 -0
  6. package/dist/src/api/index.js +1 -0
  7. package/dist/src/artifacts/enrichment/cli.js +1 -1
  8. package/dist/src/artifacts/views/cli.js +1 -1
  9. package/dist/src/audit/operator-decision.js +10 -0
  10. package/dist/src/auth/credential-store.js +127 -27
  11. package/dist/src/catalog/builtin-models.json +272 -40
  12. package/dist/src/catalog/cli.js +1 -1
  13. package/dist/src/catalog/cli.mjs +1 -1
  14. package/dist/src/cli/handlers/effect.js +872 -0
  15. package/dist/src/cli/handlers/help.js +2 -0
  16. package/dist/src/cli/handlers/index.js +4 -2
  17. package/dist/src/cli/handlers/models.js +41 -10
  18. package/dist/src/cli/handlers/ralph.js +1 -1
  19. package/dist/src/cli/handlers/sessions.js +113 -37
  20. package/dist/src/cli/handlers/subcommands.js +31 -0
  21. package/dist/src/cli/handlers/use.js +46 -9
  22. package/dist/src/cli/handlers/utilities.js +10 -0
  23. package/dist/src/cli/handlers/workspace.js +3 -1
  24. package/dist/src/cli/scope-resolver.js +112 -9
  25. package/dist/src/cli/services/deployment-verification.js +5 -0
  26. package/dist/src/config/aiwg-config.js +3 -0
  27. package/dist/src/decision/acceptance-rollout.js +93 -0
  28. package/dist/src/decision/acceptance.js +175 -0
  29. package/dist/src/decision/adapters/jev.js +234 -13
  30. package/dist/src/decision/adapters/llm-subagent.js +60 -12
  31. package/dist/src/decision/admission.js +550 -0
  32. package/dist/src/decision/batch-benchmark.js +47 -0
  33. package/dist/src/decision/batch-receipts/accounting.js +75 -0
  34. package/dist/src/decision/batch-receipts/export.js +40 -0
  35. package/dist/src/decision/batch-receipts/index.js +9 -0
  36. package/dist/src/decision/batch-receipts/protection.js +40 -0
  37. package/dist/src/decision/batch-receipts/receipt.js +44 -0
  38. package/dist/src/decision/batch-receipts/result-store.js +341 -0
  39. package/dist/src/decision/batch-receipts/store.js +362 -0
  40. package/dist/src/decision/batch-receipts/types.js +2 -0
  41. package/dist/src/decision/batch-receipts/validate.js +127 -0
  42. package/dist/src/decision/batch.js +68 -0
  43. package/dist/src/decision/calibration/index.js +4 -0
  44. package/dist/src/decision/calibration/receipts.js +130 -0
  45. package/dist/src/decision/calibration/registry.js +258 -0
  46. package/dist/src/decision/calibration/types.js +2 -0
  47. package/dist/src/decision/compile-cache/benchmark.js +62 -0
  48. package/dist/src/decision/compile-cache/compatibility.js +65 -0
  49. package/dist/src/decision/compile-cache/file-store.js +280 -0
  50. package/dist/src/decision/compile-cache/identity.js +26 -0
  51. package/dist/src/decision/compile-cache/index.js +9 -0
  52. package/dist/src/decision/compile-cache/prefix.js +21 -0
  53. package/dist/src/decision/compile-cache/records.js +86 -0
  54. package/dist/src/decision/compile-cache/runtime.js +68 -0
  55. package/dist/src/decision/compile-cache/store.js +108 -0
  56. package/dist/src/decision/compile-cache/types.js +2 -0
  57. package/dist/src/decision/context-plan.js +234 -0
  58. package/dist/src/decision/context-qualification.js +60 -0
  59. package/dist/src/decision/ensemble/aggregate.js +215 -0
  60. package/dist/src/decision/ensemble/contract.js +316 -0
  61. package/dist/src/decision/ensemble/drift.js +51 -0
  62. package/dist/src/decision/ensemble/index.js +6 -0
  63. package/dist/src/decision/ensemble/report.js +71 -0
  64. package/dist/src/decision/ensemble/types.js +2 -0
  65. package/dist/src/decision/evaluate.js +1024 -78
  66. package/dist/src/decision/file-lifecycle-store.js +168 -0
  67. package/dist/src/decision/graph-beam.js +40 -0
  68. package/dist/src/decision/graph-budget.js +110 -0
  69. package/dist/src/decision/graph-decision-bridge.js +93 -0
  70. package/dist/src/decision/graph-evidence.js +123 -0
  71. package/dist/src/decision/graph-flow-adapter.js +56 -0
  72. package/dist/src/decision/graph-flow.js +105 -0
  73. package/dist/src/decision/graph-parallel.js +79 -0
  74. package/dist/src/decision/graph-patterns.js +20 -0
  75. package/dist/src/decision/graph-run-store.js +66 -0
  76. package/dist/src/decision/graph-run.js +166 -0
  77. package/dist/src/decision/graph-skill-bridge.js +91 -0
  78. package/dist/src/decision/graph-templates.js +56 -0
  79. package/dist/src/decision/graph.js +115 -0
  80. package/dist/src/decision/index.js +35 -0
  81. package/dist/src/decision/job-accounting.js +93 -0
  82. package/dist/src/decision/job-contract.js +186 -0
  83. package/dist/src/decision/job-effects.js +95 -0
  84. package/dist/src/decision/job-evaluate.js +80 -0
  85. package/dist/src/decision/job-gateway.js +121 -0
  86. package/dist/src/decision/job-http.js +194 -0
  87. package/dist/src/decision/job-payload-store.js +258 -0
  88. package/dist/src/decision/job-poll-limiter.js +92 -0
  89. package/dist/src/decision/job-quota.js +158 -0
  90. package/dist/src/decision/job-runtime.js +240 -0
  91. package/dist/src/decision/job-scheduler.js +26 -0
  92. package/dist/src/decision/job-service.js +117 -0
  93. package/dist/src/decision/job-store.js +264 -0
  94. package/dist/src/decision/job-worker.js +141 -0
  95. package/dist/src/decision/lifecycle.js +148 -0
  96. package/dist/src/decision/patterns/artifacts.js +173 -0
  97. package/dist/src/decision/patterns/catalog.js +108 -0
  98. package/dist/src/decision/patterns/durable-review.js +237 -0
  99. package/dist/src/decision/patterns/index.js +8 -0
  100. package/dist/src/decision/patterns/playground.js +401 -0
  101. package/dist/src/decision/patterns/recorded.js +43 -0
  102. package/dist/src/decision/patterns/specs.js +174 -0
  103. package/dist/src/decision/patterns/types.js +2 -0
  104. package/dist/src/decision/portable-secrets.js +53 -0
  105. package/dist/src/decision/projection.js +210 -0
  106. package/dist/src/decision/qualification/capture.js +67 -0
  107. package/dist/src/decision/qualification/drift.js +68 -0
  108. package/dist/src/decision/qualification/gate-evidence.js +172 -0
  109. package/dist/src/decision/qualification/gates.js +83 -0
  110. package/dist/src/decision/qualification/index.js +12 -0
  111. package/dist/src/decision/qualification/load.js +275 -0
  112. package/dist/src/decision/qualification/manifest.js +37 -0
  113. package/dist/src/decision/qualification/privacy.js +41 -0
  114. package/dist/src/decision/qualification/quality.js +213 -0
  115. package/dist/src/decision/qualification/release.js +116 -0
  116. package/dist/src/decision/qualification/runner.js +408 -0
  117. package/dist/src/decision/qualification/types.js +2 -0
  118. package/dist/src/decision/receipts.js +30 -7
  119. package/dist/src/decision/result-cache/index.js +6 -0
  120. package/dist/src/decision/result-cache/integrity.js +28 -0
  121. package/dist/src/decision/result-cache/key.js +28 -0
  122. package/dist/src/decision/result-cache/service.js +92 -0
  123. package/dist/src/decision/result-cache/store.js +327 -0
  124. package/dist/src/decision/result-cache/types.js +3 -0
  125. package/dist/src/decision/review/authorization.js +110 -0
  126. package/dist/src/decision/review/effect-ledger-adapter.js +321 -0
  127. package/dist/src/decision/review/index.js +12 -0
  128. package/dist/src/decision/review/migrate.js +34 -0
  129. package/dist/src/decision/review/operator-audit.js +59 -0
  130. package/dist/src/decision/review/recovery-adapters.js +252 -0
  131. package/dist/src/decision/review/recovery.js +33 -0
  132. package/dist/src/decision/review/service.js +498 -0
  133. package/dist/src/decision/review/store.js +219 -0
  134. package/dist/src/decision/review/types.js +2 -0
  135. package/dist/src/decision/review/validate.js +205 -0
  136. package/dist/src/decision/scheduler.js +115 -0
  137. package/dist/src/decision/telemetry/context.js +42 -0
  138. package/dist/src/decision/telemetry/debug-sidecar.js +152 -0
  139. package/dist/src/decision/telemetry/exporter.js +77 -0
  140. package/dist/src/decision/telemetry/file-debug-backend.js +112 -0
  141. package/dist/src/decision/telemetry/index.js +13 -0
  142. package/dist/src/decision/telemetry/mapping.js +146 -0
  143. package/dist/src/decision/telemetry/metrics.js +164 -0
  144. package/dist/src/decision/telemetry/otlp-http.js +183 -0
  145. package/dist/src/decision/telemetry/redaction.js +93 -0
  146. package/dist/src/decision/telemetry/retention.js +109 -0
  147. package/dist/src/decision/telemetry/runtime.js +310 -0
  148. package/dist/src/decision/telemetry/trace.js +158 -0
  149. package/dist/src/decision/telemetry/types.js +3 -0
  150. package/dist/src/decision/validate.js +135 -5
  151. package/dist/src/effects/checkpoint-sinks.js +94 -0
  152. package/dist/src/effects/checkpoint.js +76 -0
  153. package/dist/src/effects/decision-links.js +54 -0
  154. package/dist/src/effects/errors.js +48 -0
  155. package/dist/src/effects/identity.js +178 -0
  156. package/dist/src/effects/index.js +25 -0
  157. package/dist/src/effects/keyring.js +160 -0
  158. package/dist/src/effects/keys.js +130 -0
  159. package/dist/src/effects/ledger.js +435 -0
  160. package/dist/src/effects/lifecycle.js +110 -0
  161. package/dist/src/effects/lock-recovery.js +269 -0
  162. package/dist/src/effects/reader.js +103 -0
  163. package/dist/src/effects/records.js +114 -0
  164. package/dist/src/effects/redaction.js +51 -0
  165. package/dist/src/effects/schema.js +73 -0
  166. package/dist/src/effects/store.js +239 -0
  167. package/dist/src/effects/types.js +49 -0
  168. package/dist/src/effects/verifiers/decision.js +168 -0
  169. package/dist/src/effects/verifiers/file.js +106 -0
  170. package/dist/src/effects/verifiers/git.js +206 -0
  171. package/dist/src/effects/verifiers/index.js +90 -0
  172. package/dist/src/effects/verifiers/registry.js +148 -0
  173. package/dist/src/effects/verifiers/review.js +123 -0
  174. package/dist/src/effects/verifiers/tracker.js +299 -0
  175. package/dist/src/effects/verifiers/types.js +21 -0
  176. package/dist/src/effects/verify.js +295 -0
  177. package/dist/src/evidence/bundle.js +2 -0
  178. package/dist/src/extensions/commands/definitions.js +28 -0
  179. package/dist/src/extensions/manifest.js +1 -0
  180. package/dist/src/marketplace/provenance.js +25 -27
  181. package/dist/src/mcp/cli.mjs +11 -1
  182. package/dist/src/mcp/grok-build-config.mjs +189 -0
  183. package/dist/src/mcp/registry.js +21 -1
  184. package/dist/src/mcp/registry.mjs +20 -1
  185. package/dist/src/models/grok-build-models.js +356 -0
  186. package/dist/src/models/index.js +1 -0
  187. package/dist/src/models/model-capabilities.v1.json +34 -0
  188. package/dist/src/models/model-catalog.v1.json +55 -13
  189. package/dist/src/models/model-discovery.js +41 -5
  190. package/dist/src/models/provider-policy.js +3 -2
  191. package/dist/src/plugin/skill-command-translator.js +1 -0
  192. package/dist/src/providers/capability-matrix.yaml +58 -6
  193. package/dist/src/providers/grok-build-acp.js +192 -0
  194. package/dist/src/providers/grok-build-dispatch.js +251 -0
  195. package/dist/src/providers/grok-build-headless.js +170 -0
  196. package/dist/src/providers/muse-paths.js +105 -0
  197. package/dist/src/providers/provider-definitions.js +93 -7
  198. package/dist/src/providers/provider-definitions.mjs +21 -1
  199. package/dist/src/providers/provider-inventory.js +3 -0
  200. package/dist/src/security/artifact-attestation.js +4 -8
  201. package/dist/src/security/signing.js +119 -0
  202. package/dist/src/sessions/adapters/grok-build.js +187 -0
  203. package/dist/src/sessions/adapters/muse.js +412 -0
  204. package/dist/src/sessions/contracts.js +1 -1
  205. package/dist/src/sessions/grok-build-cli.js +196 -0
  206. package/dist/src/sessions/index.js +3 -0
  207. package/dist/src/sessions/workspace-discovery.js +9 -5
  208. package/dist/src/skills/deployer.js +33 -5
  209. package/dist/src/smiths/context-pipeline/claude-hook.js +2 -0
  210. package/dist/src/smiths/context-pipeline/context-file-safety.js +18 -0
  211. package/dist/src/smiths/context-pipeline/finalization.js +1 -32
  212. package/dist/src/smiths/context-pipeline/generator.js +12 -0
  213. package/dist/src/smiths/context-pipeline/index.js +1 -1
  214. package/dist/src/smiths/context-pipeline/managed-hook.js +2 -0
  215. package/dist/src/smiths/context-pipeline/muse-bridge.js +50 -0
  216. package/dist/src/smiths/context-pipeline/provider-policy.js +5 -0
  217. package/dist/src/smiths/context-pipeline/workspace-context.js +22 -16
  218. package/dist/src/smiths/hook-bridge/grok-build-translator.js +64 -0
  219. package/dist/src/smiths/hook-bridge/index.js +3 -0
  220. package/dist/src/smiths/hook-bridge/shim.js +2 -0
  221. package/dist/src/smiths/hook-bridge/types.js +5 -0
  222. package/dist/src/smiths/skillsmith/collision-detector.js +1 -0
  223. package/dist/src/storage/protected-files.js +102 -0
  224. package/dist/src/tracker/forge-http.js +371 -0
  225. package/dist/src/tracker/project-inputs.js +41 -0
  226. package/package.json +2 -1
  227. package/schemas/decision/BatchReceipt.v1.schema.json +50 -0
  228. package/schemas/decision/CalibrationArtifact.v1.schema.json +76 -0
  229. package/schemas/decision/CalibrationCompatibility.v1.schema.json +18 -0
  230. package/schemas/decision/CalibrationGovernanceReceipt.v1.schema.json +44 -0
  231. package/schemas/decision/DecisionAdmissionEvidence.v1.schema.json +43 -0
  232. package/schemas/decision/DecisionBinding.schema.json +309 -0
  233. package/schemas/decision/DecisionBinding.v1alpha2.schema.json +369 -0
  234. package/schemas/decision/DecisionCacheTelemetry.v1.schema.json +20 -0
  235. package/schemas/decision/DecisionChampionChallenger.v1.schema.json +100 -0
  236. package/schemas/decision/DecisionCompileCacheEntry.v1.schema.json +35 -0
  237. package/schemas/decision/DecisionCompileCacheIdentity.v1.schema.json +26 -0
  238. package/schemas/decision/DecisionCompileCacheTombstone.v1.schema.json +31 -0
  239. package/schemas/decision/DecisionContextEvidence.v1.schema.json +136 -0
  240. package/schemas/decision/DecisionDefinition.schema.json +159 -0
  241. package/schemas/decision/DecisionDefinition.v1alpha2.schema.json +203 -0
  242. package/schemas/decision/DecisionDriftResponse.v1.schema.json +55 -0
  243. package/schemas/decision/DecisionEnsembleAggregate.v1.schema.json +86 -0
  244. package/schemas/decision/DecisionEnsembleIntegrityReport.v1.schema.json +64 -0
  245. package/schemas/decision/DecisionEnsemblePolicy.v1.schema.json +130 -0
  246. package/schemas/decision/DecisionGraph.v1.schema.json +77 -0
  247. package/schemas/decision/DecisionJob.v1.schema.json +71 -0
  248. package/schemas/decision/DecisionLifecyclePolicy.v1.schema.json +52 -0
  249. package/schemas/decision/DecisionProjectionPolicy.v1.schema.json +65 -0
  250. package/schemas/decision/DecisionProviderPrefixCompatibility.v1.schema.json +45 -0
  251. package/schemas/decision/DecisionProviderPrefixEvidence.v1.schema.json +17 -0
  252. package/schemas/decision/DecisionProviderPrefixIdentity.v1.schema.json +36 -0
  253. package/schemas/decision/DecisionResult.schema.json +524 -0
  254. package/schemas/decision/DecisionResult.v1alpha2.schema.json +619 -0
  255. package/schemas/decision/DecisionResultCacheEntry.v1.schema.json +53 -0
  256. package/schemas/decision/DecisionReview.schema.json +29 -0
  257. package/schemas/decision/DecisionRuleset.schema.json +313 -0
  258. package/schemas/decision/DecisionRuleset.v1alpha2.schema.json +313 -0
  259. package/schemas/decision/DecisionTelemetryTrace.v1.schema.json +95 -0
  260. package/schemas/decision/RulesetResult.schema.json +721 -0
  261. package/schemas/decision/RulesetResult.v1alpha2.schema.json +891 -0
  262. package/schemas/security/pr-evidence-receipt.v1.schema.json +77 -0
  263. package/schemas/security/threat-assessment-report.v1.schema.json +71 -1
  264. package/tools/agents/deploy-agents.mjs +21 -6
  265. package/tools/agents/providers/base.mjs +7 -4
  266. package/tools/agents/providers/codex.mjs +1 -1
  267. package/tools/agents/providers/grok-build.d.mts +7 -0
  268. package/tools/agents/providers/grok-build.mjs +249 -9
  269. package/tools/agents/providers/model-role.mjs +6 -3
  270. package/tools/agents/providers/muse-hooks.mjs +785 -0
  271. package/tools/agents/providers/muse-paths.mjs +112 -0
  272. 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
- # Wave 1 (#2575): native kernel skills + AGENTS.md. Agents/rules writers deferred #2577.
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: "Indexed: aiwg discover / aiwg show agent (native .grok/agents writer deferred #2577)"
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: false
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: null
429
- tasks: aiwg-mc
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-07-20",
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-4-7",
31
+ "id": "claude-opus-5",
32
32
  "status": "active",
33
33
  "observed": false
34
34
  },
35
35
  "coding": {
36
- "id": "claude-sonnet-4-6",
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://docs.anthropic.com/en/docs/about-claude/models/overview",
47
- "verifiedAt": "2026-07-20"
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.4",
52
+ "id": "gpt-5.6-sol",
53
53
  "status": "active",
54
54
  "observed": true
55
55
  },
56
56
  "coding": {
57
- "id": "gpt-5.5",
57
+ "id": "gpt-5.6-terra",
58
58
  "status": "active",
59
59
  "observed": true
60
60
  },
61
61
  "efficiency": {
62
- "id": "gpt-5.4-mini",
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/agent-configuration/subagents",
68
- "verifiedAt": "2026-07-20"
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-4-7",
136
+ "id": "anthropic/claude-opus-5",
137
137
  "status": "unverified",
138
138
  "observed": false
139
139
  },
140
140
  "coding": {
141
- "id": "anthropic/claude-sonnet-4-6",
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-07-20"
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)
@@ -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';
@@ -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-4-6',
190
+ model: 'claude-sonnet-5',
191
191
  aggregateStrategy: 'json-merge',
192
192
  });
193
193
  plans.push({
@@ -222,7 +222,7 @@ function handleBuild(args) {
222
222
  ],
223
223
  query: def.prompt,
224
224
  subPrompt: def.prompt,
225
- model: 'claude-sonnet-4-6',
225
+ model: 'claude-sonnet-5',
226
226
  aggregateStrategy: def.aggregate,
227
227
  });
228
228
  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 SERVICE = "releases.aiwg.io";
42
- const ACCOUNT = "aiwg-cli";
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
- constructor(run = defaultCommandRunner) {
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:${SERVICE}/${ACCOUNT}` };
52
- async load() {
53
- const result = await this.run("security", ["find-generic-password", "-a", ACCOUNT, "-s", SERVICE, "-w"]);
54
- return result.exitCode === 44 ? null : result.exitCode === 0 ? this.parse(result.stdout) : Promise.reject(new Error("macOS Keychain read failed"));
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 save(credentials) {
57
- const result = await this.run("security", ["add-generic-password", "-U", "-a", ACCOUNT, "-s", SERVICE, "-w"], JSON.stringify(credentials));
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", ACCOUNT, "-s", SERVICE]); }
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:${SERVICE}/${ACCOUNT}` };
65
- async load() {
66
- const result = await this.run("secret-tool", ["lookup", "service", SERVICE, "account", ACCOUNT]);
67
- return result.exitCode === 1 ? null : result.exitCode === 0 ? this.parse(result.stdout) : Promise.reject(new Error("Linux Secret Service read failed"));
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 save(credentials) {
70
- const result = await this.run("secret-tool", ["store", `--label=AIWG ${SERVICE}`, "service", SERVICE, "account", ACCOUNT], JSON.stringify(credentials));
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", SERVICE, "account", ACCOUNT]); }
104
+ async delete() { await this.run("secret-tool", ["clear", "service", this.service, "account", this.account]); }
75
105
  }
76
- const WINDOWS_READ = "$v=New-Object Windows.Security.Credentials.PasswordVault;try{$c=$v.Retrieve('releases.aiwg.io','aiwg-cli');$c.RetrievePassword();[Console]::Out.Write($c.Password)}catch{exit 1}";
77
- const WINDOWS_WRITE = "$s=[Console]::In.ReadToEnd();$v=New-Object Windows.Security.Credentials.PasswordVault;$v.Add((New-Object Windows.Security.Credentials.PasswordCredential('releases.aiwg.io','aiwg-cli',$s)))";
78
- const WINDOWS_DELETE = "$v=New-Object Windows.Security.Credentials.PasswordVault;try{$c=$v.Retrieve('releases.aiwg.io','aiwg-cli');$v.Remove($c)}catch{}";
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:${SERVICE}/${ACCOUNT}` };
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 load() { const result = await this.execute(WINDOWS_READ); return result.exitCode === 1 ? null : result.exitCode === 0 ? this.parse(result.stdout) : Promise.reject(new Error("Windows Credential Manager read failed")); }
83
- async save(credentials) { if ((await this.execute(WINDOWS_WRITE, JSON.stringify(credentials))).exitCode !== 0)
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(WINDOWS_DELETE); }
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