@aiwg/cli 2026.9.20 → 2026.9.24

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 (275) 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/cli.js +23 -18
  8. package/dist/src/artifacts/enrichment/cli.js +1 -1
  9. package/dist/src/artifacts/fortemi-core-query-adapter.js +6 -2
  10. package/dist/src/artifacts/query-engine.js +14 -4
  11. package/dist/src/artifacts/views/cli.js +1 -1
  12. package/dist/src/audit/operator-decision.js +10 -0
  13. package/dist/src/auth/credential-store.js +127 -27
  14. package/dist/src/catalog/builtin-models.json +272 -40
  15. package/dist/src/catalog/cli.js +1 -1
  16. package/dist/src/catalog/cli.mjs +1 -1
  17. package/dist/src/cli/handlers/effect.js +872 -0
  18. package/dist/src/cli/handlers/help.js +2 -0
  19. package/dist/src/cli/handlers/index.js +4 -2
  20. package/dist/src/cli/handlers/models.js +41 -10
  21. package/dist/src/cli/handlers/ralph.js +1 -1
  22. package/dist/src/cli/handlers/sessions.js +113 -37
  23. package/dist/src/cli/handlers/subcommands.js +31 -0
  24. package/dist/src/cli/handlers/use.js +46 -9
  25. package/dist/src/cli/handlers/utilities.js +10 -0
  26. package/dist/src/cli/handlers/workspace.js +3 -1
  27. package/dist/src/cli/scope-resolver.js +112 -9
  28. package/dist/src/cli/services/deployment-verification.js +5 -0
  29. package/dist/src/config/aiwg-config.js +3 -0
  30. package/dist/src/decision/acceptance-rollout.js +93 -0
  31. package/dist/src/decision/acceptance.js +175 -0
  32. package/dist/src/decision/adapters/jev.js +234 -13
  33. package/dist/src/decision/adapters/llm-subagent.js +60 -12
  34. package/dist/src/decision/admission.js +550 -0
  35. package/dist/src/decision/batch-benchmark.js +47 -0
  36. package/dist/src/decision/batch-receipts/accounting.js +75 -0
  37. package/dist/src/decision/batch-receipts/export.js +40 -0
  38. package/dist/src/decision/batch-receipts/index.js +9 -0
  39. package/dist/src/decision/batch-receipts/protection.js +40 -0
  40. package/dist/src/decision/batch-receipts/receipt.js +44 -0
  41. package/dist/src/decision/batch-receipts/result-store.js +341 -0
  42. package/dist/src/decision/batch-receipts/store.js +362 -0
  43. package/dist/src/decision/batch-receipts/types.js +2 -0
  44. package/dist/src/decision/batch-receipts/validate.js +127 -0
  45. package/dist/src/decision/batch.js +68 -0
  46. package/dist/src/decision/calibration/index.js +4 -0
  47. package/dist/src/decision/calibration/receipts.js +130 -0
  48. package/dist/src/decision/calibration/registry.js +258 -0
  49. package/dist/src/decision/calibration/types.js +2 -0
  50. package/dist/src/decision/compile-cache/benchmark.js +62 -0
  51. package/dist/src/decision/compile-cache/compatibility.js +65 -0
  52. package/dist/src/decision/compile-cache/file-store.js +280 -0
  53. package/dist/src/decision/compile-cache/identity.js +26 -0
  54. package/dist/src/decision/compile-cache/index.js +9 -0
  55. package/dist/src/decision/compile-cache/prefix.js +21 -0
  56. package/dist/src/decision/compile-cache/records.js +86 -0
  57. package/dist/src/decision/compile-cache/runtime.js +68 -0
  58. package/dist/src/decision/compile-cache/store.js +108 -0
  59. package/dist/src/decision/compile-cache/types.js +2 -0
  60. package/dist/src/decision/context-plan.js +234 -0
  61. package/dist/src/decision/context-qualification.js +60 -0
  62. package/dist/src/decision/ensemble/aggregate.js +215 -0
  63. package/dist/src/decision/ensemble/contract.js +316 -0
  64. package/dist/src/decision/ensemble/drift.js +51 -0
  65. package/dist/src/decision/ensemble/index.js +6 -0
  66. package/dist/src/decision/ensemble/report.js +71 -0
  67. package/dist/src/decision/ensemble/types.js +2 -0
  68. package/dist/src/decision/evaluate.js +1024 -78
  69. package/dist/src/decision/file-lifecycle-store.js +168 -0
  70. package/dist/src/decision/graph-beam.js +40 -0
  71. package/dist/src/decision/graph-budget.js +110 -0
  72. package/dist/src/decision/graph-decision-bridge.js +93 -0
  73. package/dist/src/decision/graph-evidence.js +123 -0
  74. package/dist/src/decision/graph-flow-adapter.js +56 -0
  75. package/dist/src/decision/graph-flow.js +105 -0
  76. package/dist/src/decision/graph-parallel.js +79 -0
  77. package/dist/src/decision/graph-patterns.js +20 -0
  78. package/dist/src/decision/graph-run-store.js +66 -0
  79. package/dist/src/decision/graph-run.js +166 -0
  80. package/dist/src/decision/graph-skill-bridge.js +91 -0
  81. package/dist/src/decision/graph-templates.js +56 -0
  82. package/dist/src/decision/graph.js +115 -0
  83. package/dist/src/decision/index.js +35 -0
  84. package/dist/src/decision/job-accounting.js +93 -0
  85. package/dist/src/decision/job-contract.js +186 -0
  86. package/dist/src/decision/job-effects.js +95 -0
  87. package/dist/src/decision/job-evaluate.js +80 -0
  88. package/dist/src/decision/job-gateway.js +121 -0
  89. package/dist/src/decision/job-http.js +194 -0
  90. package/dist/src/decision/job-payload-store.js +258 -0
  91. package/dist/src/decision/job-poll-limiter.js +92 -0
  92. package/dist/src/decision/job-quota.js +158 -0
  93. package/dist/src/decision/job-runtime.js +240 -0
  94. package/dist/src/decision/job-scheduler.js +26 -0
  95. package/dist/src/decision/job-service.js +117 -0
  96. package/dist/src/decision/job-store.js +264 -0
  97. package/dist/src/decision/job-worker.js +141 -0
  98. package/dist/src/decision/lifecycle.js +148 -0
  99. package/dist/src/decision/patterns/artifacts.js +173 -0
  100. package/dist/src/decision/patterns/catalog.js +108 -0
  101. package/dist/src/decision/patterns/durable-review.js +237 -0
  102. package/dist/src/decision/patterns/index.js +8 -0
  103. package/dist/src/decision/patterns/playground.js +401 -0
  104. package/dist/src/decision/patterns/recorded.js +43 -0
  105. package/dist/src/decision/patterns/specs.js +174 -0
  106. package/dist/src/decision/patterns/types.js +2 -0
  107. package/dist/src/decision/portable-secrets.js +53 -0
  108. package/dist/src/decision/projection.js +210 -0
  109. package/dist/src/decision/qualification/capture.js +67 -0
  110. package/dist/src/decision/qualification/drift.js +68 -0
  111. package/dist/src/decision/qualification/gate-evidence.js +172 -0
  112. package/dist/src/decision/qualification/gates.js +83 -0
  113. package/dist/src/decision/qualification/index.js +12 -0
  114. package/dist/src/decision/qualification/load.js +282 -0
  115. package/dist/src/decision/qualification/manifest.js +37 -0
  116. package/dist/src/decision/qualification/privacy.js +41 -0
  117. package/dist/src/decision/qualification/quality.js +213 -0
  118. package/dist/src/decision/qualification/release.js +116 -0
  119. package/dist/src/decision/qualification/runner.js +408 -0
  120. package/dist/src/decision/qualification/types.js +2 -0
  121. package/dist/src/decision/receipts.js +30 -7
  122. package/dist/src/decision/result-cache/index.js +6 -0
  123. package/dist/src/decision/result-cache/integrity.js +28 -0
  124. package/dist/src/decision/result-cache/key.js +28 -0
  125. package/dist/src/decision/result-cache/service.js +92 -0
  126. package/dist/src/decision/result-cache/store.js +327 -0
  127. package/dist/src/decision/result-cache/types.js +3 -0
  128. package/dist/src/decision/review/authorization.js +110 -0
  129. package/dist/src/decision/review/effect-ledger-adapter.js +321 -0
  130. package/dist/src/decision/review/index.js +12 -0
  131. package/dist/src/decision/review/migrate.js +34 -0
  132. package/dist/src/decision/review/operator-audit.js +59 -0
  133. package/dist/src/decision/review/recovery-adapters.js +252 -0
  134. package/dist/src/decision/review/recovery.js +33 -0
  135. package/dist/src/decision/review/service.js +498 -0
  136. package/dist/src/decision/review/store.js +219 -0
  137. package/dist/src/decision/review/types.js +2 -0
  138. package/dist/src/decision/review/validate.js +205 -0
  139. package/dist/src/decision/scheduler.js +115 -0
  140. package/dist/src/decision/telemetry/context.js +42 -0
  141. package/dist/src/decision/telemetry/debug-sidecar.js +152 -0
  142. package/dist/src/decision/telemetry/exporter.js +77 -0
  143. package/dist/src/decision/telemetry/file-debug-backend.js +112 -0
  144. package/dist/src/decision/telemetry/index.js +13 -0
  145. package/dist/src/decision/telemetry/mapping.js +146 -0
  146. package/dist/src/decision/telemetry/metrics.js +164 -0
  147. package/dist/src/decision/telemetry/otlp-http.js +183 -0
  148. package/dist/src/decision/telemetry/redaction.js +93 -0
  149. package/dist/src/decision/telemetry/retention.js +109 -0
  150. package/dist/src/decision/telemetry/runtime.js +310 -0
  151. package/dist/src/decision/telemetry/trace.js +158 -0
  152. package/dist/src/decision/telemetry/types.js +3 -0
  153. package/dist/src/decision/validate.js +135 -5
  154. package/dist/src/effects/checkpoint-sinks.js +94 -0
  155. package/dist/src/effects/checkpoint.js +76 -0
  156. package/dist/src/effects/decision-links.js +54 -0
  157. package/dist/src/effects/errors.js +48 -0
  158. package/dist/src/effects/identity.js +178 -0
  159. package/dist/src/effects/index.js +25 -0
  160. package/dist/src/effects/keyring.js +160 -0
  161. package/dist/src/effects/keys.js +130 -0
  162. package/dist/src/effects/ledger.js +435 -0
  163. package/dist/src/effects/lifecycle.js +110 -0
  164. package/dist/src/effects/lock-recovery.js +269 -0
  165. package/dist/src/effects/reader.js +103 -0
  166. package/dist/src/effects/records.js +114 -0
  167. package/dist/src/effects/redaction.js +51 -0
  168. package/dist/src/effects/schema.js +73 -0
  169. package/dist/src/effects/store.js +239 -0
  170. package/dist/src/effects/types.js +49 -0
  171. package/dist/src/effects/verifiers/decision.js +168 -0
  172. package/dist/src/effects/verifiers/file.js +106 -0
  173. package/dist/src/effects/verifiers/git.js +206 -0
  174. package/dist/src/effects/verifiers/index.js +90 -0
  175. package/dist/src/effects/verifiers/registry.js +148 -0
  176. package/dist/src/effects/verifiers/review.js +123 -0
  177. package/dist/src/effects/verifiers/tracker.js +299 -0
  178. package/dist/src/effects/verifiers/types.js +21 -0
  179. package/dist/src/effects/verify.js +295 -0
  180. package/dist/src/evidence/bundle.js +2 -0
  181. package/dist/src/extensions/commands/definitions.js +28 -0
  182. package/dist/src/extensions/manifest.js +1 -0
  183. package/dist/src/marketplace/provenance.js +25 -27
  184. package/dist/src/mcp/cli.mjs +11 -1
  185. package/dist/src/mcp/grok-build-config.mjs +189 -0
  186. package/dist/src/mcp/registry.js +21 -1
  187. package/dist/src/mcp/registry.mjs +20 -1
  188. package/dist/src/models/grok-build-models.js +356 -0
  189. package/dist/src/models/index.js +1 -0
  190. package/dist/src/models/model-capabilities.v1.json +34 -0
  191. package/dist/src/models/model-catalog.v1.json +55 -13
  192. package/dist/src/models/model-discovery.js +41 -5
  193. package/dist/src/models/provider-policy.js +3 -2
  194. package/dist/src/plugin/skill-command-translator.js +1 -0
  195. package/dist/src/providers/capability-matrix.yaml +58 -6
  196. package/dist/src/providers/grok-build-acp.js +192 -0
  197. package/dist/src/providers/grok-build-dispatch.js +251 -0
  198. package/dist/src/providers/grok-build-headless.js +170 -0
  199. package/dist/src/providers/muse-paths.js +105 -0
  200. package/dist/src/providers/provider-definitions.js +93 -7
  201. package/dist/src/providers/provider-definitions.mjs +21 -1
  202. package/dist/src/providers/provider-inventory.js +3 -0
  203. package/dist/src/security/artifact-attestation.js +4 -8
  204. package/dist/src/security/signing.js +119 -0
  205. package/dist/src/sessions/adapters/grok-build.js +187 -0
  206. package/dist/src/sessions/adapters/muse.js +412 -0
  207. package/dist/src/sessions/contracts.js +1 -1
  208. package/dist/src/sessions/grok-build-cli.js +196 -0
  209. package/dist/src/sessions/index.js +3 -0
  210. package/dist/src/sessions/workspace-discovery.js +9 -5
  211. package/dist/src/skills/deployer.js +33 -5
  212. package/dist/src/smiths/context-pipeline/claude-hook.js +2 -0
  213. package/dist/src/smiths/context-pipeline/context-file-safety.js +18 -0
  214. package/dist/src/smiths/context-pipeline/finalization.js +1 -32
  215. package/dist/src/smiths/context-pipeline/generator.js +12 -0
  216. package/dist/src/smiths/context-pipeline/index.js +1 -1
  217. package/dist/src/smiths/context-pipeline/managed-hook.js +2 -0
  218. package/dist/src/smiths/context-pipeline/muse-bridge.js +50 -0
  219. package/dist/src/smiths/context-pipeline/provider-policy.js +5 -0
  220. package/dist/src/smiths/context-pipeline/workspace-context.js +22 -16
  221. package/dist/src/smiths/hook-bridge/grok-build-translator.js +64 -0
  222. package/dist/src/smiths/hook-bridge/index.js +3 -0
  223. package/dist/src/smiths/hook-bridge/shim.js +2 -0
  224. package/dist/src/smiths/hook-bridge/types.js +5 -0
  225. package/dist/src/smiths/skillsmith/collision-detector.js +1 -0
  226. package/dist/src/storage/protected-files.js +102 -0
  227. package/dist/src/tracker/forge-http.js +371 -0
  228. package/dist/src/tracker/project-inputs.js +41 -0
  229. package/package.json +2 -1
  230. package/schemas/decision/BatchReceipt.v1.schema.json +50 -0
  231. package/schemas/decision/CalibrationArtifact.v1.schema.json +76 -0
  232. package/schemas/decision/CalibrationCompatibility.v1.schema.json +18 -0
  233. package/schemas/decision/CalibrationGovernanceReceipt.v1.schema.json +44 -0
  234. package/schemas/decision/DecisionAdmissionEvidence.v1.schema.json +43 -0
  235. package/schemas/decision/DecisionBinding.schema.json +309 -0
  236. package/schemas/decision/DecisionBinding.v1alpha2.schema.json +369 -0
  237. package/schemas/decision/DecisionCacheTelemetry.v1.schema.json +20 -0
  238. package/schemas/decision/DecisionChampionChallenger.v1.schema.json +100 -0
  239. package/schemas/decision/DecisionCompileCacheEntry.v1.schema.json +35 -0
  240. package/schemas/decision/DecisionCompileCacheIdentity.v1.schema.json +26 -0
  241. package/schemas/decision/DecisionCompileCacheTombstone.v1.schema.json +31 -0
  242. package/schemas/decision/DecisionContextEvidence.v1.schema.json +136 -0
  243. package/schemas/decision/DecisionDefinition.schema.json +159 -0
  244. package/schemas/decision/DecisionDefinition.v1alpha2.schema.json +203 -0
  245. package/schemas/decision/DecisionDriftResponse.v1.schema.json +55 -0
  246. package/schemas/decision/DecisionEnsembleAggregate.v1.schema.json +86 -0
  247. package/schemas/decision/DecisionEnsembleIntegrityReport.v1.schema.json +64 -0
  248. package/schemas/decision/DecisionEnsemblePolicy.v1.schema.json +130 -0
  249. package/schemas/decision/DecisionGraph.v1.schema.json +77 -0
  250. package/schemas/decision/DecisionJob.v1.schema.json +71 -0
  251. package/schemas/decision/DecisionLifecyclePolicy.v1.schema.json +52 -0
  252. package/schemas/decision/DecisionProjectionPolicy.v1.schema.json +65 -0
  253. package/schemas/decision/DecisionProviderPrefixCompatibility.v1.schema.json +45 -0
  254. package/schemas/decision/DecisionProviderPrefixEvidence.v1.schema.json +17 -0
  255. package/schemas/decision/DecisionProviderPrefixIdentity.v1.schema.json +36 -0
  256. package/schemas/decision/DecisionResult.schema.json +524 -0
  257. package/schemas/decision/DecisionResult.v1alpha2.schema.json +619 -0
  258. package/schemas/decision/DecisionResultCacheEntry.v1.schema.json +53 -0
  259. package/schemas/decision/DecisionReview.schema.json +29 -0
  260. package/schemas/decision/DecisionRuleset.schema.json +313 -0
  261. package/schemas/decision/DecisionRuleset.v1alpha2.schema.json +313 -0
  262. package/schemas/decision/DecisionTelemetryTrace.v1.schema.json +95 -0
  263. package/schemas/decision/RulesetResult.schema.json +721 -0
  264. package/schemas/decision/RulesetResult.v1alpha2.schema.json +891 -0
  265. package/schemas/security/pr-evidence-receipt.v1.schema.json +77 -0
  266. package/schemas/security/threat-assessment-report.v1.schema.json +71 -1
  267. package/tools/agents/deploy-agents.mjs +21 -6
  268. package/tools/agents/providers/base.mjs +7 -4
  269. package/tools/agents/providers/codex.mjs +1 -1
  270. package/tools/agents/providers/grok-build.d.mts +7 -0
  271. package/tools/agents/providers/grok-build.mjs +249 -9
  272. package/tools/agents/providers/model-role.mjs +6 -3
  273. package/tools/agents/providers/muse-hooks.mjs +785 -0
  274. package/tools/agents/providers/muse-paths.mjs +112 -0
  275. 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';
