@aiwg/cli 2026.10.0 → 2026.10.3
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.
- package/agentic/code/providers/capability-matrix.yaml +270 -0
- package/agentic/code/providers/model-capabilities.v1.json +3091 -24
- package/bin/aiwg.mjs +86 -21
- package/dist/src/a2a/codecs.js +9 -0
- package/dist/src/artifacts/corpus-tools/vision-extract.js +105 -15
- package/dist/src/artifacts/repair.js +9 -4
- package/dist/src/channel/manager.mjs +59 -10
- package/dist/src/cli/child-process-result.js +40 -0
- package/dist/src/cli/env.js +38 -16
- package/dist/src/cli/flag-parsing.js +236 -0
- package/dist/src/cli/handlers/decision.js +297 -2
- package/dist/src/cli/handlers/diagnose.js +9 -2
- package/dist/src/cli/handlers/feedback.js +14 -5
- package/dist/src/cli/handlers/init.js +245 -30
- package/dist/src/cli/handlers/mc.js +23 -0
- package/dist/src/cli/handlers/models.js +69 -6
- package/dist/src/cli/handlers/ralph.js +3 -0
- package/dist/src/cli/handlers/refresh.js +16 -0
- package/dist/src/cli/handlers/regenerate.js +14 -0
- package/dist/src/cli/handlers/runtime-info.js +24 -9
- package/dist/src/cli/handlers/script-runner.js +16 -6
- package/dist/src/cli/handlers/session.js +396 -62
- package/dist/src/cli/handlers/sessions.js +146 -40
- package/dist/src/cli/handlers/setup-manifest.js +439 -39
- package/dist/src/cli/handlers/setup.js +139 -39
- package/dist/src/cli/handlers/subcommands.js +3 -1
- package/dist/src/cli/handlers/team.js +18 -8
- package/dist/src/cli/handlers/use.js +13 -0
- package/dist/src/cli/handlers/utilities.js +106 -23
- package/dist/src/cli/prompt-utils.js +72 -0
- package/dist/src/cli/provider-resolution.js +11 -0
- package/dist/src/config/aiwg-config.js +268 -4
- package/dist/src/config/cli.js +146 -19
- package/dist/src/config/dispatch-thresholds-runtime.mjs +38 -0
- package/dist/src/config/project-artifacts-health.mjs +14 -3
- package/dist/src/config/user-config.js +36 -10
- package/dist/src/decision/adapters/jev.js +80 -28
- package/dist/src/decision/ask.js +352 -0
- package/dist/src/decision/driver.js +4 -0
- package/dist/src/decision/entry.js +38 -6
- package/dist/src/decision/heldout/collector.js +10 -1
- package/dist/src/decision/index.js +3 -0
- package/dist/src/decision/interop.js +60 -8
- package/dist/src/decision/jev-credentials.js +121 -0
- package/dist/src/decision/ledger.js +839 -0
- package/dist/src/decision/validate.js +6 -3
- package/dist/src/effects/dispatch-verifier.js +252 -0
- package/dist/src/effects/index.js +1 -0
- package/dist/src/features/installer.js +2 -2
- package/dist/src/flow/graph-metadata.js +5 -0
- package/dist/src/gates/providers/loader.js +3 -1
- package/dist/src/installation/manager-command.mjs +1 -1
- package/dist/src/installation/manager.mjs +17 -2
- package/dist/src/lint/runner.js +2 -2
- package/dist/src/mcp/adapters/codex-runtime.js +360 -56
- package/dist/src/mcp/cli.mjs +587 -77
- package/dist/src/mcp/config-file.mjs +279 -0
- package/dist/src/mcp/config-layers.mjs +348 -0
- package/dist/src/mcp/credentials.mjs +484 -0
- package/dist/src/mcp/grok-build-config.mjs +16 -26
- package/dist/src/mcp/helpers.mjs +106 -2
- package/dist/src/mcp/omp-config.mjs +50 -29
- package/dist/src/mcp/profiles.js +97 -23
- package/dist/src/mcp/profiles.mjs +99 -27
- package/dist/src/mcp/registry.js +264 -57
- package/dist/src/mcp/registry.mjs +198 -45
- package/dist/src/mcp/server.mjs +403 -20
- package/dist/src/mcp/toml-string.mjs +9 -0
- package/dist/src/mcp/toml-strip-mcp.mjs +135 -0
- package/dist/src/mcp/tool-filters.mjs +357 -0
- package/dist/src/mcp/tools/agentic-sandbox.mjs +3 -1
- package/dist/src/mcp/tools/decision.mjs +58 -0
- package/dist/src/mcp/tools/orchestration.mjs +38 -0
- package/dist/src/mcp/tools/subsystems.mjs +39 -8
- package/dist/src/mcp/tools/worker-invoke.mjs +1539 -0
- package/dist/src/mcp/tools/worker-shell-control.mjs +258 -0
- package/dist/src/mcp/tools/worker-stdin-runtime.mjs +79 -0
- package/dist/src/memory/project-registry.js +2 -2
- package/dist/src/mission-protocol/codecs.js +639 -1
- package/dist/src/mission-protocol/types.js +110 -0
- package/dist/src/mission-protocol/worker-status.js +2 -0
- package/dist/src/models/config-loader.js +70 -13
- package/dist/src/models/grok-build-models.js +93 -41
- package/dist/src/models/model-capabilities.v1.json +3091 -24
- package/dist/src/models/model-discovery.js +862 -63
- package/dist/src/models/provider-policy.js +625 -11
- package/dist/src/models/qualification-digest.mjs +17 -0
- package/dist/src/models/resolver.js +259 -0
- package/dist/src/models/worker-direct-readiness.js +529 -0
- package/dist/src/models/worker-dispatch-offer.js +169 -0
- package/dist/src/models/worker-health-readiness.js +131 -0
- package/dist/src/models/worker-installation.mjs +879 -0
- package/dist/src/models/wrapper-route.js +18 -0
- package/dist/src/ops/registry.js +9 -14
- package/dist/src/plugins/standalone-packager.js +4 -3
- package/dist/src/process/bounded-child-process.mjs +387 -0
- package/dist/src/process/cli-command.mjs +75 -0
- package/dist/src/providers/capability-matrix.js +8 -0
- package/dist/src/providers/capability-matrix.yaml +270 -0
- package/dist/src/providers/grok-build-headless.js +43 -21
- package/dist/src/providers/provider-definitions.js +9 -1
- package/dist/src/providers/provider-definitions.mjs +9 -2
- package/dist/src/serve/executor-registry.js +16 -24
- package/dist/src/serve/fleet-mission-conductor.js +9 -0
- package/dist/src/serve/mission-conductor.js +9 -0
- package/dist/src/serve/shared-host-scheduler.js +2 -0
- package/dist/src/serve/worker-invocation.js +538 -0
- package/dist/src/serve/worker-stdin-frame.mjs +107 -0
- package/dist/src/sessions/adapter-registry.js +45 -0
- package/dist/src/sessions/adapters/generic.js +37 -3
- package/dist/src/sessions/adapters/grokbot-locator.js +111 -0
- package/dist/src/sessions/adapters/grokbot.js +423 -24
- package/dist/src/sessions/adapters/muse-workspace-scan.js +108 -0
- package/dist/src/sessions/adapters/muse.js +68 -29
- package/dist/src/sessions/adapters/pi.js +1 -0
- package/dist/src/sessions/batch-contracts.js +13 -1
- package/dist/src/sessions/batch-import.js +23 -42
- package/dist/src/sessions/candidates.js +47 -11
- package/dist/src/sessions/contracts.js +35 -0
- package/dist/src/sessions/coverage-preflight.js +134 -0
- package/dist/src/sessions/discovery.js +3 -0
- package/dist/src/sessions/grok-build-cli.js +67 -5
- package/dist/src/sessions/importer.js +24 -8
- package/dist/src/sessions/index.js +2 -0
- package/dist/src/sessions/repository.js +54 -13
- package/dist/src/sessions/workspace-discovery.js +99 -37
- package/dist/src/skills/adapters/clawhub.js +10 -8
- package/dist/src/skills/adapters/openclaw.js +10 -7
- package/dist/src/smiths/context-pipeline/parallelism-section.js +192 -3
- package/dist/src/smiths/context-pipeline/workspace-context.js +116 -9
- package/dist/src/smiths/hook-bridge/codex-translator.js +6 -5
- package/dist/src/smiths/mcpsmith/example.js +1 -1
- package/dist/src/smiths/toolsmith/runtime-discovery.mjs +10 -14
- package/dist/src/storage/backends/logseq.js +68 -7
- package/dist/src/storage/fortemi-qualification-receipt.js +2 -2
- package/dist/src/testing/generators/test-code-generator.js +57 -30
- package/dist/src/uhp/client.js +11 -1
- package/dist/src/uhp/mission.js +5 -0
- package/dist/src/update/checker.mjs +5 -5
- package/dist/src/update/notifier.mjs +54 -2
- package/dist/src/writing/fidelity.js +18 -1
- package/package.json +18 -1
- package/schemas/mission-v1.schema.json +2429 -0
- package/schemas/models/model-catalog.v1.schema.json +301 -0
- package/schemas/models/model-config-compatibility.v1.schema.json +281 -0
- package/schemas/models/model-policy.v1.schema.json +14 -0
- package/schemas/models/provider-model-capabilities.v1.schema.json +1066 -0
- package/tools/_resolve-impl.mjs +39 -0
- package/tools/agents/deploy-agents.mjs +15 -2
- package/tools/agents/providers/base.mjs +63 -43
- package/tools/agents/providers/grokbot.mjs +11 -12
- package/tools/agents/providers/hermes.mjs +6 -3
- package/tools/agents/providers/omp.mjs +5 -2
- package/tools/agents/providers/openclaw-translator.mjs +19 -5
- package/tools/providers/deepseek-harness-transport.mjs +358 -0
- package/tools/providers/omp-transport.mjs +192 -0
- package/tools/ralph-external/lib/claude-adapter.mjs +389 -0
- package/tools/ralph-external/lib/codex-adapter.mjs +432 -0
- package/tools/ralph-external/lib/deepseek-harness-adapter.mjs +397 -0
- package/tools/ralph-external/lib/factory-adapter.mjs +503 -0
- package/tools/ralph-external/lib/muse-adapter.mjs +364 -0
- package/tools/ralph-external/lib/omp-adapter.mjs +315 -0
- package/tools/ralph-external/lib/opencode-adapter.mjs +575 -0
- package/tools/ralph-external/lib/openhuman-adapter.mjs +75 -0
- package/tools/ralph-external/lib/pi-adapter.mjs +333 -0
- package/tools/ralph-external/lib/provider-adapter.mjs +690 -0
- package/tools/ralph-external/lib/worker-health.mjs +439 -0
- package/vscode-extension/schemas/aiwg.config.v1.json +1953 -0
|
@@ -0,0 +1,1953 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://aiwg.io/schemas/aiwg.config.v1.json",
|
|
4
|
+
"title": "AIWG Project Configuration",
|
|
5
|
+
"description": "Configuration file for the AIWG AI coding assistant framework",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "JSON Schema reference"
|
|
12
|
+
},
|
|
13
|
+
"version": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "AIWG config format version",
|
|
16
|
+
"examples": ["1"]
|
|
17
|
+
},
|
|
18
|
+
"project": {
|
|
19
|
+
"description": "Project identity and data classification. A bare string is the project name; the object form adds classification and handling policy.",
|
|
20
|
+
"oneOf": [
|
|
21
|
+
{ "type": "string", "description": "Project name" },
|
|
22
|
+
{
|
|
23
|
+
"type": "object",
|
|
24
|
+
"additionalProperties": false,
|
|
25
|
+
"properties": {
|
|
26
|
+
"name": { "type": "string" },
|
|
27
|
+
"description": { "type": "string" },
|
|
28
|
+
"classification": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"enum": ["private", "sanitized", "public"],
|
|
31
|
+
"description": "What the repository holds. 'private' defaults every handling flag to false."
|
|
32
|
+
},
|
|
33
|
+
"pii": { "type": "boolean", "description": "Repository holds personally identifiable information" },
|
|
34
|
+
"handling": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": false,
|
|
37
|
+
"properties": {
|
|
38
|
+
"excerptable": { "type": "boolean", "description": "May content be quoted outside the repo?" },
|
|
39
|
+
"publishable": { "type": "boolean", "description": "May content be published?" },
|
|
40
|
+
"mirror": { "type": "boolean", "description": "May the repo be mirrored to a secondary remote?" }
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
"installed": {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"description": "Installed AIWG frameworks",
|
|
50
|
+
"additionalProperties": {
|
|
51
|
+
"$ref": "#/definitions/InstalledFramework"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"providers": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"description": "Active AI provider targets",
|
|
57
|
+
"items": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"enum": [
|
|
60
|
+
"claude",
|
|
61
|
+
"copilot",
|
|
62
|
+
"cursor",
|
|
63
|
+
"warp",
|
|
64
|
+
"windsurf",
|
|
65
|
+
"openclaw",
|
|
66
|
+
"codex",
|
|
67
|
+
"opencode",
|
|
68
|
+
"factory",
|
|
69
|
+
"hermes",
|
|
70
|
+
"grokbot",
|
|
71
|
+
"muse"
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"scripts": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"description": "Named scripts runnable via AIWG sidebar or CLI",
|
|
78
|
+
"additionalProperties": {
|
|
79
|
+
"type": "string"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"authorization": {
|
|
83
|
+
"$ref": "#/definitions/Authorization",
|
|
84
|
+
"description": "Versioned provider-neutral permission, role, assignment, scope, boundary, and provider mapping model. Deny by default."
|
|
85
|
+
},
|
|
86
|
+
"security": {
|
|
87
|
+
"type": "object",
|
|
88
|
+
"description": "Project-owned deterministic security policy.",
|
|
89
|
+
"additionalProperties": false,
|
|
90
|
+
"properties": {
|
|
91
|
+
"threatAssessment": {
|
|
92
|
+
"$ref": "#/definitions/ThreatAssessment"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"artifact_outputs": {
|
|
97
|
+
"type": "object",
|
|
98
|
+
"description": "Canonical AIWG artifact storage and optional provider-native presentation/export destinations. Provider-native output is explicit-only by default.",
|
|
99
|
+
"additionalProperties": false,
|
|
100
|
+
"properties": {
|
|
101
|
+
"canonical": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"enum": ["aiwg"],
|
|
104
|
+
"default": "aiwg",
|
|
105
|
+
"description": "Durable source of truth. Presentation destinations never replace this artifact."
|
|
106
|
+
},
|
|
107
|
+
"provider_native": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"enum": ["disabled", "explicit-only", "project-default"],
|
|
110
|
+
"default": "explicit-only",
|
|
111
|
+
"description": "Whether provider-native destinations are disabled, require an explicit task request, or may be selected by a declared project default."
|
|
112
|
+
},
|
|
113
|
+
"destinations": {
|
|
114
|
+
"type": "object",
|
|
115
|
+
"propertyNames": { "pattern": "^[a-z0-9][a-z0-9.-]*$" },
|
|
116
|
+
"additionalProperties": {
|
|
117
|
+
"type": "object",
|
|
118
|
+
"additionalProperties": false,
|
|
119
|
+
"properties": {
|
|
120
|
+
"enabled": { "type": "boolean", "default": true },
|
|
121
|
+
"use_when": { "type": "string", "enum": ["disabled", "user-requested", "project-default"], "default": "user-requested" }
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"uhp": {
|
|
128
|
+
"type": "object",
|
|
129
|
+
"description": "Experimental Unified Harness Protocol client configuration. Credentials are references only and are resolved at request time.",
|
|
130
|
+
"additionalProperties": false,
|
|
131
|
+
"properties": {
|
|
132
|
+
"enabled": { "type": "boolean", "default": false },
|
|
133
|
+
"profiles": {
|
|
134
|
+
"type": "object",
|
|
135
|
+
"propertyNames": { "pattern": "^[a-z][a-z0-9_-]{0,63}$" },
|
|
136
|
+
"additionalProperties": {
|
|
137
|
+
"type": "object",
|
|
138
|
+
"additionalProperties": false,
|
|
139
|
+
"required": ["endpoint", "version", "credential", "experimental"],
|
|
140
|
+
"properties": {
|
|
141
|
+
"endpoint": { "type": "string", "format": "uri", "pattern": "^https?://" },
|
|
142
|
+
"version": { "const": "2026-08-11" },
|
|
143
|
+
"credential": {
|
|
144
|
+
"type": "object",
|
|
145
|
+
"additionalProperties": false,
|
|
146
|
+
"required": ["source", "name"],
|
|
147
|
+
"properties": {
|
|
148
|
+
"source": { "const": "env" },
|
|
149
|
+
"name": { "type": "string", "pattern": "^[A-Z_][A-Z0-9_]*$" }
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"defaultHarness": { "type": "string", "pattern": "^chrn_[A-Za-z0-9_-]+$" },
|
|
153
|
+
"defaultModel": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$" },
|
|
154
|
+
"experimental": { "const": true },
|
|
155
|
+
"trust": {
|
|
156
|
+
"type": "object",
|
|
157
|
+
"additionalProperties": false,
|
|
158
|
+
"properties": {
|
|
159
|
+
"allowedHosts": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
|
|
160
|
+
"allowPrivateNetwork": { "type": "boolean", "default": false },
|
|
161
|
+
"allowInsecureLoopback": { "type": "boolean", "default": false },
|
|
162
|
+
"allowRedirects": { "type": "boolean", "default": false }
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"limits": {
|
|
166
|
+
"type": "object",
|
|
167
|
+
"additionalProperties": false,
|
|
168
|
+
"properties": {
|
|
169
|
+
"requestTimeoutMs": { "type": "integer", "minimum": 1 },
|
|
170
|
+
"inactivityTimeoutMs": { "type": "integer", "minimum": 1 },
|
|
171
|
+
"maxTaskSeconds": { "type": "integer", "minimum": 1 },
|
|
172
|
+
"maxUploadBytes": { "type": "integer", "minimum": 1 },
|
|
173
|
+
"maxArtifactBytes": { "type": "integer", "minimum": 1 },
|
|
174
|
+
"maxArtifactCount": { "type": "integer", "minimum": 1 },
|
|
175
|
+
"maxRetries": { "type": "integer", "minimum": 1 }
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"workspace": {
|
|
184
|
+
"$ref": "#/definitions/Workspace",
|
|
185
|
+
"description": "General multi-repository workspace metadata. Root manifests pair this with repos; external members may use member_of to discover their workspace."
|
|
186
|
+
},
|
|
187
|
+
"repos": {
|
|
188
|
+
"type": "array",
|
|
189
|
+
"minItems": 1,
|
|
190
|
+
"description": "Workspace member repositories. Each member's own .aiwg/aiwg.config remains authoritative for remotes, delivery, tracker actor, and signing.",
|
|
191
|
+
"items": {
|
|
192
|
+
"$ref": "#/definitions/WorkspaceRepo"
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
"externalLinks": {
|
|
196
|
+
"type": "object",
|
|
197
|
+
"description": "Named public external resources exposed as project metadata. AIWG renders these links but does not fetch them or submit data.",
|
|
198
|
+
"propertyNames": {
|
|
199
|
+
"pattern": "^[a-z][a-z0-9_-]*$"
|
|
200
|
+
},
|
|
201
|
+
"additionalProperties": {
|
|
202
|
+
"$ref": "#/definitions/ExternalLink"
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
"settings": {
|
|
206
|
+
"type": "object",
|
|
207
|
+
"description": "Framework-specific settings",
|
|
208
|
+
"additionalProperties": true
|
|
209
|
+
},
|
|
210
|
+
"remotes": {
|
|
211
|
+
"type": "object",
|
|
212
|
+
"description": "Repo origin topology — declares primary (CI/issues/PRs) and secondary remotes (#994)",
|
|
213
|
+
"additionalProperties": false,
|
|
214
|
+
"properties": {
|
|
215
|
+
"primary": {
|
|
216
|
+
"type": "string",
|
|
217
|
+
"description": "git remote name driving CI/PRs by default. Defaults to 'origin' when absent."
|
|
218
|
+
},
|
|
219
|
+
"issue_tracker": {
|
|
220
|
+
"type": "string",
|
|
221
|
+
"description": "Where issues live. Defaults to primary."
|
|
222
|
+
},
|
|
223
|
+
"issue_provider": {
|
|
224
|
+
"type": "string",
|
|
225
|
+
"enum": ["gitea", "github", "local"],
|
|
226
|
+
"description": "Explicit issue-tracker provider for self-hosted or local trackers when the remote URL is ambiguous."
|
|
227
|
+
},
|
|
228
|
+
"ci": {
|
|
229
|
+
"type": "string",
|
|
230
|
+
"description": "Where CI runs. Defaults to primary."
|
|
231
|
+
},
|
|
232
|
+
"tracker_actor": {
|
|
233
|
+
"$ref": "#/definitions/TrackerActor",
|
|
234
|
+
"description": "Forge account/tool that must author delivery writes such as issue comments, PRs, labels, and closures (#1601)."
|
|
235
|
+
},
|
|
236
|
+
"customer_issue_tracker": {
|
|
237
|
+
"type": "string",
|
|
238
|
+
"description": "Optional customer-facing issue intake remote. Internal engineering work remains on issue_tracker."
|
|
239
|
+
},
|
|
240
|
+
"customer_issue_provider": {
|
|
241
|
+
"type": "string",
|
|
242
|
+
"enum": ["gitea", "github", "local"],
|
|
243
|
+
"description": "Explicit provider hint for the customer-facing issue tracker."
|
|
244
|
+
},
|
|
245
|
+
"customer_tracker_actor": {
|
|
246
|
+
"$ref": "#/definitions/TrackerActor",
|
|
247
|
+
"description": "Forge account/tool for customer acknowledgements, comments, and closures."
|
|
248
|
+
},
|
|
249
|
+
"transport": {
|
|
250
|
+
"$ref": "#/definitions/RemoteTransport",
|
|
251
|
+
"description": "Git transport identity and project-local helper for the primary remote."
|
|
252
|
+
},
|
|
253
|
+
"secondary": {
|
|
254
|
+
"type": "array",
|
|
255
|
+
"description": "Mirrors, fork bases, and publishing targets",
|
|
256
|
+
"items": {
|
|
257
|
+
"$ref": "#/definitions/SecondaryRemote"
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
"issues": {
|
|
263
|
+
"type": "object",
|
|
264
|
+
"description": "Issue-tracker workflow semantics associated with remotes.issue_tracker (#1789). Ordinary issue processing validates but never implicitly provisions labels.",
|
|
265
|
+
"additionalProperties": false,
|
|
266
|
+
"properties": {
|
|
267
|
+
"labels": {
|
|
268
|
+
"type": "object",
|
|
269
|
+
"description": "Tracker labels keyed by stable semantic role.",
|
|
270
|
+
"additionalProperties": {
|
|
271
|
+
"$ref": "#/definitions/IssueLabelDefinition"
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
"repo_maintainer": {
|
|
277
|
+
"type": "object",
|
|
278
|
+
"description": "Role-aware repository maintenance overrides. Forge permission detection is attempted first; these tiers pin or narrow behavior when detection is denied or policy requires a fixed posture (#1755).",
|
|
279
|
+
"additionalProperties": false,
|
|
280
|
+
"properties": {
|
|
281
|
+
"tiers": {
|
|
282
|
+
"type": "object",
|
|
283
|
+
"description": "Map remote URLs, owner/repo slugs, remote names, or 'local' to collaborator, maintainer, or admin.",
|
|
284
|
+
"additionalProperties": {
|
|
285
|
+
"type": "string",
|
|
286
|
+
"enum": ["collaborator", "maintainer", "admin"]
|
|
287
|
+
},
|
|
288
|
+
"examples": [
|
|
289
|
+
{
|
|
290
|
+
"git@git.integrolabs.net:roctinam/aiwg.git": "maintainer",
|
|
291
|
+
"elder-plinius/T3MP3ST": "collaborator",
|
|
292
|
+
"local": "maintainer"
|
|
293
|
+
}
|
|
294
|
+
]
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"delivery": {
|
|
299
|
+
"type": "object",
|
|
300
|
+
"description": "Repo control / delivery policy — how AIWG agents are expected to ship code (#995)",
|
|
301
|
+
"additionalProperties": false,
|
|
302
|
+
"properties": {
|
|
303
|
+
"mode": {
|
|
304
|
+
"type": "string",
|
|
305
|
+
"enum": ["direct", "feature-branch", "pr-required"],
|
|
306
|
+
"description": "How agents deliver code. direct = commit/push to default_branch; feature-branch = push branch, no PR; pr-required = branch + PR (default)"
|
|
307
|
+
},
|
|
308
|
+
"default_branch": {
|
|
309
|
+
"type": "string",
|
|
310
|
+
"description": "Default branch name. Defaults to 'main'."
|
|
311
|
+
},
|
|
312
|
+
"branch_naming": {
|
|
313
|
+
"type": "object",
|
|
314
|
+
"description": "Branch-naming conventions. {issue} and {slug} are interpolated by skills.",
|
|
315
|
+
"additionalProperties": false,
|
|
316
|
+
"properties": {
|
|
317
|
+
"prefix_by_type": {
|
|
318
|
+
"type": "object",
|
|
319
|
+
"additionalProperties": {
|
|
320
|
+
"type": "string"
|
|
321
|
+
},
|
|
322
|
+
"description": "Per commit-type branch prefix templates (feat, fix, docs, chore, refactor, test)"
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
"merge_style": {
|
|
327
|
+
"type": "string",
|
|
328
|
+
"enum": ["rebase-merge", "squash", "merge", "fast-forward-only"],
|
|
329
|
+
"description": "Merge style. Defaults to 'rebase-merge'."
|
|
330
|
+
},
|
|
331
|
+
"delete_branch_on_merge": {
|
|
332
|
+
"type": "boolean",
|
|
333
|
+
"description": "Delete the feature branch after merge. Default true."
|
|
334
|
+
},
|
|
335
|
+
"require_ci_green": {
|
|
336
|
+
"type": "boolean",
|
|
337
|
+
"description": "Agent must wait for CI green before declaring done. Default true."
|
|
338
|
+
},
|
|
339
|
+
"require_signed_commits": {
|
|
340
|
+
"type": "boolean",
|
|
341
|
+
"description": "Default false."
|
|
342
|
+
},
|
|
343
|
+
"committer": {
|
|
344
|
+
"$ref": "#/definitions/CommitterIdentity",
|
|
345
|
+
"description": "Committer identity agents should use for delivery commits. Defaults to git config when unset."
|
|
346
|
+
},
|
|
347
|
+
"signing": {
|
|
348
|
+
"$ref": "#/definitions/SigningConfig",
|
|
349
|
+
"description": "Signing metadata for delivery commits/tags (#1601)."
|
|
350
|
+
},
|
|
351
|
+
"release_signing": {
|
|
352
|
+
"$ref": "#/definitions/SigningConfig",
|
|
353
|
+
"description": "Distinct signing metadata for annotated release tags."
|
|
354
|
+
},
|
|
355
|
+
"force_push_policy": {
|
|
356
|
+
"type": "string",
|
|
357
|
+
"enum": ["never", "own-branch-only", "allowed"],
|
|
358
|
+
"description": "Force-push policy. Default 'never'."
|
|
359
|
+
},
|
|
360
|
+
"auto_close_issues": {
|
|
361
|
+
"type": "boolean",
|
|
362
|
+
"description": "Include 'Closes #N' in PR body. Default true."
|
|
363
|
+
},
|
|
364
|
+
"issue_comment_on_cycle": {
|
|
365
|
+
"type": "boolean",
|
|
366
|
+
"description": "Post AL CYCLE status comments to issue threads. Default true."
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
"parallelism": {
|
|
371
|
+
"type": "object",
|
|
372
|
+
"description": "Provider-scoped parallelism caps \u2014 limits concurrent subagents, Ralph loops, and MC missions to keep AIWG within the rate-limit envelope of the underlying model provider (#1359). Composes (effective limit = MIN) with context-budget caps and rlm-context-management Rule 8.",
|
|
373
|
+
"additionalProperties": false,
|
|
374
|
+
"properties": {
|
|
375
|
+
"max_parallel_subagents": {
|
|
376
|
+
"type": "integer",
|
|
377
|
+
"minimum": 1,
|
|
378
|
+
"maximum": 50,
|
|
379
|
+
"description": "Max concurrent subagents (Task dispatches, rlm-batch fan-outs). Default: provider-specific (claude=4, codex/copilot/etc.=10)."
|
|
380
|
+
},
|
|
381
|
+
"max_parallel_ralph_loops": {
|
|
382
|
+
"type": "integer",
|
|
383
|
+
"minimum": 1,
|
|
384
|
+
"maximum": 20,
|
|
385
|
+
"description": "Max concurrent Ralph external loops. Default: provider-specific (claude=2, others=3)."
|
|
386
|
+
},
|
|
387
|
+
"max_parallel_mc_missions": {
|
|
388
|
+
"type": "integer",
|
|
389
|
+
"minimum": 1,
|
|
390
|
+
"maximum": 20,
|
|
391
|
+
"description": "Max concurrent Mission Control missions. Default: provider-specific (claude=4, others=6)."
|
|
392
|
+
},
|
|
393
|
+
"rationale": {
|
|
394
|
+
"type": "string",
|
|
395
|
+
"description": "Free-form note explaining why this cap was chosen (e.g., 'Claude Team plan API quota')."
|
|
396
|
+
},
|
|
397
|
+
"worker_dispatch": {
|
|
398
|
+
"type": "boolean",
|
|
399
|
+
"default": false
|
|
400
|
+
},
|
|
401
|
+
"clis": {
|
|
402
|
+
"type": "object",
|
|
403
|
+
"additionalProperties": {
|
|
404
|
+
"$ref": "#/definitions/cli"
|
|
405
|
+
},
|
|
406
|
+
"propertyNames": {
|
|
407
|
+
"pattern": "^[a-z][a-z0-9-]{0,62}$"
|
|
408
|
+
}
|
|
409
|
+
},
|
|
410
|
+
"groups": {
|
|
411
|
+
"type": "object",
|
|
412
|
+
"additionalProperties": {
|
|
413
|
+
"$ref": "#/definitions/group"
|
|
414
|
+
},
|
|
415
|
+
"propertyNames": {
|
|
416
|
+
"pattern": "^[a-z][a-z0-9-]{0,62}$"
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
"admission": {
|
|
420
|
+
"type": "object",
|
|
421
|
+
"additionalProperties": false,
|
|
422
|
+
"properties": {
|
|
423
|
+
"groupCaps": {
|
|
424
|
+
"type": "object",
|
|
425
|
+
"additionalProperties": {
|
|
426
|
+
"type": "integer",
|
|
427
|
+
"minimum": 1
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
"cliCaps": {
|
|
431
|
+
"type": "object",
|
|
432
|
+
"additionalProperties": {
|
|
433
|
+
"type": "integer",
|
|
434
|
+
"minimum": 1
|
|
435
|
+
}
|
|
436
|
+
},
|
|
437
|
+
"modelCaps": {
|
|
438
|
+
"type": "object",
|
|
439
|
+
"additionalProperties": {
|
|
440
|
+
"type": "integer",
|
|
441
|
+
"minimum": 1
|
|
442
|
+
}
|
|
443
|
+
},
|
|
444
|
+
"quotaCaps": {
|
|
445
|
+
"type": "object",
|
|
446
|
+
"additionalProperties": {
|
|
447
|
+
"type": "integer",
|
|
448
|
+
"minimum": 1
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
"queueTimeoutSeconds": {
|
|
452
|
+
"type": "integer",
|
|
453
|
+
"minimum": 1,
|
|
454
|
+
"default": 300
|
|
455
|
+
},
|
|
456
|
+
"leaseSeconds": {
|
|
457
|
+
"type": "integer",
|
|
458
|
+
"minimum": 1,
|
|
459
|
+
"default": 60
|
|
460
|
+
},
|
|
461
|
+
"memberCaps": {
|
|
462
|
+
"type": "object",
|
|
463
|
+
"additionalProperties": {
|
|
464
|
+
"type": "integer",
|
|
465
|
+
"minimum": 1
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
"maxQueued": {
|
|
469
|
+
"type": "integer",
|
|
470
|
+
"minimum": 0,
|
|
471
|
+
"default": 128
|
|
472
|
+
},
|
|
473
|
+
"authorityRef": {
|
|
474
|
+
"type": "string",
|
|
475
|
+
"pattern": "^(project|host:[a-z][a-z0-9-]{0,62})$",
|
|
476
|
+
"default": "project",
|
|
477
|
+
"description": "Project MC admission store by default; host reference requires S4 trusted executor binding."
|
|
478
|
+
},
|
|
479
|
+
"hostResources": {
|
|
480
|
+
"type": "object",
|
|
481
|
+
"additionalProperties": false,
|
|
482
|
+
"description": "Live host-resource admission thresholds for worker dispatch (FR-OG-107, #2954). Each present signal blocks dispatch over threshold; absent signals are reported but not enforced. Overrides build.resource_preflight.dispatch field-by-field.",
|
|
483
|
+
"properties": {
|
|
484
|
+
"min_avail_mem_gb": {
|
|
485
|
+
"type": "number",
|
|
486
|
+
"minimum": 0,
|
|
487
|
+
"default": 8
|
|
488
|
+
},
|
|
489
|
+
"max_load_ratio": {
|
|
490
|
+
"type": "number",
|
|
491
|
+
"minimum": 0,
|
|
492
|
+
"default": 1.0
|
|
493
|
+
},
|
|
494
|
+
"max_mem_psi_avg10": {
|
|
495
|
+
"type": "number",
|
|
496
|
+
"minimum": 0,
|
|
497
|
+
"default": 30
|
|
498
|
+
},
|
|
499
|
+
"max_mem_psi_avg60": {
|
|
500
|
+
"type": "number",
|
|
501
|
+
"minimum": 0,
|
|
502
|
+
"default": 10
|
|
503
|
+
},
|
|
504
|
+
"min_free_disk_gb": {
|
|
505
|
+
"type": "number",
|
|
506
|
+
"minimum": 0,
|
|
507
|
+
"default": 2
|
|
508
|
+
},
|
|
509
|
+
"max_workers": {
|
|
510
|
+
"type": "integer",
|
|
511
|
+
"minimum": 1
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
},
|
|
517
|
+
"budgets": {
|
|
518
|
+
"type": "object",
|
|
519
|
+
"additionalProperties": false,
|
|
520
|
+
"properties": {
|
|
521
|
+
"perRun": {
|
|
522
|
+
"$ref": "#/definitions/budget"
|
|
523
|
+
},
|
|
524
|
+
"perTask": {
|
|
525
|
+
"$ref": "#/definitions/budget"
|
|
526
|
+
},
|
|
527
|
+
"enforcement": {
|
|
528
|
+
"enum": [
|
|
529
|
+
"hard",
|
|
530
|
+
"observed"
|
|
531
|
+
],
|
|
532
|
+
"default": "observed"
|
|
533
|
+
},
|
|
534
|
+
"unknownCost": {
|
|
535
|
+
"enum": [
|
|
536
|
+
"deny",
|
|
537
|
+
"reserve"
|
|
538
|
+
],
|
|
539
|
+
"default": "deny"
|
|
540
|
+
},
|
|
541
|
+
"reservationUsd": {
|
|
542
|
+
"type": "number",
|
|
543
|
+
"exclusiveMinimum": 0
|
|
544
|
+
}
|
|
545
|
+
},
|
|
546
|
+
"allOf": [
|
|
547
|
+
{
|
|
548
|
+
"if": {
|
|
549
|
+
"required": [
|
|
550
|
+
"unknownCost"
|
|
551
|
+
],
|
|
552
|
+
"properties": {
|
|
553
|
+
"unknownCost": {
|
|
554
|
+
"const": "reserve"
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
"then": {
|
|
559
|
+
"properties": {
|
|
560
|
+
"reservationUsd": {}
|
|
561
|
+
},
|
|
562
|
+
"required": [
|
|
563
|
+
"reservationUsd"
|
|
564
|
+
]
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
]
|
|
568
|
+
},
|
|
569
|
+
"retry": {
|
|
570
|
+
"type": "object",
|
|
571
|
+
"additionalProperties": false,
|
|
572
|
+
"properties": {
|
|
573
|
+
"maxAttempts": {
|
|
574
|
+
"type": "integer",
|
|
575
|
+
"minimum": 1,
|
|
576
|
+
"default": 3
|
|
577
|
+
},
|
|
578
|
+
"on": {
|
|
579
|
+
"type": "array",
|
|
580
|
+
"items": {
|
|
581
|
+
"enum": [
|
|
582
|
+
"rate-limit",
|
|
583
|
+
"unavailable",
|
|
584
|
+
"timeout"
|
|
585
|
+
]
|
|
586
|
+
},
|
|
587
|
+
"minItems": 0,
|
|
588
|
+
"uniqueItems": true,
|
|
589
|
+
"default": [
|
|
590
|
+
"rate-limit",
|
|
591
|
+
"unavailable",
|
|
592
|
+
"timeout"
|
|
593
|
+
]
|
|
594
|
+
},
|
|
595
|
+
"baseDelaySeconds": {
|
|
596
|
+
"type": "integer",
|
|
597
|
+
"minimum": 1,
|
|
598
|
+
"default": 2
|
|
599
|
+
},
|
|
600
|
+
"maxDelaySeconds": {
|
|
601
|
+
"type": "integer",
|
|
602
|
+
"minimum": 1,
|
|
603
|
+
"default": 60
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
},
|
|
607
|
+
"activation": {
|
|
608
|
+
"type": "object",
|
|
609
|
+
"additionalProperties": false,
|
|
610
|
+
"properties": {
|
|
611
|
+
"revision": {
|
|
612
|
+
"type": "integer",
|
|
613
|
+
"minimum": 1
|
|
614
|
+
},
|
|
615
|
+
"configDigest": {
|
|
616
|
+
"type": "string",
|
|
617
|
+
"pattern": "^sha256:[a-f0-9]{64}$"
|
|
618
|
+
},
|
|
619
|
+
"projectModelsDigest": {
|
|
620
|
+
"type": "string",
|
|
621
|
+
"pattern": "^sha256:[a-f0-9]{64}$"
|
|
622
|
+
},
|
|
623
|
+
"userModelsDigest": {
|
|
624
|
+
"type": "string",
|
|
625
|
+
"pattern": "^sha256:[a-f0-9]{64}$"
|
|
626
|
+
},
|
|
627
|
+
"builtinModelsDigest": {
|
|
628
|
+
"type": "string",
|
|
629
|
+
"pattern": "^sha256:[a-f0-9]{64}$"
|
|
630
|
+
},
|
|
631
|
+
"previousRef": {
|
|
632
|
+
"type": "string",
|
|
633
|
+
"maxLength": 2048
|
|
634
|
+
},
|
|
635
|
+
"snapshotRef": {
|
|
636
|
+
"type": "string",
|
|
637
|
+
"minLength": 1,
|
|
638
|
+
"maxLength": 2048
|
|
639
|
+
}
|
|
640
|
+
},
|
|
641
|
+
"required": [
|
|
642
|
+
"revision",
|
|
643
|
+
"configDigest",
|
|
644
|
+
"projectModelsDigest",
|
|
645
|
+
"userModelsDigest",
|
|
646
|
+
"builtinModelsDigest",
|
|
647
|
+
"snapshotRef"
|
|
648
|
+
]
|
|
649
|
+
},
|
|
650
|
+
"worker_mode": {
|
|
651
|
+
"enum": [
|
|
652
|
+
"direct",
|
|
653
|
+
"managed"
|
|
654
|
+
],
|
|
655
|
+
"default": "direct"
|
|
656
|
+
},
|
|
657
|
+
"health": {
|
|
658
|
+
"type": "object",
|
|
659
|
+
"additionalProperties": false,
|
|
660
|
+
"properties": {
|
|
661
|
+
"startupSeconds": {
|
|
662
|
+
"type": "integer",
|
|
663
|
+
"minimum": 1,
|
|
664
|
+
"maximum": 600,
|
|
665
|
+
"default": 60
|
|
666
|
+
},
|
|
667
|
+
"checkSeconds": {
|
|
668
|
+
"type": "integer",
|
|
669
|
+
"minimum": 1,
|
|
670
|
+
"maximum": 60,
|
|
671
|
+
"default": 15
|
|
672
|
+
},
|
|
673
|
+
"quietSeconds": {
|
|
674
|
+
"type": "integer",
|
|
675
|
+
"minimum": 1,
|
|
676
|
+
"maximum": 3600,
|
|
677
|
+
"default": 90
|
|
678
|
+
},
|
|
679
|
+
"stallSeconds": {
|
|
680
|
+
"type": "integer",
|
|
681
|
+
"minimum": 1,
|
|
682
|
+
"maximum": 7200,
|
|
683
|
+
"default": 300
|
|
684
|
+
},
|
|
685
|
+
"diagnosticGraceSeconds": {
|
|
686
|
+
"type": "integer",
|
|
687
|
+
"minimum": 1,
|
|
688
|
+
"maximum": 600,
|
|
689
|
+
"default": 60
|
|
690
|
+
},
|
|
691
|
+
"terminateGraceSeconds": {
|
|
692
|
+
"type": "integer",
|
|
693
|
+
"minimum": 1,
|
|
694
|
+
"maximum": 60,
|
|
695
|
+
"default": 5
|
|
696
|
+
},
|
|
697
|
+
"hardTimeoutSeconds": {
|
|
698
|
+
"type": "integer",
|
|
699
|
+
"minimum": 1,
|
|
700
|
+
"maximum": 86400,
|
|
701
|
+
"default": 1800
|
|
702
|
+
},
|
|
703
|
+
"maxSteps": {
|
|
704
|
+
"type": "integer",
|
|
705
|
+
"minimum": 1,
|
|
706
|
+
"maximum": 10000,
|
|
707
|
+
"default": 100
|
|
708
|
+
},
|
|
709
|
+
"requireStepCap": {
|
|
710
|
+
"type": "boolean",
|
|
711
|
+
"default": false
|
|
712
|
+
},
|
|
713
|
+
"roleScale": {
|
|
714
|
+
"type": "object",
|
|
715
|
+
"additionalProperties": false,
|
|
716
|
+
"properties": {
|
|
717
|
+
"efficiency": {
|
|
718
|
+
"type": "number",
|
|
719
|
+
"minimum": 1,
|
|
720
|
+
"maximum": 6,
|
|
721
|
+
"default": 1
|
|
722
|
+
},
|
|
723
|
+
"coding": {
|
|
724
|
+
"type": "number",
|
|
725
|
+
"minimum": 1,
|
|
726
|
+
"maximum": 6,
|
|
727
|
+
"default": 1
|
|
728
|
+
},
|
|
729
|
+
"reasoning": {
|
|
730
|
+
"type": "number",
|
|
731
|
+
"minimum": 1,
|
|
732
|
+
"maximum": 6,
|
|
733
|
+
"default": 2
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
},
|
|
737
|
+
"effortScale": {
|
|
738
|
+
"type": "object",
|
|
739
|
+
"maxProperties": 32,
|
|
740
|
+
"additionalProperties": {
|
|
741
|
+
"type": "number",
|
|
742
|
+
"minimum": 1,
|
|
743
|
+
"maximum": 6
|
|
744
|
+
},
|
|
745
|
+
"default": {
|
|
746
|
+
"xhigh": 2,
|
|
747
|
+
"max": 3
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
"modelScale": {
|
|
751
|
+
"type": "object",
|
|
752
|
+
"maxProperties": 500,
|
|
753
|
+
"additionalProperties": {
|
|
754
|
+
"type": "number",
|
|
755
|
+
"minimum": 1,
|
|
756
|
+
"maximum": 6
|
|
757
|
+
}
|
|
758
|
+
},
|
|
759
|
+
"modelStartupSeconds": {
|
|
760
|
+
"type": "object",
|
|
761
|
+
"maxProperties": 500,
|
|
762
|
+
"additionalProperties": {
|
|
763
|
+
"type": "integer",
|
|
764
|
+
"minimum": 1,
|
|
765
|
+
"maximum": 600
|
|
766
|
+
}
|
|
767
|
+
},
|
|
768
|
+
"correlationWindowSeconds": {
|
|
769
|
+
"type": "integer",
|
|
770
|
+
"minimum": 1,
|
|
771
|
+
"maximum": 3600,
|
|
772
|
+
"default": 120
|
|
773
|
+
},
|
|
774
|
+
"failureCount": {
|
|
775
|
+
"type": "integer",
|
|
776
|
+
"minimum": 2,
|
|
777
|
+
"maximum": 100,
|
|
778
|
+
"default": 3
|
|
779
|
+
},
|
|
780
|
+
"allFailedMinimum": {
|
|
781
|
+
"type": "integer",
|
|
782
|
+
"minimum": 2,
|
|
783
|
+
"maximum": 100,
|
|
784
|
+
"default": 2
|
|
785
|
+
},
|
|
786
|
+
"cooldownSeconds": {
|
|
787
|
+
"type": "integer",
|
|
788
|
+
"minimum": 1,
|
|
789
|
+
"maximum": 3600,
|
|
790
|
+
"default": 120
|
|
791
|
+
},
|
|
792
|
+
"maxCooldownSeconds": {
|
|
793
|
+
"type": "integer",
|
|
794
|
+
"minimum": 1,
|
|
795
|
+
"maximum": 86400,
|
|
796
|
+
"default": 900
|
|
797
|
+
},
|
|
798
|
+
"probeSeconds": {
|
|
799
|
+
"type": "integer",
|
|
800
|
+
"minimum": 1,
|
|
801
|
+
"maximum": 60,
|
|
802
|
+
"default": 10
|
|
803
|
+
},
|
|
804
|
+
"probeMaxBytes": {
|
|
805
|
+
"type": "integer",
|
|
806
|
+
"minimum": 1024,
|
|
807
|
+
"maximum": 1048576,
|
|
808
|
+
"default": 65536
|
|
809
|
+
},
|
|
810
|
+
"halfOpenMaxProbes": {
|
|
811
|
+
"const": 1,
|
|
812
|
+
"default": 1
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
},
|
|
818
|
+
"index": {
|
|
819
|
+
"type": "object",
|
|
820
|
+
"description": "Artifact-index configuration — graph definitions (#1491). Consolidated here from the legacy .aiwg/config.yaml per ADR adr-index-config-consolidation.",
|
|
821
|
+
"additionalProperties": false,
|
|
822
|
+
"properties": {
|
|
823
|
+
"graphs": {
|
|
824
|
+
"type": "object",
|
|
825
|
+
"description": "Index graph definitions. Each key (except 'indices') is a JSON node/edge graph (IndexGraphDef); 'indices' holds the markdown-view manifest (IndexMarkdownIndices) rendered by corpus-index-build.",
|
|
826
|
+
"properties": {
|
|
827
|
+
"indices": { "$ref": "#/definitions/IndexMarkdownIndices" }
|
|
828
|
+
},
|
|
829
|
+
"additionalProperties": { "$ref": "#/definitions/IndexGraphDef" }
|
|
830
|
+
},
|
|
831
|
+
"graphOverrides": {
|
|
832
|
+
"type": "object",
|
|
833
|
+
"description": "Safely adapts supported built-in graphs without redefining their identity or storage semantics.",
|
|
834
|
+
"additionalProperties": false,
|
|
835
|
+
"properties": {
|
|
836
|
+
"codebase": { "$ref": "#/definitions/IndexBuiltinGraphOverride" }
|
|
837
|
+
}
|
|
838
|
+
},
|
|
839
|
+
"userIndices": {
|
|
840
|
+
"type": "object",
|
|
841
|
+
"description": "Controls whether user/global index sidecars are included by default in merged capability discovery/show.",
|
|
842
|
+
"additionalProperties": false,
|
|
843
|
+
"properties": {
|
|
844
|
+
"enabled": {
|
|
845
|
+
"type": "boolean",
|
|
846
|
+
"description": "When false, default capability discovery/show omit user/global sidecars unless --graph user is selected explicitly."
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
},
|
|
852
|
+
"indices": {
|
|
853
|
+
"type": "object",
|
|
854
|
+
"description": "User/global index shorthand. Declares shared sidecar roots that can be used from any project.",
|
|
855
|
+
"additionalProperties": false,
|
|
856
|
+
"properties": {
|
|
857
|
+
"user": {
|
|
858
|
+
"type": "object",
|
|
859
|
+
"additionalProperties": false,
|
|
860
|
+
"properties": {
|
|
861
|
+
"enabled": {
|
|
862
|
+
"type": "boolean",
|
|
863
|
+
"description": "When false, default capability discovery/show omit user/global sidecars unless selected explicitly."
|
|
864
|
+
},
|
|
865
|
+
"roots": {
|
|
866
|
+
"type": "object",
|
|
867
|
+
"description": "Named user-level index roots. Each key becomes an addressable shared graph name.",
|
|
868
|
+
"additionalProperties": {
|
|
869
|
+
"type": "object",
|
|
870
|
+
"additionalProperties": false,
|
|
871
|
+
"required": ["path"],
|
|
872
|
+
"properties": {
|
|
873
|
+
"path": {
|
|
874
|
+
"type": "string",
|
|
875
|
+
"description": "Filesystem path for this user-level index root. Supports ~ expansion."
|
|
876
|
+
},
|
|
877
|
+
"backend": {
|
|
878
|
+
"type": "string",
|
|
879
|
+
"enum": ["local", "fortemi-core"],
|
|
880
|
+
"description": "Preferred backend for this root. AIWG still builds the local graph before Fortemi sync."
|
|
881
|
+
},
|
|
882
|
+
"extensions": {
|
|
883
|
+
"type": "array",
|
|
884
|
+
"items": { "type": "string" },
|
|
885
|
+
"description": "File extensions to index. Defaults to markdown, YAML, and JSON."
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
},
|
|
894
|
+
"research": {
|
|
895
|
+
"type": "object",
|
|
896
|
+
"description": "Research-complete framework settings (#1497).",
|
|
897
|
+
"additionalProperties": false,
|
|
898
|
+
"properties": {
|
|
899
|
+
"corpusRoot": {
|
|
900
|
+
"type": "string",
|
|
901
|
+
"description": "Corpus root directory (relative to project root or absolute). Default: project root. The corpus lives under <corpusRoot>/documentation/{references,citations,radar,profiles}."
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
},
|
|
905
|
+
"command_log": {
|
|
906
|
+
"type": "object",
|
|
907
|
+
"description": "Optional local-first CLI command invocation log (#1614). Off by default.",
|
|
908
|
+
"additionalProperties": false,
|
|
909
|
+
"properties": {
|
|
910
|
+
"enabled": {
|
|
911
|
+
"type": "boolean",
|
|
912
|
+
"description": "Enable command invocation logging for this project. Default false."
|
|
913
|
+
},
|
|
914
|
+
"scopes": {
|
|
915
|
+
"type": "array",
|
|
916
|
+
"description": "Stores to write. project = .aiwg/telemetry/cli-commands.jsonl; global = XDG state.",
|
|
917
|
+
"items": {
|
|
918
|
+
"type": "string",
|
|
919
|
+
"enum": ["project", "global"]
|
|
920
|
+
},
|
|
921
|
+
"uniqueItems": true
|
|
922
|
+
},
|
|
923
|
+
"max_bytes": {
|
|
924
|
+
"type": "integer",
|
|
925
|
+
"minimum": 1024,
|
|
926
|
+
"maximum": 104857600,
|
|
927
|
+
"description": "Maximum bytes per JSONL store before rotation to .1. Default 1048576."
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
},
|
|
931
|
+
"telemetry": {
|
|
932
|
+
"type": "object",
|
|
933
|
+
"description": "Local-first telemetry settings. All telemetry is off by default.",
|
|
934
|
+
"additionalProperties": false,
|
|
935
|
+
"properties": {
|
|
936
|
+
"skill_usage": {
|
|
937
|
+
"type": "object",
|
|
938
|
+
"description": "Optional local-first skill, agent, and command usage tracking (#1649). Off by default.",
|
|
939
|
+
"additionalProperties": false,
|
|
940
|
+
"properties": {
|
|
941
|
+
"enabled": {
|
|
942
|
+
"type": "boolean",
|
|
943
|
+
"description": "Enable skill usage tracking for this project. Default false."
|
|
944
|
+
},
|
|
945
|
+
"scopes": {
|
|
946
|
+
"type": "array",
|
|
947
|
+
"description": "Stores to write. project = .aiwg/telemetry/skill-usage.jsonl; global = XDG state.",
|
|
948
|
+
"items": {
|
|
949
|
+
"type": "string",
|
|
950
|
+
"enum": ["project", "global"]
|
|
951
|
+
},
|
|
952
|
+
"uniqueItems": true
|
|
953
|
+
},
|
|
954
|
+
"max_bytes": {
|
|
955
|
+
"type": "integer",
|
|
956
|
+
"minimum": 1024,
|
|
957
|
+
"maximum": 104857600,
|
|
958
|
+
"description": "Maximum bytes per JSONL store before rotation to .1. Default 1048576."
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
},
|
|
964
|
+
"setup": {
|
|
965
|
+
"type": "object",
|
|
966
|
+
"description": "Setup/onboarding preferences (#3050) — answers to opt-in offers presented during `aiwg init` / `aiwg setup project`. Not worker policy; kept separate from the frozen `parallelism` contract fragment (B-OG-29).",
|
|
967
|
+
"additionalProperties": false,
|
|
968
|
+
"properties": {
|
|
969
|
+
"worker_dispatch_offer": {
|
|
970
|
+
"type": "string",
|
|
971
|
+
"enum": ["declined"],
|
|
972
|
+
"description": "Set to 'declined' when a person said no to the parallelism.worker_dispatch opt-in offer. Suppresses the offer and its hints until cleared."
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
},
|
|
976
|
+
"gates": {
|
|
977
|
+
"$ref": "#/definitions/GatesConfig"
|
|
978
|
+
}
|
|
979
|
+
},
|
|
980
|
+
"definitions": {
|
|
981
|
+
"cli": {
|
|
982
|
+
"type": "object",
|
|
983
|
+
"additionalProperties": false,
|
|
984
|
+
"properties": {
|
|
985
|
+
"adapter": {
|
|
986
|
+
"type": "string",
|
|
987
|
+
"minLength": 1,
|
|
988
|
+
"pattern": "^(providers|workerAdapters):[a-z][a-z0-9-]{0,62}$"
|
|
989
|
+
},
|
|
990
|
+
"enabled": {
|
|
991
|
+
"type": "boolean",
|
|
992
|
+
"default": true
|
|
993
|
+
},
|
|
994
|
+
"executable": {
|
|
995
|
+
"type": "string",
|
|
996
|
+
"minLength": 1
|
|
997
|
+
},
|
|
998
|
+
"endpoint": {
|
|
999
|
+
"type": "string",
|
|
1000
|
+
"minLength": 1,
|
|
1001
|
+
"format": "uri"
|
|
1002
|
+
},
|
|
1003
|
+
"accountScope": {
|
|
1004
|
+
"type": "string",
|
|
1005
|
+
"minLength": 1
|
|
1006
|
+
},
|
|
1007
|
+
"quotaScope": {
|
|
1008
|
+
"type": "string",
|
|
1009
|
+
"minLength": 1
|
|
1010
|
+
},
|
|
1011
|
+
"credentialRef": {
|
|
1012
|
+
"type": "string",
|
|
1013
|
+
"minLength": 1
|
|
1014
|
+
},
|
|
1015
|
+
"approvalRef": {
|
|
1016
|
+
"type": "string",
|
|
1017
|
+
"minLength": 1
|
|
1018
|
+
},
|
|
1019
|
+
"invocationProfile": {
|
|
1020
|
+
"type": "string",
|
|
1021
|
+
"minLength": 1
|
|
1022
|
+
},
|
|
1023
|
+
"mcpServerRef": {
|
|
1024
|
+
"type": "string",
|
|
1025
|
+
"minLength": 1
|
|
1026
|
+
}
|
|
1027
|
+
},
|
|
1028
|
+
"required": [
|
|
1029
|
+
"adapter",
|
|
1030
|
+
"accountScope",
|
|
1031
|
+
"quotaScope"
|
|
1032
|
+
],
|
|
1033
|
+
"not": {
|
|
1034
|
+
"properties": {
|
|
1035
|
+
"executable": {},
|
|
1036
|
+
"endpoint": {}
|
|
1037
|
+
},
|
|
1038
|
+
"required": [
|
|
1039
|
+
"executable",
|
|
1040
|
+
"endpoint"
|
|
1041
|
+
]
|
|
1042
|
+
}
|
|
1043
|
+
},
|
|
1044
|
+
"member": {
|
|
1045
|
+
"type": "object",
|
|
1046
|
+
"additionalProperties": false,
|
|
1047
|
+
"properties": {
|
|
1048
|
+
"id": {
|
|
1049
|
+
"type": "string",
|
|
1050
|
+
"minLength": 1,
|
|
1051
|
+
"pattern": "^[a-z][a-z0-9-]{0,62}$"
|
|
1052
|
+
},
|
|
1053
|
+
"cli": {
|
|
1054
|
+
"type": "string",
|
|
1055
|
+
"minLength": 1
|
|
1056
|
+
},
|
|
1057
|
+
"model": {
|
|
1058
|
+
"type": "string",
|
|
1059
|
+
"minLength": 1
|
|
1060
|
+
},
|
|
1061
|
+
"roles": {
|
|
1062
|
+
"type": "array",
|
|
1063
|
+
"items": {
|
|
1064
|
+
"enum": [
|
|
1065
|
+
"efficiency",
|
|
1066
|
+
"coding",
|
|
1067
|
+
"reasoning"
|
|
1068
|
+
]
|
|
1069
|
+
},
|
|
1070
|
+
"minItems": 1,
|
|
1071
|
+
"uniqueItems": true
|
|
1072
|
+
},
|
|
1073
|
+
"enabled": {
|
|
1074
|
+
"type": "boolean",
|
|
1075
|
+
"default": true
|
|
1076
|
+
},
|
|
1077
|
+
"priority": {
|
|
1078
|
+
"type": "integer",
|
|
1079
|
+
"minimum": 0,
|
|
1080
|
+
"maximum": 100,
|
|
1081
|
+
"default": 50
|
|
1082
|
+
}
|
|
1083
|
+
},
|
|
1084
|
+
"required": [
|
|
1085
|
+
"id",
|
|
1086
|
+
"cli",
|
|
1087
|
+
"model",
|
|
1088
|
+
"roles"
|
|
1089
|
+
]
|
|
1090
|
+
},
|
|
1091
|
+
"group": {
|
|
1092
|
+
"type": "object",
|
|
1093
|
+
"additionalProperties": false,
|
|
1094
|
+
"properties": {
|
|
1095
|
+
"members": {
|
|
1096
|
+
"type": "array",
|
|
1097
|
+
"items": {
|
|
1098
|
+
"$ref": "#/definitions/member"
|
|
1099
|
+
},
|
|
1100
|
+
"minItems": 1,
|
|
1101
|
+
"uniqueItems": true
|
|
1102
|
+
},
|
|
1103
|
+
"fallback": {
|
|
1104
|
+
"type": "array",
|
|
1105
|
+
"items": {
|
|
1106
|
+
"type": "string",
|
|
1107
|
+
"minLength": 1
|
|
1108
|
+
},
|
|
1109
|
+
"minItems": 0,
|
|
1110
|
+
"uniqueItems": true,
|
|
1111
|
+
"default": []
|
|
1112
|
+
},
|
|
1113
|
+
"execution": {
|
|
1114
|
+
"$ref": "#/definitions/execution"
|
|
1115
|
+
},
|
|
1116
|
+
"requiredRoles": {
|
|
1117
|
+
"type": "array",
|
|
1118
|
+
"items": {
|
|
1119
|
+
"enum": [
|
|
1120
|
+
"efficiency",
|
|
1121
|
+
"coding",
|
|
1122
|
+
"reasoning"
|
|
1123
|
+
]
|
|
1124
|
+
},
|
|
1125
|
+
"uniqueItems": true,
|
|
1126
|
+
"default": []
|
|
1127
|
+
},
|
|
1128
|
+
"maxParallel": {
|
|
1129
|
+
"type": "integer",
|
|
1130
|
+
"minimum": 1,
|
|
1131
|
+
"maximum": 50
|
|
1132
|
+
}
|
|
1133
|
+
},
|
|
1134
|
+
"required": [
|
|
1135
|
+
"members"
|
|
1136
|
+
]
|
|
1137
|
+
},
|
|
1138
|
+
"execution": {
|
|
1139
|
+
"type": "object",
|
|
1140
|
+
"additionalProperties": false,
|
|
1141
|
+
"properties": {
|
|
1142
|
+
"isolation": {
|
|
1143
|
+
"enum": [
|
|
1144
|
+
"worktree",
|
|
1145
|
+
"snapshot",
|
|
1146
|
+
"isolated-copy"
|
|
1147
|
+
],
|
|
1148
|
+
"default": "worktree"
|
|
1149
|
+
},
|
|
1150
|
+
"sandbox": {
|
|
1151
|
+
"enum": [
|
|
1152
|
+
"read-only",
|
|
1153
|
+
"workspace-write",
|
|
1154
|
+
"external"
|
|
1155
|
+
],
|
|
1156
|
+
"default": "workspace-write"
|
|
1157
|
+
},
|
|
1158
|
+
"approval": {
|
|
1159
|
+
"enum": [
|
|
1160
|
+
"never",
|
|
1161
|
+
"on-request"
|
|
1162
|
+
],
|
|
1163
|
+
"default": "never"
|
|
1164
|
+
},
|
|
1165
|
+
"network": {
|
|
1166
|
+
"enum": [
|
|
1167
|
+
"deny",
|
|
1168
|
+
"allowlisted"
|
|
1169
|
+
],
|
|
1170
|
+
"default": "deny"
|
|
1171
|
+
},
|
|
1172
|
+
"runnerRef": {
|
|
1173
|
+
"type": "string",
|
|
1174
|
+
"minLength": 1
|
|
1175
|
+
},
|
|
1176
|
+
"verifierRunnerRef": {
|
|
1177
|
+
"type": "string",
|
|
1178
|
+
"minLength": 1,
|
|
1179
|
+
"maxLength": 256
|
|
1180
|
+
},
|
|
1181
|
+
"transport": {
|
|
1182
|
+
"enum": [
|
|
1183
|
+
"shell",
|
|
1184
|
+
"mcp"
|
|
1185
|
+
],
|
|
1186
|
+
"default": "shell"
|
|
1187
|
+
},
|
|
1188
|
+
"receipts": {
|
|
1189
|
+
"enum": [
|
|
1190
|
+
"off",
|
|
1191
|
+
"optional",
|
|
1192
|
+
"required"
|
|
1193
|
+
],
|
|
1194
|
+
"default": "optional"
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
},
|
|
1198
|
+
"budget": {
|
|
1199
|
+
"type": "object",
|
|
1200
|
+
"additionalProperties": false,
|
|
1201
|
+
"properties": {
|
|
1202
|
+
"tokens": {
|
|
1203
|
+
"type": "integer",
|
|
1204
|
+
"minimum": 1
|
|
1205
|
+
},
|
|
1206
|
+
"costUsd": {
|
|
1207
|
+
"type": "number",
|
|
1208
|
+
"minimum": 0
|
|
1209
|
+
},
|
|
1210
|
+
"wallSeconds": {
|
|
1211
|
+
"type": "integer",
|
|
1212
|
+
"minimum": 1
|
|
1213
|
+
}
|
|
1214
|
+
}
|
|
1215
|
+
},
|
|
1216
|
+
"GatesConfig": {
|
|
1217
|
+
"type": "object",
|
|
1218
|
+
"description": "Project gate floors for decision studies (#2832). Floors are project policy: every binding must include and tighten each floor gate. Absent means unconfigured; callers that load floors get the operator default integrity-ceiling floor.",
|
|
1219
|
+
"additionalProperties": false,
|
|
1220
|
+
"properties": {
|
|
1221
|
+
"floors": {
|
|
1222
|
+
"type": "array",
|
|
1223
|
+
"description": "Floor sources. Each entry sets exactly one of 'pack' (an inline project: GatePack) or 'packRef' (a pin over a registered pack whose composed gates all become floors).",
|
|
1224
|
+
"items": {
|
|
1225
|
+
"type": "object",
|
|
1226
|
+
"properties": {
|
|
1227
|
+
"pack": {
|
|
1228
|
+
"type": "object",
|
|
1229
|
+
"description": "Inline floor pack (gates.aiwg.io/v1alpha1 GatePack with a project: id). Validated against the closed GatePack schema at load; every threshold parameter needs a default (the enforced minimum)."
|
|
1230
|
+
},
|
|
1231
|
+
"packRef": {
|
|
1232
|
+
"$ref": "#/definitions/GateFloorPackRef"
|
|
1233
|
+
}
|
|
1234
|
+
},
|
|
1235
|
+
"anyOf": [
|
|
1236
|
+
{ "required": ["pack"] },
|
|
1237
|
+
{ "required": ["packRef"] }
|
|
1238
|
+
]
|
|
1239
|
+
}
|
|
1240
|
+
},
|
|
1241
|
+
"ceilings": {
|
|
1242
|
+
"type": "object",
|
|
1243
|
+
"description": "Outcome ceilings keyed by binding metadata.id, plus '*' as the project-wide default applied to every binding. A per-study key may only tighten the '*' default; a binding declaring a looser ceiling is refused at resolution.",
|
|
1244
|
+
"additionalProperties": {
|
|
1245
|
+
"type": "string",
|
|
1246
|
+
"enum": ["PROMOTE", "HOLD", "ROLLBACK"]
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1250
|
+
},
|
|
1251
|
+
"GateFloorPackRef": {
|
|
1252
|
+
"type": "object",
|
|
1253
|
+
"description": "Pin over a registered gate pack whose composed gates all become project floors. Version and authored digest are verified at resolution.",
|
|
1254
|
+
"additionalProperties": false,
|
|
1255
|
+
"required": ["id", "version", "digest"],
|
|
1256
|
+
"properties": {
|
|
1257
|
+
"id": {
|
|
1258
|
+
"type": "string",
|
|
1259
|
+
"description": "Full namespaced pack id, e.g. aiwg:decision-engine/integrity-ceiling or project:my-floors."
|
|
1260
|
+
},
|
|
1261
|
+
"version": {
|
|
1262
|
+
"type": "string",
|
|
1263
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$",
|
|
1264
|
+
"description": "Pack version (X.Y.Z), must match the registered pack."
|
|
1265
|
+
},
|
|
1266
|
+
"digest": {
|
|
1267
|
+
"type": "string",
|
|
1268
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
1269
|
+
"description": "Authored-pack digest, must match the registered pack."
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
},
|
|
1273
|
+
"Authorization": {
|
|
1274
|
+
"type": "object",
|
|
1275
|
+
"additionalProperties": false,
|
|
1276
|
+
"required": ["version", "default_effect", "resources", "permissions", "roles", "assignments"],
|
|
1277
|
+
"properties": {
|
|
1278
|
+
"version": { "const": "1" },
|
|
1279
|
+
"default_effect": { "const": "deny" },
|
|
1280
|
+
"resources": {
|
|
1281
|
+
"type": "object",
|
|
1282
|
+
"additionalProperties": {
|
|
1283
|
+
"type": "object",
|
|
1284
|
+
"additionalProperties": false,
|
|
1285
|
+
"required": ["type", "value"],
|
|
1286
|
+
"properties": {
|
|
1287
|
+
"type": { "type": "string" },
|
|
1288
|
+
"value": { "type": "string" },
|
|
1289
|
+
"provider": { "type": "string" },
|
|
1290
|
+
"locator_env": { "type": "string", "pattern": "^[A-Z][A-Z0-9_]*$" }
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
},
|
|
1294
|
+
"permissions": {
|
|
1295
|
+
"type": "object",
|
|
1296
|
+
"additionalProperties": {
|
|
1297
|
+
"type": "object",
|
|
1298
|
+
"additionalProperties": false,
|
|
1299
|
+
"required": ["actions", "resource_types"],
|
|
1300
|
+
"properties": {
|
|
1301
|
+
"actions": { "type": "array", "minItems": 1, "items": { "type": "string" } },
|
|
1302
|
+
"resource_types": { "type": "array", "minItems": 1, "items": { "type": "string" } },
|
|
1303
|
+
"effect": { "type": "string", "enum": ["allow", "deny"] },
|
|
1304
|
+
"description": { "type": "string" }
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
},
|
|
1308
|
+
"roles": {
|
|
1309
|
+
"type": "object",
|
|
1310
|
+
"additionalProperties": {
|
|
1311
|
+
"type": "object",
|
|
1312
|
+
"additionalProperties": false,
|
|
1313
|
+
"required": ["permissions"],
|
|
1314
|
+
"properties": {
|
|
1315
|
+
"permissions": { "type": "array", "items": { "type": "string" } },
|
|
1316
|
+
"inherits": { "type": "array", "items": { "type": "string" } },
|
|
1317
|
+
"boundaries": { "type": "array", "items": { "type": "string" } },
|
|
1318
|
+
"description": { "type": "string" }
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1321
|
+
},
|
|
1322
|
+
"boundaries": {
|
|
1323
|
+
"type": "object",
|
|
1324
|
+
"additionalProperties": {
|
|
1325
|
+
"type": "object",
|
|
1326
|
+
"additionalProperties": false,
|
|
1327
|
+
"properties": {
|
|
1328
|
+
"permissions": { "type": "array", "items": { "type": "string" } },
|
|
1329
|
+
"resources": { "type": "array", "items": { "type": "string" } }
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
},
|
|
1333
|
+
"assignments": {
|
|
1334
|
+
"type": "array",
|
|
1335
|
+
"items": {
|
|
1336
|
+
"type": "object",
|
|
1337
|
+
"additionalProperties": false,
|
|
1338
|
+
"required": ["id", "subjects", "roles", "scope"],
|
|
1339
|
+
"properties": {
|
|
1340
|
+
"id": { "type": "string" },
|
|
1341
|
+
"subjects": {
|
|
1342
|
+
"type": "array", "minItems": 1,
|
|
1343
|
+
"items": {
|
|
1344
|
+
"type": "object", "additionalProperties": false, "required": ["kind", "id"],
|
|
1345
|
+
"properties": {
|
|
1346
|
+
"kind": { "type": "string", "enum": ["user", "group", "service", "workload"] },
|
|
1347
|
+
"id": { "type": "string" }
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
},
|
|
1351
|
+
"roles": { "type": "array", "minItems": 1, "items": { "type": "string" } },
|
|
1352
|
+
"scope": {
|
|
1353
|
+
"type": "object", "additionalProperties": false, "required": ["resources"],
|
|
1354
|
+
"properties": { "resources": { "type": "array", "minItems": 1, "items": { "type": "string" } } }
|
|
1355
|
+
},
|
|
1356
|
+
"conditions": { "type": "object" },
|
|
1357
|
+
"expires_at": { "type": "string", "format": "date-time" },
|
|
1358
|
+
"justification": { "type": "string" }
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
},
|
|
1362
|
+
"provider_mappings": {
|
|
1363
|
+
"type": "object",
|
|
1364
|
+
"additionalProperties": false,
|
|
1365
|
+
"properties": {
|
|
1366
|
+
"aws_iam": { "$ref": "#/definitions/ProviderPermissionMappings" },
|
|
1367
|
+
"entra_id": { "$ref": "#/definitions/ProviderPermissionMappings" },
|
|
1368
|
+
"openbao": { "$ref": "#/definitions/ProviderPermissionMappings" }
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1371
|
+
}
|
|
1372
|
+
},
|
|
1373
|
+
"ProviderPermissionMappings": {
|
|
1374
|
+
"type": "array",
|
|
1375
|
+
"items": {
|
|
1376
|
+
"type": "object",
|
|
1377
|
+
"additionalProperties": false,
|
|
1378
|
+
"required": ["stable_id"],
|
|
1379
|
+
"properties": {
|
|
1380
|
+
"stable_id": { "type": "string" },
|
|
1381
|
+
"provider_id": { "type": "string" },
|
|
1382
|
+
"principal": { "type": "string" },
|
|
1383
|
+
"scope": { "type": "string" },
|
|
1384
|
+
"actions": { "type": "array", "items": { "type": "string" } },
|
|
1385
|
+
"resources": { "type": "array", "items": { "type": "string" } },
|
|
1386
|
+
"conditions": { "type": "object" },
|
|
1387
|
+
"token_ttl": { "type": "string" },
|
|
1388
|
+
"token_max_ttl": { "type": "string" },
|
|
1389
|
+
"secret_id_ttl": { "type": "string" },
|
|
1390
|
+
"secret_id_num_uses": { "type": "integer", "minimum": 0 },
|
|
1391
|
+
"locator_env": { "type": "string", "pattern": "^[A-Z][A-Z0-9_]*$" }
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
},
|
|
1395
|
+
"Workspace": {
|
|
1396
|
+
"type": "object",
|
|
1397
|
+
"additionalProperties": false,
|
|
1398
|
+
"properties": {
|
|
1399
|
+
"name": {
|
|
1400
|
+
"type": "string",
|
|
1401
|
+
"minLength": 1,
|
|
1402
|
+
"description": "Stable workspace name. Required by runtime validation when repos is present."
|
|
1403
|
+
},
|
|
1404
|
+
"root": {
|
|
1405
|
+
"type": "string",
|
|
1406
|
+
"minLength": 1,
|
|
1407
|
+
"description": "Base directory for relative member paths. Relative values resolve from the repo containing this config; defaults to that repo."
|
|
1408
|
+
},
|
|
1409
|
+
"member_of": {
|
|
1410
|
+
"type": "string",
|
|
1411
|
+
"minLength": 1,
|
|
1412
|
+
"description": "Optional member-to-workspace back-reference. External repos can use this to discover workspace authorization when invoked directly; must not coexist with repos."
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
},
|
|
1416
|
+
"WorkspaceRepo": {
|
|
1417
|
+
"type": "object",
|
|
1418
|
+
"additionalProperties": false,
|
|
1419
|
+
"required": ["name", "path", "allowed"],
|
|
1420
|
+
"properties": {
|
|
1421
|
+
"name": {
|
|
1422
|
+
"type": "string",
|
|
1423
|
+
"minLength": 1,
|
|
1424
|
+
"description": "Unique member name."
|
|
1425
|
+
},
|
|
1426
|
+
"path": {
|
|
1427
|
+
"type": "string",
|
|
1428
|
+
"minLength": 1,
|
|
1429
|
+
"description": "Path relative to workspace.root, or an absolute system path."
|
|
1430
|
+
},
|
|
1431
|
+
"allowed": {
|
|
1432
|
+
"type": "array",
|
|
1433
|
+
"minItems": 1,
|
|
1434
|
+
"uniqueItems": true,
|
|
1435
|
+
"description": "Explicit member capabilities. Unlisted actions and unlisted paths are denied regardless of filesystem writability.",
|
|
1436
|
+
"items": {
|
|
1437
|
+
"type": "string",
|
|
1438
|
+
"enum": ["read", "write", "commit", "push", "issue-comment", "service-action", "destructive"]
|
|
1439
|
+
}
|
|
1440
|
+
},
|
|
1441
|
+
"provider": {
|
|
1442
|
+
"type": "string",
|
|
1443
|
+
"enum": ["gitea", "github", "gitlab"],
|
|
1444
|
+
"description": "Optional hint for self-hosted domains that cannot be classified from their remote URL. Detectable remotes take precedence."
|
|
1445
|
+
},
|
|
1446
|
+
"notes": {
|
|
1447
|
+
"type": "string",
|
|
1448
|
+
"description": "Human-readable member authorization note."
|
|
1449
|
+
}
|
|
1450
|
+
}
|
|
1451
|
+
},
|
|
1452
|
+
"ExternalLink": {
|
|
1453
|
+
"type": "object",
|
|
1454
|
+
"description": "A named public HTTP(S) resource. Credentials embedded in URLs are rejected by runtime validation.",
|
|
1455
|
+
"additionalProperties": false,
|
|
1456
|
+
"required": ["label", "url"],
|
|
1457
|
+
"properties": {
|
|
1458
|
+
"label": {
|
|
1459
|
+
"type": "string",
|
|
1460
|
+
"minLength": 1,
|
|
1461
|
+
"maxLength": 200,
|
|
1462
|
+
"description": "Human-readable link text."
|
|
1463
|
+
},
|
|
1464
|
+
"url": {
|
|
1465
|
+
"type": "string",
|
|
1466
|
+
"format": "uri",
|
|
1467
|
+
"pattern": "^https?://",
|
|
1468
|
+
"description": "Absolute public HTTP(S) URL without embedded credentials."
|
|
1469
|
+
},
|
|
1470
|
+
"description": {
|
|
1471
|
+
"type": "string",
|
|
1472
|
+
"minLength": 1,
|
|
1473
|
+
"maxLength": 500,
|
|
1474
|
+
"description": "Optional explanation of when or why to use this resource."
|
|
1475
|
+
},
|
|
1476
|
+
"category": {
|
|
1477
|
+
"type": "string",
|
|
1478
|
+
"minLength": 1,
|
|
1479
|
+
"maxLength": 500,
|
|
1480
|
+
"description": "Optional project-defined grouping, such as security, status, or docs."
|
|
1481
|
+
},
|
|
1482
|
+
"audience": {
|
|
1483
|
+
"type": "string",
|
|
1484
|
+
"minLength": 1,
|
|
1485
|
+
"maxLength": 500,
|
|
1486
|
+
"description": "Optional intended audience, such as contributors or maintainers."
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
},
|
|
1490
|
+
"IssueLabelDefinition": {
|
|
1491
|
+
"type": "object",
|
|
1492
|
+
"description": "Provider-neutral workflow semantics for one tracker-native label.",
|
|
1493
|
+
"additionalProperties": false,
|
|
1494
|
+
"required": ["name", "category", "description", "requires_human", "blocks_automation"],
|
|
1495
|
+
"allOf": [
|
|
1496
|
+
{
|
|
1497
|
+
"if": {
|
|
1498
|
+
"properties": { "blocks_automation": { "const": true } },
|
|
1499
|
+
"required": ["blocks_automation"]
|
|
1500
|
+
},
|
|
1501
|
+
"then": { "required": ["resume_when"] }
|
|
1502
|
+
}
|
|
1503
|
+
],
|
|
1504
|
+
"properties": {
|
|
1505
|
+
"name": {
|
|
1506
|
+
"type": "string",
|
|
1507
|
+
"minLength": 1,
|
|
1508
|
+
"description": "Default tracker-native label name."
|
|
1509
|
+
},
|
|
1510
|
+
"provider_names": {
|
|
1511
|
+
"type": "object",
|
|
1512
|
+
"description": "Optional provider-specific strings that preserve this semantic role.",
|
|
1513
|
+
"additionalProperties": false,
|
|
1514
|
+
"properties": {
|
|
1515
|
+
"gitea": { "type": "string", "minLength": 1 },
|
|
1516
|
+
"github": { "type": "string", "minLength": 1 },
|
|
1517
|
+
"local": { "type": "string", "minLength": 1 }
|
|
1518
|
+
}
|
|
1519
|
+
},
|
|
1520
|
+
"category": {
|
|
1521
|
+
"type": "string",
|
|
1522
|
+
"enum": ["type", "area", "priority", "lifecycle", "blocked-reason", "review-approval", "ownership", "automation-eligibility", "human-interaction"],
|
|
1523
|
+
"description": "Informative role family used for search, audit, batching, and work selection."
|
|
1524
|
+
},
|
|
1525
|
+
"description": {
|
|
1526
|
+
"type": "string",
|
|
1527
|
+
"minLength": 1,
|
|
1528
|
+
"description": "Purpose and application condition."
|
|
1529
|
+
},
|
|
1530
|
+
"requires_human": {
|
|
1531
|
+
"type": "boolean",
|
|
1532
|
+
"description": "Whether satisfying this state requires human action."
|
|
1533
|
+
},
|
|
1534
|
+
"blocks_automation": {
|
|
1535
|
+
"type": "boolean",
|
|
1536
|
+
"description": "Whether autonomous issue work must pause while this label applies."
|
|
1537
|
+
},
|
|
1538
|
+
"resume_when": {
|
|
1539
|
+
"type": "string",
|
|
1540
|
+
"minLength": 1,
|
|
1541
|
+
"description": "Condition that permits removal or transition of a transient label; required by runtime validation when blocks_automation is true."
|
|
1542
|
+
},
|
|
1543
|
+
"transition_to": {
|
|
1544
|
+
"type": "string",
|
|
1545
|
+
"minLength": 1,
|
|
1546
|
+
"description": "Optional semantic role to apply after resume_when is satisfied."
|
|
1547
|
+
}
|
|
1548
|
+
}
|
|
1549
|
+
},
|
|
1550
|
+
"TrackerActor": {
|
|
1551
|
+
"type": "object",
|
|
1552
|
+
"additionalProperties": false,
|
|
1553
|
+
"properties": {
|
|
1554
|
+
"login": {
|
|
1555
|
+
"type": "string",
|
|
1556
|
+
"description": "Forge login that should author delivery writes."
|
|
1557
|
+
},
|
|
1558
|
+
"via": {
|
|
1559
|
+
"type": "string",
|
|
1560
|
+
"enum": ["tea", "gh", "mcp", "api"],
|
|
1561
|
+
"description": "Tooling route to use for tracker writes."
|
|
1562
|
+
},
|
|
1563
|
+
"forbid_actors": {
|
|
1564
|
+
"type": "array",
|
|
1565
|
+
"items": { "type": "string" },
|
|
1566
|
+
"description": "Forge logins that must not author delivery mutations."
|
|
1567
|
+
}
|
|
1568
|
+
}
|
|
1569
|
+
},
|
|
1570
|
+
"RemoteTransport": {
|
|
1571
|
+
"type": "object",
|
|
1572
|
+
"additionalProperties": false,
|
|
1573
|
+
"properties": {
|
|
1574
|
+
"login": {
|
|
1575
|
+
"type": "string",
|
|
1576
|
+
"description": "Forge login expected to authenticate git pushes."
|
|
1577
|
+
},
|
|
1578
|
+
"protocol": {
|
|
1579
|
+
"type": "string",
|
|
1580
|
+
"enum": ["ssh", "https"],
|
|
1581
|
+
"description": "Transport used by the primary remote."
|
|
1582
|
+
},
|
|
1583
|
+
"helper": {
|
|
1584
|
+
"type": "string",
|
|
1585
|
+
"description": "Project-relative command used for authenticated push/check operations."
|
|
1586
|
+
},
|
|
1587
|
+
"key_fingerprint": {
|
|
1588
|
+
"type": "string",
|
|
1589
|
+
"description": "Public SSH key fingerprint expected by the helper."
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
},
|
|
1593
|
+
"CommitterIdentity": {
|
|
1594
|
+
"type": "object",
|
|
1595
|
+
"additionalProperties": false,
|
|
1596
|
+
"properties": {
|
|
1597
|
+
"name": {
|
|
1598
|
+
"type": "string",
|
|
1599
|
+
"description": "Git committer name."
|
|
1600
|
+
},
|
|
1601
|
+
"email": {
|
|
1602
|
+
"type": "string",
|
|
1603
|
+
"description": "Git committer email."
|
|
1604
|
+
}
|
|
1605
|
+
}
|
|
1606
|
+
},
|
|
1607
|
+
"SigningConfig": {
|
|
1608
|
+
"type": "object",
|
|
1609
|
+
"additionalProperties": false,
|
|
1610
|
+
"properties": {
|
|
1611
|
+
"format": {
|
|
1612
|
+
"type": "string",
|
|
1613
|
+
"enum": ["openpgp", "ssh", "x509"],
|
|
1614
|
+
"description": "Signing key format."
|
|
1615
|
+
},
|
|
1616
|
+
"key": {
|
|
1617
|
+
"type": "string",
|
|
1618
|
+
"description": "Signing key id."
|
|
1619
|
+
},
|
|
1620
|
+
"key_file": {
|
|
1621
|
+
"type": "string",
|
|
1622
|
+
"description": "Path to signing key material when not in the default keyring."
|
|
1623
|
+
},
|
|
1624
|
+
"program": {
|
|
1625
|
+
"type": "string",
|
|
1626
|
+
"description": "Signing program, such as gpg, gpg2, ssh-keygen, or a custom path."
|
|
1627
|
+
},
|
|
1628
|
+
"enforce": {
|
|
1629
|
+
"type": "string",
|
|
1630
|
+
"enum": ["commits", "tags", "all"],
|
|
1631
|
+
"description": "Which delivery artifacts require signing."
|
|
1632
|
+
}
|
|
1633
|
+
}
|
|
1634
|
+
},
|
|
1635
|
+
"IndexGraphDef": {
|
|
1636
|
+
"type": "object",
|
|
1637
|
+
"description": "A JSON node/edge index graph (mirrors GraphConfig in src/artifacts/types.ts).",
|
|
1638
|
+
"additionalProperties": false,
|
|
1639
|
+
"required": ["scanDirs"],
|
|
1640
|
+
"properties": {
|
|
1641
|
+
"type": { "type": "string", "description": "Graph type identifier (defaults to the graph's key name)." },
|
|
1642
|
+
"scanDirs": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "Directories to scan, relative to project root (required)." },
|
|
1643
|
+
"extensions": { "type": "array", "items": { "type": "string" }, "description": "File extensions to index. Default: ['.md', '.yaml', '.json']." },
|
|
1644
|
+
"shared": { "type": "boolean", "description": "Whether the graph is shared across projects. Default false." },
|
|
1645
|
+
"defaultBuild": { "type": "boolean", "description": "Include in `aiwg index build` with no --graph. Default true." },
|
|
1646
|
+
"nodeStrategy": { "type": "string", "enum": ["default", "filename-metadata"], "description": "Node creation strategy." },
|
|
1647
|
+
"filenamePattern": { "type": "string", "description": "Named-capture regex for the filename-metadata strategy." },
|
|
1648
|
+
"graphBackend": { "type": "string", "enum": ["json", "graphology", "sqlite"], "description": "Graph storage backend. Default 'json'." },
|
|
1649
|
+
"description": { "type": "string", "description": "Human-facing note (metadata; not consumed by the builder)." },
|
|
1650
|
+
"edgeExtraction": {
|
|
1651
|
+
"type": "object",
|
|
1652
|
+
"additionalProperties": false,
|
|
1653
|
+
"required": ["parser", "edges"],
|
|
1654
|
+
"properties": {
|
|
1655
|
+
"parser": { "type": "string", "enum": ["citation-sidecar"], "description": "Edge-extraction parser." },
|
|
1656
|
+
"edges": {
|
|
1657
|
+
"type": "array",
|
|
1658
|
+
"items": {
|
|
1659
|
+
"type": "object",
|
|
1660
|
+
"additionalProperties": false,
|
|
1661
|
+
"required": ["type", "source", "target"],
|
|
1662
|
+
"properties": {
|
|
1663
|
+
"type": { "type": "string" },
|
|
1664
|
+
"source": { "type": "string" },
|
|
1665
|
+
"target": { "type": "string" },
|
|
1666
|
+
"skipEmpty": { "type": "boolean" }
|
|
1667
|
+
}
|
|
1668
|
+
}
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
},
|
|
1672
|
+
"metadataSupplements": {
|
|
1673
|
+
"type": "array",
|
|
1674
|
+
"items": {
|
|
1675
|
+
"type": "object",
|
|
1676
|
+
"additionalProperties": false,
|
|
1677
|
+
"required": ["scanDir", "matchOn", "nodeKey", "mergeFields"],
|
|
1678
|
+
"properties": {
|
|
1679
|
+
"scanDir": { "type": "string" },
|
|
1680
|
+
"matchOn": { "type": "string" },
|
|
1681
|
+
"nodeKey": { "type": "string" },
|
|
1682
|
+
"mergeFields": { "type": "array", "items": { "type": "string" } }
|
|
1683
|
+
}
|
|
1684
|
+
}
|
|
1685
|
+
},
|
|
1686
|
+
"embedding": {
|
|
1687
|
+
"type": "object",
|
|
1688
|
+
"additionalProperties": false,
|
|
1689
|
+
"required": ["enabled"],
|
|
1690
|
+
"properties": {
|
|
1691
|
+
"enabled": { "type": "boolean" },
|
|
1692
|
+
"model": { "type": "string" },
|
|
1693
|
+
"topK": { "type": "integer", "minimum": 1 },
|
|
1694
|
+
"rebuildOn": { "type": "string", "enum": ["content-change", "always", "never"] }
|
|
1695
|
+
}
|
|
1696
|
+
}
|
|
1697
|
+
}
|
|
1698
|
+
},
|
|
1699
|
+
"IndexBuiltinGraphOverride": {
|
|
1700
|
+
"type": "object",
|
|
1701
|
+
"description": "Operator-controlled scan fields for an immutable built-in graph. Present fields replace the detected/default values.",
|
|
1702
|
+
"additionalProperties": false,
|
|
1703
|
+
"properties": {
|
|
1704
|
+
"scanDirs": { "type": "array", "items": { "type": "string" }, "minItems": 1 },
|
|
1705
|
+
"extensions": { "type": "array", "items": { "type": "string" }, "minItems": 1 }
|
|
1706
|
+
}
|
|
1707
|
+
},
|
|
1708
|
+
"IndexMarkdownIndices": {
|
|
1709
|
+
"type": "object",
|
|
1710
|
+
"description": "Markdown-view manifest rendered by the corpus-index-build skill (build.py). The builder consumes each manifest entry's `name` (renderer selector) and optional `output`.",
|
|
1711
|
+
"additionalProperties": false,
|
|
1712
|
+
"required": ["manifest"],
|
|
1713
|
+
"properties": {
|
|
1714
|
+
"scanDirs": { "type": "array", "items": { "type": "string" } },
|
|
1715
|
+
"extensions": { "type": "array", "items": { "type": "string" } },
|
|
1716
|
+
"defaultBuild": { "type": "boolean" },
|
|
1717
|
+
"manifest": {
|
|
1718
|
+
"type": "array",
|
|
1719
|
+
"description": "Ordered list of markdown views to render.",
|
|
1720
|
+
"items": {
|
|
1721
|
+
"type": "object",
|
|
1722
|
+
"additionalProperties": false,
|
|
1723
|
+
"required": ["name"],
|
|
1724
|
+
"properties": {
|
|
1725
|
+
"name": { "type": "string", "description": "Renderer selector (by-topic, by-year, authors, by-venue, by-method, by-model-size, training-pipeline, citation-network, by-author, by-org, by-bridge, unprofiled-hubs)." },
|
|
1726
|
+
"output": { "type": "string", "description": "Output path. Default indices/<name>.md." },
|
|
1727
|
+
"description": { "type": "string", "description": "Human-facing note (metadata)." },
|
|
1728
|
+
"source": { "type": "string", "description": "Human-facing note (metadata)." }
|
|
1729
|
+
}
|
|
1730
|
+
}
|
|
1731
|
+
}
|
|
1732
|
+
}
|
|
1733
|
+
},
|
|
1734
|
+
"SecondaryRemote": {
|
|
1735
|
+
"type": "object",
|
|
1736
|
+
"description": "A non-primary git remote (mirror, upstream, publishing target)",
|
|
1737
|
+
"additionalProperties": false,
|
|
1738
|
+
"required": ["name"],
|
|
1739
|
+
"properties": {
|
|
1740
|
+
"name": {
|
|
1741
|
+
"type": "string",
|
|
1742
|
+
"description": "Must match a name from `git remote`"
|
|
1743
|
+
},
|
|
1744
|
+
"purpose": {
|
|
1745
|
+
"type": "string",
|
|
1746
|
+
"description": "Free-form tag (mirror | upstream | publish | replica)"
|
|
1747
|
+
},
|
|
1748
|
+
"push_on_release": {
|
|
1749
|
+
"type": "boolean",
|
|
1750
|
+
"description": "Hint to release workflows to push tags here on stable cuts"
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
},
|
|
1754
|
+
"ThreatAssessment": {
|
|
1755
|
+
"type": "object",
|
|
1756
|
+
"description": "Versioned, surface-aware forge-content threat-assessment policy. Missing configuration resolves to aiwg:balanced compatibility behavior.",
|
|
1757
|
+
"additionalProperties": false,
|
|
1758
|
+
"properties": {
|
|
1759
|
+
"schemaVersion": { "type": "string", "const": "1" },
|
|
1760
|
+
"mode": { "$ref": "#/definitions/ThreatAssessmentMode" },
|
|
1761
|
+
"defaultProfile": { "type": "string", "minLength": 1 },
|
|
1762
|
+
"surfaces": {
|
|
1763
|
+
"type": "object",
|
|
1764
|
+
"additionalProperties": false,
|
|
1765
|
+
"properties": {
|
|
1766
|
+
"issue-title": { "$ref": "#/definitions/ThreatSurfacePolicy" },
|
|
1767
|
+
"issue-body": { "$ref": "#/definitions/ThreatSurfacePolicy" },
|
|
1768
|
+
"issue-comment": { "$ref": "#/definitions/ThreatSurfacePolicy" },
|
|
1769
|
+
"pull-request-title": { "$ref": "#/definitions/ThreatSurfacePolicy" },
|
|
1770
|
+
"pull-request-body": { "$ref": "#/definitions/ThreatSurfacePolicy" },
|
|
1771
|
+
"pull-request-diff-summary": { "$ref": "#/definitions/ThreatSurfacePolicy" },
|
|
1772
|
+
"review-comment": { "$ref": "#/definitions/ThreatSurfacePolicy" },
|
|
1773
|
+
"release-note": { "$ref": "#/definitions/ThreatSurfacePolicy" },
|
|
1774
|
+
"handoff": { "$ref": "#/definitions/ThreatSurfacePolicy" },
|
|
1775
|
+
"outbound-maintainer-comment": { "$ref": "#/definitions/ThreatSurfacePolicy" }
|
|
1776
|
+
}
|
|
1777
|
+
},
|
|
1778
|
+
"profiles": {
|
|
1779
|
+
"type": "object",
|
|
1780
|
+
"propertyNames": { "pattern": "^(?!aiwg:)(?!trusted$)(?!audit$)(?!balanced$)(?!strict$)(?!high-assurance$)[a-z][a-z0-9-]*$" },
|
|
1781
|
+
"additionalProperties": { "$ref": "#/definitions/ThreatProfile" }
|
|
1782
|
+
},
|
|
1783
|
+
"rulePacks": {
|
|
1784
|
+
"type": "object",
|
|
1785
|
+
"propertyNames": { "pattern": "^(?!aiwg:)[a-z][a-z0-9-]*$" },
|
|
1786
|
+
"additionalProperties": { "$ref": "#/definitions/ThreatRulePack" }
|
|
1787
|
+
},
|
|
1788
|
+
"statements": {
|
|
1789
|
+
"type": "array",
|
|
1790
|
+
"items": { "$ref": "#/definitions/ThreatStatement" }
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1793
|
+
},
|
|
1794
|
+
"ThreatAssessmentMode": {
|
|
1795
|
+
"type": "string",
|
|
1796
|
+
"enum": ["off", "audit", "enforce"]
|
|
1797
|
+
},
|
|
1798
|
+
"ThreatSeverity": {
|
|
1799
|
+
"type": "string",
|
|
1800
|
+
"enum": ["informational", "low", "moderate", "high", "critical"]
|
|
1801
|
+
},
|
|
1802
|
+
"ThreatSurfacePolicy": {
|
|
1803
|
+
"type": "object",
|
|
1804
|
+
"additionalProperties": false,
|
|
1805
|
+
"properties": {
|
|
1806
|
+
"mode": { "$ref": "#/definitions/ThreatAssessmentMode" },
|
|
1807
|
+
"profile": { "type": "string", "minLength": 1 }
|
|
1808
|
+
}
|
|
1809
|
+
},
|
|
1810
|
+
"ThreatThresholds": {
|
|
1811
|
+
"type": "object",
|
|
1812
|
+
"additionalProperties": false,
|
|
1813
|
+
"properties": {
|
|
1814
|
+
"flag": { "$ref": "#/definitions/ThreatSeverity" },
|
|
1815
|
+
"requireAuthorization": { "$ref": "#/definitions/ThreatSeverity" },
|
|
1816
|
+
"reject": { "$ref": "#/definitions/ThreatSeverity" }
|
|
1817
|
+
}
|
|
1818
|
+
},
|
|
1819
|
+
"ThreatProfile": {
|
|
1820
|
+
"type": "object",
|
|
1821
|
+
"additionalProperties": false,
|
|
1822
|
+
"properties": {
|
|
1823
|
+
"version": { "type": "string", "minLength": 1 },
|
|
1824
|
+
"extends": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
1825
|
+
"mode": { "$ref": "#/definitions/ThreatAssessmentMode" },
|
|
1826
|
+
"description": { "type": "string" },
|
|
1827
|
+
"thresholds": { "$ref": "#/definitions/ThreatThresholds" },
|
|
1828
|
+
"ruleSets": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
1829
|
+
"statements": { "type": "array", "items": { "$ref": "#/definitions/ThreatStatement" } }
|
|
1830
|
+
}
|
|
1831
|
+
},
|
|
1832
|
+
"ThreatRulePack": {
|
|
1833
|
+
"type": "object",
|
|
1834
|
+
"additionalProperties": false,
|
|
1835
|
+
"required": ["version", "rules"],
|
|
1836
|
+
"properties": {
|
|
1837
|
+
"version": { "type": "string", "minLength": 1 },
|
|
1838
|
+
"description": { "type": "string" },
|
|
1839
|
+
"rules": {
|
|
1840
|
+
"type": "array",
|
|
1841
|
+
"minItems": 1,
|
|
1842
|
+
"items": { "$ref": "#/definitions/ThreatRule" }
|
|
1843
|
+
}
|
|
1844
|
+
}
|
|
1845
|
+
},
|
|
1846
|
+
"ThreatRule": {
|
|
1847
|
+
"type": "object",
|
|
1848
|
+
"additionalProperties": false,
|
|
1849
|
+
"required": ["id", "severity", "patterns"],
|
|
1850
|
+
"properties": {
|
|
1851
|
+
"id": { "type": "string", "pattern": "^[a-z][a-z0-9-]*$" },
|
|
1852
|
+
"severity": { "$ref": "#/definitions/ThreatSeverity" },
|
|
1853
|
+
"likelihood": { "type": "integer", "minimum": 1, "maximum": 5 },
|
|
1854
|
+
"impact": { "type": "integer", "minimum": 1, "maximum": 5 },
|
|
1855
|
+
"taxonomy": { "type": "array", "items": { "type": "string" } },
|
|
1856
|
+
"patterns": {
|
|
1857
|
+
"type": "array",
|
|
1858
|
+
"minItems": 1,
|
|
1859
|
+
"items": { "type": "string", "minLength": 1, "maxLength": 500 }
|
|
1860
|
+
}
|
|
1861
|
+
}
|
|
1862
|
+
},
|
|
1863
|
+
"ThreatStatement": {
|
|
1864
|
+
"type": "object",
|
|
1865
|
+
"additionalProperties": false,
|
|
1866
|
+
"required": ["id", "effect", "reason"],
|
|
1867
|
+
"allOf": [
|
|
1868
|
+
{
|
|
1869
|
+
"if": { "properties": { "effect": { "const": "suppress" } } },
|
|
1870
|
+
"then": {
|
|
1871
|
+
"required": ["signals", "when", "riskAcceptance"],
|
|
1872
|
+
"properties": {
|
|
1873
|
+
"signals": { "minItems": 1 },
|
|
1874
|
+
"when": {
|
|
1875
|
+
"anyOf": [
|
|
1876
|
+
{ "required": ["surface"] },
|
|
1877
|
+
{ "required": ["semanticContext"] },
|
|
1878
|
+
{ "required": ["requestedAction"] }
|
|
1879
|
+
]
|
|
1880
|
+
}
|
|
1881
|
+
}
|
|
1882
|
+
}
|
|
1883
|
+
},
|
|
1884
|
+
{
|
|
1885
|
+
"if": { "properties": { "effect": { "const": "set-severity" } } },
|
|
1886
|
+
"then": { "required": ["severity"] }
|
|
1887
|
+
}
|
|
1888
|
+
],
|
|
1889
|
+
"properties": {
|
|
1890
|
+
"id": { "type": "string", "pattern": "^[a-z][a-z0-9-]*$" },
|
|
1891
|
+
"effect": { "type": "string", "enum": ["suppress", "set-severity"] },
|
|
1892
|
+
"signals": { "type": "array", "items": { "type": "string" } },
|
|
1893
|
+
"severity": { "$ref": "#/definitions/ThreatSeverity" },
|
|
1894
|
+
"reason": { "type": "string", "minLength": 1 },
|
|
1895
|
+
"when": {
|
|
1896
|
+
"type": "object",
|
|
1897
|
+
"additionalProperties": false,
|
|
1898
|
+
"properties": {
|
|
1899
|
+
"surface": {
|
|
1900
|
+
"type": "array",
|
|
1901
|
+
"items": {
|
|
1902
|
+
"type": "string",
|
|
1903
|
+
"enum": ["issue-title", "issue-body", "issue-comment", "pull-request-title", "pull-request-body", "pull-request-diff-summary", "review-comment", "release-note", "handoff", "outbound-maintainer-comment"]
|
|
1904
|
+
}
|
|
1905
|
+
},
|
|
1906
|
+
"semanticContext": {
|
|
1907
|
+
"type": "array",
|
|
1908
|
+
"items": { "type": "string", "enum": ["requested", "negative", "quoted", "documentation"] }
|
|
1909
|
+
},
|
|
1910
|
+
"requestedAction": { "type": "array", "items": { "type": "string" } }
|
|
1911
|
+
}
|
|
1912
|
+
},
|
|
1913
|
+
"riskAcceptance": {
|
|
1914
|
+
"type": "object",
|
|
1915
|
+
"additionalProperties": false,
|
|
1916
|
+
"required": ["acceptedBy", "rationale"],
|
|
1917
|
+
"properties": {
|
|
1918
|
+
"acceptedBy": { "type": "string", "minLength": 1 },
|
|
1919
|
+
"rationale": { "type": "string", "minLength": 1 },
|
|
1920
|
+
"expiresAt": { "type": "string", "format": "date-time" }
|
|
1921
|
+
}
|
|
1922
|
+
}
|
|
1923
|
+
}
|
|
1924
|
+
},
|
|
1925
|
+
"InstalledFramework": {
|
|
1926
|
+
"type": "object",
|
|
1927
|
+
"description": "Metadata for an installed AIWG framework",
|
|
1928
|
+
"properties": {
|
|
1929
|
+
"version": {
|
|
1930
|
+
"type": "string",
|
|
1931
|
+
"description": "Installed framework version (CalVer: YYYY.M.PATCH)"
|
|
1932
|
+
},
|
|
1933
|
+
"providers": {
|
|
1934
|
+
"type": "array",
|
|
1935
|
+
"description": "Providers this framework was deployed to",
|
|
1936
|
+
"items": {
|
|
1937
|
+
"type": "string"
|
|
1938
|
+
}
|
|
1939
|
+
},
|
|
1940
|
+
"installedAt": {
|
|
1941
|
+
"type": "string",
|
|
1942
|
+
"format": "date-time",
|
|
1943
|
+
"description": "ISO 8601 timestamp of installation"
|
|
1944
|
+
},
|
|
1945
|
+
"source": {
|
|
1946
|
+
"type": "string",
|
|
1947
|
+
"description": "Source registry or path"
|
|
1948
|
+
}
|
|
1949
|
+
},
|
|
1950
|
+
"additionalProperties": false
|
|
1951
|
+
}
|
|
1952
|
+
}
|
|
1953
|
+
}
|