@aiwg/cli 2026.9.7 → 2026.9.10

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 (48) hide show
  1. package/bin/aiwg.mjs +55 -10
  2. package/dist/src/artifacts/cli.js +20 -8
  3. package/dist/src/artifacts/corpus-views/taxonomies.js +1 -1
  4. package/dist/src/artifacts/index-builder.js +43 -1
  5. package/dist/src/artifacts/query-engine.js +7 -0
  6. package/dist/src/cli/handlers/help.js +6 -5
  7. package/dist/src/cli/handlers/init.js +7 -2
  8. package/dist/src/cli/handlers/installation.js +102 -2
  9. package/dist/src/cli/handlers/mc.js +87 -17
  10. package/dist/src/cli/handlers/ralph.js +8 -8
  11. package/dist/src/cli/handlers/refresh.js +67 -7
  12. package/dist/src/cli/handlers/repo-access.js +155 -4
  13. package/dist/src/cli/handlers/setup.js +5 -5
  14. package/dist/src/cli/handlers/steward.js +39 -2
  15. package/dist/src/cli/handlers/use.js +13 -4
  16. package/dist/src/cli/handlers/version.js +49 -14
  17. package/dist/src/cli/handlers/workspace-context.js +8 -0
  18. package/dist/src/cli/services/deployment-verification.js +71 -10
  19. package/dist/src/cli/watch-service.js +43 -3
  20. package/dist/src/config/aiwg-config.js +95 -3
  21. package/dist/src/config/cli.js +16 -1
  22. package/dist/src/config/gitignore.js +5 -0
  23. package/dist/src/dataset/fortemi-capability.d.ts +70 -0
  24. package/dist/src/dataset/fortemi-capability.js +211 -0
  25. package/dist/src/dataset/fortemi-dataset-execution.d.ts +9 -0
  26. package/dist/src/dataset/fortemi-dataset-execution.js +49 -8
  27. package/dist/src/dataset/fortemi-run-receipt.d.ts +1 -0
  28. package/dist/src/dataset/fortemi-run-receipt.js +2 -19
  29. package/dist/src/dataset/fortemi-schema-path.d.ts +7 -0
  30. package/dist/src/dataset/fortemi-schema-path.js +24 -0
  31. package/dist/src/dataset/index.d.ts +1 -0
  32. package/dist/src/dataset/index.js +1 -0
  33. package/dist/src/extensions/claude-hooks-installer.js +22 -6
  34. package/dist/src/extensions/project-local-doctor.js +15 -1
  35. package/dist/src/lint/cli.js +5 -1
  36. package/dist/src/lint/reporters.js +17 -0
  37. package/dist/src/lint/runner.js +297 -4
  38. package/dist/src/policy/authorization.js +1 -1
  39. package/dist/src/smiths/context-pipeline/workspace-context.js +138 -49
  40. package/package.json +1 -1
  41. package/schemas/dataset/fortemi-capability-validation/1.0.1/authority.json +61 -0
  42. package/schemas/dataset/fortemi-capability-validation/1.0.1/capability.schema.json +469 -0
  43. package/schemas/security/threat-assessment-report.v1.schema.json +2 -1
  44. package/tools/agents/deploy-agents.mjs +8 -0
  45. package/tools/agents/providers/base.mjs +261 -16
  46. package/tools/agents/providers/claude.mjs +61 -4
  47. package/tools/agents/providers/codex.mjs +9 -0
  48. package/tools/skills/deploy-skills-codex.mjs +121 -7
