@aiwg/cli 2026.10.11 → 2026.10.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/agentic/code/providers/model-catalog.v1.json +62 -12
  2. package/dist/src/artifacts/binding-target-identity.js +51 -0
  3. package/dist/src/artifacts/checksum-manifest.js +12 -0
  4. package/dist/src/artifacts/index-builder.js +11 -13
  5. package/dist/src/artifacts/query-engine.js +5 -11
  6. package/dist/src/cli/handlers/doctor-help.js +32 -0
  7. package/dist/src/cli/handlers/gates.js +19 -18
  8. package/dist/src/cli/handlers/models-help.js +7 -1
  9. package/dist/src/cli/handlers/models.js +3 -3
  10. package/dist/src/cli/handlers/script-runner.js +8 -5
  11. package/dist/src/cli/handlers/sessions-intake.js +104 -0
  12. package/dist/src/cli/handlers/sessions-tail.js +172 -0
  13. package/dist/src/cli/handlers/sessions.js +90 -17
  14. package/dist/src/cli/handlers/skill-lint.js +10 -3
  15. package/dist/src/cli/handlers/steward-format.js +100 -0
  16. package/dist/src/cli/handlers/steward-models.js +167 -0
  17. package/dist/src/cli/handlers/steward.js +14 -248
  18. package/dist/src/cli/handlers/use-bundle-counts.js +61 -0
  19. package/dist/src/cli/handlers/use.js +6 -24
  20. package/dist/src/cli/handlers/utilities.js +1 -24
  21. package/dist/src/config/aiwg-config.js +7 -0
  22. package/dist/src/config/authorization-cli.js +89 -0
  23. package/dist/src/config/cli-help.js +1 -0
  24. package/dist/src/config/cli.js +10 -1
  25. package/dist/src/decision/context-pruning.js +3 -2
  26. package/dist/src/decision/ensemble/contract.js +15 -4
  27. package/dist/src/decision/ensemble-study/artifacts.js +5 -0
  28. package/dist/src/decision/ensemble-study/score.js +4 -3
  29. package/dist/src/decision/feature-export.js +3 -9
  30. package/dist/src/decision/heldout/collector.js +2 -2
  31. package/dist/src/decision/issue-triage/runtime.js +3 -9
  32. package/dist/src/decision/qualification/gates.js +2 -1
  33. package/dist/src/decision/qualification/release.js +2 -3
  34. package/dist/src/decision/routing/report.js +2 -0
  35. package/dist/src/decision/sdlc-screening.js +3 -5
  36. package/dist/src/decision/sensitivity/comparative.js +5 -3
  37. package/dist/src/gates/driver.js +6 -77
  38. package/dist/src/gates/evaluate.js +4 -11
  39. package/dist/src/gates/floors.js +4 -4
  40. package/dist/src/gates/index.js +3 -3
  41. package/dist/src/gates/lattice.js +26 -0
  42. package/dist/src/gates/registry.js +2 -1
  43. package/dist/src/gates/report.js +19 -7
  44. package/dist/src/issues/audit-cli.js +120 -0
  45. package/dist/src/issues/audit-contract.js +64 -0
  46. package/dist/src/issues/audit-local.js +82 -0
  47. package/dist/src/issues/audit.js +220 -0
  48. package/dist/src/lint/rule-activation.js +15 -1
  49. package/dist/src/mission-protocol/canonical-codecs.js +270 -0
  50. package/dist/src/mission-protocol/codecs.js +22 -550
  51. package/dist/src/mission-protocol/health-trace-codecs.js +281 -0
  52. package/dist/src/mission-protocol/health-trace-types.js +43 -0
  53. package/dist/src/mission-protocol/types.js +2 -42
  54. package/dist/src/mission-protocol/worker-contract-json.js +10 -0
  55. package/dist/src/mission-protocol/worker-review-gate.js +100 -0
  56. package/dist/src/mission-protocol/worker-review-types.js +2 -0
  57. package/dist/src/models/catalog-policy.js +280 -0
  58. package/dist/src/models/index.js +1 -1
  59. package/dist/src/models/model-catalog.v1.json +62 -12
  60. package/dist/src/models/policy-resources.js +28 -0
  61. package/dist/src/models/provider-policy.js +10 -546
  62. package/dist/src/models/resolver.js +26 -8
  63. package/dist/src/models/router.js +15 -2
  64. package/dist/src/models/tiers.js +13 -0
  65. package/dist/src/models/types.js +0 -6
  66. package/dist/src/models/worker-ceilings.js +59 -0
  67. package/dist/src/models/worker-invocation-policy.js +243 -0
  68. package/dist/src/models/worker-plan.js +16 -20
  69. package/dist/src/models/worker-review-lineage.js +55 -0
  70. package/dist/src/models/worker-selection-policy.js +1 -1
  71. package/dist/src/models/wrapper-route.js +6 -3
  72. package/dist/src/policy/authorization.js +1 -0
  73. package/dist/src/policy/hitl-config.js +63 -0
  74. package/dist/src/policy/hitl-receipt.js +57 -0
  75. package/dist/src/policy/hitl-types.js +4 -0
  76. package/dist/src/policy/hitl-validation.js +39 -0
  77. package/dist/src/policy/hitl.js +117 -0
  78. package/dist/src/rules/activation.d.mts +1 -1
  79. package/dist/src/rules/activation.mjs +0 -2
  80. package/dist/src/rules/gate-coverage.js +51 -0
  81. package/dist/src/rules/gate-references.js +16 -0
  82. package/dist/src/rules/rule-frontmatter.schema.json +7 -1
  83. package/dist/src/serve/worker-command-request.js +21 -4
  84. package/dist/src/serve/worker-invocation-preparation.js +3 -1
  85. package/dist/src/serve/worker-invocation.js +21 -10
  86. package/dist/src/sessions/adapters/deepseek-harness.js +1 -0
  87. package/dist/src/sessions/adapters/grok-build-native.js +269 -0
  88. package/dist/src/sessions/adapters/grok-build.js +57 -15
  89. package/dist/src/sessions/adapters/hermes-state-db.js +252 -0
  90. package/dist/src/sessions/adapters/hermes.js +42 -3
  91. package/dist/src/sessions/adapters/warp.js +1 -1
  92. package/dist/src/sessions/batch-import.js +10 -0
  93. package/dist/src/sessions/contracts.js +1 -1
  94. package/dist/src/sessions/discovery-capability.js +38 -0
  95. package/dist/src/sessions/importer.js +8 -251
  96. package/dist/src/sessions/index.js +4 -0
  97. package/dist/src/sessions/intake-dir.js +71 -0
  98. package/dist/src/sessions/normalization.js +251 -0
  99. package/dist/src/sessions/tail.js +91 -0
  100. package/dist/src/sessions/workspace-discovery.js +83 -7
  101. package/dist/src/skills/agent-skill-sidecar.js +28 -0
  102. package/dist/src/skills/agent-skills.js +4 -23
  103. package/dist/src/skills/claude-surface-projection.js +25 -0
  104. package/dist/src/skills/deployer.js +8 -288
  105. package/dist/src/skills/deployment-policy.js +114 -0
  106. package/dist/src/skills/deployment-projection.js +152 -0
  107. package/dist/src/skills/deployment-types.js +20 -0
  108. package/dist/src/skills/exporter.js +8 -31
  109. package/dist/src/skills/provider-extensions.js +41 -0
  110. package/dist/src/skills/run.js +6 -0
  111. package/dist/src/skills/types.js +0 -8
  112. package/dist/src/skills/validator-resources.js +68 -0
  113. package/dist/src/skills/validator.js +6 -55
  114. package/dist/src/storage/cli-migrate-options.js +125 -0
  115. package/dist/src/storage/cli-migrate.js +111 -0
  116. package/dist/src/storage/cli.js +4 -279
  117. package/dist/src/storage/migration-adapter.js +79 -0
  118. package/dist/src/storage/migration-copy.js +108 -0
  119. package/dist/src/storage/migration-protocol.js +14 -197
  120. package/dist/src/storage/migration-records.js +186 -0
  121. package/dist/src/storage/migration-types.js +12 -0
  122. package/dist/src/tracker/forge-http.js +2 -1
  123. package/dist/src/tracker/issue-pages.js +110 -0
  124. package/package.json +1 -1
  125. package/schemas/mission-v1.schema.json +335 -0
  126. package/schemas/models/model-catalog.v1.schema.json +19 -1
  127. package/schemas/models/model-config-compatibility.v1.schema.json +3 -2
  128. package/schemas/models/model-policy.v1.schema.json +1 -1
  129. package/tools/agents/providers/provider-paths-staging.mjs +35 -0
  130. package/tools/agents/providers/rule-binding-targets.mjs +146 -0
  131. package/tools/agents/providers/rule-delivery.mjs +7 -126
  132. package/vscode-extension/schemas/aiwg.config.v1.json +177 -0
