@jterrats/open-orchestra 1.0.14 → 1.0.16

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 (238) hide show
  1. package/AGENTS.md +7 -4
  2. package/CHANGELOG.md +26 -0
  3. package/CLAUDE.md +2 -2
  4. package/dist/automation-evidence.d.ts +2 -23
  5. package/dist/automation-evidence.js +1 -218
  6. package/dist/automation-evidence.js.map +1 -1
  7. package/dist/command-manifest.js +12 -3
  8. package/dist/command-manifest.js.map +1 -1
  9. package/dist/command-routes-integrations.js +2 -1
  10. package/dist/command-routes-integrations.js.map +1 -1
  11. package/dist/command-routes.js +11 -1
  12. package/dist/command-routes.js.map +1 -1
  13. package/dist/commands.d.ts +5 -3
  14. package/dist/commands.js +9 -3
  15. package/dist/commands.js.map +1 -1
  16. package/dist/context-index-commands.d.ts +2 -0
  17. package/dist/context-index-commands.js +51 -1
  18. package/dist/context-index-commands.js.map +1 -1
  19. package/dist/context-index-service.d.ts +2 -1
  20. package/dist/context-index-service.js +3 -1
  21. package/dist/context-index-service.js.map +1 -1
  22. package/dist/context-index-signals.d.ts +2 -0
  23. package/dist/context-index-signals.js +102 -0
  24. package/dist/context-index-signals.js.map +1 -0
  25. package/dist/context-pack-service.d.ts +14 -0
  26. package/dist/context-pack-service.js +153 -0
  27. package/dist/context-pack-service.js.map +1 -0
  28. package/dist/context-search-service.d.ts +10 -0
  29. package/dist/context-search-service.js +142 -0
  30. package/dist/context-search-service.js.map +1 -0
  31. package/dist/context-vault-commands.d.ts +5 -0
  32. package/dist/context-vault-commands.js +79 -0
  33. package/dist/context-vault-commands.js.map +1 -0
  34. package/dist/context-vault-file-metadata.d.ts +3 -0
  35. package/dist/context-vault-file-metadata.js +25 -0
  36. package/dist/context-vault-file-metadata.js.map +1 -0
  37. package/dist/context-vault-model.d.ts +79 -0
  38. package/dist/context-vault-model.js +2 -0
  39. package/dist/context-vault-model.js.map +1 -0
  40. package/dist/context-vault-redaction.d.ts +5 -0
  41. package/dist/context-vault-redaction.js +22 -0
  42. package/dist/context-vault-redaction.js.map +1 -0
  43. package/dist/context-vault-renderer.d.ts +3 -0
  44. package/dist/context-vault-renderer.js +30 -0
  45. package/dist/context-vault-renderer.js.map +1 -0
  46. package/dist/context-vault-service.d.ts +17 -0
  47. package/dist/context-vault-service.js +183 -0
  48. package/dist/context-vault-service.js.map +1 -0
  49. package/dist/delivery-commands.d.ts +1 -0
  50. package/dist/delivery-commands.js +19 -1
  51. package/dist/delivery-commands.js.map +1 -1
  52. package/dist/diagram-schema.d.ts +2 -0
  53. package/dist/diagram-schema.js +148 -0
  54. package/dist/diagram-schema.js.map +1 -0
  55. package/dist/diagrams/geometry.d.ts +12 -0
  56. package/dist/diagrams/geometry.js +69 -0
  57. package/dist/diagrams/geometry.js.map +1 -0
  58. package/dist/diagrams/iconify.d.ts +22 -0
  59. package/dist/diagrams/iconify.js +42 -0
  60. package/dist/diagrams/iconify.js.map +1 -0
  61. package/dist/diagrams/index.d.ts +8 -0
  62. package/dist/diagrams/index.js +8 -0
  63. package/dist/diagrams/index.js.map +1 -0
  64. package/dist/diagrams/layout.d.ts +2 -0
  65. package/dist/diagrams/layout.js +142 -0
  66. package/dist/diagrams/layout.js.map +1 -0
  67. package/dist/diagrams/model.d.ts +94 -0
  68. package/dist/diagrams/model.js +2 -0
  69. package/dist/diagrams/model.js.map +1 -0
  70. package/dist/diagrams/pipeline.d.ts +11 -0
  71. package/dist/diagrams/pipeline.js +92 -0
  72. package/dist/diagrams/pipeline.js.map +1 -0
  73. package/dist/diagrams/render-svg.d.ts +7 -0
  74. package/dist/diagrams/render-svg.js +66 -0
  75. package/dist/diagrams/render-svg.js.map +1 -0
  76. package/dist/diagrams/validate.d.ts +5 -0
  77. package/dist/diagrams/validate.js +120 -0
  78. package/dist/diagrams/validate.js.map +1 -0
  79. package/dist/evidence-compaction-model.d.ts +62 -0
  80. package/dist/evidence-compaction-model.js +2 -0
  81. package/dist/evidence-compaction-model.js.map +1 -0
  82. package/dist/evidence-compaction-renderer.d.ts +2 -0
  83. package/dist/evidence-compaction-renderer.js +35 -0
  84. package/dist/evidence-compaction-renderer.js.map +1 -0
  85. package/dist/evidence-compaction-service.d.ts +11 -0
  86. package/dist/evidence-compaction-service.js +94 -0
  87. package/dist/evidence-compaction-service.js.map +1 -0
  88. package/dist/evidence-compaction-summary.d.ts +4 -0
  89. package/dist/evidence-compaction-summary.js +160 -0
  90. package/dist/evidence-compaction-summary.js.map +1 -0
  91. package/dist/handoff-acceptance-metadata.d.ts +6 -0
  92. package/dist/handoff-acceptance-metadata.js +8 -0
  93. package/dist/handoff-acceptance-metadata.js.map +1 -0
  94. package/dist/knowledge-base.js +7 -1
  95. package/dist/knowledge-base.js.map +1 -1
  96. package/dist/model-providers.d.ts +3 -1
  97. package/dist/model-providers.js +68 -11
  98. package/dist/model-providers.js.map +1 -1
  99. package/dist/performance-benchmark.d.ts +45 -0
  100. package/dist/performance-benchmark.js +134 -0
  101. package/dist/performance-benchmark.js.map +1 -0
  102. package/dist/phase-executor.js +24 -6
  103. package/dist/phase-executor.js.map +1 -1
  104. package/dist/planning-commands.js +23 -1
  105. package/dist/planning-commands.js.map +1 -1
  106. package/dist/provider-agent-wrapper.d.ts +12 -0
  107. package/dist/provider-agent-wrapper.js +264 -0
  108. package/dist/provider-agent-wrapper.js.map +1 -0
  109. package/dist/qa-commands.d.ts +1 -0
  110. package/dist/qa-commands.js +26 -0
  111. package/dist/qa-commands.js.map +1 -1
  112. package/dist/qa-evidence-surface-rules.d.ts +5 -0
  113. package/dist/qa-evidence-surface-rules.js +238 -0
  114. package/dist/qa-evidence-surface-rules.js.map +1 -0
  115. package/dist/qa-evidence-validation.d.ts +23 -0
  116. package/dist/qa-evidence-validation.js +78 -0
  117. package/dist/qa-evidence-validation.js.map +1 -0
  118. package/dist/quality-contracts.js +21 -6
  119. package/dist/quality-contracts.js.map +1 -1
  120. package/dist/release-candidate.d.ts +4 -0
  121. package/dist/release-candidate.js +54 -0
  122. package/dist/release-candidate.js.map +1 -1
  123. package/dist/release-commands.js +8 -0
  124. package/dist/release-commands.js.map +1 -1
  125. package/dist/release-readiness.d.ts +8 -0
  126. package/dist/release-readiness.js +59 -4
  127. package/dist/release-readiness.js.map +1 -1
  128. package/dist/release-reviewer-selection.d.ts +13 -0
  129. package/dist/release-reviewer-selection.js +135 -0
  130. package/dist/release-reviewer-selection.js.map +1 -0
  131. package/dist/report-index.d.ts +3 -0
  132. package/dist/report-index.js +3 -0
  133. package/dist/report-index.js.map +1 -0
  134. package/dist/report-model.d.ts +22 -0
  135. package/dist/report-model.js +2 -0
  136. package/dist/report-model.js.map +1 -0
  137. package/dist/report-render-markdown.d.ts +1 -0
  138. package/dist/report-render-markdown.js +40 -0
  139. package/dist/report-render-markdown.js.map +1 -0
  140. package/dist/report-schema.d.ts +2 -0
  141. package/dist/report-schema.js +109 -0
  142. package/dist/report-schema.js.map +1 -0
  143. package/dist/rule-catalog.d.ts +33 -0
  144. package/dist/rule-catalog.js +215 -0
  145. package/dist/rule-catalog.js.map +1 -0
  146. package/dist/runtime-adapters.js +4 -1
  147. package/dist/runtime-adapters.js.map +1 -1
  148. package/dist/runtime-bootstrap.js +11 -0
  149. package/dist/runtime-bootstrap.js.map +1 -1
  150. package/dist/runtime-child-prompt.d.ts +14 -0
  151. package/dist/runtime-child-prompt.js +49 -0
  152. package/dist/runtime-child-prompt.js.map +1 -0
  153. package/dist/runtime-commands.js +7 -2
  154. package/dist/runtime-commands.js.map +1 -1
  155. package/dist/runtime-context-manifest.d.ts +15 -1
  156. package/dist/runtime-context-manifest.js +24 -25
  157. package/dist/runtime-context-manifest.js.map +1 -1
  158. package/dist/runtime-context-pack-reference.d.ts +10 -0
  159. package/dist/runtime-context-pack-reference.js +37 -0
  160. package/dist/runtime-context-pack-reference.js.map +1 -0
  161. package/dist/runtime-execution-renderer.js +6 -0
  162. package/dist/runtime-execution-renderer.js.map +1 -1
  163. package/dist/runtime-execution.js +8 -4
  164. package/dist/runtime-execution.js.map +1 -1
  165. package/dist/runtime-lifecycle-notifications.d.ts +28 -0
  166. package/dist/runtime-lifecycle-notifications.js +110 -0
  167. package/dist/runtime-lifecycle-notifications.js.map +1 -0
  168. package/dist/runtime-lifecycle-watch-adapters.js +22 -3
  169. package/dist/runtime-lifecycle-watch-adapters.js.map +1 -1
  170. package/dist/runtime-lifecycle-watch.d.ts +1 -1
  171. package/dist/runtime-lifecycle-watch.js +55 -27
  172. package/dist/runtime-lifecycle-watch.js.map +1 -1
  173. package/dist/runtime-notification-commands.d.ts +2 -0
  174. package/dist/runtime-notification-commands.js +31 -0
  175. package/dist/runtime-notification-commands.js.map +1 -0
  176. package/dist/runtime-parent-action-dispatch.js +9 -0
  177. package/dist/runtime-parent-action-dispatch.js.map +1 -1
  178. package/dist/runtime-parent-actions.d.ts +2 -1
  179. package/dist/runtime-parent-actions.js +17 -6
  180. package/dist/runtime-parent-actions.js.map +1 -1
  181. package/dist/runtime-spawn-bridge.js +54 -41
  182. package/dist/runtime-spawn-bridge.js.map +1 -1
  183. package/dist/structured-output-validation.d.ts +9 -0
  184. package/dist/structured-output-validation.js +20 -0
  185. package/dist/structured-output-validation.js.map +1 -0
  186. package/dist/task-graph-commands.js +1 -1
  187. package/dist/task-graph-commands.js.map +1 -1
  188. package/dist/types/context-index.d.ts +57 -0
  189. package/dist/types/model-config.d.ts +93 -0
  190. package/dist/types/runtime.d.ts +10 -1
  191. package/dist/types.d.ts +4 -2
  192. package/dist/types.js.map +1 -1
  193. package/dist/web-api-read-routes.js +2 -0
  194. package/dist/web-api-read-routes.js.map +1 -1
  195. package/dist/web-api.js +45 -22
  196. package/dist/web-api.js.map +1 -1
  197. package/dist/web-console/assets/{index-jxCY5eEc.css → index-BHs7OIv8.css} +1 -1
  198. package/dist/web-console/assets/index-BJuVTqfQ.js +11 -0
  199. package/dist/web-console/index.html +2 -2
  200. package/dist/workflow-evidence-service.js +18 -3
  201. package/dist/workflow-evidence-service.js.map +1 -1
  202. package/dist/workflow-gates.js +1 -13
  203. package/dist/workflow-gates.js.map +1 -1
  204. package/dist/workflow-handoff-assessment.js +35 -2
  205. package/dist/workflow-handoff-assessment.js.map +1 -1
  206. package/dist/workflow-handoff-gates.d.ts +2 -0
  207. package/dist/workflow-handoff-gates.js +28 -0
  208. package/dist/workflow-handoff-gates.js.map +1 -0
  209. package/dist/workflow-run-commands.js +78 -1
  210. package/dist/workflow-run-commands.js.map +1 -1
  211. package/dist/workflow-services.d.ts +1 -0
  212. package/dist/workflow-services.js +132 -151
  213. package/dist/workflow-services.js.map +1 -1
  214. package/dist/workspace-claude-settings.d.ts +27 -0
  215. package/dist/workspace-claude-settings.js +54 -0
  216. package/dist/workspace-claude-settings.js.map +1 -0
  217. package/dist/workspace-runtime-bootstrap.js +5 -0
  218. package/dist/workspace-runtime-bootstrap.js.map +1 -1
  219. package/dist/workspace-selection.d.ts +12 -0
  220. package/dist/workspace-selection.js +25 -0
  221. package/dist/workspace-selection.js.map +1 -0
  222. package/docs/autonomous-workflow.md +3 -3
  223. package/docs/context-index-packs.md +45 -2
  224. package/docs/context-vault.md +34 -11
  225. package/docs/diagrams/deterministic-pipeline/README.md +102 -0
  226. package/docs/e2e-test-batteries.md +3 -3
  227. package/docs/evidence-compaction.md +25 -0
  228. package/docs/reports/context-pack-benchmark-gh-452.json +119 -0
  229. package/docs/reports/context-pack-benchmark-gh-452.md +32 -0
  230. package/docs/reports/gh-428-test-coverage-context-review-20260522.md +75 -0
  231. package/docs/rule-loading-strategy.md +37 -0
  232. package/docs/runtime-adapters.md +138 -27
  233. package/docs/security-env-vars.md +41 -0
  234. package/docs/sonar-quality-gates.md +23 -1
  235. package/package.json +4 -2
  236. package/rules/development/semantic-code.md +28 -0
  237. package/rules/diagram-quality.mdc +2 -0
  238. package/dist/web-console/assets/index-DA8Fs4r7.js +0 -11