@@ -0,0 +1,469 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://fortemi.dev/schemas/dataset-execution-capabilities/validation/1.0.1.schema.json",
4
+ "title": "Dataset Capability Validation Revision 1.0.1 (v1 wire)",
5
+ "oneOf": [
6
+ {
7
+ "$ref": "#/$defs/descriptor"
8
+ },
9
+ {
10
+ "$ref": "#/$defs/request"
11
+ },
12
+ {
13
+ "$ref": "#/$defs/result"
14
+ }
15
+ ],
16
+ "$defs": {
17
+ "capabilityId": {
18
+ "enum": [
19
+ "ingest.full",
20
+ "ingest.snapshot",
21
+ "ingest.incremental",
22
+ "ingest.stream",
23
+ "schema.inspect",
24
+ "identity.stable-revision",
25
+ "identity.record",
26
+ "mutation.upsert",
27
+ "mutation.tombstone",
28
+ "mutation.reconcile",
29
+ "checkpoint.read",
30
+ "checkpoint.write",
31
+ "execution.cancel",
32
+ "rejection.record",
33
+ "index.lexical",
34
+ "index.chunk",
35
+ "index.vector",
36
+ "index.hybrid",
37
+ "index.rerank",
38
+ "index.graph",
39
+ "index.community",
40
+ "lineage.dataset",
41
+ "lineage.record",
42
+ "lineage.field",
43
+ "lineage.relationship-evidence",
44
+ "transaction.atomic-batch",
45
+ "privacy.pre-materialization-filter",
46
+ "pagination.cursor",
47
+ "ordering.deterministic"
48
+ ]
49
+ },
50
+ "semver": {
51
+ "type": "string",
52
+ "maxLength": 256,
53
+ "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-((?:0|[1-9][0-9]*|[0-9A-Za-z-]*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9][0-9]*|[0-9A-Za-z-]*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$(?![\\s\\S])"
54
+ },
55
+ "digest": {
56
+ "type": "string",
57
+ "pattern": "^[a-z0-9]+:[a-f0-9]+$"
58
+ },
59
+ "limits": {
60
+ "type": "object",
61
+ "additionalProperties": false,
62
+ "properties": {
63
+ "maxInputBytes": {
64
+ "type": "integer",
65
+ "minimum": 0,
66
+ "maximum": 9007199254740991
67
+ },
68
+ "maxRecordBytes": {
69
+ "type": "integer",
70
+ "minimum": 0,
71
+ "maximum": 9007199254740991
72
+ },
73
+ "maxBatchRecords": {
74
+ "type": "integer",
75
+ "minimum": 0,
76
+ "maximum": 9007199254740991
77
+ },
78
+ "maxConcurrency": {
79
+ "type": "integer",
80
+ "minimum": 0,
81
+ "maximum": 9007199254740991
82
+ },
83
+ "maxPageSize": {
84
+ "type": "integer",
85
+ "minimum": 0,
86
+ "maximum": 9007199254740991
87
+ },
88
+ "maxTraversalDepth": {
89
+ "type": "integer",
90
+ "minimum": 0,
91
+ "maximum": 9007199254740991
92
+ }
93
+ }
94
+ },
95
+ "evidence": {
96
+ "type": "object",
97
+ "additionalProperties": false,
98
+ "required": [
99
+ "id",
100
+ "kind",
101
+ "uri"
102
+ ],
103
+ "properties": {
104
+ "id": {
105
+ "type": "string",
106
+ "minLength": 1
107
+ },
108
+ "kind": {
109
+ "enum": [
110
+ "fixture",
111
+ "conformance-report",
112
+ "live-qualification"
113
+ ]
114
+ },
115
+ "uri": {
116
+ "type": "string",
117
+ "minLength": 1
118
+ },
119
+ "digest": {
120
+ "$ref": "#/$defs/digest"
121
+ }
122
+ }
123
+ },
124
+ "capability": {
125
+ "type": "object",
126
+ "additionalProperties": false,
127
+ "required": [
128
+ "id",
129
+ "version",
130
+ "status",
131
+ "evidence"
132
+ ],
133
+ "properties": {
134
+ "id": {
135
+ "$ref": "#/$defs/capabilityId"
136
+ },
137
+ "version": {
138
+ "$ref": "#/$defs/semver"
139
+ },
140
+ "status": {
141
+ "enum": [
142
+ "supported",
143
+ "experimental",
144
+ "unsupported"
145
+ ]
146
+ },
147
+ "limits": {
148
+ "$ref": "#/$defs/limits"
149
+ },
150
+ "evidence": {
151
+ "type": "array",
152
+ "items": {
153
+ "type": "string",
154
+ "minLength": 1
155
+ },
156
+ "uniqueItems": true
157
+ }
158
+ }
159
+ },
160
+ "runtime": {
161
+ "type": "object",
162
+ "additionalProperties": false,
163
+ "required": [
164
+ "id",
165
+ "version",
166
+ "plane",
167
+ "dataClass",
168
+ "maturity"
169
+ ],
170
+ "properties": {
171
+ "id": {
172
+ "type": "string",
173
+ "minLength": 1
174
+ },
175
+ "version": {
176
+ "$ref": "#/$defs/semver"
177
+ },
178
+ "plane": {
179
+ "enum": [
180
+ "browser-local-archive",
181
+ "static-cache",
182
+ "portable-shard",
183
+ "server-process",
184
+ "live-remote-persistence"
185
+ ]
186
+ },
187
+ "dataClass": {
188
+ "enum": [
189
+ "canonical",
190
+ "regenerable-index",
191
+ "static-cache",
192
+ "portable-projection",
193
+ "remote-persistence"
194
+ ]
195
+ },
196
+ "maturity": {
197
+ "enum": [
198
+ "experimental",
199
+ "alpha",
200
+ "beta",
201
+ "stable"
202
+ ]
203
+ }
204
+ }
205
+ },
206
+ "guarantees": {
207
+ "type": "object",
208
+ "additionalProperties": false,
209
+ "required": [
210
+ "transaction",
211
+ "isolation",
212
+ "durability",
213
+ "availability",
214
+ "ordering"
215
+ ],
216
+ "properties": {
217
+ "transaction": {
218
+ "enum": [
219
+ "none",
220
+ "single-record",
221
+ "atomic-batch"
222
+ ]
223
+ },
224
+ "isolation": {
225
+ "enum": [
226
+ "none",
227
+ "snapshot",
228
+ "serializable"
229
+ ]
230
+ },
231
+ "durability": {
232
+ "enum": [
233
+ "process",
234
+ "memory",
235
+ "filesystem",
236
+ "wal",
237
+ "replicated"
238
+ ]
239
+ },
240
+ "availability": {
241
+ "enum": [
242
+ "local-process",
243
+ "single-host",
244
+ "remote-service"
245
+ ]
246
+ },
247
+ "ordering": {
248
+ "enum": [
249
+ "unspecified",
250
+ "stable-identity",
251
+ "backend-cursor"
252
+ ]
253
+ }
254
+ }
255
+ },
256
+ "descriptor": {
257
+ "type": "object",
258
+ "additionalProperties": false,
259
+ "required": [
260
+ "contract",
261
+ "schemaVersion",
262
+ "runtime",
263
+ "guarantees",
264
+ "capabilities",
265
+ "evidence"
266
+ ],
267
+ "properties": {
268
+ "contract": {
269
+ "const": "fortemi.dataset-execution-capabilities/v1"
270
+ },
271
+ "schemaVersion": {
272
+ "$ref": "#/$defs/semver"
273
+ },
274
+ "runtime": {
275
+ "$ref": "#/$defs/runtime"
276
+ },
277
+ "guarantees": {
278
+ "$ref": "#/$defs/guarantees"
279
+ },
280
+ "capabilities": {
281
+ "type": "array",
282
+ "items": {
283
+ "$ref": "#/$defs/capability"
284
+ }
285
+ },
286
+ "evidence": {
287
+ "type": "array",
288
+ "items": {
289
+ "$ref": "#/$defs/evidence"
290
+ }
291
+ }
292
+ }
293
+ },
294
+ "requirement": {
295
+ "type": "object",
296
+ "additionalProperties": false,
297
+ "required": [
298
+ "id"
299
+ ],
300
+ "properties": {
301
+ "id": {
302
+ "$ref": "#/$defs/capabilityId"
303
+ },
304
+ "minimumVersion": {
305
+ "$ref": "#/$defs/semver"
306
+ },
307
+ "minimumLimits": {
308
+ "$ref": "#/$defs/limits"
309
+ }
310
+ }
311
+ },
312
+ "optionalRequirement": {
313
+ "type": "object",
314
+ "additionalProperties": false,
315
+ "required": [
316
+ "id"
317
+ ],
318
+ "properties": {
319
+ "id": {
320
+ "$ref": "#/$defs/capabilityId"
321
+ },
322
+ "minimumVersion": {
323
+ "$ref": "#/$defs/semver"
324
+ },
325
+ "minimumLimits": {
326
+ "$ref": "#/$defs/limits"
327
+ },
328
+ "fallback": {
329
+ "type": "array",
330
+ "items": {
331
+ "$ref": "#/$defs/capabilityId"
332
+ },
333
+ "uniqueItems": true
334
+ }
335
+ }
336
+ },
337
+ "request": {
338
+ "type": "object",
339
+ "additionalProperties": false,
340
+ "required": [
341
+ "contract",
342
+ "required"
343
+ ],
344
+ "properties": {
345
+ "contract": {
346
+ "const": "fortemi.dataset-execution-capabilities/v1"
347
+ },
348
+ "required": {
349
+ "type": "array",
350
+ "items": {
351
+ "$ref": "#/$defs/requirement"
352
+ }
353
+ },
354
+ "optional": {
355
+ "type": "array",
356
+ "items": {
357
+ "$ref": "#/$defs/optionalRequirement"
358
+ }
359
+ }
360
+ }
361
+ },
362
+ "diagnostic": {
363
+ "type": "object",
364
+ "additionalProperties": false,
365
+ "required": [
366
+ "code",
367
+ "message"
368
+ ],
369
+ "properties": {
370
+ "code": {
371
+ "enum": [
372
+ "CONTRACT_MAJOR_UNSUPPORTED",
373
+ "SCHEMA_VERSION_UNSUPPORTED",
374
+ "DESCRIPTOR_INVALID",
375
+ "CAPABILITY_DUPLICATE",
376
+ "CAPABILITY_INCONSISTENT",
377
+ "REQUIRED_CAPABILITY_MISSING",
378
+ "CAPABILITY_VERSION_INSUFFICIENT",
379
+ "CAPABILITY_LIMIT_INSUFFICIENT"
380
+ ]
381
+ },
382
+ "capability": {
383
+ "$ref": "#/$defs/capabilityId"
384
+ },
385
+ "path": {
386
+ "type": "string"
387
+ },
388
+ "message": {
389
+ "type": "string",
390
+ "minLength": 1
391
+ }
392
+ }
393
+ },
394
+ "degradation": {
395
+ "type": "object",
396
+ "additionalProperties": false,
397
+ "required": [
398
+ "requested",
399
+ "reason",
400
+ "changedGuarantees"
401
+ ],
402
+ "properties": {
403
+ "requested": {
404
+ "$ref": "#/$defs/capabilityId"
405
+ },
406
+ "selected": {
407
+ "$ref": "#/$defs/capabilityId"
408
+ },
409
+ "reason": {
410
+ "enum": [
411
+ "unsupported",
412
+ "version-insufficient",
413
+ "limit-insufficient"
414
+ ]
415
+ },
416
+ "changedGuarantees": {
417
+ "type": "array",
418
+ "minItems": 1,
419
+ "items": {
420
+ "type": "string",
421
+ "minLength": 1
422
+ }
423
+ }
424
+ }
425
+ },
426
+ "result": {
427
+ "type": "object",
428
+ "additionalProperties": false,
429
+ "required": [
430
+ "contract",
431
+ "accepted",
432
+ "runtime",
433
+ "selected",
434
+ "degradations",
435
+ "diagnostics"
436
+ ],
437
+ "properties": {
438
+ "contract": {
439
+ "const": "fortemi.dataset-execution-capabilities/v1"
440
+ },
441
+ "accepted": {
442
+ "type": "boolean"
443
+ },
444
+ "runtime": {
445
+ "$ref": "#/$defs/runtime"
446
+ },
447
+ "selected": {
448
+ "type": "array",
449
+ "items": {
450
+ "$ref": "#/$defs/capabilityId"
451
+ },
452
+ "uniqueItems": true
453
+ },
454
+ "degradations": {
455
+ "type": "array",
456
+ "items": {
457
+ "$ref": "#/$defs/degradation"
458
+ }
459
+ },
460
+ "diagnostics": {
461
+ "type": "array",
462
+ "items": {
463
+ "$ref": "#/$defs/diagnostic"
464
+ }
465
+ }
466
+ }
467
+ }
468
+ }
469
+ }
@@ -93,7 +93,8 @@
93
93
  "impact": { "type": "number", "minimum": 1, "maximum": 5 },