@@ -0,0 +1,280 @@
1
+ // Validates the refreshable model catalog and compiles canonical tier intent.
2
+ import { z } from 'zod';
3
+ import { integer, dateTime, url, number } from '../schema/zod-validation.mjs';
4
+ import { getCatalogValidators, validateWorkerModelObservation } from './worker-review-lineage.js';
5
+ import { MODEL_TIERS, normalizeModelTier, flagshipElected, isFlagshipModel } from './tiers.js';
6
+ import { ProviderSchema, requireModelResource } from './policy-resources.js';
7
+ import { loadProviderModelCapabilities } from './provider-policy.js';
8
+ import { WorkerSelectionPolicySchema } from './worker-selection-policy.js';
9
+ const catalogData = requireModelResource('model-catalog.v1.json');
10
+ const CatalogModelSchema = z.object({
11
+ id: z.string().min(1),
12
+ status: z.enum(['active', 'deprecated', 'unverified']),
13
+ fallback: z.string().min(1).optional(),
14
+ observed: z.boolean().optional(),
15
+ selection: z.literal('user-elected').optional(),
16
+ });
17
+ const CatalogProviderSchema = z.object({
18
+ roles: z.object({
19
+ reasoning: CatalogModelSchema,
20
+ coding: CatalogModelSchema,
21
+ efficiency: CatalogModelSchema,
22
+ }),
23
+ tiers: z.object({
24
+ flagship: CatalogModelSchema.extend({ selection: z.literal('user-elected') }),
25
+ premium: CatalogModelSchema, standard: CatalogModelSchema, economy: CatalogModelSchema,
26
+ }).optional(),
27
+ verified_at: z.string().date().optional(),
28
+ evidence: z.string().min(1).optional(),
29
+ sourceUrl: url(),
30
+ verifiedAt: z.string().date(),
31
+ });
32
+ // One copy of the catalog validators lives with the lightweight lineage module (#3167).
33
+ export { validateWorkerModelObservation } from './worker-review-lineage.js';
34
+ const WorkerObservationSchema = z.custom(input => validateWorkerModelObservation(input).length === 0);
35
+ const DiscoveredWorkerModelSchema = z.looseObject({
36
+ id: z.string().min(1), apiModelId: z.string().optional(), llmProvider: z.string().optional(),
37
+ hidden: z.boolean().optional(), reasoningEfforts: z.array(z.string()).optional(), worker: WorkerObservationSchema.optional(),
38
+ }).superRefine((model, context) => {
39
+ if (!model.worker)
40
+ return;
41
+ if (model.hidden !== undefined && model.worker.visibility !== (model.hidden ? 'hidden' : 'listed'))
42
+ context.addIssue({ code: 'custom', path: ['worker', 'visibility'], message: 'Conflicting visibility evidence' });
43
+ const efforts = model.reasoningEfforts ?? [];
44
+ const observed = model.worker.efforts.map(e => e.id);
45
+ if (efforts.length !== observed.length || new Set(observed).size !== observed.length || efforts.some(e => !observed.includes(e)))
46
+ context.addIssue({ code: 'custom', path: ['worker', 'efforts'], message: 'Conflicting effort evidence' });
47
+ });
48
+ const ProviderDiscoverySchema = z.looseObject({
49
+ provider: z.string(), source: z.enum(['native', 'cache', 'remote', 'static']), observedAt: dateTime({ offset: true }),
50
+ runtimeVersion: z.string().optional(), accountScope: z.enum(['local-account', 'local-runtime', 'public-feed', 'static']),
51
+ accountBinding: z.string().min(1).optional(), models: z.array(DiscoveredWorkerModelSchema),
52
+ });
53
+ const DiscoverySchema = z.strictObject({
54
+ source: z.enum(['native', 'cache', 'remote', 'static']), upstreamSource: z.enum(['native', 'remote', 'static']).optional(),
55
+ fetchedAt: dateTime({ offset: true }), remoteUrl: url().optional(), remoteError: z.string().optional(),
56
+ inventorySignature: z.string().optional(), providers: z.record(z.string(), ProviderDiscoverySchema),
57
+ instances: z.record(z.string(), ProviderDiscoverySchema).optional(),
58
+ });
59
+ /** Optional enrichment is checked without tightening legacy catalog rows. */
60
+ export function validateWorkerCatalogDiscovery(input) {
61
+ if (input === undefined)
62
+ return [];
63
+ const validate = getCatalogValidators().discovery;
64
+ if (!validate(input))
65
+ return (validate.errors ?? []).map(error => `${error.instancePath}: ${error.message}`);
66
+ const parsed = DiscoverySchema.safeParse(input);
67
+ return parsed.success ? [] : parsed.error.issues.map(issue => `${issue.path.join('/')}: ${issue.message}`);
68
+ }
69
+ const CatalogSchema = z.strictObject({
70
+ version: z.literal('1.0.0'),
71
+ $schema: z.literal('../../../schemas/models/model-catalog.v1.schema.json').optional(),
72
+ discovery: DiscoverySchema.optional(),
73
+ refreshedAt: z.string().date(),
74
+ staleAfterDays: integer().positive(),
75
+ providers: z.partialRecord(ProviderSchema, CatalogProviderSchema),
76
+ });
77
+ const PolicySchema = z.strictObject({
78
+ role: z.enum(['reasoning', 'coding', 'efficiency']),
79
+ tier: z.enum(MODEL_TIERS).transform(normalizeModelTier),
80
+ effort: z.enum(['minimal', 'low', 'medium', 'high', 'xhigh']).optional(),
81
+ override: z.string().min(1).optional(),
82
+ });
83
+ const UserProjectModelConfigSchema = z.looseObject({
84
+ defaults: z.strictObject({
85
+ tier: z.enum(MODEL_TIERS).optional(),
86
+ provider: ProviderSchema.optional(),
87
+ workerSelection: WorkerSelectionPolicySchema.optional(),
88
+ }).optional(),
89
+ agentOverrides: z.record(z.string(), z.strictObject({
90
+ 'model-tier': z.enum(MODEL_TIERS).optional(),
91
+ 'model-override': z.string().min(1).optional(),
92
+ rationale: z.string().min(1).optional(),
93
+ })).optional(),
94
+ customTiers: z.record(z.string(), z.strictObject({
95
+ description: z.string().min(1),
96
+ costMultiplier: number().check(z.gte(0)).meta({ type: 'number', minimum: 0 }),
97
+ roleMapping: z.strictObject({
98
+ reasoning: z.enum(['reasoning', 'coding', 'efficiency']),
99
+ coding: z.enum(['reasoning', 'coding', 'efficiency']),
100
+ efficiency: z.enum(['reasoning', 'coding', 'efficiency']),
101
+ }),
102
+ })).optional(),
103
+ rationale: z.string().optional(),
104
+ });
105
+ let catalogCache = null;
106
+ export function parseProviderModelCatalog(input) {
107
+ const validate = getCatalogValidators().catalog;
108
+ if (!validate(input))
109
+ throw new Error(`MODEL_POLICY_INVALID: ${validate.errors?.map(e => `${e.instancePath} ${e.message}`).join('; ')}`);
110
+ return CatalogSchema.parse(input);
111
+ }
112
+ export function loadProviderModelCatalog() {
113
+ if (!catalogCache)
114
+ catalogCache = parseProviderModelCatalog(catalogData);
115
+ return catalogCache;
116
+ }
117
+ export function validateCanonicalModelPolicy(input) {
118
+ const parsed = PolicySchema.safeParse(input);
119
+ if (!parsed.success) {
120
+ return {
121
+ valid: false,
122
+ diagnostics: parsed.error.issues.map(issue => ({
123
+ code: 'MODEL_POLICY_INVALID',
124
+ severity: 'error',
125
+ message: `${issue.path.join('.') || 'policy'}: ${issue.message}`,
126
+ })),
127
+ };
128
+ }
129
+ return { valid: true, policy: parsed.data, diagnostics: [] };
130
+ }
131
+ export function validateUserProjectModelConfig(input) {
132
+ const parsed = UserProjectModelConfigSchema.safeParse(input);
133
+ if (parsed.success)
134
+ return { valid: true, diagnostics: [] };
135
+ return {
136
+ valid: false,
137
+ diagnostics: parsed.error.issues.map(issue => ({
138
+ code: issue.path.includes('workerSelection') ? 'OG_CONFIG_REFERENCE' : 'MODEL_POLICY_INVALID',
139
+ pointer: `/${issue.path.map(p => String(p).replace(/~/g, '~0').replace(/\//g, '~1')).join('/')}`,
140
+ severity: 'error',
141
+ message: `${issue.path.join('.') || 'config'}: ${issue.message}`,
142
+ })),
143
+ };
144
+ }
145
+ function catalogRole(policy) {
146
+ if (policy.tier === 'economy')
147
+ return 'efficiency';
148
+ if (policy.tier === 'premium')
149
+ return 'reasoning';
150
+ return policy.role;
151
+ }
152
+ function fieldNames(provider) {
153
+ switch (provider) {
154
+ case 'antigravity': return { model: 'model', effort: 'effort' };
155
+ case 'codex': return { model: 'model', effort: 'model_reasoning_effort' };
156
+ case 'factory': return { model: 'model', effort: 'reasoningEffort' };
157
+ case 'claude': return { model: 'model', effort: 'effort' };
158
+ case 'copilot':
159
+ case 'cursor':
160
+ case 'opencode': return { model: 'model' };
161
+ case 'grok-build': return { model: 'model', effort: 'effort' };
162
+ case 'omp': return { model: 'model', effort: 'thinkingLevel' };
163
+ case 'pi': return { model: 'model', effort: 'thinking' };
164
+ case 'openhuman': return { model: 'model_hint' };
165
+ case 'openclaw': return { model: 'subagents.model' };
166
+ default: return {};
167
+ }
168
+ }
169
+ export function compileModelPolicy(input) {
170
+ const registry = loadProviderModelCapabilities();
171
+ const catalog = input.catalog ?? loadProviderModelCatalog();
172
+ const capability = registry.providers[input.provider];
173
+ if (!capability)
174
+ throw new Error(`Unknown provider model capability: ${input.provider}`);
175
+ const surface = capability[input.artifact];
176
+ const diagnostics = [];
177
+ const fields = {};
178
+ const names = fieldNames(input.provider);
179
+ const catalogProvider = catalog.providers[input.provider];
180
+ if (!catalogProvider)
181
+ throw new Error(`Unknown provider model catalog: ${input.provider}`);
182
+ const tier = normalizeModelTier(input.policy.tier);
183
+ const catalogEntry = catalogProvider.tiers?.[tier] ?? catalogProvider.roles[catalogRole(input.policy)];
184
+ if (tier === 'flagship' && !catalogProvider.tiers)
185
+ throw new Error('Provider has no flagship binding');
186
+ const effectiveModel = input.policy.override ?? catalogEntry.id;
187
+ const electedOnly = tier === 'flagship' || isFlagshipModel(effectiveModel)
188
+ || [...Object.values(catalogProvider.roles), ...Object.values(catalogProvider.tiers ?? {})]
189
+ .some(entry => entry.id === effectiveModel && entry.selection === 'user-elected');
190
+ if (electedOnly && !flagshipElected(input))
191
+ throw new Error('Flagship models are user-elected only');
192
+ if (surface === 'unsupported' || surface === 'informational') {
193
+ diagnostics.push({
194
+ code: surface === 'unsupported' ? 'MODEL_SURFACE_UNSUPPORTED' : 'MODEL_SURFACE_DEGRADED',
195
+ severity: surface === 'unsupported' ? 'warning' : 'info',
196
+ provider: input.provider,
197
+ message: `${input.provider} cannot enforce ${input.artifact}-scoped model policy (${surface})`,
198
+ });
199
+ }
200
+ else if (surface === 'global-only' || surface === 'inherited') {
201
+ diagnostics.push({
202
+ code: 'MODEL_SURFACE_DEGRADED', severity: 'warning', provider: input.provider,
203
+ message: `${input.provider} compiles ${input.artifact} policy as ${surface}`,
204
+ });
205
+ }
206
+ else if (names.model) {
207
+ fields[names.model] = effectiveModel;
208
+ }
209
+ if (input.policy.effort) {
210
+ if (names.effort && capability.effortValues?.includes(input.policy.effort)
211
+ && surface !== 'unsupported' && surface !== 'informational') {
212
+ fields[names.effort] = input.policy.effort;
213
+ }
214
+ else {
215
+ diagnostics.push({
216
+ code: 'MODEL_EFFORT_UNSUPPORTED', severity: 'warning', provider: input.provider,
217
+ message: `${input.provider} does not enforce effort=${input.policy.effort} on ${input.artifact} artifacts`,
218
+ });
219
+ }
220
+ }
221
+ if (input.policy.override) {
222
+ diagnostics.push({
223
+ code: 'MODEL_OVERRIDE_UNVERIFIED', severity: 'warning', provider: input.provider,
224
+ message: `Exact override ${input.policy.override} requires provider validation`,
225
+ });
226
+ }
227
+ else if (catalogEntry.status === 'deprecated') {
228
+ diagnostics.push({
229
+ code: 'MODEL_CATALOG_DEPRECATED', severity: 'error', provider: input.provider,
230
+ message: `${catalogEntry.id} is deprecated`,
231
+ });
232
+ }
233
+ else if (catalogEntry.status === 'unverified') {
234
+ diagnostics.push({
235
+ code: 'MODEL_CATALOG_UNVERIFIED', severity: 'warning', provider: input.provider,
236
+ message: `${catalogEntry.id} has not been observed on ${input.provider}`,
237
+ });
238
+ }
239
+ const now = input.now ?? new Date();
240
+ const refreshedAt = new Date(`${catalog.refreshedAt}T00:00:00Z`);
241
+ const ageDays = Math.floor((now.getTime() - refreshedAt.getTime()) / 86_400_000);
242
+ if (ageDays > catalog.staleAfterDays) {
243
+ diagnostics.push({
244
+ code: 'MODEL_CATALOG_STALE', severity: 'warning', provider: input.provider,
245
+ message: `Model catalog is ${ageDays} days old (limit ${catalog.staleAfterDays})`,
246
+ });
247
+ }
248
+ return {
249
+ provider: input.provider,
250
+ artifact: input.artifact,
251
+ outcome: surface,
252
+ effectiveModel: surface === 'unsupported' || surface === 'informational' ? undefined : effectiveModel,
253
+ effectiveEffort: fields[names.effort ?? ''] ? input.policy.effort : undefined,
254
+ fields,
255
+ target: capability.configTarget,
256
+ source: input.policy.override ? 'override' : (surface === 'inherited' ? 'inheritance' : 'catalog'),
257
+ diagnostics,
258
+ };
259
+ }
260
+ function tomlString(value) { return JSON.stringify(value); }
261
+ export function renderCodexAgentToml(definition) {
262
+ const required = [
263
+ ['name', definition.name],
264
+ ['description', definition.description],
265
+ ['developer_instructions', definition.developerInstructions],
266
+ ];
267
+ for (const [field, value] of required) {
268
+ if (!value.trim())
269
+ throw new Error(`Codex custom agent requires ${field}`);
270
+ }
271
+ const lines = required.map(([field, value]) => `${field} = ${tomlString(value)}`);
272
+ if (definition.model)
273
+ lines.push(`model = ${tomlString(definition.model)}`);
274
+ if (definition.modelReasoningEffort) {
275
+ lines.push(`model_reasoning_effort = ${tomlString(definition.modelReasoningEffort)}`);
276
+ }
277
+ return `${lines.join('\n')}\n`;
278
+ }
279
+ export function resetCatalogPolicyCache() { catalogCache = null; }
280
+ //# sourceMappingURL=catalog-policy.js.map
@@ -2,7 +2,7 @@
2
2
  * Enhanced Model Selection System - Public API
