@resolveio/server-lib 22.3.196 → 22.3.198
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/package.json +1 -1
- package/util/ai-run-evidence-adapters.js +115 -1
- package/util/ai-run-evidence-adapters.js.map +1 -1
- package/util/ai-run-evidence-dashboard.d.ts +5 -1
- package/util/ai-run-evidence-dashboard.js +10 -3
- package/util/ai-run-evidence-dashboard.js.map +1 -1
- package/util/support-runner-v5.d.ts +39 -2
- package/util/support-runner-v5.js +203 -10
- package/util/support-runner-v5.js.map +1 -1
|
@@ -63,6 +63,10 @@ export interface AIRunCostPanel {
|
|
|
63
63
|
manualEstimatedUsd?: number;
|
|
64
64
|
untrackedEstimatedUsd?: number;
|
|
65
65
|
untrackedWarnings?: string[];
|
|
66
|
+
observabilityStatus?: string;
|
|
67
|
+
missingLedger?: boolean;
|
|
68
|
+
externalCodexMonitorUsed?: boolean;
|
|
69
|
+
nextAction?: string;
|
|
66
70
|
}
|
|
67
71
|
export interface AIRunOperatorView {
|
|
68
72
|
runId?: string;
|
|
@@ -79,6 +83,6 @@ export interface AIRunOperatorView {
|
|
|
79
83
|
}
|
|
80
84
|
export declare function buildAIRunTimeline(run: AIRun): AIRunTimelineItem[];
|
|
81
85
|
export declare function buildAIRunQaHealth(run: AIRun): AIRunQaHealth;
|
|
82
|
-
export declare function buildAIRunCostPanel(cost?: AIRunCost): AIRunCostPanel;
|
|
86
|
+
export declare function buildAIRunCostPanel(cost?: AIRunCost, run?: AIRun): AIRunCostPanel;
|
|
83
87
|
export declare function buildAIRunFalsePassWarnings(run: AIRun): string[];
|
|
84
88
|
export declare function buildAIRunOperatorView(run: AIRun): AIRunOperatorView;
|
|
@@ -255,7 +255,8 @@ function buildAIRunQaHealth(run) {
|
|
|
255
255
|
}
|
|
256
256
|
};
|
|
257
257
|
}
|
|
258
|
-
function buildAIRunCostPanel(cost) {
|
|
258
|
+
function buildAIRunCostPanel(cost, run) {
|
|
259
|
+
var _a, _b, _c, _d;
|
|
259
260
|
var categories = Object.keys((cost === null || cost === void 0 ? void 0 : cost.categories) || {}).sort().map(function (category) {
|
|
260
261
|
var _a;
|
|
261
262
|
var entry = (_a = cost === null || cost === void 0 ? void 0 : cost.categories) === null || _a === void 0 ? void 0 : _a[category];
|
|
@@ -288,6 +289,8 @@ function buildAIRunCostPanel(cost) {
|
|
|
288
289
|
count: Number((entry === null || entry === void 0 ? void 0 : entry.count) || 0)
|
|
289
290
|
};
|
|
290
291
|
});
|
|
292
|
+
var costGate = (_a = run === null || run === void 0 ? void 0 : run.gates) === null || _a === void 0 ? void 0 : _a.find(function (gate) { return gate.key === 'cost_observability'; });
|
|
293
|
+
var observability = ((_b = run === null || run === void 0 ? void 0 : run.metadata) === null || _b === void 0 ? void 0 : _b.costObservability) || (costGate === null || costGate === void 0 ? void 0 : costGate.metadata) || {};
|
|
291
294
|
return {
|
|
292
295
|
totalTokens: Number((cost === null || cost === void 0 ? void 0 : cost.totalTokens) || 0),
|
|
293
296
|
estimatedUsd: Number((cost === null || cost === void 0 ? void 0 : cost.estimatedUsd) || 0),
|
|
@@ -297,7 +300,11 @@ function buildAIRunCostPanel(cost) {
|
|
|
297
300
|
surfaces: surfaces,
|
|
298
301
|
manualEstimatedUsd: Number((cost === null || cost === void 0 ? void 0 : cost.manualEstimatedUsd) || 0),
|
|
299
302
|
untrackedEstimatedUsd: Number((cost === null || cost === void 0 ? void 0 : cost.untrackedEstimatedUsd) || 0),
|
|
300
|
-
untrackedWarnings: Array.isArray(cost === null || cost === void 0 ? void 0 : cost.untrackedWarnings) ? cost.untrackedWarnings : []
|
|
303
|
+
untrackedWarnings: Array.isArray(cost === null || cost === void 0 ? void 0 : cost.untrackedWarnings) ? cost.untrackedWarnings : [],
|
|
304
|
+
observabilityStatus: cleanText(observability.status || (costGate === null || costGate === void 0 ? void 0 : costGate.status), 80),
|
|
305
|
+
missingLedger: observability.missingLedger === true || ((_c = costGate === null || costGate === void 0 ? void 0 : costGate.metadata) === null || _c === void 0 ? void 0 : _c.missingLedger) === true,
|
|
306
|
+
externalCodexMonitorUsed: observability.externalCodexMonitorUsed === true || ((_d = costGate === null || costGate === void 0 ? void 0 : costGate.metadata) === null || _d === void 0 ? void 0 : _d.externalCodexMonitorUsed) === true,
|
|
307
|
+
nextAction: cleanText(observability.nextAction, 500)
|
|
301
308
|
};
|
|
302
309
|
}
|
|
303
310
|
function buildAIRunFalsePassWarnings(run) {
|
|
@@ -328,7 +335,7 @@ function buildAIRunOperatorView(run) {
|
|
|
328
335
|
warnings: buildAIRunFalsePassWarnings(run),
|
|
329
336
|
timeline: buildAIRunTimeline(run),
|
|
330
337
|
qaHealth: buildAIRunQaHealth(run),
|
|
331
|
-
costPanel: buildAIRunCostPanel(run.cost),
|
|
338
|
+
costPanel: buildAIRunCostPanel(run.cost, run),
|
|
332
339
|
trainingExample: (0, ai_run_evidence_eval_1.buildAIRunTrainingExampleFromRun)(run)
|
|
333
340
|
};
|
|
334
341
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/ai-run-evidence-dashboard.ts"],"names":[],"mappings":"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","file":"ai-run-evidence-dashboard.js","sourcesContent":["import { AIRun, AIRunCost } from './ai-run-evidence';\nimport { buildAIRunTrainingExampleFromRun, classifyAIRunFailureClass } from './ai-run-evidence-eval';\n\nexport interface AIRunTimelineItem {\n\ttime?: string;\n\ttype: string;\n\tlabel: string;\n\tstatus?: string;\n\tmessage?: string;\n\tevidenceRefs: string[];\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunQaHealth {\n\toutcome?: string;\n\tinfra: {\n\t\tpass: number;\n\t\tfail: number;\n\t\tblocked: number;\n\t\twarn: number;\n\t\tunknown: number;\n\t};\n\tcompile?: {\n\t\tstatus?: string;\n\t\tstale?: boolean;\n\t\tartifactPath?: string;\n\t\tmessage?: string;\n\t};\n\troute: {\n\t\tpass: number;\n\t\tfail: number;\n\t\tshellOnly: number;\n\t};\n\tbusiness: {\n\t\tpass: number;\n\t\tfail: number;\n\t\tblocked: number;\n\t\tmissing: boolean;\n\t};\n}\n\nexport interface AIRunCostPanel {\n\ttotalTokens: number;\n\testimatedUsd: number;\n\tmodels: string[];\n\tcategories: Array<{\n\t\tcategory: string;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tsources?: Array<{\n\t\tsource: string;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t\tmanualCount: number;\n\t\tuntrackedCount: number;\n\t}>;\n\tsurfaces?: Array<{\n\t\tsurface: string;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tmanualEstimatedUsd?: number;\n\tuntrackedEstimatedUsd?: number;\n\tuntrackedWarnings?: string[];\n}\n\nexport interface AIRunOperatorView {\n\trunId?: string;\n\tsource: string;\n\ttitle?: string;\n\toutcome: string;\n\tfailureClass: string;\n\tnextAction?: string;\n\twarnings: string[];\n\ttimeline: AIRunTimelineItem[];\n\tqaHealth: AIRunQaHealth;\n\tcostPanel: AIRunCostPanel;\n\ttrainingExample: ReturnType<typeof buildAIRunTrainingExampleFromRun>;\n}\n\nfunction cleanText(value: any, max = 1000): string {\n\treturn String(value || '').replace(/\\s+/g, ' ').trim().slice(0, max);\n}\n\nfunction toIso(value: any): string | undefined {\n\tif (value instanceof Date && Number.isFinite(value.getTime())) {\n\t\treturn value.toISOString();\n\t}\n\tif (value) {\n\t\tconst parsed = new Date(value);\n\t\tif (Number.isFinite(parsed.getTime())) {\n\t\t\treturn parsed.toISOString();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction countStatuses(values: Array<{ status?: string }>): Record<string, number> {\n\tconst result: Record<string, number> = {\n\t\tpass: 0,\n\t\tfail: 0,\n\t\tblocked: 0,\n\t\twarn: 0,\n\t\tunknown: 0\n\t};\n\tfor (const value of values) {\n\t\tconst status = cleanText(value.status, 40).toLowerCase();\n\t\tif (status === 'pass' || status === 'fail' || status === 'blocked' || status === 'warn') {\n\t\t\tresult[status] += 1;\n\t\t}\n\t\telse {\n\t\t\tresult.unknown += 1;\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction sortTimeline(items: AIRunTimelineItem[]): AIRunTimelineItem[] {\n\treturn [...items].sort((left, right) => {\n\t\tconst leftTime = left.time ? new Date(left.time).getTime() : 0;\n\t\tconst rightTime = right.time ? new Date(right.time).getTime() : 0;\n\t\treturn leftTime - rightTime;\n\t});\n}\n\nexport function buildAIRunTimeline(run: AIRun): AIRunTimelineItem[] {\n\tconst items: AIRunTimelineItem[] = [];\n\tfor (const event of run.events || []) {\n\t\titems.push({\n\t\t\ttime: toIso(event.recordedAt),\n\t\t\ttype: event.type,\n\t\t\tlabel: event.category || event.type,\n\t\t\tmessage: cleanText(event.message, 2000),\n\t\t\tevidenceRefs: Array.isArray(event.artifactPaths) ? event.artifactPaths : [],\n\t\t\tmetadata: event.metadata\n\t\t});\n\t}\n\tfor (const gate of run.gates || []) {\n\t\titems.push({\n\t\t\ttime: toIso(gate.recordedAt),\n\t\t\ttype: 'gate',\n\t\t\tlabel: gate.label || gate.key,\n\t\t\tstatus: gate.status,\n\t\t\tmessage: gate.reason,\n\t\t\tevidenceRefs: gate.evidenceRefs || [],\n\t\t\tmetadata: gate.metadata\n\t\t});\n\t}\n\tfor (const check of run.qa?.infraChecks || []) {\n\t\titems.push({\n\t\t\ttime: toIso(check.checkedAt),\n\t\t\ttype: 'qa_infra',\n\t\t\tlabel: check.name,\n\t\t\tstatus: check.status,\n\t\t\tmessage: check.message,\n\t\t\tevidenceRefs: check.path ? [check.path] : [],\n\t\t\tmetadata: check.metadata\n\t\t});\n\t}\n\tif (run.qa?.compile) {\n\t\titems.push({\n\t\t\ttime: toIso(run.qa.compile.recordedAt),\n\t\t\ttype: 'qa_compile',\n\t\t\tlabel: run.qa.compile.command || 'Compile/build',\n\t\t\tstatus: run.qa.compile.status,\n\t\t\tmessage: run.qa.compile.message,\n\t\t\tevidenceRefs: run.qa.compile.artifactPath ? [run.qa.compile.artifactPath] : [],\n\t\t\tmetadata: run.qa.compile.metadata\n\t\t});\n\t}\n\tfor (const probe of run.qa?.routeProbes || []) {\n\t\titems.push({\n\t\t\ttime: toIso(probe.recordedAt),\n\t\t\ttype: 'qa_route_probe',\n\t\t\tlabel: probe.route,\n\t\t\tstatus: probe.status,\n\t\t\tmessage: probe.message || probe.caption,\n\t\t\tevidenceRefs: probe.screenshot ? [probe.screenshot] : [],\n\t\t\tmetadata: probe.metadata\n\t\t});\n\t}\n\tfor (const assertion of run.qa?.businessAssertions || []) {\n\t\titems.push({\n\t\t\ttime: toIso(assertion.recordedAt),\n\t\t\ttype: 'qa_business_assertion',\n\t\t\tlabel: assertion.assertion,\n\t\t\tstatus: assertion.status,\n\t\t\tmessage: assertion.observed || assertion.dataProof || assertion.message,\n\t\t\tevidenceRefs: assertion.artifactPaths || [],\n\t\t\tmetadata: assertion.metadata\n\t\t});\n\t}\n\treturn sortTimeline(items);\n}\n\nexport function buildAIRunQaHealth(run: AIRun): AIRunQaHealth {\n\tconst infraCounts = countStatuses(run.qa?.infraChecks || []);\n\tconst routeProbes = run.qa?.routeProbes || [];\n\tconst routePass = routeProbes.filter((probe) => probe.status === 'pass' && probe.shellOnly !== true).length;\n\tconst routeFail = routeProbes.filter((probe) => probe.status === 'fail' || probe.status === 'blocked').length;\n\tconst shellOnly = routeProbes.filter((probe) => probe.shellOnly === true).length;\n\tconst assertions = run.qa?.businessAssertions || [];\n\tconst businessPass = assertions.filter((assertion) => assertion.status === 'pass').length;\n\tconst businessFail = assertions.filter((assertion) => assertion.status === 'fail').length;\n\tconst businessBlocked = assertions.filter((assertion) => assertion.status === 'blocked').length;\n\treturn {\n\t\toutcome: run.qa?.outcome,\n\t\tinfra: {\n\t\t\tpass: infraCounts.pass,\n\t\t\tfail: infraCounts.fail,\n\t\t\tblocked: infraCounts.blocked,\n\t\t\twarn: infraCounts.warn,\n\t\t\tunknown: infraCounts.unknown\n\t\t},\n\t\tcompile: run.qa?.compile ? {\n\t\t\tstatus: run.qa.compile.status,\n\t\t\tstale: run.qa.compile.staleEvidence === true || run.qa.compile.status === 'stale',\n\t\t\tartifactPath: run.qa.compile.artifactPath,\n\t\t\tmessage: run.qa.compile.message\n\t\t} : undefined,\n\t\troute: {\n\t\t\tpass: routePass,\n\t\t\tfail: routeFail,\n\t\t\tshellOnly\n\t\t},\n\t\tbusiness: {\n\t\t\tpass: businessPass,\n\t\t\tfail: businessFail,\n\t\t\tblocked: businessBlocked,\n\t\t\tmissing: assertions.length === 0\n\t\t}\n\t};\n}\n\nexport function buildAIRunCostPanel(cost?: AIRunCost): AIRunCostPanel {\n\tconst categories = Object.keys(cost?.categories || {}).sort().map((category) => {\n\t\tconst entry = cost?.categories?.[category];\n\t\treturn {\n\t\t\tcategory,\n\t\t\ttotalTokens: Number(entry?.totalTokens || 0),\n\t\t\testimatedUsd: Number(entry?.estimatedUsd || 0),\n\t\t\tcount: Number(entry?.count || 0)\n\t\t};\n\t});\n\tconst sources = Object.keys(cost?.sources || {}).sort().map((source) => {\n\t\tconst entry = cost?.sources?.[source];\n\t\treturn {\n\t\t\tsource,\n\t\t\ttotalTokens: Number(entry?.totalTokens || 0),\n\t\t\testimatedUsd: Number(entry?.estimatedUsd || 0),\n\t\t\tcount: Number(entry?.count || 0),\n\t\t\tmanualCount: Number(entry?.manualCount || 0),\n\t\t\tuntrackedCount: Number(entry?.untrackedCount || 0)\n\t\t};\n\t});\n\tconst surfaces = Object.keys(cost?.surfaces || {}).sort().map((surface) => {\n\t\tconst entry = cost?.surfaces?.[surface];\n\t\treturn {\n\t\t\tsurface,\n\t\t\ttotalTokens: Number(entry?.totalTokens || 0),\n\t\t\testimatedUsd: Number(entry?.estimatedUsd || 0),\n\t\t\tcount: Number(entry?.count || 0)\n\t\t};\n\t});\n\treturn {\n\t\ttotalTokens: Number(cost?.totalTokens || 0),\n\t\testimatedUsd: Number(cost?.estimatedUsd || 0),\n\t\tmodels: Array.isArray(cost?.models) ? cost.models : [],\n\t\tcategories,\n\t\tsources,\n\t\tsurfaces,\n\t\tmanualEstimatedUsd: Number(cost?.manualEstimatedUsd || 0),\n\t\tuntrackedEstimatedUsd: Number(cost?.untrackedEstimatedUsd || 0),\n\t\tuntrackedWarnings: Array.isArray(cost?.untrackedWarnings) ? cost.untrackedWarnings : []\n\t};\n}\n\nexport function buildAIRunFalsePassWarnings(run: AIRun): string[] {\n\tconst warnings = Array.isArray(run.warnings) ? [...run.warnings] : [];\n\tif (run.outcome === 'false_pass' && !warnings.includes('false_pass_outcome')) {\n\t\twarnings.push('false_pass_outcome');\n\t}\n\tif ((run.qa?.outcome === 'route_only_pass' || run.qa?.outcome === 'incomplete') && !warnings.includes('missing_business_assertion')) {\n\t\twarnings.push('missing_business_assertion');\n\t}\n\tif (run.qa?.routeProbes?.some((probe) => probe.shellOnly === true) && !warnings.includes('shell_only_route')) {\n\t\twarnings.push('shell_only_route');\n\t}\n\tif (run.outcome === 'release_blocked' && !warnings.includes('release_blocked_after_scorecard')) {\n\t\twarnings.push('release_blocked_after_scorecard');\n\t}\n\treturn warnings;\n}\n\nexport function buildAIRunOperatorView(run: AIRun): AIRunOperatorView {\n\treturn {\n\t\trunId: run.id || (run as any)._id,\n\t\tsource: run.source,\n\t\ttitle: run.title,\n\t\toutcome: run.outcome,\n\t\tfailureClass: classifyAIRunFailureClass(run),\n\t\tnextAction: run.nextAction,\n\t\twarnings: buildAIRunFalsePassWarnings(run),\n\t\ttimeline: buildAIRunTimeline(run),\n\t\tqaHealth: buildAIRunQaHealth(run),\n\t\tcostPanel: buildAIRunCostPanel(run.cost),\n\t\ttrainingExample: buildAIRunTrainingExampleFromRun(run)\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/util/ai-run-evidence-dashboard.ts"],"names":[],"mappings":"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","file":"ai-run-evidence-dashboard.js","sourcesContent":["import { AIRun, AIRunCost } from './ai-run-evidence';\nimport { buildAIRunTrainingExampleFromRun, classifyAIRunFailureClass } from './ai-run-evidence-eval';\n\nexport interface AIRunTimelineItem {\n\ttime?: string;\n\ttype: string;\n\tlabel: string;\n\tstatus?: string;\n\tmessage?: string;\n\tevidenceRefs: string[];\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunQaHealth {\n\toutcome?: string;\n\tinfra: {\n\t\tpass: number;\n\t\tfail: number;\n\t\tblocked: number;\n\t\twarn: number;\n\t\tunknown: number;\n\t};\n\tcompile?: {\n\t\tstatus?: string;\n\t\tstale?: boolean;\n\t\tartifactPath?: string;\n\t\tmessage?: string;\n\t};\n\troute: {\n\t\tpass: number;\n\t\tfail: number;\n\t\tshellOnly: number;\n\t};\n\tbusiness: {\n\t\tpass: number;\n\t\tfail: number;\n\t\tblocked: number;\n\t\tmissing: boolean;\n\t};\n}\n\nexport interface AIRunCostPanel {\n\ttotalTokens: number;\n\testimatedUsd: number;\n\tmodels: string[];\n\tcategories: Array<{\n\t\tcategory: string;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tsources?: Array<{\n\t\tsource: string;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t\tmanualCount: number;\n\t\tuntrackedCount: number;\n\t}>;\n\tsurfaces?: Array<{\n\t\tsurface: string;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tmanualEstimatedUsd?: number;\n\tuntrackedEstimatedUsd?: number;\n\tuntrackedWarnings?: string[];\n\tobservabilityStatus?: string;\n\tmissingLedger?: boolean;\n\texternalCodexMonitorUsed?: boolean;\n\tnextAction?: string;\n}\n\nexport interface AIRunOperatorView {\n\trunId?: string;\n\tsource: string;\n\ttitle?: string;\n\toutcome: string;\n\tfailureClass: string;\n\tnextAction?: string;\n\twarnings: string[];\n\ttimeline: AIRunTimelineItem[];\n\tqaHealth: AIRunQaHealth;\n\tcostPanel: AIRunCostPanel;\n\ttrainingExample: ReturnType<typeof buildAIRunTrainingExampleFromRun>;\n}\n\nfunction cleanText(value: any, max = 1000): string {\n\treturn String(value || '').replace(/\\s+/g, ' ').trim().slice(0, max);\n}\n\nfunction toIso(value: any): string | undefined {\n\tif (value instanceof Date && Number.isFinite(value.getTime())) {\n\t\treturn value.toISOString();\n\t}\n\tif (value) {\n\t\tconst parsed = new Date(value);\n\t\tif (Number.isFinite(parsed.getTime())) {\n\t\t\treturn parsed.toISOString();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction countStatuses(values: Array<{ status?: string }>): Record<string, number> {\n\tconst result: Record<string, number> = {\n\t\tpass: 0,\n\t\tfail: 0,\n\t\tblocked: 0,\n\t\twarn: 0,\n\t\tunknown: 0\n\t};\n\tfor (const value of values) {\n\t\tconst status = cleanText(value.status, 40).toLowerCase();\n\t\tif (status === 'pass' || status === 'fail' || status === 'blocked' || status === 'warn') {\n\t\t\tresult[status] += 1;\n\t\t}\n\t\telse {\n\t\t\tresult.unknown += 1;\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction sortTimeline(items: AIRunTimelineItem[]): AIRunTimelineItem[] {\n\treturn [...items].sort((left, right) => {\n\t\tconst leftTime = left.time ? new Date(left.time).getTime() : 0;\n\t\tconst rightTime = right.time ? new Date(right.time).getTime() : 0;\n\t\treturn leftTime - rightTime;\n\t});\n}\n\nexport function buildAIRunTimeline(run: AIRun): AIRunTimelineItem[] {\n\tconst items: AIRunTimelineItem[] = [];\n\tfor (const event of run.events || []) {\n\t\titems.push({\n\t\t\ttime: toIso(event.recordedAt),\n\t\t\ttype: event.type,\n\t\t\tlabel: event.category || event.type,\n\t\t\tmessage: cleanText(event.message, 2000),\n\t\t\tevidenceRefs: Array.isArray(event.artifactPaths) ? event.artifactPaths : [],\n\t\t\tmetadata: event.metadata\n\t\t});\n\t}\n\tfor (const gate of run.gates || []) {\n\t\titems.push({\n\t\t\ttime: toIso(gate.recordedAt),\n\t\t\ttype: 'gate',\n\t\t\tlabel: gate.label || gate.key,\n\t\t\tstatus: gate.status,\n\t\t\tmessage: gate.reason,\n\t\t\tevidenceRefs: gate.evidenceRefs || [],\n\t\t\tmetadata: gate.metadata\n\t\t});\n\t}\n\tfor (const check of run.qa?.infraChecks || []) {\n\t\titems.push({\n\t\t\ttime: toIso(check.checkedAt),\n\t\t\ttype: 'qa_infra',\n\t\t\tlabel: check.name,\n\t\t\tstatus: check.status,\n\t\t\tmessage: check.message,\n\t\t\tevidenceRefs: check.path ? [check.path] : [],\n\t\t\tmetadata: check.metadata\n\t\t});\n\t}\n\tif (run.qa?.compile) {\n\t\titems.push({\n\t\t\ttime: toIso(run.qa.compile.recordedAt),\n\t\t\ttype: 'qa_compile',\n\t\t\tlabel: run.qa.compile.command || 'Compile/build',\n\t\t\tstatus: run.qa.compile.status,\n\t\t\tmessage: run.qa.compile.message,\n\t\t\tevidenceRefs: run.qa.compile.artifactPath ? [run.qa.compile.artifactPath] : [],\n\t\t\tmetadata: run.qa.compile.metadata\n\t\t});\n\t}\n\tfor (const probe of run.qa?.routeProbes || []) {\n\t\titems.push({\n\t\t\ttime: toIso(probe.recordedAt),\n\t\t\ttype: 'qa_route_probe',\n\t\t\tlabel: probe.route,\n\t\t\tstatus: probe.status,\n\t\t\tmessage: probe.message || probe.caption,\n\t\t\tevidenceRefs: probe.screenshot ? [probe.screenshot] : [],\n\t\t\tmetadata: probe.metadata\n\t\t});\n\t}\n\tfor (const assertion of run.qa?.businessAssertions || []) {\n\t\titems.push({\n\t\t\ttime: toIso(assertion.recordedAt),\n\t\t\ttype: 'qa_business_assertion',\n\t\t\tlabel: assertion.assertion,\n\t\t\tstatus: assertion.status,\n\t\t\tmessage: assertion.observed || assertion.dataProof || assertion.message,\n\t\t\tevidenceRefs: assertion.artifactPaths || [],\n\t\t\tmetadata: assertion.metadata\n\t\t});\n\t}\n\treturn sortTimeline(items);\n}\n\nexport function buildAIRunQaHealth(run: AIRun): AIRunQaHealth {\n\tconst infraCounts = countStatuses(run.qa?.infraChecks || []);\n\tconst routeProbes = run.qa?.routeProbes || [];\n\tconst routePass = routeProbes.filter((probe) => probe.status === 'pass' && probe.shellOnly !== true).length;\n\tconst routeFail = routeProbes.filter((probe) => probe.status === 'fail' || probe.status === 'blocked').length;\n\tconst shellOnly = routeProbes.filter((probe) => probe.shellOnly === true).length;\n\tconst assertions = run.qa?.businessAssertions || [];\n\tconst businessPass = assertions.filter((assertion) => assertion.status === 'pass').length;\n\tconst businessFail = assertions.filter((assertion) => assertion.status === 'fail').length;\n\tconst businessBlocked = assertions.filter((assertion) => assertion.status === 'blocked').length;\n\treturn {\n\t\toutcome: run.qa?.outcome,\n\t\tinfra: {\n\t\t\tpass: infraCounts.pass,\n\t\t\tfail: infraCounts.fail,\n\t\t\tblocked: infraCounts.blocked,\n\t\t\twarn: infraCounts.warn,\n\t\t\tunknown: infraCounts.unknown\n\t\t},\n\t\tcompile: run.qa?.compile ? {\n\t\t\tstatus: run.qa.compile.status,\n\t\t\tstale: run.qa.compile.staleEvidence === true || run.qa.compile.status === 'stale',\n\t\t\tartifactPath: run.qa.compile.artifactPath,\n\t\t\tmessage: run.qa.compile.message\n\t\t} : undefined,\n\t\troute: {\n\t\t\tpass: routePass,\n\t\t\tfail: routeFail,\n\t\t\tshellOnly\n\t\t},\n\t\tbusiness: {\n\t\t\tpass: businessPass,\n\t\t\tfail: businessFail,\n\t\t\tblocked: businessBlocked,\n\t\t\tmissing: assertions.length === 0\n\t\t}\n\t};\n}\n\nexport function buildAIRunCostPanel(cost?: AIRunCost, run?: AIRun): AIRunCostPanel {\n\tconst categories = Object.keys(cost?.categories || {}).sort().map((category) => {\n\t\tconst entry = cost?.categories?.[category];\n\t\treturn {\n\t\t\tcategory,\n\t\t\ttotalTokens: Number(entry?.totalTokens || 0),\n\t\t\testimatedUsd: Number(entry?.estimatedUsd || 0),\n\t\t\tcount: Number(entry?.count || 0)\n\t\t};\n\t});\n\tconst sources = Object.keys(cost?.sources || {}).sort().map((source) => {\n\t\tconst entry = cost?.sources?.[source];\n\t\treturn {\n\t\t\tsource,\n\t\t\ttotalTokens: Number(entry?.totalTokens || 0),\n\t\t\testimatedUsd: Number(entry?.estimatedUsd || 0),\n\t\t\tcount: Number(entry?.count || 0),\n\t\t\tmanualCount: Number(entry?.manualCount || 0),\n\t\t\tuntrackedCount: Number(entry?.untrackedCount || 0)\n\t\t};\n\t});\n\tconst surfaces = Object.keys(cost?.surfaces || {}).sort().map((surface) => {\n\t\tconst entry = cost?.surfaces?.[surface];\n\t\treturn {\n\t\t\tsurface,\n\t\t\ttotalTokens: Number(entry?.totalTokens || 0),\n\t\t\testimatedUsd: Number(entry?.estimatedUsd || 0),\n\t\t\tcount: Number(entry?.count || 0)\n\t\t};\n\t});\n\tconst costGate = run?.gates?.find((gate) => gate.key === 'cost_observability');\n\tconst observability = (run?.metadata as any)?.costObservability || costGate?.metadata || {};\n\treturn {\n\t\ttotalTokens: Number(cost?.totalTokens || 0),\n\t\testimatedUsd: Number(cost?.estimatedUsd || 0),\n\t\tmodels: Array.isArray(cost?.models) ? cost.models : [],\n\t\tcategories,\n\t\tsources,\n\t\tsurfaces,\n\t\tmanualEstimatedUsd: Number(cost?.manualEstimatedUsd || 0),\n\t\tuntrackedEstimatedUsd: Number(cost?.untrackedEstimatedUsd || 0),\n\t\tuntrackedWarnings: Array.isArray(cost?.untrackedWarnings) ? cost.untrackedWarnings : [],\n\t\tobservabilityStatus: cleanText(observability.status || costGate?.status, 80),\n\t\tmissingLedger: observability.missingLedger === true || costGate?.metadata?.missingLedger === true,\n\t\texternalCodexMonitorUsed: observability.externalCodexMonitorUsed === true || costGate?.metadata?.externalCodexMonitorUsed === true,\n\t\tnextAction: cleanText(observability.nextAction, 500)\n\t};\n}\n\nexport function buildAIRunFalsePassWarnings(run: AIRun): string[] {\n\tconst warnings = Array.isArray(run.warnings) ? [...run.warnings] : [];\n\tif (run.outcome === 'false_pass' && !warnings.includes('false_pass_outcome')) {\n\t\twarnings.push('false_pass_outcome');\n\t}\n\tif ((run.qa?.outcome === 'route_only_pass' || run.qa?.outcome === 'incomplete') && !warnings.includes('missing_business_assertion')) {\n\t\twarnings.push('missing_business_assertion');\n\t}\n\tif (run.qa?.routeProbes?.some((probe) => probe.shellOnly === true) && !warnings.includes('shell_only_route')) {\n\t\twarnings.push('shell_only_route');\n\t}\n\tif (run.outcome === 'release_blocked' && !warnings.includes('release_blocked_after_scorecard')) {\n\t\twarnings.push('release_blocked_after_scorecard');\n\t}\n\treturn warnings;\n}\n\nexport function buildAIRunOperatorView(run: AIRun): AIRunOperatorView {\n\treturn {\n\t\trunId: run.id || (run as any)._id,\n\t\tsource: run.source,\n\t\ttitle: run.title,\n\t\toutcome: run.outcome,\n\t\tfailureClass: classifyAIRunFailureClass(run),\n\t\tnextAction: run.nextAction,\n\t\twarnings: buildAIRunFalsePassWarnings(run),\n\t\ttimeline: buildAIRunTimeline(run),\n\t\tqaHealth: buildAIRunQaHealth(run),\n\t\tcostPanel: buildAIRunCostPanel(run.cost, run),\n\t\ttrainingExample: buildAIRunTrainingExampleFromRun(run)\n\t};\n}\n"]}
|
|
@@ -776,7 +776,7 @@ export interface ResolveIOSupportNextActionContract {
|
|
|
776
776
|
action: ResolveIOSupportV5AutonomousNextAction;
|
|
777
777
|
label: string;
|
|
778
778
|
primaryCommand: string;
|
|
779
|
-
lane: ResolveIOSupportV5Lane | 'release' | 'customer';
|
|
779
|
+
lane: ResolveIOSupportV5Lane | 'release' | 'customer' | 'supervisor';
|
|
780
780
|
stepType: ResolveIOSupportV5StepType | 'release_gate' | 'customer_reply';
|
|
781
781
|
safeToAutoRun: boolean;
|
|
782
782
|
requiresHumanApproval: boolean;
|
|
@@ -814,6 +814,40 @@ export interface ResolveIOSupportNextActionContract {
|
|
|
814
814
|
nextCommands: string[];
|
|
815
815
|
createdAt: string;
|
|
816
816
|
}
|
|
817
|
+
export type ResolveIOSupportNextActionContractValidationStatus = 'ready' | 'manual_required' | 'blocked';
|
|
818
|
+
export interface ResolveIOSupportNextActionContractValidation {
|
|
819
|
+
valid: boolean;
|
|
820
|
+
status: ResolveIOSupportNextActionContractValidationStatus;
|
|
821
|
+
blockers: string[];
|
|
822
|
+
warnings: string[];
|
|
823
|
+
normalized?: ResolveIOSupportNextActionContract;
|
|
824
|
+
}
|
|
825
|
+
export type ResolveIOSupportManagerExecutionPacketStatus = 'auto_ready' | 'manual_required' | 'blocked';
|
|
826
|
+
export type ResolveIOSupportManagerExecutionRetryScope = 'none' | 'diagnosis_only' | 'infra_only' | 'owner_files_only' | 'business_proof_only' | 'release_hotfix_only' | 'customer_draft_only' | 'evidence_only';
|
|
827
|
+
export interface ResolveIOSupportManagerExecutionPacket {
|
|
828
|
+
packetId: string;
|
|
829
|
+
status: ResolveIOSupportManagerExecutionPacketStatus;
|
|
830
|
+
action: ResolveIOSupportV5AutonomousNextAction;
|
|
831
|
+
label: string;
|
|
832
|
+
primaryCommand: string;
|
|
833
|
+
lane: ResolveIOSupportV5Lane | 'release' | 'customer' | 'supervisor';
|
|
834
|
+
stepType: ResolveIOSupportV5StepType | 'release_gate' | 'customer_reply';
|
|
835
|
+
executeNow: boolean;
|
|
836
|
+
canRunWithoutCodexMonitor: boolean;
|
|
837
|
+
codexFallbackRequired: boolean;
|
|
838
|
+
retryScope: ResolveIOSupportManagerExecutionRetryScope;
|
|
839
|
+
maxAttemptsBeforeFreshEvidence: number;
|
|
840
|
+
costRisk: ResolveIOSupportNextActionCostRisk;
|
|
841
|
+
proofRequiredBeforeContinuation: string[];
|
|
842
|
+
expectedStateTransition: string;
|
|
843
|
+
stopConditions: string[];
|
|
844
|
+
forbiddenActions: string[];
|
|
845
|
+
ownerFiles: string[];
|
|
846
|
+
nextCommands: string[];
|
|
847
|
+
blockers: string[];
|
|
848
|
+
validation: ResolveIOSupportNextActionContractValidation;
|
|
849
|
+
createdAt: string;
|
|
850
|
+
}
|
|
817
851
|
export interface ResolveIOSupportV5AutonomousDecisionInput {
|
|
818
852
|
bundle: ResolveIOSupportV5StateBundle;
|
|
819
853
|
changedFiles?: any;
|
|
@@ -851,7 +885,7 @@ export interface ResolveIOSupportV5AutonomousDecision {
|
|
|
851
885
|
liveHotfixBlockedUntilCommit: boolean;
|
|
852
886
|
canDraftCustomerReply: boolean;
|
|
853
887
|
canSendCustomerReply: boolean;
|
|
854
|
-
lane: ResolveIOSupportV5Lane | 'release' | 'customer';
|
|
888
|
+
lane: ResolveIOSupportV5Lane | 'release' | 'customer' | 'supervisor';
|
|
855
889
|
stepType: ResolveIOSupportV5StepType | 'release_gate' | 'customer_reply';
|
|
856
890
|
microtaskId?: string;
|
|
857
891
|
primaryCommand: string;
|
|
@@ -877,6 +911,7 @@ export interface ResolveIOSupportV5AutonomousDecision {
|
|
|
877
911
|
rootCauseReadiness: ResolveIOSupportRootCauseReadiness;
|
|
878
912
|
continuationProofCheckpoint: ResolveIOSupportContinuationProofCheckpoint;
|
|
879
913
|
nextActionContract: ResolveIOSupportNextActionContract;
|
|
914
|
+
managerExecutionPacket: ResolveIOSupportManagerExecutionPacket;
|
|
880
915
|
humanReviewPacket: ResolveIOSupportHumanReviewPacket;
|
|
881
916
|
humanDecisionRequest?: ResolveIOSupportHumanDecisionRequest;
|
|
882
917
|
hotfixContinuation?: ResolveIOAIManagerHotfixContinuationDecision;
|
|
@@ -912,6 +947,8 @@ export declare function buildResolveIOSupportIssueClassProbes(value: any): Resol
|
|
|
912
947
|
export declare function validateResolveIOSupportIssueClassProbePlan(value: any, diagnosisGate?: any, now?: Date | string): ResolveIOSupportIssueClassProbePlanValidation;
|
|
913
948
|
export declare function buildResolveIOSupportIssueClassProbePlan(diagnosisGate: any, now?: Date | string): ResolveIOSupportIssueClassProbePlan;
|
|
914
949
|
export declare function hashResolveIOSupportV5Evidence(value: any): string;
|
|
950
|
+
export declare function validateResolveIOSupportNextActionContract(value: any): ResolveIOSupportNextActionContractValidation;
|
|
951
|
+
export declare function buildResolveIOSupportManagerExecutionPacket(contract: ResolveIOSupportNextActionContract, now?: Date | string): ResolveIOSupportManagerExecutionPacket;
|
|
915
952
|
export declare function decideResolveIOSupportV5RepeatedFailureStop(input: ResolveIOSupportV5RepeatStopInput): ResolveIOSupportV5RepeatStopDecision;
|
|
916
953
|
export declare function evaluateResolveIOSupportEvidenceFreshness(input: {
|
|
917
954
|
history?: ResolveIOSupportV5StepRecord[];
|
|
@@ -64,6 +64,8 @@ exports.buildResolveIOSupportIssueClassProbes = buildResolveIOSupportIssueClassP
|
|
|
64
64
|
exports.validateResolveIOSupportIssueClassProbePlan = validateResolveIOSupportIssueClassProbePlan;
|
|
65
65
|
exports.buildResolveIOSupportIssueClassProbePlan = buildResolveIOSupportIssueClassProbePlan;
|
|
66
66
|
exports.hashResolveIOSupportV5Evidence = hashResolveIOSupportV5Evidence;
|
|
67
|
+
exports.validateResolveIOSupportNextActionContract = validateResolveIOSupportNextActionContract;
|
|
68
|
+
exports.buildResolveIOSupportManagerExecutionPacket = buildResolveIOSupportManagerExecutionPacket;
|
|
67
69
|
exports.decideResolveIOSupportV5RepeatedFailureStop = decideResolveIOSupportV5RepeatedFailureStop;
|
|
68
70
|
exports.evaluateResolveIOSupportEvidenceFreshness = evaluateResolveIOSupportEvidenceFreshness;
|
|
69
71
|
exports.buildResolveIOSupportContinuationProofCheckpoint = buildResolveIOSupportContinuationProofCheckpoint;
|
|
@@ -2533,6 +2535,193 @@ function hashResolveIOSupportV5Evidence(value) {
|
|
|
2533
2535
|
}
|
|
2534
2536
|
return "ev-".concat(Math.abs(hash).toString(36) || '0');
|
|
2535
2537
|
}
|
|
2538
|
+
function supportManagerRetryScopeForAction(action) {
|
|
2539
|
+
if (action === 'run_diagnosis_gate' || action === 'revise_diagnosis_scope') {
|
|
2540
|
+
return 'diagnosis_only';
|
|
2541
|
+
}
|
|
2542
|
+
if (action === 'repair_infra_only') {
|
|
2543
|
+
return 'infra_only';
|
|
2544
|
+
}
|
|
2545
|
+
if (action === 'run_owner_scoped_repair') {
|
|
2546
|
+
return 'owner_files_only';
|
|
2547
|
+
}
|
|
2548
|
+
if (action === 'run_business_proof_qa') {
|
|
2549
|
+
return 'business_proof_only';
|
|
2550
|
+
}
|
|
2551
|
+
if (action === 'repair_release_hotfix_first') {
|
|
2552
|
+
return 'release_hotfix_only';
|
|
2553
|
+
}
|
|
2554
|
+
if (action === 'draft_customer_reply' || action === 'ask_customer_clarification') {
|
|
2555
|
+
return 'customer_draft_only';
|
|
2556
|
+
}
|
|
2557
|
+
if (action === 'collect_new_evidence') {
|
|
2558
|
+
return 'evidence_only';
|
|
2559
|
+
}
|
|
2560
|
+
return 'none';
|
|
2561
|
+
}
|
|
2562
|
+
function supportManagerMaxAttemptsForContract(contract) {
|
|
2563
|
+
if (contract.action === 'run_owner_scoped_repair' || contract.action === 'repair_release_hotfix_first') {
|
|
2564
|
+
return 1;
|
|
2565
|
+
}
|
|
2566
|
+
if (contract.action === 'repair_infra_only') {
|
|
2567
|
+
return 2;
|
|
2568
|
+
}
|
|
2569
|
+
if (contract.action === 'run_business_proof_qa' || contract.action === 'collect_new_evidence') {
|
|
2570
|
+
return 1;
|
|
2571
|
+
}
|
|
2572
|
+
return contract.costRisk === 'expensive_model' ? 1 : 2;
|
|
2573
|
+
}
|
|
2574
|
+
function validateResolveIOSupportNextActionContract(value) {
|
|
2575
|
+
var e_9, _a;
|
|
2576
|
+
var _b, _c, _d;
|
|
2577
|
+
var contract = cleanObject(value);
|
|
2578
|
+
var blockers = [];
|
|
2579
|
+
var warnings = [];
|
|
2580
|
+
var action = cleanText(contract.action, 120);
|
|
2581
|
+
var primaryCommand = cleanText(contract.primaryCommand, 240);
|
|
2582
|
+
var requiredStringFields = [
|
|
2583
|
+
['action', action],
|
|
2584
|
+
['label', contract.label],
|
|
2585
|
+
['primaryCommand', primaryCommand],
|
|
2586
|
+
['expectedStateTransition', contract.expectedStateTransition],
|
|
2587
|
+
['contractId', contract.contractId]
|
|
2588
|
+
];
|
|
2589
|
+
try {
|
|
2590
|
+
for (var requiredStringFields_1 = __values(requiredStringFields), requiredStringFields_1_1 = requiredStringFields_1.next(); !requiredStringFields_1_1.done; requiredStringFields_1_1 = requiredStringFields_1.next()) {
|
|
2591
|
+
var _e = __read(requiredStringFields_1_1.value, 2), field = _e[0], fieldValue = _e[1];
|
|
2592
|
+
if (!cleanText(fieldValue, 500)) {
|
|
2593
|
+
blockers.push("NextActionContract.".concat(field, " is required."));
|
|
2594
|
+
}
|
|
2595
|
+
}
|
|
2596
|
+
}
|
|
2597
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
2598
|
+
finally {
|
|
2599
|
+
try {
|
|
2600
|
+
if (requiredStringFields_1_1 && !requiredStringFields_1_1.done && (_a = requiredStringFields_1.return)) _a.call(requiredStringFields_1);
|
|
2601
|
+
}
|
|
2602
|
+
finally { if (e_9) throw e_9.error; }
|
|
2603
|
+
}
|
|
2604
|
+
if (!Array.isArray(contract.nextCommands) || !contract.nextCommands.length) {
|
|
2605
|
+
blockers.push('NextActionContract.nextCommands must include at least the primary command.');
|
|
2606
|
+
}
|
|
2607
|
+
if (primaryCommand && Array.isArray(contract.nextCommands) && !contract.nextCommands.includes(primaryCommand)) {
|
|
2608
|
+
blockers.push('NextActionContract.nextCommands must include primaryCommand.');
|
|
2609
|
+
}
|
|
2610
|
+
if (!Array.isArray(contract.stopConditions) || !contract.stopConditions.length) {
|
|
2611
|
+
blockers.push('NextActionContract.stopConditions are required so the manager can stop without Codex sidecar monitoring.');
|
|
2612
|
+
}
|
|
2613
|
+
if (!Array.isArray(contract.forbiddenActions) || contract.forbiddenActions.length < 2) {
|
|
2614
|
+
blockers.push('NextActionContract.forbiddenActions must make unsafe follow-up work explicit.');
|
|
2615
|
+
}
|
|
2616
|
+
if (!Array.isArray(contract.successEvidence) || !contract.successEvidence.length) {
|
|
2617
|
+
blockers.push('NextActionContract.successEvidence is required before continuation.');
|
|
2618
|
+
}
|
|
2619
|
+
if (contract.safeToAutoRun === true && contract.requiresHumanApproval === true) {
|
|
2620
|
+
blockers.push('NextActionContract cannot be both safeToAutoRun and requiresHumanApproval.');
|
|
2621
|
+
}
|
|
2622
|
+
if (contract.canRunWithoutCodexMonitor === true) {
|
|
2623
|
+
if (contract.safeToAutoRun !== true) {
|
|
2624
|
+
blockers.push('canRunWithoutCodexMonitor requires safeToAutoRun=true.');
|
|
2625
|
+
}
|
|
2626
|
+
if (contract.codexFallbackRequired === true) {
|
|
2627
|
+
blockers.push('canRunWithoutCodexMonitor cannot require Codex fallback.');
|
|
2628
|
+
}
|
|
2629
|
+
if (!contract.stopConditions.some(function (entry) { return /same failure|evidence hash|blocker fingerprint|stop/i.test(entry); })) {
|
|
2630
|
+
blockers.push('canRunWithoutCodexMonitor requires a deterministic same-failure or evidence-change stop condition.');
|
|
2631
|
+
}
|
|
2632
|
+
}
|
|
2633
|
+
if (action === 'run_owner_scoped_repair') {
|
|
2634
|
+
if (contract.rootCauseFirstSatisfied !== true) {
|
|
2635
|
+
blockers.push('Owner-scoped repair requires rootCauseFirstSatisfied=true.');
|
|
2636
|
+
}
|
|
2637
|
+
if (!Array.isArray(contract.ownerFiles) || !contract.ownerFiles.length) {
|
|
2638
|
+
blockers.push('Owner-scoped repair requires a non-empty ownerFiles set.');
|
|
2639
|
+
}
|
|
2640
|
+
if (!contract.forbiddenActions.some(function (entry) { return /owner_files|outside/i.test(entry); })) {
|
|
2641
|
+
blockers.push('Owner-scoped repair must forbid edits outside owner_files.');
|
|
2642
|
+
}
|
|
2643
|
+
}
|
|
2644
|
+
if (action === 'run_business_proof_qa') {
|
|
2645
|
+
if (((_b = contract.decisionBasis) === null || _b === void 0 ? void 0 : _b.issueClassProbePlanReady) !== true) {
|
|
2646
|
+
blockers.push('Business proof QA requires issueClassProbePlanReady=true.');
|
|
2647
|
+
}
|
|
2648
|
+
if (!contract.successEvidence.some(function (entry) { return /AIQaBusinessAssertion|business proof|before\/action\/after/i.test(entry); })) {
|
|
2649
|
+
blockers.push('Business proof QA must require AIQaBusinessAssertion or before/action/after proof.');
|
|
2650
|
+
}
|
|
2651
|
+
}
|
|
2652
|
+
if (action === 'repair_release_hotfix_first') {
|
|
2653
|
+
if (((_c = contract.decisionBasis) === null || _c === void 0 ? void 0 : _c.hotfixCommitRequired) === true
|
|
2654
|
+
&& !__spreadArray(__spreadArray(__spreadArray([], __read(contract.successEvidence), false), __read(contract.stopConditions), false), __read(contract.forbiddenActions), false).some(function (entry) { return /sourceCommitSha|githubCommitUrl|gitCommitStatus|gitPushStatus|GitHub commit/i.test(entry); })) {
|
|
2655
|
+
blockers.push('Hotfix release action requires GitHub commit and push proof before continuation.');
|
|
2656
|
+
}
|
|
2657
|
+
if (((_d = contract.decisionBasis) === null || _d === void 0 ? void 0 : _d.liveHotfixBlockedUntilCommit) === true && contract.safeToAutoRun === true && primaryCommand !== 'record_hotfix_evidence') {
|
|
2658
|
+
warnings.push('Live hotfix is blocked until commit proof; manager should record evidence before any live apply.');
|
|
2659
|
+
}
|
|
2660
|
+
}
|
|
2661
|
+
if (action === 'draft_customer_reply') {
|
|
2662
|
+
if (!contract.forbiddenActions.some(function (entry) { return /do not send|send/i.test(entry); })) {
|
|
2663
|
+
blockers.push('Customer reply draft action must forbid sending without human approval.');
|
|
2664
|
+
}
|
|
2665
|
+
}
|
|
2666
|
+
var status = blockers.length
|
|
2667
|
+
? 'blocked'
|
|
2668
|
+
: contract.requiresHumanApproval === true || contract.safeToAutoRun !== true
|
|
2669
|
+
? 'manual_required'
|
|
2670
|
+
: 'ready';
|
|
2671
|
+
return {
|
|
2672
|
+
valid: blockers.length === 0,
|
|
2673
|
+
status: status,
|
|
2674
|
+
blockers: blockers,
|
|
2675
|
+
warnings: warnings,
|
|
2676
|
+
normalized: contract.contractId ? contract : undefined
|
|
2677
|
+
};
|
|
2678
|
+
}
|
|
2679
|
+
function buildResolveIOSupportManagerExecutionPacket(contract, now) {
|
|
2680
|
+
var validation = validateResolveIOSupportNextActionContract(contract);
|
|
2681
|
+
var createdAt = isoNow(now || (contract === null || contract === void 0 ? void 0 : contract.createdAt));
|
|
2682
|
+
var executeNow = validation.valid === true
|
|
2683
|
+
&& validation.status === 'ready'
|
|
2684
|
+
&& contract.canRunWithoutCodexMonitor === true
|
|
2685
|
+
&& contract.codexFallbackRequired !== true;
|
|
2686
|
+
var status = executeNow
|
|
2687
|
+
? 'auto_ready'
|
|
2688
|
+
: validation.status === 'manual_required'
|
|
2689
|
+
? 'manual_required'
|
|
2690
|
+
: 'blocked';
|
|
2691
|
+
var proofRequiredBeforeContinuation = Array.from(new Set(__spreadArray(__spreadArray([], __read(cleanList(contract === null || contract === void 0 ? void 0 : contract.successEvidence, 24, 500)), false), [
|
|
2692
|
+
cleanText(contract === null || contract === void 0 ? void 0 : contract.expectedStateTransition, 500)
|
|
2693
|
+
], false).filter(Boolean))).slice(0, 24);
|
|
2694
|
+
return {
|
|
2695
|
+
packetId: "support-manager-exec-".concat(hashResolveIOSupportV5Evidence({
|
|
2696
|
+
contractId: contract === null || contract === void 0 ? void 0 : contract.contractId,
|
|
2697
|
+
action: contract === null || contract === void 0 ? void 0 : contract.action,
|
|
2698
|
+
primaryCommand: contract === null || contract === void 0 ? void 0 : contract.primaryCommand,
|
|
2699
|
+
status: status,
|
|
2700
|
+
createdAt: createdAt.slice(0, 16)
|
|
2701
|
+
}).slice(0, 16)),
|
|
2702
|
+
status: status,
|
|
2703
|
+
action: contract === null || contract === void 0 ? void 0 : contract.action,
|
|
2704
|
+
label: cleanText(contract === null || contract === void 0 ? void 0 : contract.label, 160),
|
|
2705
|
+
primaryCommand: cleanText(contract === null || contract === void 0 ? void 0 : contract.primaryCommand, 240),
|
|
2706
|
+
lane: (contract === null || contract === void 0 ? void 0 : contract.lane) || 'supervisor',
|
|
2707
|
+
stepType: (contract === null || contract === void 0 ? void 0 : contract.stepType) || 'cleanup',
|
|
2708
|
+
executeNow: executeNow,
|
|
2709
|
+
canRunWithoutCodexMonitor: (contract === null || contract === void 0 ? void 0 : contract.canRunWithoutCodexMonitor) === true,
|
|
2710
|
+
codexFallbackRequired: (contract === null || contract === void 0 ? void 0 : contract.codexFallbackRequired) === true,
|
|
2711
|
+
retryScope: supportManagerRetryScopeForAction(contract === null || contract === void 0 ? void 0 : contract.action),
|
|
2712
|
+
maxAttemptsBeforeFreshEvidence: supportManagerMaxAttemptsForContract(contract),
|
|
2713
|
+
costRisk: (contract === null || contract === void 0 ? void 0 : contract.costRisk) || 'manual_blocked',
|
|
2714
|
+
proofRequiredBeforeContinuation: proofRequiredBeforeContinuation,
|
|
2715
|
+
expectedStateTransition: cleanText(contract === null || contract === void 0 ? void 0 : contract.expectedStateTransition, 1000),
|
|
2716
|
+
stopConditions: cleanList(contract === null || contract === void 0 ? void 0 : contract.stopConditions, 24, 500),
|
|
2717
|
+
forbiddenActions: cleanList(contract === null || contract === void 0 ? void 0 : contract.forbiddenActions, 24, 500),
|
|
2718
|
+
ownerFiles: cleanList(contract === null || contract === void 0 ? void 0 : contract.ownerFiles, 24, 500),
|
|
2719
|
+
nextCommands: cleanList(contract === null || contract === void 0 ? void 0 : contract.nextCommands, 24, 240),
|
|
2720
|
+
blockers: Array.from(new Set(__spreadArray(__spreadArray([], __read(cleanList(contract === null || contract === void 0 ? void 0 : contract.blockers, 24, 500)), false), __read(validation.blockers), false))).slice(0, 24),
|
|
2721
|
+
validation: validation,
|
|
2722
|
+
createdAt: createdAt
|
|
2723
|
+
};
|
|
2724
|
+
}
|
|
2536
2725
|
function decideResolveIOSupportV5RepeatedFailureStop(input) {
|
|
2537
2726
|
var failureClass = cleanText(input.failureClass || 'unknown', 80).toLowerCase();
|
|
2538
2727
|
var blockerFingerprint = fingerprintResolveIOSupportV5Blocker(input.blocker || '');
|
|
@@ -3083,7 +3272,7 @@ function buildResolveIOSupportV5ScopeDigest(input) {
|
|
|
3083
3272
|
return raw.slice(0, maxChars);
|
|
3084
3273
|
}
|
|
3085
3274
|
function buildResolveIOSupportV5MicrotaskLedger(input) {
|
|
3086
|
-
var
|
|
3275
|
+
var e_10, _a;
|
|
3087
3276
|
var existing = Array.isArray(input.existing) ? input.existing : [];
|
|
3088
3277
|
var completedByObjective = new Map();
|
|
3089
3278
|
try {
|
|
@@ -3094,12 +3283,12 @@ function buildResolveIOSupportV5MicrotaskLedger(input) {
|
|
|
3094
3283
|
}
|
|
3095
3284
|
}
|
|
3096
3285
|
}
|
|
3097
|
-
catch (
|
|
3286
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
3098
3287
|
finally {
|
|
3099
3288
|
try {
|
|
3100
3289
|
if (existing_1_1 && !existing_1_1.done && (_a = existing_1.return)) _a.call(existing_1);
|
|
3101
3290
|
}
|
|
3102
|
-
finally { if (
|
|
3291
|
+
finally { if (e_10) throw e_10.error; }
|
|
3103
3292
|
}
|
|
3104
3293
|
var now = isoNow(input.now);
|
|
3105
3294
|
var requirements = cleanList(input.requirements, 30, 240);
|
|
@@ -3908,7 +4097,9 @@ function decideResolveIOSupportV5AutonomousNextAction(input) {
|
|
|
3908
4097
|
var makeDecision = function (action, label, reason, fields) {
|
|
3909
4098
|
var _a;
|
|
3910
4099
|
var primaryCommand = fields.primaryCommand || action;
|
|
3911
|
-
var nextCommands =
|
|
4100
|
+
var nextCommands = Array.from(new Set(__spreadArray([
|
|
4101
|
+
primaryCommand
|
|
4102
|
+
], __read((fields.nextCommands || [])), false).filter(Boolean)));
|
|
3912
4103
|
var requiredEvidence = fields.requiredEvidence || [];
|
|
3913
4104
|
var blockers = fields.blockers || [];
|
|
3914
4105
|
var rootCauseReadiness = buildRootCauseReadiness(action, reason, fields, primaryCommand, nextCommands, blockers);
|
|
@@ -3926,6 +4117,7 @@ function decideResolveIOSupportV5AutonomousNextAction(input) {
|
|
|
3926
4117
|
blocksProductRepair: evidenceFreshness.mustCollectNewEvidence === true
|
|
3927
4118
|
});
|
|
3928
4119
|
var nextActionContract = buildNextActionContract(action, label, reason, fields, rootCauseReadiness, continuationProofCheckpoint, primaryCommand, nextCommands, requiredEvidence, forbiddenActions, blockers);
|
|
4120
|
+
var managerExecutionPacket = buildResolveIOSupportManagerExecutionPacket(nextActionContract, input.now);
|
|
3929
4121
|
var humanReviewPacket = fields.humanReviewPacket
|
|
3930
4122
|
|| (action === 'draft_customer_reply' && customerReplyPolicy.humanReviewPacket ? customerReplyPolicy.humanReviewPacket : undefined)
|
|
3931
4123
|
|| buildResolveIOSupportHumanReviewPacket({
|
|
@@ -3996,6 +4188,7 @@ function decideResolveIOSupportV5AutonomousNextAction(input) {
|
|
|
3996
4188
|
rootCauseReadiness: rootCauseReadiness,
|
|
3997
4189
|
continuationProofCheckpoint: continuationProofCheckpoint,
|
|
3998
4190
|
nextActionContract: nextActionContract,
|
|
4191
|
+
managerExecutionPacket: managerExecutionPacket,
|
|
3999
4192
|
humanReviewPacket: humanReviewPacket,
|
|
4000
4193
|
humanDecisionRequest: humanDecisionRequest,
|
|
4001
4194
|
hotfixContinuation: fields.hotfixContinuation,
|
|
@@ -4551,7 +4744,7 @@ function buildResolveIOSupportV5MicrotaskPrompt(input) {
|
|
|
4551
4744
|
};
|
|
4552
4745
|
}
|
|
4553
4746
|
function summarizeResolveIOSupportV5MicrotaskUsage(bundle) {
|
|
4554
|
-
var
|
|
4747
|
+
var e_11, _a, e_12, _b;
|
|
4555
4748
|
var byMicrotask = new Map();
|
|
4556
4749
|
var bySection = new Map();
|
|
4557
4750
|
var totalPromptTokenEstimate = 0;
|
|
@@ -4566,17 +4759,17 @@ function summarizeResolveIOSupportV5MicrotaskUsage(bundle) {
|
|
|
4566
4759
|
existing.calls += 1;
|
|
4567
4760
|
byMicrotask.set(usage.microtaskId, existing);
|
|
4568
4761
|
try {
|
|
4569
|
-
for (var _e = (
|
|
4762
|
+
for (var _e = (e_12 = void 0, __values(usage.promptSections || [])), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
4570
4763
|
var section = _f.value;
|
|
4571
4764
|
bySection.set(section.name, (bySection.get(section.name) || 0) + section.tokenEstimate);
|
|
4572
4765
|
}
|
|
4573
4766
|
}
|
|
4574
|
-
catch (
|
|
4767
|
+
catch (e_12_1) { e_12 = { error: e_12_1 }; }
|
|
4575
4768
|
finally {
|
|
4576
4769
|
try {
|
|
4577
4770
|
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
4578
4771
|
}
|
|
4579
|
-
finally { if (
|
|
4772
|
+
finally { if (e_12) throw e_12.error; }
|
|
4580
4773
|
}
|
|
4581
4774
|
var hardCap = usage.lane === 'qa' ? promptBudget.qaMicrotaskHardCap : promptBudget.buildMicrotaskHardCap;
|
|
4582
4775
|
if ((usage.promptTokenEstimate || 0) > hardCap) {
|
|
@@ -4584,12 +4777,12 @@ function summarizeResolveIOSupportV5MicrotaskUsage(bundle) {
|
|
|
4584
4777
|
}
|
|
4585
4778
|
}
|
|
4586
4779
|
}
|
|
4587
|
-
catch (
|
|
4780
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
4588
4781
|
finally {
|
|
4589
4782
|
try {
|
|
4590
4783
|
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
4591
4784
|
}
|
|
4592
|
-
finally { if (
|
|
4785
|
+
finally { if (e_11) throw e_11.error; }
|
|
4593
4786
|
}
|
|
4594
4787
|
return {
|
|
4595
4788
|
totalPromptTokenEstimate: totalPromptTokenEstimate,
|