@@ -0,0 +1,264 @@
1
+ import { randomUUID } from "node:crypto";
2
+ export async function executeProviderBackedAgent(request, deps) {
3
+ const requestId = `provider-agent-${randomUUID()}`;
4
+ const providerIds = [request.routing.provider, ...request.routing.fallbacks];
5
+ const failedProviders = [];
6
+ for (const [index, providerId] of providerIds.entries()) {
7
+ const entryResult = registryEntryForProvider(providerId, deps);
8
+ if (entryResult.outcome === "blocked") {
9
+ return blockedResult(request, requestId, providerId, entryResult.safeMessage);
10
+ }
11
+ const policyBlock = providerPolicyBlock(request, entryResult.entry, index);
12
+ if (policyBlock) {
13
+ return blockedResult(request, requestId, providerId, policyBlock);
14
+ }
15
+ const budget = await deps.checkBudget(providerId);
16
+ if (!budget.passed) {
17
+ return blockedResult(request, requestId, providerId, budget.safeMessage ?? "provider execution blocked by budget envelope");
18
+ }
19
+ const provider = deps.createProvider(providerId);
20
+ const capabilityBlock = providerCapabilityBlock(request, entryResult.entry);
21
+ if (capabilityBlock) {
22
+ return blockedResult(request, requestId, providerId, capabilityBlock);
23
+ }
24
+ let attempts = 0;
25
+ const maxAttempts = Math.max(1, request.retries + 1);
26
+ while (attempts < maxAttempts) {
27
+ attempts += 1;
28
+ try {
29
+ const response = await deps.complete(provider, request);
30
+ return completedResult({
31
+ request,
32
+ requestId,
33
+ response,
34
+ fallbackUsed: index > 0,
35
+ failedProviders,
36
+ });
37
+ }
38
+ catch (error) {
39
+ if (isSchedulerBlock(error)) {
40
+ return blockedResult(request, requestId, providerId, sanitizeProviderError(error));
41
+ }
42
+ const failure = providerFailureFromError(providerId, error, attempts);
43
+ if (failure.code === "timeout") {
44
+ return failedResult(request, requestId, providerId, [failure]);
45
+ }
46
+ if (failure.retryable && attempts < maxAttempts)
47
+ continue;
48
+ failedProviders.push(failure);
49
+ break;
50
+ }
51
+ }
52
+ }
53
+ return failedResult(request, requestId, request.routing.provider, failedProviders);
54
+ }
55
+ function registryEntryForProvider(providerId, deps) {
56
+ try {
57
+ return { outcome: "resolved", entry: deps.registryEntry(providerId) };
58
+ }
59
+ catch {
60
+ return {
61
+ outcome: "blocked",
62
+ safeMessage: `unknown provider: ${providerId}`,
63
+ };
64
+ }
65
+ }
66
+ function providerPolicyBlock(request, entry, attemptIndex) {
67
+ const policy = request.policy.providerPolicy;
68
+ if (policy?.blockedProviders?.includes(entry.id)) {
69
+ return `provider is blocked by policy: ${entry.id}`;
70
+ }
71
+ if (policy?.allowedProviders &&
72
+ policy.allowedProviders.length > 0 &&
73
+ !policy.allowedProviders.includes(entry.id)) {
74
+ return `provider is not allowed by policy: ${entry.id}`;
75
+ }
76
+ if (attemptIndex > 0 && !policy?.allowVendorFallbackWithoutApproval) {
77
+ return `provider fallback approval required: ${entry.id}`;
78
+ }
79
+ if (requiresDirectProviderApi(entry.dataClass) &&
80
+ !request.policy.directProviderApiAllowed) {
81
+ return "provider-backed phase execution requires runtimePolicy.delegation.allowDirectProviderApi=true";
82
+ }
83
+ if (entry.dataClass === "external" &&
84
+ request.policy.tenantDataPolicy === "local-only") {
85
+ return `tenant data policy blocks external provider: ${entry.id}`;
86
+ }
87
+ return undefined;
88
+ }
89
+ function requiresDirectProviderApi(dataClass) {
90
+ return dataClass !== "test";
91
+ }
92
+ function providerCapabilityBlock(request, entry) {
93
+ for (const capability of request.requiredCapabilities) {
94
+ if (!providerHasCapability(entry, capability)) {
95
+ return `provider ${entry.id} does not support required capability: ${capability}`;
96
+ }
97
+ }
98
+ if (entry.capabilities.maxContextTokens > 0 &&
99
+ request.budget.maxTokens > entry.capabilities.maxContextTokens) {
100
+ return `provider ${entry.id} context budget is too small for requested tokens`;
101
+ }
102
+ return undefined;
103
+ }
104
+ function providerHasCapability(entry, capability) {
105
+ if (capability === "streaming")
106
+ return entry.capabilities.streaming;
107
+ if (capability === "tools")
108
+ return entry.capabilities.tools;
109
+ if (capability === "vision")
110
+ return entry.capabilities.vision;
111
+ if (capability === "jsonMode")
112
+ return entry.capabilities.jsonMode;
113
+ return false;
114
+ }
115
+ function completedResult({ request, requestId, response, fallbackUsed, failedProviders, }) {
116
+ const costSource = response.provider === "fake" ? "free" : "unavailable";
117
+ const costUnavailableRationale = costSource === "unavailable"
118
+ ? "Provider usage was recorded, but pricing estimation is not configured for this runtime."
119
+ : undefined;
120
+ return {
121
+ outcome: "completed",
122
+ provider: response.provider,
123
+ model: response.model,
124
+ requestId,
125
+ responseId: response.id,
126
+ content: response.content,
127
+ usage: {
128
+ inputTokens: response.usage.inputTokens,
129
+ outputTokens: response.usage.outputTokens,
130
+ usageSource: "provider",
131
+ },
132
+ cost: {
133
+ estimatedCostUsd: 0,
134
+ costSource,
135
+ ...(costUnavailableRationale ? { costUnavailableRationale } : {}),
136
+ },
137
+ fallback: {
138
+ used: fallbackUsed,
139
+ failedProviders,
140
+ finalProvider: response.provider,
141
+ finalModel: response.model,
142
+ },
143
+ provenance: {
144
+ task: request.taskId,
145
+ ...(request.runId ? { runId: request.runId } : {}),
146
+ phase: request.phase,
147
+ actor: request.actor,
148
+ role: request.role,
149
+ provider: response.provider,
150
+ model: response.model,
151
+ promptId: request.promptId,
152
+ requestId,
153
+ responseId: response.id,
154
+ inputTokens: response.usage.inputTokens,
155
+ outputTokens: response.usage.outputTokens,
156
+ estimatedCostUsd: 0,
157
+ usageSource: "provider",
158
+ costSource,
159
+ ...(costUnavailableRationale ? { costUnavailableRationale } : {}),
160
+ fallbackUsed,
161
+ failedProviders,
162
+ finalProvider: response.provider,
163
+ finalModel: response.model,
164
+ directProviderApiAllowed: request.policy.directProviderApiAllowed,
165
+ finishReason: response.finishReason,
166
+ },
167
+ };
168
+ }
169
+ function blockedResult(request, requestId, providerId, safeMessage) {
170
+ return {
171
+ outcome: "blocked",
172
+ provider: providerId,
173
+ model: request.routing.model,
174
+ requestId,
175
+ usage: unavailableUsage("blocked before provider execution"),
176
+ cost: unavailableCost("blocked before provider execution"),
177
+ fallback: {
178
+ used: false,
179
+ failedProviders: [],
180
+ finalProvider: providerId,
181
+ finalModel: request.routing.model,
182
+ },
183
+ safeMessage,
184
+ };
185
+ }
186
+ function failedResult(request, requestId, providerId, failedProviders) {
187
+ return {
188
+ outcome: "failed",
189
+ provider: providerId,
190
+ model: request.routing.model,
191
+ requestId,
192
+ usage: unavailableUsage("provider execution failed"),
193
+ cost: unavailableCost("provider execution failed"),
194
+ fallback: {
195
+ used: failedProviders.length > 1,
196
+ failedProviders,
197
+ finalProvider: providerId,
198
+ finalModel: request.routing.model,
199
+ },
200
+ safeMessage: providerFailureSummary(failedProviders),
201
+ };
202
+ }
203
+ function unavailableUsage(rationale) {
204
+ return {
205
+ inputTokens: 0,
206
+ outputTokens: 0,
207
+ usageSource: "unavailable",
208
+ usageUnavailableRationale: rationale,
209
+ };
210
+ }
211
+ function unavailableCost(rationale) {
212
+ return {
213
+ estimatedCostUsd: 0,
214
+ costSource: "unavailable",
215
+ costUnavailableRationale: rationale,
216
+ };
217
+ }
218
+ function providerFailureFromError(providerId, error, attempts) {
219
+ const code = providerFailureCode(error);
220
+ return {
221
+ provider: providerId,
222
+ code,
223
+ reason: sanitizeProviderError(error),
224
+ retryable: code === "provider_error",
225
+ attempts,
226
+ };
227
+ }
228
+ function providerFailureCode(error) {
229
+ const message = errorMessage(error).toLowerCase();
230
+ if (/timeout|timed out|aborted/.test(message))
231
+ return "timeout";
232
+ if (/permission|denied|forbidden|unauthorized/.test(message)) {
233
+ return "permission_denied";
234
+ }
235
+ if (/policy|not allowed|blocked/.test(message))
236
+ return "policy_blocked";
237
+ return "provider_error";
238
+ }
239
+ function sanitizeProviderError(error) {
240
+ return errorMessage(error)
241
+ .replace(/Bearer\s+\S+/gi, "Bearer [REDACTED]")
242
+ .replace(/\b(authorization|x-goog-api-key|x-api-key|api[-_]?key|apiKey)\s*[:=]\s*[^&\s,;]+/gi, "$1=[REDACTED]")
243
+ .replace(/\bAIza[0-9A-Za-z_-]{20,}\b/g, "[REDACTED_API_KEY]")
244
+ .replace(/\b(sk|ghp|github_pat)_[A-Za-z0-9_-]{12,}\b/g, "[REDACTED_TOKEN]");
245
+ }
246
+ function errorMessage(error) {
247
+ return error instanceof Error ? error.message : String(error);
248
+ }
249
+ function isSchedulerBlock(error) {
250
+ const message = errorMessage(error).toLowerCase();
251
+ return (message.includes("backpressure") ||
252
+ message.includes("circuit is open") ||
253
+ message.includes("queue is full"));
254
+ }
255
+ function providerFailureSummary(failures) {
256
+ if (failures.length === 0)
257
+ return "provider execution failed";
258
+ const providers = failures.map((failure) => failure.provider).join(", ");
259
+ const details = failures
260
+ .map((failure) => `${failure.provider}: ${failure.reason}`)
261
+ .join("; ");
262
+ return `all providers failed: ${providers}${details ? ` (${details})` : ""}`;
263
+ }
264
+ //# sourceMappingURL=provider-agent-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-agent-wrapper.js","sourceRoot":"","sources":["../src/provider-agent-wrapper.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  import type { CliIo, CliOptions } from "./types.js";
2
2
  export declare function qaCoverageCommand(options: CliOptions, io: CliIo): Promise<void>;
