@aiwg/cli 2026.10.4 → 2026.10.6

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 (220) hide show
  1. package/agentic/code/addons/composition-engine/lib/runtime.mjs +1401 -0
  2. package/agentic/code/addons/composition-engine/lib/validator.mjs +513 -0
  3. package/agentic/code/addons/composition-engine/schemas/flow-graph.schema.json +372 -0
  4. package/agentic/code/providers/model-capabilities.v1.json +74 -50
  5. package/bin/aiwg.mjs +3 -1
  6. package/dist/src/artifacts/browser-export.js +1 -0
  7. package/dist/src/artifacts/citation-parser.js +8 -1
  8. package/dist/src/artifacts/cli.js +72 -9
  9. package/dist/src/artifacts/fortemi-core-query-adapter.js +2 -0
  10. package/dist/src/artifacts/fortemi-core-sync.js +26 -8
  11. package/dist/src/artifacts/graph-query.js +18 -8
  12. package/dist/src/artifacts/index-adapters.js +339 -0
  13. package/dist/src/artifacts/index-builder.js +146 -16
  14. package/dist/src/artifacts/index-files.js +15 -4
  15. package/dist/src/artifacts/index-preparation.js +91 -26
  16. package/dist/src/artifacts/index-reader.js +44 -0
  17. package/dist/src/artifacts/index-refresh.js +130 -56
  18. package/dist/src/artifacts/index-status.js +20 -5
  19. package/dist/src/artifacts/index-worker.mjs +9 -7
  20. package/dist/src/artifacts/memory-maintenance.js +503 -0
  21. package/dist/src/artifacts/prebuilt-relations.js +3 -1
  22. package/dist/src/artifacts/query-engine.js +263 -108
  23. package/dist/src/artifacts/relations-builder.js +2 -2
  24. package/dist/src/artifacts/source-graph.js +2 -2
  25. package/dist/src/artifacts/types.js +9 -1
  26. package/dist/src/cli/handlers/decision.js +19 -1
  27. package/dist/src/cli/handlers/guided-setup.js +470 -0
  28. package/dist/src/cli/handlers/help.js +2 -2
  29. package/dist/src/cli/handlers/housekeeper.js +1110 -0
  30. package/dist/src/cli/handlers/index.js +4 -2
  31. package/dist/src/cli/handlers/init.js +41 -6
  32. package/dist/src/cli/handlers/local-executor.js +5 -3
  33. package/dist/src/cli/handlers/mc.js +509 -53
  34. package/dist/src/cli/handlers/models.js +32 -2
  35. package/dist/src/cli/handlers/ralph-launcher.js +76 -4
  36. package/dist/src/cli/handlers/rules.js +1 -1
  37. package/dist/src/cli/handlers/script-runner.js +73 -2
  38. package/dist/src/cli/handlers/serve.js +5 -3
  39. package/dist/src/cli/handlers/sessions.js +40 -6
  40. package/dist/src/cli/handlers/setup.js +428 -1
  41. package/dist/src/cli/handlers/skill-lint.js +1 -1
  42. package/dist/src/cli/handlers/subcommands.js +118 -8
  43. package/dist/src/cli/handlers/use.js +279 -93
  44. package/dist/src/cli/handlers/workspace.js +3 -1
  45. package/dist/src/cli/prompt-utils.js +8 -0
  46. package/dist/src/cli/router.js +16 -1
  47. package/dist/src/config/aiwg-config.js +42 -0
  48. package/dist/src/config/cli.js +7 -3
  49. package/dist/src/config/decision-config.js +14 -1
  50. package/dist/src/config/native-sandbox-warnings.js +25 -0
  51. package/dist/src/contributors/validation.js +6 -5
  52. package/dist/src/decision/admission.js +7 -3
  53. package/dist/src/decision/benchmark.js +469 -0
  54. package/dist/src/decision/ledger.js +22 -3
  55. package/dist/src/decision/pricing.js +147 -0
  56. package/dist/src/decision/qualification/gate-evidence.js +18 -15
  57. package/dist/src/decision/qualification/load-staged.js +539 -0
  58. package/dist/src/decision/qualification/load.js +109 -33
  59. package/dist/src/decision/qualification/runner.js +5 -2
  60. package/dist/src/decision/review/service.js +6 -4
  61. package/dist/src/decision/review/validate.js +23 -2
  62. package/dist/src/decision/savings.js +8 -3
  63. package/dist/src/discovery/index.js +492 -0
  64. package/dist/src/discovery/interview.js +233 -0
  65. package/dist/src/discovery/plan-apply.js +571 -0
  66. package/dist/src/discovery/plan-store.js +171 -0
  67. package/dist/src/discovery/plan-types.js +2 -0
  68. package/dist/src/discovery/plan-validation.js +139 -0
  69. package/dist/src/discovery/types.js +2 -0
  70. package/dist/src/extensions/commands/definitions.js +49 -9
  71. package/dist/src/extensions/manifest.js +71 -44
  72. package/dist/src/extensions/project-local-discovery.js +1 -1
  73. package/dist/src/extensions/project-quickref.js +18 -17
  74. package/dist/src/extensions/validation.js +32 -29
  75. package/dist/src/housekeeper/daemon-config.js +148 -0
  76. package/dist/src/housekeeper/ipc.js +84 -0
  77. package/dist/src/housekeeper/lifecycle.js +148 -0
  78. package/dist/src/housekeeper/platform.js +35 -0
  79. package/dist/src/housekeeper/status.js +70 -0
  80. package/dist/src/housekeeper/units.js +114 -0
  81. package/dist/src/jobs/flow.js +22 -21
  82. package/dist/src/lint/rule-activation.js +20 -5
  83. package/dist/src/lint/runner.js +1 -1
  84. package/dist/src/mcp/cli.mjs +5 -6
  85. package/dist/src/mcp/config-file.mjs +6 -2
  86. package/dist/src/mcp/config-layers.mjs +23 -7
  87. package/dist/src/mcp/profiles.js +18 -31
  88. package/dist/src/mcp/profiles.mjs +18 -32
  89. package/dist/src/mcp/registry.js +7 -27
  90. package/dist/src/mcp/registry.mjs +7 -28
  91. package/dist/src/mcp/server.mjs +34 -1
  92. package/dist/src/mcp/tools/agentic-sandbox.mjs +8 -7
  93. package/dist/src/mcp/tools/command-run.mjs +3 -2
  94. package/dist/src/mcp/tools/decision.mjs +49 -48
  95. package/dist/src/mcp/tools/discovery.mjs +46 -21
  96. package/dist/src/mcp/tools/orchestration.mjs +22 -22
  97. package/dist/src/mcp/tools/subsystems.mjs +9 -8
  98. package/dist/src/mcp/tools/worker-invoke.mjs +17 -4
  99. package/dist/src/mcp/tools/writer-profiles.mjs +1 -1
  100. package/dist/src/memory/audit.js +719 -0
  101. package/dist/src/memory/canonical-context.js +392 -13
  102. package/dist/src/memory/canonical-maintenance.js +95 -0
  103. package/dist/src/memory/cli-result.js +22 -0
  104. package/dist/src/memory/cli.js +176 -0
  105. package/dist/src/memory/context-pack.js +57 -6
  106. package/dist/src/memory/cost.js +512 -0
  107. package/dist/src/memory/firewall-classification.d.mts +7 -0
  108. package/dist/src/memory/firewall-classification.mjs +32 -0
  109. package/dist/src/memory/index.js +8 -0
  110. package/dist/src/memory/line-maintenance.js +68 -0
  111. package/dist/src/memory/maintenance-cli.js +286 -0
  112. package/dist/src/memory/maintenance-contract.js +136 -0
  113. package/dist/src/memory/maintenance-index.js +18 -0
  114. package/dist/src/memory/maintenance-owner.js +2 -0
  115. package/dist/src/memory/maintenance-record.js +138 -0
  116. package/dist/src/memory/maintenance.js +254 -0
  117. package/dist/src/memory/provider-memory-adapter.js +154 -0
  118. package/dist/src/memory/recommend-cli.js +83 -0
  119. package/dist/src/memory/recommend.js +269 -0
  120. package/dist/src/memory/scheduled.js +81 -0
  121. package/dist/src/memory/taxonomy.js +44 -0
  122. package/dist/src/mission-protocol/codecs.js +19 -9
  123. package/dist/src/models/config-loader.js +11 -1
  124. package/dist/src/models/model-capabilities.v1.json +74 -50
  125. package/dist/src/models/provider-policy.js +125 -62
  126. package/dist/src/models/resolver.js +45 -8
  127. package/dist/src/models/worker-installation.d.mts +7 -0
  128. package/dist/src/models/worker-installation.mjs +169 -37
  129. package/dist/src/models/wrapper-route.js +1 -1
  130. package/dist/src/output-modes/registry.js +8 -7
  131. package/dist/src/plugin/metadata-validator.js +1 -1
  132. package/dist/src/providers/deploy-version.d.mts +1 -0
  133. package/dist/src/providers/deploy-version.mjs +17 -0
  134. package/dist/src/providers/provider-definitions.js +19 -16
  135. package/dist/src/providers/skill-ownership.d.mts +11 -2
  136. package/dist/src/providers/skill-ownership.mjs +35 -17
  137. package/dist/src/rules/activation.d.mts +11 -2
  138. package/dist/src/rules/activation.mjs +82 -6
  139. package/dist/src/rules/inventory.js +1 -1
  140. package/dist/src/rules/rule-frontmatter.schema.json +2 -0
  141. package/dist/src/schema/zod-validation.d.mts +6 -0
  142. package/dist/src/schema/zod-validation.mjs +50 -0
  143. package/dist/src/serve/executor-registry.js +297 -20
  144. package/dist/src/serve/executor-token.d.mts +1 -0
  145. package/dist/src/serve/executor-token.mjs +8 -0
  146. package/dist/src/serve/shared-host-scheduler.js +1102 -31
  147. package/dist/src/serve/worker-invocation.js +114 -15
  148. package/dist/src/sessions/adapters/claude.js +19 -18
  149. package/dist/src/sessions/adapters/codex.js +33 -19
  150. package/dist/src/sessions/adapters/copilot.js +14 -13
  151. package/dist/src/sessions/adapters/cursor.js +19 -18
  152. package/dist/src/sessions/adapters/deepseek-harness.js +9 -8
  153. package/dist/src/sessions/adapters/factory.js +11 -10
  154. package/dist/src/sessions/adapters/generic.js +32 -23
  155. package/dist/src/sessions/adapters/grokbot.js +35 -35
  156. package/dist/src/sessions/adapters/hermes.js +20 -19
  157. package/dist/src/sessions/adapters/muse.js +50 -49
  158. package/dist/src/sessions/adapters/omp.js +5 -4
  159. package/dist/src/sessions/adapters/openclaw.js +30 -29
  160. package/dist/src/sessions/adapters/opencode.js +26 -26
  161. package/dist/src/sessions/adapters/openhuman.js +24 -23
  162. package/dist/src/sessions/adapters/pi.js +5 -4
  163. package/dist/src/sessions/adapters/windsurf.js +8 -8
  164. package/dist/src/sessions/analytics.js +10 -9
  165. package/dist/src/sessions/batch-contracts.js +1 -1
  166. package/dist/src/sessions/batch-import.js +202 -2
  167. package/dist/src/sessions/candidates.js +7 -6
  168. package/dist/src/sessions/contracts.js +73 -54
  169. package/dist/src/sessions/coverage-preflight.js +26 -1
  170. package/dist/src/sessions/output-registration.js +11 -10
  171. package/dist/src/sessions/policy.js +18 -7
  172. package/dist/src/sessions/refresh.js +2 -3
  173. package/dist/src/sessions/repository.js +4 -2
  174. package/dist/src/sessions/workspace-discovery.js +92 -26
  175. package/dist/src/smiths/context-pipeline/aiwg-md.js +18 -1
  176. package/dist/src/smiths/context-pipeline/claude-hook.js +42 -6
  177. package/dist/src/smiths/context-pipeline/parallelism-section.js +72 -5
  178. package/dist/src/smiths/context-pipeline/workspace-context.js +106 -10
  179. package/dist/src/update/checker.d.mts +4 -0
  180. package/dist/src/update/checker.mjs +14 -0
  181. package/dist/src/writing/exemplar-selection.js +6 -6
  182. package/dist/src/writing/voice-evaluation.js +24 -23
  183. package/dist/src/writing/writer-migration.js +14 -13
  184. package/dist/src/writing/writer-profile.js +19 -18
  185. package/dist/src/writing/writing-brief.js +18 -17
  186. package/dist/src/writing/writing-receipt.js +47 -46
  187. package/package.json +5 -2
  188. package/schemas/decision/DecisionReview.schema.json +78 -1
  189. package/schemas/mission-v1.schema.json +3 -0
  190. package/tools/agents/deploy-agents.mjs +67 -39
  191. package/tools/agents/providers/antigravity.mjs +6 -1
  192. package/tools/agents/providers/base.mjs +19 -13
  193. package/tools/agents/providers/claude.mjs +1 -1
  194. package/tools/agents/providers/codex.mjs +50 -56
  195. package/tools/agents/providers/copilot.mjs +8 -2
  196. package/tools/agents/providers/cursor.mjs +1 -1
  197. package/tools/agents/providers/deepseek-harness.mjs +1 -1
  198. package/tools/agents/providers/factory.mjs +7 -1
  199. package/tools/agents/providers/grok-build.mjs +18 -2
  200. package/tools/agents/providers/grokbot.mjs +1 -1
  201. package/tools/agents/providers/hermes.mjs +7 -13
  202. package/tools/agents/providers/muse-hooks.mjs +21 -14
  203. package/tools/agents/providers/muse.mjs +7 -2
  204. package/tools/agents/providers/omp.mjs +28 -4
  205. package/tools/agents/providers/opencode.mjs +14 -5
  206. package/tools/agents/providers/openhuman.mjs +1 -1
  207. package/tools/agents/providers/pi.mjs +1 -1
  208. package/tools/agents/providers/provider-prepare-coordinator.mjs +29 -9
  209. package/tools/agents/providers/rule-delivery.mjs +263 -71
  210. package/tools/agents/providers/windsurf.mjs +7 -0
  211. package/tools/cli/workspace-status.mjs +5 -0
  212. package/tools/commands/deploy-prompts-codex.mjs +11 -8
  213. package/tools/ralph-external/lib/codex-adapter.mjs +6 -2
  214. package/tools/ralph-external/lib/muse-adapter.mjs +12 -2
  215. package/tools/ralph-external/lib/worker-health.mjs +1 -1
  216. package/tools/ralph-external/lib/worker-isolation.mjs +65 -9
  217. package/tools/ralph-external/process-monitor.mjs +7 -4
  218. package/tools/ralph-external/session-launcher.mjs +280 -32
  219. package/tools/skills/deploy-skills-codex.mjs +11 -7
  220. package/vscode-extension/schemas/aiwg.config.v1.json +11 -1
