@resolveio/server-lib 22.3.173 → 22.3.175
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 +176 -18
- package/util/ai-run-evidence-adapters.js.map +1 -1
- package/util/ai-run-evidence-eval.d.ts +2 -2
- package/util/ai-run-evidence-eval.js +13 -0
- package/util/ai-run-evidence-eval.js.map +1 -1
- package/util/ai-run-evidence.js +28 -0
- package/util/ai-run-evidence.js.map +1 -1
- package/util/support-runner-v5.js.map +1 -1
package/package.json
CHANGED
|
@@ -1513,6 +1513,40 @@ function supportNextActionContractObject(ticket, job, evidence) {
|
|
|
1513
1513
|
|| ticket.support_v5_autonomous_decision);
|
|
1514
1514
|
return evidenceObject(autonomousDecision.nextActionContract, autonomousDecision.next_action_contract, job.supportV5NextActionContract, job.support_v5_next_action_contract, job.nextActionContract, job.next_action_contract, evidence.supportV5NextActionContract, evidence.support_v5_next_action_contract, evidence.nextActionContract, evidence.next_action_contract, ticket.supportV5NextActionContract, ticket.support_v5_next_action_contract, ticket.nextActionContract, ticket.next_action_contract, ticketManager.nextActionContract, ticketManager.next_action_contract);
|
|
1515
1515
|
}
|
|
1516
|
+
function supportNextActionContractRequired(ticket, job, evidence) {
|
|
1517
|
+
var ticketAutomation = plainObject(ticket.automation);
|
|
1518
|
+
var ticketManager = plainObject(ticketAutomation.manager || ticket.manager);
|
|
1519
|
+
var workflowMarkers = [
|
|
1520
|
+
job.supportWorkflowMode,
|
|
1521
|
+
job.workflowMode,
|
|
1522
|
+
job.workflow_mode,
|
|
1523
|
+
job.supportWorkflowVersion,
|
|
1524
|
+
job.support_workflow_version,
|
|
1525
|
+
ticket.supportWorkflowMode,
|
|
1526
|
+
ticket.workflowMode,
|
|
1527
|
+
ticket.workflow_mode
|
|
1528
|
+
].map(function (value) { return cleanText(value, 80).toLowerCase(); });
|
|
1529
|
+
return workflowMarkers.some(function (value) { return value === 'support_v5' || value === 'v5'; })
|
|
1530
|
+
|| !!job.supportV5SupervisorState
|
|
1531
|
+
|| !!job.supportV5MicrotaskLedger
|
|
1532
|
+
|| !!job.supportV5StepHistory
|
|
1533
|
+
|| !!job.supportV5DiagnosisGate
|
|
1534
|
+
|| !!job.supportV5DiagnosisEvidencePack
|
|
1535
|
+
|| !!job.support_v5_supervisor_state
|
|
1536
|
+
|| !!job.support_v5_microtask_ledger
|
|
1537
|
+
|| !!job.support_v5_step_history
|
|
1538
|
+
|| !!job.support_v5_diagnosis_gate
|
|
1539
|
+
|| !!job.support_v5_diagnosis_evidence_pack
|
|
1540
|
+
|| !!job.supportRootCauseEntryContract
|
|
1541
|
+
|| !!job.support_root_cause_entry_contract
|
|
1542
|
+
|| !!evidence.supportV5AutonomousDecision
|
|
1543
|
+
|| !!evidence.support_v5_autonomous_decision
|
|
1544
|
+
|| !!evidence.rootCauseReadiness
|
|
1545
|
+
|| !!evidence.root_cause_readiness
|
|
1546
|
+
|| !!ticketManager.root_cause_entry_contract
|
|
1547
|
+
|| !!ticketManager.rootCauseEntryContract
|
|
1548
|
+
|| !!ticketManager.last_watchdog_decision;
|
|
1549
|
+
}
|
|
1516
1550
|
function supportNextActionContractMetadata(contract) {
|
|
1517
1551
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
1518
1552
|
var decisionBasis = plainObject(contract.decisionBasis || contract.decision_basis);
|
|
@@ -1558,9 +1592,31 @@ function supportNextActionContractMetadata(contract) {
|
|
|
1558
1592
|
};
|
|
1559
1593
|
return source;
|
|
1560
1594
|
}
|
|
1561
|
-
function supportNextActionContractGate(contract, now) {
|
|
1595
|
+
function supportNextActionContractGate(contract, now, required) {
|
|
1596
|
+
if (required === void 0) { required = false; }
|
|
1562
1597
|
if (!contract || !Object.keys(contract).length) {
|
|
1563
|
-
|
|
1598
|
+
if (!required) {
|
|
1599
|
+
return undefined;
|
|
1600
|
+
}
|
|
1601
|
+
var blocker = 'Support V5 run is missing a validated next-action contract, so the manager cannot prove one safe primary action without external Codex monitoring.';
|
|
1602
|
+
return {
|
|
1603
|
+
key: 'support_next_action_contract',
|
|
1604
|
+
label: 'Support next-action contract',
|
|
1605
|
+
status: 'blocked',
|
|
1606
|
+
reason: blocker,
|
|
1607
|
+
evidenceRefs: [],
|
|
1608
|
+
recordedAt: isoNow(now),
|
|
1609
|
+
metadata: {
|
|
1610
|
+
required: true,
|
|
1611
|
+
missingContract: true,
|
|
1612
|
+
safeToAutoRun: false,
|
|
1613
|
+
canRunWithoutCodexMonitor: false,
|
|
1614
|
+
codexFallbackRequired: true,
|
|
1615
|
+
codexFallbackReason: 'missing_support_next_action_contract',
|
|
1616
|
+
blockers: [blocker],
|
|
1617
|
+
missingSafetyFlags: ['safeToAutoRun', 'canRunWithoutCodexMonitor', 'codexFallbackRequired']
|
|
1618
|
+
}
|
|
1619
|
+
};
|
|
1564
1620
|
}
|
|
1565
1621
|
var metadata = supportNextActionContractMetadata(contract);
|
|
1566
1622
|
var blockers = cleanStringList(metadata.blockers, 40, 500);
|
|
@@ -1724,6 +1780,16 @@ function buildAICoderQaEvidence(input) {
|
|
|
1724
1780
|
|| job.journey_contract_markdown
|
|
1725
1781
|
|| app.journeyContractMarkdown
|
|
1726
1782
|
|| app.journey_contract_markdown;
|
|
1783
|
+
evidence.journeyContractPath = firstNonEmptyText([
|
|
1784
|
+
evidence.journeyContractPath,
|
|
1785
|
+
evidence.journey_contract_path,
|
|
1786
|
+
workflowMemory.journeyContractPath,
|
|
1787
|
+
workflowMemory.journey_contract_path,
|
|
1788
|
+
job.journeyContractPath,
|
|
1789
|
+
job.journey_contract_path,
|
|
1790
|
+
app.journeyContractPath,
|
|
1791
|
+
app.journey_contract_path
|
|
1792
|
+
], 500) || 'docs/APP_JOURNEY_CONTRACT.md';
|
|
1727
1793
|
evidence.deployStatus = firstNonEmptyText([
|
|
1728
1794
|
evidence.deployStatus,
|
|
1729
1795
|
evidence.deploy_status,
|
|
@@ -1785,6 +1851,71 @@ function normalizeAICoderWorkflowProofReadiness(value, now) {
|
|
|
1785
1851
|
evaluatedAt: isoNow(now || value.evaluatedAt || value.evaluated_at || value.recordedAt || value.recorded_at)
|
|
1786
1852
|
};
|
|
1787
1853
|
}
|
|
1854
|
+
function aicoderJourneyContractValidationFromEvidence(evidence) {
|
|
1855
|
+
var journeyInput = evidence.journeyContract !== undefined && evidence.journeyContract !== null
|
|
1856
|
+
? evidence.journeyContract
|
|
1857
|
+
: evidence.journeyContractMarkdown;
|
|
1858
|
+
var hasJourneyInput = journeyInput !== undefined && journeyInput !== null && cleanText(journeyInput, 100).length > 0;
|
|
1859
|
+
if (!hasJourneyInput) {
|
|
1860
|
+
return {
|
|
1861
|
+
valid: false,
|
|
1862
|
+
contract: null,
|
|
1863
|
+
issues: [{
|
|
1864
|
+
code: 'missing_contract',
|
|
1865
|
+
path: cleanText(evidence.journeyContractPath, 500) || 'docs/APP_JOURNEY_CONTRACT.md',
|
|
1866
|
+
message: 'docs/APP_JOURNEY_CONTRACT.md with structured journey_contract JSON is required before AICoder build, workflow QA, wow UI, publish, or acceptance.',
|
|
1867
|
+
severity: 'error'
|
|
1868
|
+
}],
|
|
1869
|
+
workflowQaRows: [],
|
|
1870
|
+
primaryWorkflowId: ''
|
|
1871
|
+
};
|
|
1872
|
+
}
|
|
1873
|
+
return (0, aicoder_runner_v6_1.validateResolveIOAICoderJourneyContract)(journeyInput, {
|
|
1874
|
+
requireMarkdownEnvelope: typeof journeyInput === 'string'
|
|
1875
|
+
});
|
|
1876
|
+
}
|
|
1877
|
+
function aicoderJourneyContractGate(validation, evidence, now) {
|
|
1878
|
+
var errorIssues = validation.issues.filter(function (issue) { return issue.severity === 'error'; });
|
|
1879
|
+
var warningIssues = validation.issues.filter(function (issue) { return issue.severity === 'warning'; });
|
|
1880
|
+
var status = validation.valid
|
|
1881
|
+
? (warningIssues.length ? 'warn' : 'pass')
|
|
1882
|
+
: 'blocked';
|
|
1883
|
+
var path = cleanText(evidence.journeyContractPath, 500) || 'docs/APP_JOURNEY_CONTRACT.md';
|
|
1884
|
+
return {
|
|
1885
|
+
key: 'aicoder_journey_contract',
|
|
1886
|
+
label: 'AICoder journey contract',
|
|
1887
|
+
status: status,
|
|
1888
|
+
reason: validation.valid
|
|
1889
|
+
? (warningIssues.length
|
|
1890
|
+
? "Journey contract is valid with warnings: ".concat(warningIssues.map(function (issue) { return issue.message; }).slice(0, 3).join(' | '))
|
|
1891
|
+
: 'Journey contract validates first/next/last workflow, data story, completion states, and QA assertions.')
|
|
1892
|
+
: (errorIssues.map(function (issue) { return issue.message; }).slice(0, 5).join(' | ') || 'AICoder Journey Contract is missing or invalid.'),
|
|
1893
|
+
evidenceRefs: [path],
|
|
1894
|
+
recordedAt: isoNow(now),
|
|
1895
|
+
metadata: {
|
|
1896
|
+
path: path,
|
|
1897
|
+
valid: validation.valid,
|
|
1898
|
+
primaryWorkflowId: cleanText(validation.primaryWorkflowId, 200),
|
|
1899
|
+
workflowQaRowCount: validation.workflowQaRows.length,
|
|
1900
|
+
errorCount: errorIssues.length,
|
|
1901
|
+
warningCount: warningIssues.length,
|
|
1902
|
+
issueCodes: cleanStringList(validation.issues.map(function (issue) { return issue.code; }), 40, 120),
|
|
1903
|
+
issues: validation.issues.slice(0, 20).map(function (issue) { return ({
|
|
1904
|
+
code: cleanText(issue.code, 120),
|
|
1905
|
+
path: cleanText(issue.path, 500),
|
|
1906
|
+
severity: issue.severity,
|
|
1907
|
+
message: cleanText(issue.message, 800)
|
|
1908
|
+
}); }),
|
|
1909
|
+
blocksBuildUntilValid: !validation.valid,
|
|
1910
|
+
blocksWorkflowQaUntilValid: !validation.valid,
|
|
1911
|
+
blocksWowUiUntilWorkflowProof: !validation.valid,
|
|
1912
|
+
blocksPublishUntilWorkflowProof: !validation.valid,
|
|
1913
|
+
nextAction: validation.valid
|
|
1914
|
+
? 'Generate workflow QA rows from journey_contract.qa_assertions and execute the north-star workflow.'
|
|
1915
|
+
: 'Generate or repair docs/APP_JOURNEY_CONTRACT.md before app build, wow UI, publish, or acceptance.'
|
|
1916
|
+
}
|
|
1917
|
+
};
|
|
1918
|
+
}
|
|
1788
1919
|
function aicoderWorkflowProofReadinessGate(readiness, now) {
|
|
1789
1920
|
var status = readiness.ready
|
|
1790
1921
|
? 'pass'
|
|
@@ -2370,7 +2501,8 @@ function buildSupportAIRunFromEvidence(input) {
|
|
|
2370
2501
|
});
|
|
2371
2502
|
}
|
|
2372
2503
|
var nextActionContract = supportNextActionContractObject(ticket, job, evidence);
|
|
2373
|
-
var
|
|
2504
|
+
var nextActionContractRequired = supportNextActionContractRequired(ticket, job, evidence);
|
|
2505
|
+
var nextActionContractGate = supportNextActionContractGate(nextActionContract, input.now, nextActionContractRequired);
|
|
2374
2506
|
if (nextActionContractGate) {
|
|
2375
2507
|
gates.push(nextActionContractGate);
|
|
2376
2508
|
pushEvent(events, {
|
|
@@ -2566,7 +2698,7 @@ function buildSupportAIRunFromEvidence(input) {
|
|
|
2566
2698
|
}
|
|
2567
2699
|
function buildAICoderAIRunFromEvidence(input) {
|
|
2568
2700
|
var e_30, _a;
|
|
2569
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
2701
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6;
|
|
2570
2702
|
var app = input.app || {};
|
|
2571
2703
|
var job = input.job || {};
|
|
2572
2704
|
var evidence = buildAICoderQaEvidence(input);
|
|
@@ -2577,8 +2709,8 @@ function buildAICoderAIRunFromEvidence(input) {
|
|
|
2577
2709
|
addSourceId(sourceIds, 'jobId', job._id || job.id || job.jobId);
|
|
2578
2710
|
addSourceId(sourceIds, 'domain', app.domain || app.customDomain || job.domain);
|
|
2579
2711
|
try {
|
|
2580
|
-
for (var
|
|
2581
|
-
var log =
|
|
2712
|
+
for (var _7 = __values(asArray(input.logs)), _8 = _7.next(); !_8.done; _8 = _7.next()) {
|
|
2713
|
+
var log = _8.value;
|
|
2582
2714
|
pushEvent(events, {
|
|
2583
2715
|
type: log.type === 'scorecard' ? 'scorecard' : 'log',
|
|
2584
2716
|
category: cleanText(log.category || log.phase || log.level, 160),
|
|
@@ -2596,7 +2728,7 @@ function buildAICoderAIRunFromEvidence(input) {
|
|
|
2596
2728
|
catch (e_30_1) { e_30 = { error: e_30_1 }; }
|
|
2597
2729
|
finally {
|
|
2598
2730
|
try {
|
|
2599
|
-
if (
|
|
2731
|
+
if (_8 && !_8.done && (_a = _7.return)) _a.call(_7);
|
|
2600
2732
|
}
|
|
2601
2733
|
finally { if (e_30) throw e_30.error; }
|
|
2602
2734
|
}
|
|
@@ -2615,6 +2747,17 @@ function buildAICoderAIRunFromEvidence(input) {
|
|
|
2615
2747
|
});
|
|
2616
2748
|
}
|
|
2617
2749
|
var cost = collectUsageEvents(asArray(input.usageLedger), events);
|
|
2750
|
+
var journeyContractValidation = aicoderJourneyContractValidationFromEvidence(evidence);
|
|
2751
|
+
var journeyContractGate = aicoderJourneyContractGate(journeyContractValidation, evidence, input.now);
|
|
2752
|
+
gates.push(journeyContractGate);
|
|
2753
|
+
pushEvent(events, {
|
|
2754
|
+
type: 'log',
|
|
2755
|
+
category: 'aicoder_journey_contract',
|
|
2756
|
+
message: journeyContractGate.reason,
|
|
2757
|
+
artifactPaths: journeyContractGate.evidenceRefs,
|
|
2758
|
+
recordedAt: journeyContractGate.recordedAt,
|
|
2759
|
+
metadata: journeyContractGate.metadata
|
|
2760
|
+
});
|
|
2618
2761
|
var scorecardPassed = evidence.scorecardPassed === true
|
|
2619
2762
|
|| evidence.scorecardStatus === 'pass'
|
|
2620
2763
|
|| (Number((_c = (_b = evidence.score) !== null && _b !== void 0 ? _b : evidence.qualityScore) !== null && _c !== void 0 ? _c : 0) >= Number((_e = (_d = evidence.scoreThreshold) !== null && _d !== void 0 ? _d : job.scoreThreshold) !== null && _e !== void 0 ? _e : 90));
|
|
@@ -2708,6 +2851,21 @@ function buildAICoderAIRunFromEvidence(input) {
|
|
|
2708
2851
|
wowScore: (_g = evidence.wowScore) !== null && _g !== void 0 ? _g : job.wowScore,
|
|
2709
2852
|
score: (_h = evidence.score) !== null && _h !== void 0 ? _h : evidence.qualityScore,
|
|
2710
2853
|
managerNoBlindLoopPolicy: managerNoBlindLoopMetadata(noBlindLoopGate),
|
|
2854
|
+
journeyContract: {
|
|
2855
|
+
status: journeyContractGate.status,
|
|
2856
|
+
valid: ((_j = journeyContractGate.metadata) === null || _j === void 0 ? void 0 : _j.valid) === true,
|
|
2857
|
+
path: cleanText((_k = journeyContractGate.metadata) === null || _k === void 0 ? void 0 : _k.path, 500),
|
|
2858
|
+
primaryWorkflowId: cleanText((_l = journeyContractGate.metadata) === null || _l === void 0 ? void 0 : _l.primaryWorkflowId, 200),
|
|
2859
|
+
workflowQaRowCount: Number(((_m = journeyContractGate.metadata) === null || _m === void 0 ? void 0 : _m.workflowQaRowCount) || 0),
|
|
2860
|
+
errorCount: Number(((_o = journeyContractGate.metadata) === null || _o === void 0 ? void 0 : _o.errorCount) || 0),
|
|
2861
|
+
warningCount: Number(((_p = journeyContractGate.metadata) === null || _p === void 0 ? void 0 : _p.warningCount) || 0),
|
|
2862
|
+
issueCodes: cleanStringList((_q = journeyContractGate.metadata) === null || _q === void 0 ? void 0 : _q.issueCodes, 40, 120),
|
|
2863
|
+
blocksBuildUntilValid: ((_r = journeyContractGate.metadata) === null || _r === void 0 ? void 0 : _r.blocksBuildUntilValid) === true,
|
|
2864
|
+
blocksWorkflowQaUntilValid: ((_s = journeyContractGate.metadata) === null || _s === void 0 ? void 0 : _s.blocksWorkflowQaUntilValid) === true,
|
|
2865
|
+
blocksWowUiUntilWorkflowProof: ((_t = journeyContractGate.metadata) === null || _t === void 0 ? void 0 : _t.blocksWowUiUntilWorkflowProof) === true,
|
|
2866
|
+
blocksPublishUntilWorkflowProof: ((_u = journeyContractGate.metadata) === null || _u === void 0 ? void 0 : _u.blocksPublishUntilWorkflowProof) === true,
|
|
2867
|
+
nextAction: cleanText((_v = journeyContractGate.metadata) === null || _v === void 0 ? void 0 : _v.nextAction, 1000)
|
|
2868
|
+
},
|
|
2711
2869
|
workflowProofReadiness: {
|
|
2712
2870
|
ready: workflowReadiness.ready,
|
|
2713
2871
|
status: workflowReadiness.status,
|
|
@@ -2724,18 +2882,18 @@ function buildAICoderAIRunFromEvidence(input) {
|
|
|
2724
2882
|
proofFreshness: workflowReadiness.proofFreshness
|
|
2725
2883
|
},
|
|
2726
2884
|
workflowProofCheckpoint: workflowProofCheckpointGate ? {
|
|
2727
|
-
status: cleanText((
|
|
2885
|
+
status: cleanText((_w = workflowProofCheckpointGate.metadata) === null || _w === void 0 ? void 0 : _w.status, 120),
|
|
2728
2886
|
gateStatus: workflowProofCheckpointGate.status,
|
|
2729
|
-
readinessStatus: cleanText((
|
|
2730
|
-
nextGate: cleanText((
|
|
2731
|
-
nextAction: cleanText((
|
|
2732
|
-
blocksProductRepairUntilJourneyContract: ((
|
|
2733
|
-
blocksPublishUntilWorkflowProof: ((
|
|
2734
|
-
blocksPublishUntilReleaseGate: ((
|
|
2735
|
-
blocksWowUiUntilWorkflowProof: ((
|
|
2736
|
-
workflowProofFingerprint: cleanText((
|
|
2737
|
-
artifactFingerprint: cleanText((
|
|
2738
|
-
blockers: cleanStringList((
|
|
2887
|
+
readinessStatus: cleanText((_x = workflowProofCheckpointGate.metadata) === null || _x === void 0 ? void 0 : _x.readinessStatus, 120),
|
|
2888
|
+
nextGate: cleanText((_y = workflowProofCheckpointGate.metadata) === null || _y === void 0 ? void 0 : _y.nextGate, 120),
|
|
2889
|
+
nextAction: cleanText((_z = workflowProofCheckpointGate.metadata) === null || _z === void 0 ? void 0 : _z.nextAction, 1000),
|
|
2890
|
+
blocksProductRepairUntilJourneyContract: ((_0 = workflowProofCheckpointGate.metadata) === null || _0 === void 0 ? void 0 : _0.blocksProductRepairUntilJourneyContract) === true,
|
|
2891
|
+
blocksPublishUntilWorkflowProof: ((_1 = workflowProofCheckpointGate.metadata) === null || _1 === void 0 ? void 0 : _1.blocksPublishUntilWorkflowProof) === true,
|
|
2892
|
+
blocksPublishUntilReleaseGate: ((_2 = workflowProofCheckpointGate.metadata) === null || _2 === void 0 ? void 0 : _2.blocksPublishUntilReleaseGate) === true,
|
|
2893
|
+
blocksWowUiUntilWorkflowProof: ((_3 = workflowProofCheckpointGate.metadata) === null || _3 === void 0 ? void 0 : _3.blocksWowUiUntilWorkflowProof) === true,
|
|
2894
|
+
workflowProofFingerprint: cleanText((_4 = workflowProofCheckpointGate.metadata) === null || _4 === void 0 ? void 0 : _4.workflowProofFingerprint, 200),
|
|
2895
|
+
artifactFingerprint: cleanText((_5 = workflowProofCheckpointGate.metadata) === null || _5 === void 0 ? void 0 : _5.artifactFingerprint, 200),
|
|
2896
|
+
blockers: cleanStringList((_6 = workflowProofCheckpointGate.metadata) === null || _6 === void 0 ? void 0 : _6.blockers, 20, 500)
|
|
2739
2897
|
} : undefined
|
|
2740
2898
|
}
|
|
2741
2899
|
});
|