94
94
  "taxonomy": { "type": "array", "items": { "type": "string" } },
95
95
  "partId": { "type": "string" },
96
- "context": { "enum": ["requested", "negative", "quoted", "documentation"] },
96
+ "context": { "enum": ["requested", "negative", "quoted", "documentation", "descriptive", "orchestrator-status"] },
97
+ "source": { "type": "object", "additionalProperties": true },
97
98
  "evidence": { "type": "string" },
98
99
  "suppressed": { "type": "boolean" },
99
100
  "suppressionReason": { "type": "string" },
@@ -505,11 +505,13 @@ function parseArgs() {
505
505
  asPlugin: false, // Generate .factory-plugin/ bundle (Factory provider only)
506
506
  deployBehaviors: false, // Deploy behaviors in addition to agents
507
507
  skipCommandsMigration: false, // Skip commands → skills migration (warns about duplicates)
508
+ warnOnSkippedCommandsMigration: true, // Emit the duplicate warning when the migration is skipped
508
509
  // Managed-marker provenance (#2502). Deployers that are not shipping the
509
510
  // bundled framework corpus (project-local bundles, in particular) must
510
511
  // override these so `aiwg refresh` does not mistake their artifacts for
511
512
  // stale copies of packaged ones.
512
513
  deploySource: null, // Managed-marker source; defaults to 'bundled'
514
+ listingBudget: false, // Honor the provider startup-listing cap despite --copy-all (#2561)
513
515
  deployVersion: null // Managed-marker version; defaults to srcRoot package.json
514
516
  };