3
+ export declare function qaEvidenceCheckCommand(options: CliOptions, io: CliIo): Promise<void>;
@@ -1,4 +1,6 @@
1
1
  import { requireArg } from "./args.js";
2
+ import { removeUndefined, stringOption } from "./command-utils.js";
3
+ import { evaluateAutomationEvidence } from "./qa-evidence-validation.js";
2
4
  import { generateQaAutomationCoverage } from "./qa-coverage.js";
3
5
  export async function qaCoverageCommand(options, io) {
4
6
  const report = await generateQaAutomationCoverage(requireArg(options, "task"));
@@ -15,4 +17,28 @@ export async function qaCoverageCommand(options, io) {
15
17
  }
16
18
  }
17
19
  }
20
+ export async function qaEvidenceCheckCommand(options, io) {
21
+ const report = evaluateAutomationEvidence(removeUndefined({
22
+ task: stringOption(options.task) ?? "QA-EVIDENCE-CHECK",
23
+ role: stringOption(options.role) ?? "qa",
24
+ type: stringOption(options.type) ?? "command",
25
+ summary: stringOption(options.summary) ?? "QA evidence validation",
26
+ path: options.path,
27
+ command: options.command,
28
+ exitCode: options["exit-code"],
29
+ surface: requireArg(options, "surface"),
30
+ assertions: options.assertions,
31
+ externalValidation: options["external-validation"],
32
+ deferredOwner: options["deferred-owner"],
33
+ deferredRationale: options["deferred-rationale"],
34
+ }));
35
+ if (options.json) {
36
+ io.log(JSON.stringify(report, null, 2));
37
+ return;
38
+ }
39
+ io.log(`QA evidence check for ${report.surface}: ${report.observableOutcome ? "pass" : "fail"}`);
40
+ for (const gap of report.gaps) {
41
+ io.log(`- ${gap}`);
42
+ }
43
+ }
18
44
  //# sourceMappingURL=qa-commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"qa-commands.js","sourceRoot":"","sources":["../src/qa-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAGhE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAmB,EACnB,EAAS;IAET,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAC5B,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IACD,EAAE,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnC,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9D,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,EAAE,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"qa-commands.js","sourceRoot":"","sources":["../src/qa-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAIhE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAmB,EACnB,EAAS;IAET,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAC5B,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IACD,EAAE,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnC,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9D,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,EAAE,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAmB,EACnB,EAAS;IAET,MAAM,MAAM,GAAG,0BAA0B,CACvC,eAAe,CAAgB;QAC7B,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,mBAAmB;QACvD,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI;QACxC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS;QAC7C,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,wBAAwB;QAClE,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC;QAC9B,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;QACvC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,kBAAkB,EAAE,OAAO,CAAC,qBAAqB,CAAC;QAClD,aAAa,EAAE,OAAO,CAAC,gBAAgB,CAAC;QACxC,iBAAiB,EAAE,OAAO,CAAC,oBAAoB,CAAC;KACjD,CAAC,CACH,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IACD,EAAE,CAAC,GAAG,CACJ,yBAAyB,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CACzF,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AutomationSurface } from "./qa-evidence-validation.js";
