@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
@@ -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
@@ -4,14 +4,246 @@
4
4
  "title": "AIWG Built-in Model Catalog",
5
5
  "description": "Core models shipped with AIWG, manually curated and verified",
6
6
  "models": {
7
- "claude-opus-4-6": {
7
+ "claude-fable-5-1": {
8
8
  "provider": "anthropic",
9
- "displayName": "Claude Opus 4.6",
10
- "releaseDate": "2025-11-01",
9
+ "displayName": "Claude Fable 5.1",
10
+ "releaseDate": "2026-09-01",
11
+ "status": "active",
12
+ "deprecated": false,
13
+ "deprecationDate": null,
14
+ "successorModel": null,
15
+ "capabilities": {
16
+ "contextWindow": 1000000,
17
+ "maxOutputTokens": 128000,
18
+ "vision": true,
19
+ "toolUse": true,
20
+ "streaming": true,
21
+ "reasoning": "excellent",
22
+ "coding": "excellent",
23
+ "speed": "fair"
24
+ },
25
+ "pricing": {
26
+ "inputPer1kTokens": 0.01,
27
+ "outputPer1kTokens": 0.05,
28
+ "currency": "USD",
29
+ "lastUpdated": "2026-09-21"
30
+ },
31
+ "aliases": ["fable", "claude-fable"],
32
+ "tags": ["flagship", "user-elected", "reasoning", "long-context"],
33
+ "source": "builtin",
34
+ "lastVerified": "2026-09-21"
35
+ },
36
+ "claude-opus-5": {
37
+ "provider": "anthropic",
38
+ "displayName": "Claude Opus 5",
39
+ "releaseDate": "2026-07-24",
40
+ "status": "active",
41
+ "deprecated": false,
42
+ "deprecationDate": null,
43
+ "successorModel": null,
44
+ "capabilities": {
45
+ "contextWindow": 1000000,
46
+ "maxOutputTokens": 128000,
47
+ "vision": true,
48
+ "toolUse": true,
49
+ "streaming": true,
50
+ "reasoning": "excellent",
51
+ "coding": "excellent",
52
+ "speed": "fair"
53
+ },
54
+ "pricing": {
55
+ "inputPer1kTokens": 0.005,
56
+ "outputPer1kTokens": 0.025,
57
+ "currency": "USD",
58
+ "lastUpdated": "2026-09-21"
59
+ },
60
+ "aliases": ["opus", "opus-5", "claude-opus"],
61
+ "tags": ["premium", "reasoning", "long-context"],
62
+ "source": "builtin",
63
+ "lastVerified": "2026-09-21"
64
+ },
65
+ "claude-sonnet-5": {
66
+ "provider": "anthropic",
67
+ "displayName": "Claude Sonnet 5",
68
+ "releaseDate": "2026-06-29",
69
+ "status": "active",
70
+ "deprecated": false,
71
+ "deprecationDate": null,
72
+ "successorModel": null,
73
+ "capabilities": {
74
+ "contextWindow": 1000000,
75
+ "maxOutputTokens": 128000,
76
+ "vision": true,
77
+ "toolUse": true,
78
+ "streaming": true,
79
+ "reasoning": "excellent",
80
+ "coding": "excellent",
81
+ "speed": "good"
82
+ },
83
+ "pricing": {
84
+ "inputPer1kTokens": 0.002,
85
+ "outputPer1kTokens": 0.01,
86
+ "currency": "USD",
87
+ "lastUpdated": "2026-09-21"
88
+ },
89
+ "aliases": ["sonnet", "sonnet-5", "claude-sonnet"],
90
+ "tags": ["standard", "coding", "balanced"],
91
+ "source": "builtin",
92
+ "lastVerified": "2026-09-21"
93
+ },
94
+ "claude-haiku-4-5": {
95
+ "provider": "anthropic",
96
+ "displayName": "Claude Haiku 4.5",
97
+ "releaseDate": "2025-10-15",
98
+ "status": "active",
99
+ "deprecated": false,
100
+ "deprecationDate": null,
101
+ "successorModel": null,
102
+ "capabilities": {
103
+ "contextWindow": 200000,
104
+ "maxOutputTokens": 64000,
105
+ "vision": true,
106
+ "toolUse": true,
107
+ "streaming": true,
108
+ "reasoning": "good",
109
+ "coding": "good",
110
+ "speed": "excellent"
111
+ },
112
+ "pricing": {
113
+ "inputPer1kTokens": 0.001,
114
+ "outputPer1kTokens": 0.005,
115
+ "currency": "USD",
116
+ "lastUpdated": "2026-09-21"
117
+ },
118
+ "aliases": ["haiku", "haiku-4.5", "claude-haiku", "claude-haiku-4-5-20251001"],
119
+ "tags": ["economy", "fast"],
120
+ "source": "builtin",
121
+ "lastVerified": "2026-09-21"
122
+ },
123
+ "gpt-6-astra": {
124
+ "provider": "openai",
125
+ "displayName": "GPT-6 Astra",
126
+ "releaseDate": "2026-09-04",
127
+ "status": "active",
128
+ "deprecated": false,
129
+ "deprecationDate": null,
130
+ "successorModel": null,
131
+ "capabilities": {
132
+ "contextWindow": 1050000,
133
+ "maxOutputTokens": 128000,
134
+ "vision": true,
135
+ "toolUse": true,
136
+ "streaming": true,
137
+ "reasoning": "excellent",
138
+ "coding": "excellent",
139
+ "speed": "fair"
140
+ },
141
+ "pricing": {
142
+ "inputPer1kTokens": 0.01,
143
+ "outputPer1kTokens": 0.05,
144
+ "currency": "USD",
145
+ "lastUpdated": "2026-09-21"
146
+ },
147
+ "aliases": ["astra", "gpt6-astra"],
148
+ "tags": ["flagship", "user-elected", "reasoning", "codex"],
149
+ "source": "builtin",
150
+ "lastVerified": "2026-09-21"
151
+ },
152
+ "gpt-5.6-sol": {
153
+ "provider": "openai",
154
+ "displayName": "GPT-5.6 Sol",
155
+ "releaseDate": "2026-07-09",
11
156
  "status": "active",
12
157
  "deprecated": false,
13
158
  "deprecationDate": null,
14
159
  "successorModel": null,
160
+ "capabilities": {
161
+ "contextWindow": 1050000,
162
+ "maxOutputTokens": 128000,
163
+ "vision": true,
164
+ "toolUse": true,
165
+ "streaming": true,
166
+ "reasoning": "excellent",
167
+ "coding": "excellent",
168
+ "speed": "good"
169
+ },
170
+ "pricing": {
171
+ "inputPer1kTokens": 0.004,
172
+ "outputPer1kTokens": 0.02,
173
+ "currency": "USD",
174
+ "lastUpdated": "2026-09-21"
175
+ },
176
+ "aliases": ["sol", "gpt5.6-sol"],
177
+ "tags": ["premium", "reasoning", "coding", "codex"],
178
+ "source": "builtin",
179
+ "lastVerified": "2026-09-21"
180
+ },
181
+ "gpt-5.6-terra": {
182
+ "provider": "openai",
183
+ "displayName": "GPT-5.6 Terra",
184
+ "releaseDate": "2026-07-09",
185
+ "status": "active",
186
+ "deprecated": false,
187
+ "deprecationDate": null,
188
+ "successorModel": null,
189
+ "capabilities": {
190
+ "contextWindow": 1050000,
191
+ "maxOutputTokens": 128000,
192
+ "vision": true,
193
+ "toolUse": true,
194
+ "streaming": true,
195
+ "reasoning": "excellent",
196
+ "coding": "excellent",
197
+ "speed": "good"
198
+ },
199
+ "pricing": {
200
+ "inputPer1kTokens": 0.002,
201
+ "outputPer1kTokens": 0.012,
202
+ "currency": "USD",
203
+ "lastUpdated": "2026-09-21"
204
+ },
205
+ "aliases": ["terra", "gpt5.6-terra"],
206
+ "tags": ["standard", "coding", "codex"],
207
+ "source": "builtin",
208
+ "lastVerified": "2026-09-21"
209
+ },
210
+ "gpt-5.6-luna": {
211
+ "provider": "openai",
212
+ "displayName": "GPT-5.6 Luna",
213
+ "releaseDate": "2026-07-09",
214
+ "status": "active",
215
+ "deprecated": false,
216
+ "deprecationDate": null,
217
+ "successorModel": null,
218
+ "capabilities": {
219
+ "contextWindow": 1050000,
220
+ "maxOutputTokens": 128000,
221
+ "vision": true,
222
+ "toolUse": true,
223
+ "streaming": true,
224
+ "reasoning": "good",
225
+ "coding": "good",
226
+ "speed": "excellent"
227
+ },
228
+ "pricing": {
229
+ "inputPer1kTokens": 0.0002,
230
+ "outputPer1kTokens": 0.0012,
231
+ "currency": "USD",
232
+ "lastUpdated": "2026-09-21"
233
+ },
234
+ "aliases": ["luna", "gpt5.6-luna"],
235
+ "tags": ["economy", "fast", "codex"],
236
+ "source": "builtin",
237
+ "lastVerified": "2026-09-21"
238
+ },
239
+ "claude-opus-4-6": {
240
+ "provider": "anthropic",
241
+ "displayName": "Claude Opus 4.6",
242
+ "releaseDate": "2025-11-01",
243
+ "status": "deprecated",
244
+ "deprecated": true,
245
+ "deprecationDate": null,
246
+ "successorModel": "claude-opus-5",
15
247
  "capabilities": {
16
248
  "contextWindow": 200000,
17
249
  "maxOutputTokens": 8192,
@@ -28,19 +260,19 @@
28
260
  "currency": "USD",
29
261
  "lastUpdated": "2025-12-01"
30
262
  },
31
- "aliases": ["opus", "opus-4.6", "claude-opus"],
32
- "tags": ["flagship", "reasoning", "long-context"],
263
+ "aliases": ["opus-4.6"],
264
+ "tags": ["reasoning", "long-context"],
33
265
  "source": "builtin",
34
- "lastVerified": "2025-12-12"
266
+ "lastVerified": "2026-09-21"
35
267
  },
36
268
  "claude-sonnet-4-6": {
37
269
  "provider": "anthropic",
38
270
  "displayName": "Claude Sonnet 4.6",
39
271
  "releaseDate": "2025-09-29",
40
- "status": "active",
41
- "deprecated": false,
272
+ "status": "deprecated",
273
+ "deprecated": true,
42
274
  "deprecationDate": null,
43
- "successorModel": null,
275
+ "successorModel": "claude-sonnet-5",
44
276
  "capabilities": {
45
277
  "contextWindow": 200000,
46
278
  "maxOutputTokens": 8192,
@@ -57,19 +289,19 @@
57
289
  "currency": "USD",
58
290
  "lastUpdated": "2025-12-01"
59
291
  },
60
- "aliases": ["sonnet", "sonnet-4.6", "claude-sonnet"],
292
+ "aliases": ["sonnet-4.6"],
61
293
  "tags": ["balanced", "coding", "long-context"],
62
294
  "source": "builtin",
63
- "lastVerified": "2025-12-12"
295
+ "lastVerified": "2026-09-21"
64
296
  },
65
297
  "claude-sonnet-4-20250514": {
66
298
  "provider": "anthropic",
67
299
  "displayName": "Claude Sonnet 4",
68
300
  "releaseDate": "2025-05-14",
69
- "status": "active",
70
- "deprecated": false,
301
+ "status": "deprecated",
302
+ "deprecated": true,
71
303
  "deprecationDate": null,
72
- "successorModel": null,
304
+ "successorModel": "claude-sonnet-5",
73
305
  "capabilities": {
74
306
  "contextWindow": 200000,
75
307
  "maxOutputTokens": 8192,
@@ -89,16 +321,16 @@
89
321
  "aliases": ["sonnet-4"],
90
322
  "tags": ["coding", "long-context"],
91
323
  "source": "builtin",
92
- "lastVerified": "2025-12-12"
324
+ "lastVerified": "2026-09-21"
93
325
  },
94
326
  "claude-haiku-3-5": {
95
327
  "provider": "anthropic",
96
328
  "displayName": "Claude Haiku 3.5",
97
329
  "releaseDate": "2024-11-01",
98
- "status": "active",
99
- "deprecated": false,
330
+ "status": "deprecated",
331
+ "deprecated": true,
100
332
  "deprecationDate": null,
101
- "successorModel": null,
333
+ "successorModel": "claude-haiku-4-5",
102
334
  "capabilities": {
103
335
  "contextWindow": 200000,
104
336
  "maxOutputTokens": 8192,
@@ -115,10 +347,10 @@
115
347
  "currency": "USD",
116
348
  "lastUpdated": "2025-12-01"
117
349
  },
118
- "aliases": ["haiku", "haiku-3.5", "claude-haiku"],
350
+ "aliases": ["haiku-3.5"],
119
351
  "tags": ["fast", "efficient", "long-context"],
120
352
  "source": "builtin",
121
- "lastVerified": "2025-12-12"
353
+ "lastVerified": "2026-09-21"
122
354
  },
123
355
  "claude-3-opus-20240229": {
124
356
  "provider": "anthropic",
@@ -211,10 +443,10 @@
211
443
  "provider": "openai",
212
444
  "displayName": "GPT-5.3-Codex",
213
445
  "releaseDate": "2026-02-05",
214
- "status": "active",
215
- "deprecated": false,
446
+ "status": "deprecated",
447
+ "deprecated": true,
216
448
  "deprecationDate": null,
217
- "successorModel": null,
449
+ "successorModel": "gpt-5.6-terra",
218
450
  "capabilities": {
219
451
  "contextWindow": 192000,
220
452
  "maxOutputTokens": 16384,
@@ -232,18 +464,18 @@
232
464
  "lastUpdated": "2026-02-06"
233
465
  },
234
466
  "aliases": ["gpt-5.3-codex", "gpt5.3-codex"],
235
- "tags": ["flagship", "coding", "reasoning", "codex"],
467
+ "tags": ["coding", "reasoning", "codex"],
236
468
  "source": "builtin",
237
- "lastVerified": "2026-02-06"
469
+ "lastVerified": "2026-09-21"
238
470
  },
239
471
  "gpt-5.4": {
240
472
  "provider": "openai",
241
473
  "displayName": "GPT-5.4",
242
474
  "releaseDate": "2026-03-01",
243
- "status": "active",
244
- "deprecated": false,
475
+ "status": "deprecated",
476
+ "deprecated": true,
245
477
  "deprecationDate": null,
246
- "successorModel": null,
478
+ "successorModel": "gpt-5.6-terra",
247
479
  "capabilities": {
248
480
  "contextWindow": 256000,
249
481
  "maxOutputTokens": 16384,
@@ -261,18 +493,18 @@
261
493
  "lastUpdated": "2026-03-27"
262
494
  },
263
495
  "aliases": ["gpt5.4"],
264
- "tags": ["flagship", "coding", "reasoning", "codex"],
496
+ "tags": ["coding", "reasoning", "codex"],
265
497
  "source": "builtin",
266
- "lastVerified": "2026-03-27"
498
+ "lastVerified": "2026-09-21"
267
499
  },
268
500
  "gpt-5.1-codex-mini": {
269
501
  "provider": "openai",
270
502
  "displayName": "GPT-5.1-Codex-Mini",
271
503
  "releaseDate": "2026-02-01",
272
- "status": "active",
273
- "deprecated": false,
504
+ "status": "deprecated",
505
+ "deprecated": true,
274
506
  "deprecationDate": null,
275
- "successorModel": null,
507
+ "successorModel": "gpt-5.6-luna",
276
508
  "capabilities": {
277
509
  "contextWindow": 192000,
278
510
  "maxOutputTokens": 16384,
@@ -292,7 +524,7 @@
292
524
  "aliases": ["gpt5.1-codex-mini"],
293
525
  "tags": ["budget", "coding", "efficient", "codex", "free-tier"],
294
526
  "source": "builtin",
295
- "lastVerified": "2026-03-27"
527
+ "lastVerified": "2026-09-21"
296
528
  },
297
529
  "codex-mini-latest": {
298
530
  "provider": "openai",
@@ -301,7 +533,7 @@
301
533
  "status": "deprecated",
302
534
  "deprecated": true,
303
535
  "deprecationDate": "2026-03-27",
304
- "successorModel": "gpt-5.1-codex-mini",
536
+ "successorModel": "gpt-5.6-luna",
305
537
  "capabilities": {
306
538
  "contextWindow": 192000,
307
539
  "maxOutputTokens": 16384,
@@ -321,7 +553,7 @@
321
553
  "aliases": ["codex-mini"],
322
554
  "tags": ["coding", "efficient", "codex", "deprecated"],
323
555
  "source": "builtin",
324
- "lastVerified": "2026-03-27"
556
+ "lastVerified": "2026-09-21"
325
557
  },
326
558
  "gpt-5-codex-mini": {
327
559
  "provider": "openai",
@@ -330,7 +562,7 @@
330
562
  "status": "deprecated",
331
563
  "deprecated": true,
332
564
  "deprecationDate": "2026-03-27",
333
- "successorModel": "gpt-5.1-codex-mini",
565
+ "successorModel": "gpt-5.6-luna",
334
566
  "capabilities": {
335
567
  "contextWindow": 192000,
336
568
  "maxOutputTokens": 16384,
@@ -350,7 +582,7 @@
350
582
  "aliases": ["gpt5-codex-mini"],
351
583
  "tags": ["budget", "coding", "efficient", "codex", "deprecated"],
352
584
  "source": "builtin",
353
- "lastVerified": "2026-03-27"
585
+ "lastVerified": "2026-09-21"
354
586
  },
355
587
  "gpt-4-turbo": {
356
588
  "provider": "openai",
@@ -629,8 +861,8 @@
629
861
  },
630
862
  "metadata": {
631
863
  "version": "1.2.0",
632
- "lastRefresh": "2026-03-23T00:00:00Z",
633
- "modelCount": 19,
864
+ "lastRefresh": "2026-09-21T00:00:00Z",
865
+ "modelCount": 28,
634
866
  "providerCount": 5
635
867
  }
636
868
  }
@@ -209,7 +209,7 @@ Options (list):
209
209
  Examples:
210
210
  aiwg catalog list
211
211
  aiwg catalog list --provider anthropic
212
- aiwg catalog info claude-opus-4-6
212
+ aiwg catalog info claude-opus-5
213
213
  aiwg catalog search opus`);
214
214
  }
215
215
  /**
@@ -266,7 +266,7 @@ Options (list):
266
266
  Examples:
267
267
  aiwg catalog list
268
268
  aiwg catalog list --provider anthropic
269
- aiwg catalog info claude-opus-4-6
269
+ aiwg catalog info claude-opus-5
270
270
  aiwg catalog search opus`);
271
271
  }
272
272