515
517
  for (let i = 0; i < args.length; i++) {
@@ -544,8 +546,11 @@ function parseArgs() {
544
546
  else if (a === '--quiet' || a === '-q') cfg.quiet = true;
545
547
  else if (a === '--as-plugin') cfg.asPlugin = true;
546
548
  else if (a === '--skip-commands-migration') cfg.skipCommandsMigration = true;
549
+ // Structural opt-out: skip the migration without claiming the operator declined it (#2541).
550
+ else if (a === '--no-commands-warning') cfg.warnOnSkippedCommandsMigration = false;
547
551
  else if (a === '--copy-all' || a === '--copy-standard-skills') cfg.copyStandardSkills = true;
548
552
  else if (a === '--deploy-source' && args[i + 1]) cfg.deploySource = String(args[++i]);
553
+ else if (a === '--listing-budget') cfg.listingBudget = true;
549
554
  else if (a === '--deploy-version' && args[i + 1]) cfg.deployVersion = String(args[++i]);
550
555
  else if (a === '--help' || a === '-h') {
551
556
  printHelp();
@@ -589,6 +594,7 @@ Options:
589
594
  --as-agents-md Aggregate to single AGENTS.md (Codex)
590
595
  --create-agents-md Create/update AGENTS.md template
591
596
  --skip-commands-migration Skip deleting the commands directory before skills deployment
597
+ --listing-budget Honor the provider startup-listing cap even with --copy-all
592
598
  --deploy-source <name> Managed-marker source stamped into deployed artifacts.
593
599
  Defaults to 'bundled'. Deploys that do not ship the packaged
594
600
  framework corpus (e.g. project-local bundles) MUST override
@@ -1010,11 +1016,13 @@ export async function main() {
1010
1016
  asPlugin: cfg.asPlugin,
1011
1017
  deployBehaviors: cfg.kernelOnly ? false : cfg.deployBehaviors,
1012
1018
  skipCommandsMigration: cfg.skipCommandsMigration,
1019
+ warnOnSkip: cfg.warnOnSkippedCommandsMigration !== false,
1013
1020
  // #1217 / #1219: --copy-all flag forces legacy per-project mirror
1014
1021
  // for the standard tier. Default is no-copy + index-driven discovery.
1015
1022
  // Replaces the legacy AIWG_COPY_STANDARD_SKILLS env var (removed rc.30).
1016
1023
  // Default (#1217) is no-copy + index-driven discovery.
1017
1024
  copyStandardSkills: cfg.copyStandardSkills === true,
1025
+ listingBudget: cfg.listingBudget === true,
1018
1026
  deployVersion: cfg.deployVersion || getDeployVersion(srcRoot),
1019
1027
  deploySource: cfg.deploySource || 'bundled',
1020
1028
  };