@@ -526,22 +526,21 @@ async function handleBuild(args) {
526
526
  loadUserGraphConfigs(cwd);
527
527
  loadGlobalGraphConfigs();
528
528
  let jsonBuilt = false;
529
- let projectGraphBuilt = false;
529
+ const builtGraphs = new Set();
530
530
  if (graph) {
531
531
  // --graph X: build the JSON graph if X is one; otherwise X may be a
532
532
  // research-corpus markdown view, rendered below.
533
533
  if (graph in GRAPH_CONFIGS) {
534
534
  await buildIndex(cwd, { force, verbose, scope, graph, explicit: true });
535
535
  jsonBuilt = true;
536
- projectGraphBuilt = graph === 'project';
536
+ builtGraphs.add(graph);
537
537
  }
538
538
  }
539
539
  else if (all) {
540
540
  // Build all known graphs — user asked for everything, but don't hard-error on missing dirs
541
541
  for (const [name] of orderedGraphEntries(Object.entries(GRAPH_CONFIGS))) {
542
542
  await buildIndex(cwd, { force, verbose, graph: name, explicit: false });
543
- if (name === 'project')
544
- projectGraphBuilt = true;
543
+ builtGraphs.add(name);
545
544
  }
546
545
  jsonBuilt = true;
547
546
  }
@@ -550,8 +549,7 @@ async function handleBuild(args) {
550
549
  for (const [name, config] of orderedGraphEntries(Object.entries(GRAPH_CONFIGS))) {
551
550
  if (config.defaultBuild) {
552
551
  await buildIndex(cwd, { force, verbose, scope: name === Object.keys(GRAPH_CONFIGS)[0] ? scope : undefined, graph: name, explicit: false });
553
- if (name === 'project')
554
- projectGraphBuilt = true;
552
+ builtGraphs.add(name);
555
553
  }
556
554
  }
557
555
  jsonBuilt = true;
@@ -583,21 +581,28 @@ async function handleBuild(args) {
583
581
  if (viewResults.some((r) => r.status === 'unsupported')) {
584
582
  process.exit(1);
585
583
  }
586
- if (projectGraphBuilt) {
587
- await syncProjectFortemiCoreCacheAfterBuild(cwd, verbose);
584
+ if (builtGraphs.size > 0) {
585
+ await syncFortemiCoreCachesAfterBuild(cwd, builtGraphs, verbose);
588
586
  }
589
587
  }
590
- async function syncProjectFortemiCoreCacheAfterBuild(cwd, verbose) {
591
- try {
592
- const { syncFortemiCoreIndex } = await import('./fortemi-core-sync.js');
593
- const manifest = syncFortemiCoreIndex(cwd, { graph: 'project' });
594
- if (verbose) {
595
- console.log(`Fortemi Core project sync: ${manifest.status}, ${manifest.item_count} item(s) → ${manifest.export_path}`);
588
+ async function syncFortemiCoreCachesAfterBuild(cwd, graphs, verbose) {
589
+ const { syncFortemiCoreIndex } = await import('./fortemi-core-sync.js');
590
+ const { loadGraphIndexFile } = await import('./index-reader.js');
591
+ for (const graph of graphs) {
592
+ // Some default-build graphs skip cleanly when their scan roots are absent.
593
+ // Only materialize a cache when this build left an actual source index.
594
+ if (!loadGraphIndexFile(cwd, 'metadata.json', graph))
595
+ continue;
596
+ try {
597
+ const manifest = syncFortemiCoreIndex(cwd, { graph });
598
+ if (verbose) {
599
+ console.log(`Fortemi Core ${graph} sync: ${manifest.status}, ${manifest.item_count} item(s) → ${manifest.export_path}`);
600
+ }
601
+ }
602
+ catch (err) {
603
+ console.error(`Warning: Fortemi Core ${graph} sync failed: ${err instanceof Error ? err.message : String(err)}`);
604
+ console.error(`Run \`aiwg index sync --graph ${graph}\` before using Fortemi-backed commands for '${graph}' artifacts.`);
596
605
  }
597
- }
598
- catch (err) {
599
- console.error(`Warning: Fortemi Core project sync failed: ${err instanceof Error ? err.message : String(err)}`);
600
- console.error('Run `aiwg index sync --graph project` before using Fortemi-backed `aiwg discover` or `aiwg show` for project-local artifacts.');
601
606
  }
602
607
  }
603
608
  /**
@@ -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({
@@ -168,7 +168,11 @@ export function loadFortemiCoreExport(cwd, graph = "project", sourcePaths) {
168
168
  }
169
169
  }
170
170
  let status = getFortemiCoreSyncStatus(cwd, graph);
171
- if ((!status.optedIn || !status.built || status.stale) && graph === "framework") {
171
+ // The packaged framework index is a bootstrap fallback for an absent shared
172
+ // cache. Once a shared cache exists, its stale state proves that the local
173
+ // source index is newer; silently replacing it with an older packaged index
174
+ // would hide newly authored capabilities.
175
+ if ((!status.optedIn || !status.built) && !status.stale && graph === "framework") {
172
176
  const prebuilt = getFortemiCorePrebuiltStatus(graph);
173
177
  if (prebuilt.optedIn && prebuilt.built && !prebuilt.stale) {
174
178
  status = prebuilt;
@@ -182,7 +186,7 @@ export function loadFortemiCoreExport(cwd, graph = "project", sourcePaths) {
182
186
  if (!status.built || status.stale) {
183
187
  return {
184
188
  reason: `${status.reason ??
185
- `Fortemi Core static index for graph '${graph}' is stale or incomplete`}. Re-run 'aiwg index sync' or pass '--backend local' to use the legacy local index.`,
189
+ `Fortemi Core static index for graph '${graph}' is stale or incomplete`}. Re-run 'aiwg index sync${graph === "project" ? "" : ` --graph ${graph}`}' or pass '--backend local' to use the legacy local index.`,
186
190
  };
187
191
  }
188
192
  try {
@@ -949,8 +949,12 @@ export async function discoverCapability(cwd, params) {
949
949
  continue;
950
950
  }
951
951
  }
952
- if (loaded.reason)
952
+ if (loaded.reason) {
953
953
  unavailableReason ??= loaded.reason;
954
+ if (graph === 'framework' && !params.graph) {
955
+ console.error(`Warning: framework capabilities are unavailable: ${loaded.reason}`);
956
+ }
957
+ }
954
958
  entries.push(...loaded.entries.map((entry) => withIndexProvenance(entry, graph)));
955
959
  const discovered = await queryFortemiCoreAiwgDiscovery(cwd, {
956
960
  graph,
@@ -1171,7 +1175,7 @@ export async function discoverCapability(cwd, params) {
1171
1175
  // broader phrase / type filter, and a capability refresh via `aiwg use`.
1172
1176
  const emptyResultHint = scored.length === 0
1173
1177
  ? backend === 'fortemi-core'
1174
- ? `No capability matched "${params.phrase}" among ${entries.length} Fortemi Core static-cache capabilities. Try a broader phrase or a \`--type\` filter. If the local index changed, refresh the cache with \`aiwg index sync\`, or pass \`--backend local\` to use the legacy local index.`
1178
+ ? `No capability matched "${params.phrase}" among ${entries.length} Fortemi Core static-cache capabilities. Try a broader phrase or a \`--type\` filter. If the local index changed, refresh the cache with \`aiwg index sync ${params.graph ? `--graph ${params.graph}` : '--all'}\`, or pass \`--backend local\` to use the legacy local index.`
1175
1179
  : `No capability matched "${params.phrase}" among ${entries.length} indexed capabilities. Try a broader phrase or a \`--type\` filter. If you just installed or authored capabilities, refresh discovery with \`aiwg use <framework>\` (or \`aiwg index build\`).`
1176
1180
  : null;
1177
1181
  const includePaths = params.includePaths ?? true;
@@ -1272,7 +1276,9 @@ export async function discoverCapability(cwd, params) {
1272
1276
  }
1273
1277
  if (scored.length === 0) {
1274
1278
  console.log(`No discovery matches for "${params.phrase}" in types: ${types.join(',')}.`);
1275
- console.log('Try a broader phrase or a `--type` filter. If capabilities were just added, refresh with `aiwg use <framework>` (or `aiwg index build`).');
1279
+ console.log(backend === 'fortemi-core'
1280
+ ? emptyResultHint
1281
+ : 'Try a broader phrase or a `--type` filter. If capabilities were just added, refresh with `aiwg use <framework>` (or `aiwg index build`).');
1276
1282
  return;
1277
1283
  }
1278
1284
  const relaxedNote = relaxed ? ' — relaxed match (verbose query)' : '';
@@ -1410,8 +1416,12 @@ async function loadShowEntries(cwd, params) {
1410
1416
  continue;
1411
1417
  }
1412
1418
  }
1413
- if (loaded.reason)
1419
+ if (loaded.reason) {
1414
1420
  unavailableReason ??= loaded.reason;
1421
+ if (graph === 'framework' && !params.graph) {
1422
+ console.error(`Warning: framework capabilities are unavailable: ${loaded.reason}`);
1423
+ }
1424
+ }
1415
1425
  entries.push(...loaded.entries.map((entry) => withIndexProvenance(entry, graph)));
1416
1426
  }
1417
1427
  if (entries.length === 0 && unavailableReason) {
@@ -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(',')}]`;