2
+ import type { EvidenceInput } from "./types.js";
3
+ export declare function evidenceInputGaps(surface: AutomationSurface, input: EvidenceInput): string[];
4
+ export declare function evidenceAssertionGaps(surface: AutomationSurface, assertions: string | undefined): string[];
5
+ export declare function integrationExternalGaps(surface: AutomationSurface, externalValidation: string | undefined, deferredOwner: string | undefined, deferredRationale: string | undefined, assertions?: string): string[];
@@ -0,0 +1,238 @@
1
+ export function evidenceInputGaps(surface, input) {
2
+ const gaps = [];
3
+ if (surface === "cli" || surface === "shell") {
4
+ if (!stringValue(input.command)) {
5
+ gaps.push(`${surface} evidence must include command`);
6
+ }
7
+ if (!stringValue(input.exitCode)) {
8
+ gaps.push(`${surface} evidence must include exit code`);
9
+ }
10
+ }
11
+ if (surface === "web" && !stringValue(input.path)) {
12
+ gaps.push("web evidence must reference screenshot, video, trace, or report artifact path");
13
+ }
14
+ if (surface === "generated-artifact" && !stringValue(input.path)) {
15
+ gaps.push("generated artifact evidence must reference the rendered output path");
16
+ }
17
+ return gaps;
18
+ }
19
+ export function evidenceAssertionGaps(surface, assertions) {
20
+ if (surface === "web")
21
+ return webAssertionGaps(assertions);
22
+ if (surface === "api")
23
+ return apiAssertionGaps(assertions);
24
+ if (surface === "cli")
25
+ return cliAssertionGaps(assertions);
26
+ if (surface === "shell")
27
+ return shellAssertionGaps(assertions);
28
+ if (surface === "integration")
29
+ return integrationAssertionGaps(assertions);
30
+ if (surface === "generated-artifact") {
31
+ return generatedArtifactAssertionGaps(assertions);
32
+ }
33
+ if (surface === "workflow")
34
+ return workflowAssertionGaps(assertions);
35
+ if (surface === "mobile")
36
+ return mobileAssertionGaps(assertions);
37
+ if (surface === "desktop")
38
+ return desktopAssertionGaps(assertions);
39
+ return dataAssertionGaps(assertions);
40
+ }
41
+ export function integrationExternalGaps(surface, externalValidation, deferredOwner, deferredRationale, assertions) {
42
+ if (surface !== "integration" && surface !== "api")
43
+ return [];
44
+ if (externalValidation)
45
+ return [];
46
+ if (deferredOwner && deferredRationale)
47
+ return [];
48
+ if (assertions &&
49
+ /\b(receiver|sandbox|mock|contract|webhook|event log|external validation|side effect|persisted)\b/i.test(assertions)) {
50
+ return [];
51
+ }
52
+ return [
53
+ `${surface} automation must validate sandbox/mock/contract/webhook/event/log or defer with owner and rationale`,
54
+ ];
55
+ }
56
+ function webAssertionGaps(assertions) {
57
+ const gaps = assertionChecklistGaps(assertions, [
58
+ [
59
+ "web automation must assert visible user-facing state",
60
+ [/\bvisible\b/, /\buser[- ]?facing\b/, /\bui\b/, /\bscreen\b/],
61
+ ],
62
+ [
63
+ "web automation must include viewport metadata",
64
+ [/\bviewport\b/, /\bbreakpoint\b/],
65
+ ],
66
+ [
67
+ "web automation must assert selector or visual state",
68
+ [/\bselector\b/, /\bvisual\b/, /\bscreenshot\b/, /\bpixel\b/],
69
+ ],
70
+ ]);
71
+ if (assertions &&
72
+ /\b(bug|defect|regression|visual mismatch|overlap)\b/i.test(assertions) &&
73
+ !/\b(highlight|annotation|annotated|bounding box)\b/i.test(assertions)) {
74
+ gaps.push("web bug evidence must include highlight or annotation artifact");
75
+ }
76
+ return gaps;
77
+ }
78
+ function apiAssertionGaps(assertions) {
79
+ return assertionChecklistGaps(assertions, [
80
+ ["api automation must assert request contract", [/\brequest\b/]],
81
+ ["api automation must assert response contract", [/\bresponse\b/]],
82
+ [
83
+ "api automation must assert contract or schema",
84
+ [/\bcontract\b/, /\bschema\b/],
85
+ ],
86
+ [
87
+ "api automation must assert external side effect or persisted state",
88
+ [/\bside effect\b/, /\bpersisted\b/, /\bevent\b/, /\bwebhook\b/],
89
+ ],
90
+ ]);
91
+ }
92
+ function cliAssertionGaps(assertions) {
93
+ return assertionChecklistGaps(assertions, [
94
+ [
95
+ "cli automation must assert exit code",
96
+ [/\bexit code\b/, /\bexit[- ]?code\b/],
97
+ ],
98
+ ["cli automation must assert stdout", [/\bstdout\b/]],
99
+ ["cli automation must assert stderr", [/\bstderr\b/]],
100
+ [
101
+ "cli automation must assert artifact references",
102
+ [/\bartifact(s)?\b/, /\bfile(s)?\b/, /\bevent(s)?\b/],
103
+ ],
104
+ [
105
+ "cli automation must assert final state",
106
+ [/\bfinal state\b/, /\bresulting state\b/],
107
+ ],
108
+ ]);
109
+ }
110
+ function shellAssertionGaps(assertions) {
111
+ return assertionChecklistGaps(assertions, [
112
+ [
113
+ "shell automation must assert exit status",
114
+ [/\bexit\b/, /\bstatus\b/, /\bsuccess/],
115
+ ],
116
+ [
117
+ "shell automation must assert observable output or effect",
118
+ [/\boutput\b/, /\boutcome\b/, /\beffect\b/, /\bresult\b/],
119
+ ],
120
+ ]);
121
+ }
122
+ function integrationAssertionGaps(assertions) {
123
+ return assertionChecklistGaps(assertions, [
124
+ [
125
+ "integration automation must assert request payload",
126
+ [/\brequest\b/, /\bpayload\b/],
127
+ ],
128
+ [
129
+ "integration automation must assert response or acknowledgement",
130
+ [/\bresponse\b/, /\back\b/],
131
+ ],
132
+ [
133
+ "integration automation must assert contract",
134
+ [/\bcontract\b/, /\bschema\b/],
135
+ ],
136
+ [
137
+ "integration automation must assert external side effect",
138
+ [/\bside effect\b/, /\boutbound\b/],
139
+ ],
140
+ ]);
141
+ }
142
+ function generatedArtifactAssertionGaps(assertions) {
143
+ return assertionChecklistGaps(assertions, [
144
+ [
145
+ "generated artifact automation must assert source files",
146
+ [/\bsource file(s)?\b/],
147
+ ],
148
+ [
149
+ "generated artifact automation must assert rendered outputs",
150
+ [/\brender(ed)? output\b/],
151
+ ],
152
+ [
153
+ "generated artifact automation must assert visual bounds",
154
+ [/\bvisual bounds\b/, /\bbounds\b/],
155
+ ],
156
+ [
157
+ "generated artifact automation must assert text fit",
158
+ [/\btext fit\b/, /\boverflow\b/],
159
+ ],
160
+ [
161
+ "generated artifact automation must assert connector sanity",
162
+ [/\bconnector\b/, /\bendpoints?\b/],
163
+ ],
164
+ [
165
+ "generated artifact automation must assert known limitations",
166
+ [/\bknown limitation(s)?\b/],
167
+ ],
168
+ ]);
169
+ }
170
+ function workflowAssertionGaps(assertions) {
171
+ return assertionChecklistGaps(assertions, [
172
+ [
173
+ "workflow automation must assert phase transitions",
174
+ [/\bphase transition(s)?\b/, /\btransition/],
175
+ ],
176
+ ["workflow automation must assert handoff artifacts", [/\bhandoff\b/]],
177
+ [
178
+ "workflow automation must assert parent actions",
179
+ [/\bparent action(s)?\b/],
180
+ ],
181
+ [
182
+ "workflow automation must assert lifecycle events",
183
+ [/\blifecycle event(s)?\b/, /\bevent(s)?\b/],
184
+ ],
185
+ [
186
+ "workflow automation must assert terminal task state",
187
+ [/\bterminal task state\b/, /\bfinal state\b/],
188
+ ],
189
+ ]);
190
+ }
191
+ function mobileAssertionGaps(assertions) {
192
+ return assertionChecklistGaps(assertions, [
193
+ [
194
+ "mobile automation must assert visible device state",
195
+ [/\bvisible\b/, /\bdevice\b/],
196
+ ],
197
+ [
198
+ "mobile automation must assert responsive or platform-specific behavior",
199
+ [/\bresponsive\b/, /\bplatform\b/, /\bios\b/, /\bandroid\b/],
200
+ ],
201
+ ]);
202
+ }
203
+ function desktopAssertionGaps(assertions) {
204
+ return assertionChecklistGaps(assertions, [
205
+ [
206
+ "desktop automation must assert visible app state",
207
+ [/\bvisible\b/, /\bapp state\b/],
208
+ ],
209
+ [
210
+ "desktop automation must assert local files or events",
211
+ [/\blocal\b/, /\bfile(s)?\b/, /\bevent(s)?\b/],
212
+ ],
213
+ ]);
214
+ }
215
+ function dataAssertionGaps(assertions) {
216
+ return assertionChecklistGaps(assertions, [
217
+ [
218
+ "data automation must assert persisted data or query results",
219
+ [/\bpersisted\b/, /\bquery\b/, /\bdata\b/],
220
+ ],
221
+ [
222
+ "data automation must assert lineage, metric, or quality checks",
223
+ [/\blineage\b/, /\bmetric\b/, /\bquality\b/],
224
+ ],
225
+ ]);
226
+ }
227
+ function assertionChecklistGaps(assertions, checks) {
228
+ if (!assertions)
229
+ return checks.map(([message]) => message);
230
+ const normalized = assertions.toLowerCase();
231
+ return checks
232
+ .filter(([, patterns]) => !patterns.some((pattern) => pattern.test(normalized)))
233
+ .map(([message]) => message);
234
+ }
235
+ function stringValue(value) {
236
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
237
+ }
238
+ //# sourceMappingURL=qa-evidence-surface-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qa-evidence-surface-rules.js","sourceRoot":"","sources":["../src/qa-evidence-surface-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { EvidenceInput } from "./types.js";
2
+ export type AutomationSurface = "web" | "api" | "cli" | "shell" | "integration" | "generated-artifact" | "workflow" | "mobile" | "desktop" | "data";
3
+ export interface AutomationEvidenceInput {
4
+ surface?: AutomationSurface;
5
+ assertions?: string;
6
+ externalValidation?: string;
7
+ deferredOwner?: string;
8
+ deferredRationale?: string;
9
+ }
10
+ export interface AutomationEvidenceQuality {
11
+ automated: boolean;
12
+ surface?: AutomationSurface;
13
+ assertions?: string;
14
+ externalValidation?: string;
15
+ deferredOwner?: string;
16
+ deferredRationale?: string;
17
+ observableOutcome: boolean;
18
+ deferredExternalValidation: boolean;
19
+ gaps: string[];
20
+ }
21
+ export declare function evaluateAutomationEvidence(input: EvidenceInput): AutomationEvidenceQuality;
22
+ export declare function assertAutomationEvidenceQuality(input: EvidenceInput): void;
23
+ export declare function automationEvidenceLines(quality: AutomationEvidenceQuality): string[];