@@ -0,0 +1,372 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://aiwg.io/schemas/flow/graph/v1alpha1/flow-graph.schema.json",
4
+ "title": "FlowGraph",
5
+ "description": "Provider-neutral graph profile for the AIWG Flow metalanguage.",
6
+ "type": "object",
7
+ "required": ["apiVersion", "kind", "metadata", "spec"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "apiVersion": { "const": "flow.aiwg.io/v1alpha1" },
11
+ "kind": { "const": "FlowGraph" },
12
+ "metadata": { "$ref": "#/definitions/metadata" },
13
+ "spec": { "$ref": "#/definitions/spec" }
14
+ },
15
+ "definitions": {
16
+ "metadata": {
17
+ "type": "object",
18
+ "required": ["name"],
19
+ "additionalProperties": false,
20
+ "properties": {
21
+ "name": { "$ref": "#/definitions/dnsLabel" },
22
+ "namespace": { "$ref": "#/definitions/dnsLabel" },
23
+ "labels": { "$ref": "#/definitions/stringMap" },
24
+ "annotations": { "$ref": "#/definitions/stringMap" }
25
+ }
26
+ },
27
+ "spec": {
28
+ "type": "object",
29
+ "required": ["entry", "candidates", "state", "permissions", "capabilities", "ceilings", "nodes", "routes", "joins", "failure", "output", "trace"],
30
+ "additionalProperties": false,
31
+ "properties": {
32
+ "description": { "type": "string", "minLength": 1 },
33
+ "entry": {
34
+ "type": "array",
35
+ "minItems": 1,
36
+ "uniqueItems": true,
37
+ "items": { "$ref": "#/definitions/id" }
38
+ },
39
+ "candidates": {
40
+ "type": "array",
41
+ "items": { "$ref": "#/definitions/candidate" }
42
+ },
43
+ "state": { "$ref": "#/definitions/state" },
44
+ "permissions": {
45
+ "type": "array",
46
+ "uniqueItems": true,
47
+ "items": { "$ref": "#/definitions/permission" }
48
+ },
49
+ "capabilities": {
50
+ "type": "array",
51
+ "items": { "$ref": "#/definitions/capability" }
52
+ },
53
+ "ceilings": { "$ref": "#/definitions/ceilings" },
54
+ "nodes": {
55
+ "type": "array",
56
+ "minItems": 1,
57
+ "items": { "$ref": "#/definitions/node" }
58
+ },
59
+ "routes": {
60
+ "type": "array",
61
+ "items": { "$ref": "#/definitions/route" }
62
+ },
63
+ "joins": {
64
+ "type": "array",
65
+ "items": { "$ref": "#/definitions/join" }
66
+ },
67
+ "failure": { "$ref": "#/definitions/failurePolicy" },
68
+ "output": { "$ref": "#/definitions/outputPolicy" },
69
+ "trace": { "$ref": "#/definitions/tracePolicy" }
70
+ }
71
+ },
72
+ "candidate": {
73
+ "type": "object",
74
+ "required": ["id", "kind"],
75
+ "additionalProperties": false,
76
+ "properties": {
77
+ "id": { "$ref": "#/definitions/indexRef" },
78
+ "kind": { "$ref": "#/definitions/artifactKind" },
79
+ "schema": { "$ref": "#/definitions/jsonSchema" }
80
+ }
81
+ },
82
+ "state": {
83
+ "type": "object",
84
+ "required": ["fields"],
85
+ "additionalProperties": false,
86
+ "properties": {
87
+ "fields": {
88
+ "type": "array",
89
+ "items": { "$ref": "#/definitions/stateField" }
90
+ }
91
+ }
92
+ },
93
+ "stateField": {
94
+ "type": "object",
95
+ "required": ["name", "schema", "reducer"],
96
+ "additionalProperties": false,
97
+ "properties": {
98
+ "name": { "$ref": "#/definitions/id" },
99
+ "schema": { "$ref": "#/definitions/jsonSchema" },
100
+ "reducer": { "enum": ["replace", "append", "merge", "sum", "min", "max", "set-union"] },
101
+ "initial": {}
102
+ }
103
+ },
104
+ "capability": {
105
+ "type": "object",
106
+ "required": ["id", "permissions", "sideEffectMode"],
107
+ "additionalProperties": false,
108
+ "properties": {
109
+ "id": { "$ref": "#/definitions/id" },
110
+ "permissions": {
111
+ "type": "array",
112
+ "uniqueItems": true,
113
+ "items": { "$ref": "#/definitions/permission" }
114
+ },
115
+ "sideEffectMode": { "$ref": "#/definitions/sideEffectMode" },
116
+ "idempotencyKey": { "type": "string", "minLength": 1 },
117
+ "approvalGate": { "$ref": "#/definitions/id" }
118
+ }
119
+ },
120
+ "ceilings": {
121
+ "type": "object",
122
+ "required": ["activations", "tokens", "costUsd", "timeMs", "concurrency"],
123
+ "additionalProperties": false,
124
+ "properties": {
125
+ "activations": { "type": "integer", "minimum": 1 },
126
+ "tokens": { "type": "integer", "minimum": 1 },
127
+ "costUsd": { "type": "number", "exclusiveMinimum": 0 },
128
+ "timeMs": { "type": "integer", "minimum": 1 },
129
+ "concurrency": { "type": "integer", "minimum": 1 }
130
+ }
131
+ },
132
+ "node": {
133
+ "type": "object",
134
+ "required": ["id", "kind", "inputs", "outputs", "capabilities", "permissions", "sideEffectMode"],
135
+ "additionalProperties": false,
136
+ "properties": {
137
+ "id": { "$ref": "#/definitions/id" },
138
+ "kind": { "$ref": "#/definitions/nodeKind" },
139
+ "ref": { "$ref": "#/definitions/indexRef" },
140
+ "deterministic": { "const": true },
141
+ "description": { "type": "string", "minLength": 1 },
142
+ "optional": { "type": "boolean" },
143
+ "phase": { "type": "string", "minLength": 1 },
144
+ "track": { "type": "string", "minLength": 1 },
145
+ "dependsOn": {
146
+ "type": "array",
147
+ "uniqueItems": true,
148
+ "items": { "$ref": "#/definitions/id" }
149
+ },
150
+ "activation": { "$ref": "#/definitions/predicate" },
151
+ "inputs": {
152
+ "type": "array",
153
+ "items": { "$ref": "#/definitions/inputBinding" }
154
+ },
155
+ "outputs": {
156
+ "type": "array",
157
+ "items": { "$ref": "#/definitions/outputBinding" }
158
+ },
159
+ "capabilities": {
160
+ "type": "array",
161
+ "uniqueItems": true,
162
+ "items": { "$ref": "#/definitions/id" }
163
+ },
164
+ "permissions": {
165
+ "type": "array",
166
+ "uniqueItems": true,
167
+ "items": { "$ref": "#/definitions/permission" }
168
+ },
169
+ "sideEffectMode": { "$ref": "#/definitions/sideEffectMode" },
170
+ "idempotencyKey": { "type": "string", "minLength": 1 },
171
+ "approvalGate": { "$ref": "#/definitions/id" },
172
+ "scope": { "$ref": "#/definitions/observationScope" },
173
+ "retry": { "$ref": "#/definitions/retryPolicy" },
174
+ "fallback": { "$ref": "#/definitions/fallbackPolicy" },
175
+ "ceilings": { "$ref": "#/definitions/ceilings" }
176
+ }
177
+ },
178
+ "inputBinding": {
179
+ "type": "object",
180
+ "required": ["name", "schema"],
181
+ "additionalProperties": false,
182
+ "properties": {
183
+ "name": { "$ref": "#/definitions/id" },
184
+ "schema": { "$ref": "#/definitions/jsonSchema" },
185
+ "from": { "type": "string", "pattern": "^[a-z][a-z0-9-]*\\.[a-z][a-z0-9-]*$" },
186
+ "state": { "$ref": "#/definitions/id" },
187
+ "value": {}
188
+ },
189
+ "oneOf": [
190
+ { "required": ["from"] },
191
+ { "required": ["state"] },
192
+ { "required": ["value"] }
193
+ ]
194
+ },
195
+ "outputBinding": {
196
+ "type": "object",
197
+ "required": ["name", "schema"],
198
+ "additionalProperties": false,
199
+ "properties": {
200
+ "name": { "$ref": "#/definitions/id" },
201
+ "schema": { "$ref": "#/definitions/jsonSchema" },
202
+ "state": { "$ref": "#/definitions/id" }
203
+ }
204
+ },
205
+ "route": {
206
+ "type": "object",
207
+ "required": ["from", "to"],
208
+ "additionalProperties": false,
209
+ "properties": {
210
+ "id": { "$ref": "#/definitions/id" },
211
+ "from": { "$ref": "#/definitions/id" },
212
+ "to": { "$ref": "#/definitions/id" },
213
+ "when": { "$ref": "#/definitions/predicate" },
214
+ "guard": { "$ref": "#/definitions/predicate" },
215
+ "progress": { "$ref": "#/definitions/progressMeasure" },
216
+ "maxIterations": { "type": "integer", "minimum": 1 }
217
+ }
218
+ },
219
+ "progressMeasure": {
220
+ "type": "object",
221
+ "required": ["state", "direction"],
222
+ "additionalProperties": false,
223
+ "properties": {
224
+ "state": { "$ref": "#/definitions/id" },
225
+ "direction": { "const": "decrease" }
226
+ }
227
+ },
228
+ "observationScope": {
229
+ "type": "object",
230
+ "additionalProperties": false,
231
+ "properties": {
232
+ "files": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
233
+ "resources": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
234
+ }
235
+ },
236
+ "join": {
237
+ "type": "object",
238
+ "required": ["id", "sources", "target", "policy"],
239
+ "additionalProperties": false,
240
+ "properties": {
241
+ "id": { "$ref": "#/definitions/id" },
242
+ "sources": {
243
+ "type": "array",
244
+ "minItems": 1,
245
+ "uniqueItems": true,
246
+ "items": { "$ref": "#/definitions/id" }
247
+ },
248
+ "target": { "$ref": "#/definitions/id" },
249
+ "policy": {
250
+ "type": "object",
251
+ "required": ["mode"],
252
+ "additionalProperties": false,
253
+ "properties": {
254
+ "mode": { "enum": ["all", "quorum", "fixed", "lcm", "converged", "budget"] },
255
+ "quorum": { "type": "integer", "minimum": 1 },
256
+ "count": { "type": "integer", "minimum": 1 },
257
+ "periods": {
258
+ "type": "array",
259
+ "minItems": 2,
260
+ "items": { "type": "integer", "minimum": 1 }
261
+ },
262
+ "predicate": { "$ref": "#/definitions/predicate" },
263
+ "maxIterations": { "type": "integer", "minimum": 1 },
264
+ "maxCostUsd": { "type": "number", "exclusiveMinimum": 0 }
265
+ }
266
+ }
267
+ }
268
+ },
269
+ "failurePolicy": {
270
+ "type": "object",
271
+ "required": ["onNodeFailure", "maxFailures"],
272
+ "additionalProperties": false,
273
+ "properties": {
274
+ "onNodeFailure": { "enum": ["fail", "continue", "skip-optional", "fallback", "partial-synthesis"] },
275
+ "maxFailures": { "type": "integer", "minimum": 0 },
276
+ "terminalSchema": { "$ref": "#/definitions/jsonSchema" }
277
+ }
278
+ },
279
+ "outputPolicy": {
280
+ "type": "object",
281
+ "required": ["mode", "from", "schema"],
282
+ "additionalProperties": false,
283
+ "properties": {
284
+ "mode": { "enum": ["final-only", "progressive", "typed-terminal-failure"] },
285
+ "from": { "type": "string", "pattern": "^[a-z][a-z0-9-]*\\.[a-z][a-z0-9-]*$" },
286
+ "schema": { "$ref": "#/definitions/jsonSchema" },
287
+ "failureSchema": { "$ref": "#/definitions/jsonSchema" }
288
+ }
289
+ },
290
+ "tracePolicy": {
291
+ "type": "object",
292
+ "required": ["level", "redact"],
293
+ "additionalProperties": false,
294
+ "properties": {
295
+ "level": { "enum": ["metadata", "bindings", "full-io"] },
296
+ "redact": {
297
+ "type": "array",
298
+ "uniqueItems": true,
299
+ "items": { "type": "string", "pattern": "^/" }
300
+ }
301
+ }
302
+ },
303
+ "retryPolicy": {
304
+ "type": "object",
305
+ "required": ["limit", "backoff", "on"],
306
+ "additionalProperties": false,
307
+ "properties": {
308
+ "limit": { "type": "integer", "minimum": 0 },
309
+ "backoff": { "enum": ["none", "linear", "exponential"] },
310
+ "on": {
311
+ "type": "array",
312
+ "minItems": 1,
313
+ "uniqueItems": true,
314
+ "items": { "enum": ["failure", "timeout", "rate-limit"] }
315
+ }
316
+ }
317
+ },
318
+ "fallbackPolicy": {
319
+ "type": "object",
320
+ "required": ["node"],
321
+ "additionalProperties": false,
322
+ "properties": {
323
+ "node": { "$ref": "#/definitions/id" },
324
+ "allowPartial": { "type": "boolean" }
325
+ }
326
+ },
327
+ "predicate": {
328
+ "type": "object",
329
+ "required": ["expression"],
330
+ "additionalProperties": false,
331
+ "properties": {
332
+ "language": { "const": "cel" },
333
+ "expression": { "type": "string", "minLength": 1 }
334
+ }
335
+ },
336
+ "jsonSchema": {
337
+ "type": "object",
338
+ "minProperties": 1,
339
+ "additionalProperties": true
340
+ },
341
+ "nodeKind": {
342
+ "enum": ["agent", "skill", "prompt", "evaluator", "tool", "function", "gate"]
343
+ },
344
+ "artifactKind": {
345
+ "enum": ["agent", "skill", "prompt", "evaluator", "tool", "function"]
346
+ },
347
+ "sideEffectMode": {
348
+ "enum": ["none", "idempotent", "exactly-once", "approval-required"]
349
+ },
350
+ "permission": {
351
+ "type": "string",
352
+ "pattern": "^[a-z][a-z0-9-]*:[a-z][a-z0-9-]*$"
353
+ },
354
+ "indexRef": {
355
+ "type": "string",
356
+ "pattern": "^aiwg:(agent|skill|prompt|evaluator|tool|function):[a-f0-9]{16}$"
357
+ },
358
+ "id": {
359
+ "type": "string",
360
+ "pattern": "^[a-z][a-z0-9-]*$"
361
+ },
362
+ "dnsLabel": {
363
+ "type": "string",
364
+ "pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
365
+ "maxLength": 63
366
+ },
367
+ "stringMap": {
368
+ "type": "object",
369
+ "additionalProperties": { "type": "string" }
370
+ }
371
+ }
372
+ }