3
3
  *
4
4
  * Provides tier-based model selection with:
5
- * - Quality tiers (economy, standard, premium, max-quality)
5
+ * - Quality tiers (economy, standard, premium, flagship; alias max-quality)
6
6
  * - Provider abstraction (claude, openai, factory, etc.)
7
7
  * - Hierarchical configuration (default < user < project < agent)
8
8
  * - Backwards compatibility with v1 configs
@@ -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-09-21",
4
+ "refreshedAt": "2026-10-27",
5
5
  "staleAfterDays": 90,
6
6
  "providers": {
7
7
  "antigravity": {
@@ -28,44 +28,94 @@
28
28
  "claude": {
29
29
  "roles": {
30
30
  "reasoning": {
31
- "id": "claude-opus-5",
31
+ "id": "claude-opus-5-5",
32
32
  "status": "active",
33
- "observed": false
33
+ "observed": true
34
34
  },
35
35
  "coding": {
36
- "id": "claude-sonnet-5",
36
+ "id": "claude-sonnet-5-5",
37
37
  "status": "active",
38
- "observed": false
38
+ "observed": true
39
39
  },
40
40
  "efficiency": {
41
- "id": "claude-haiku-4-5",
41
+ "id": "claude-haiku-5-5",
42
42
  "status": "active",
43
- "observed": false
43
+ "observed": true
44
44
  }
45
45
  },
46
46
  "sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview",
47
- "verifiedAt": "2026-09-21"
47
+ "verifiedAt": "2026-10-27",
48
+ "tiers": {
49
+ "flagship": {
50
+ "id": "claude-fable-5-1",
51
+ "status": "active",
52
+ "observed": true,
53
+ "selection": "user-elected"
54
+ },
55
+ "premium": {
56
+ "id": "claude-opus-5-5",
57
+ "status": "active",
58
+ "observed": true
59
+ },
60
+ "standard": {
61
+ "id": "claude-sonnet-5-5",
62
+ "status": "active",
63
+ "observed": true
64
+ },
65
+ "economy": {
66
+ "id": "claude-haiku-5-5",
67
+ "status": "active",
68
+ "observed": true
69
+ }
70
+ },
71
+ "verified_at": "2026-10-27",
72
+ "evidence": "Conductor-verified Claude Code harness current model list, 2026-10-27."
48
73
  },
49
74
  "codex": {
50
75
  "roles": {
51
76
  "reasoning": {
52
- "id": "gpt-5.6-sol",
77
+ "id": "gpt-6.1-sol",
53
78
  "status": "active",
54
79
  "observed": true
55
80
  },
56
81
  "coding": {
57
- "id": "gpt-5.6-terra",
82
+ "id": "gpt-6.1-terra",
58
83
  "status": "active",
59
84
  "observed": true
60
85
  },
61
86
  "efficiency": {
62
- "id": "gpt-5.6-luna",
87
+ "id": "gpt-6-luna",
63
88
  "status": "active",
64
89
  "observed": true
65
90
  }
66
91
  },
67
92
  "sourceUrl": "https://learn.chatgpt.com/docs/models",
68
- "verifiedAt": "2026-09-21"
93
+ "verifiedAt": "2026-10-27",
94
+ "tiers": {
95
+ "flagship": {
96
+ "id": "gpt-6-astra",
97
+ "status": "active",
98
+ "observed": true,
99
+ "selection": "user-elected"
100
+ },
101
+ "premium": {
102
+ "id": "gpt-6.1-sol",
103
+ "status": "active",
104
+ "observed": true
105
+ },
106
+ "standard": {
107
+ "id": "gpt-6.1-terra",
108
+ "status": "active",
109
+ "observed": true
110
+ },
111
+ "economy": {
112
+ "id": "gpt-6-luna",
113
+ "status": "active",
114
+ "observed": true
115
+ }
116
+ },
117
+ "verified_at": "2026-10-27",
118
+ "evidence": "Conductor-verified Codex CLI local model cache on titan (codex-cli 0.165.0), plus ~/.cache/aiwg/model-catalog.v1.json, 2026-10-27; no network verification by this worker."
69
119
  },
70
120
  "copilot": {
71
121
  "roles": {
@@ -0,0 +1,28 @@
1
+ // Loads bundled policy resources and defines supported provider IDs.
2
+ import { createRequire } from 'node:module';
3
+ import { z } from 'zod';
4
+ const require = createRequire(import.meta.url);
5
+ export function requireModelResource(filename) {
6
+ const candidates = [
7
+ `./${filename}`,
8
+ `../../agentic/code/providers/${filename}`,
9
+ `../../../agentic/code/providers/${filename}`,
10
+ `../../schemas/models/${filename}`,
11
+ `../../../schemas/models/${filename}`,
12
+ ];
13
+ for (const candidate of candidates) {
14
+ try {
15
+ return require(candidate);
16
+ }
17
+ catch (error) {
18
+ if (error?.code !== 'MODULE_NOT_FOUND')
19
+ throw error;
20
+ }
21
+ }
22
+ throw new Error(`Model policy resource is missing: ${filename}`);
23
+ }
24
+ export const ProviderSchema = z.enum([
25
+ 'antigravity', 'claude', 'codex', 'copilot', 'cursor', 'deepseek-harness', 'factory', 'grokbot', 'grok-build', 'hermes',
26
+ 'muse', 'opencode', 'openclaw', 'openhuman', 'omp', 'pi', 'warp', 'windsurf',
27
+ ]);
28
+ //# sourceMappingURL=policy-resources.js.map