@farmslot/recipe-runner 0.32.0 → 0.34.0
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/CHANGELOG.md +12 -0
- package/dist/adapters/core.d.ts.map +1 -1
- package/dist/adapters/core.js +9 -2
- package/dist/adapters/core.js.map +1 -1
- package/dist/core/compose.d.ts.map +1 -1
- package/dist/core/compose.js +16 -11
- package/dist/core/compose.js.map +1 -1
- package/dist/core/runner.js +66 -12
- package/dist/core/runner.js.map +1 -1
- package/dist/core/types.d.ts +14 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/evidence/assertions.d.ts +1 -0
- package/dist/evidence/assertions.d.ts.map +1 -1
- package/dist/evidence/assertions.js +12 -2
- package/dist/evidence/assertions.js.map +1 -1
- package/dist/evidence/index.d.ts +1 -1
- package/dist/evidence/index.d.ts.map +1 -1
- package/dist/evidence/index.js +1 -1
- package/dist/evidence/index.js.map +1 -1
- package/dist/evidence/package.d.ts +3 -1
- package/dist/evidence/package.d.ts.map +1 -1
- package/dist/evidence/package.js +37 -24
- package/dist/evidence/package.js.map +1 -1
- package/dist/node/writers.d.ts +4 -2
- package/dist/node/writers.d.ts.map +1 -1
- package/dist/node/writers.js +30 -1
- package/dist/node/writers.js.map +1 -1
- package/dist/runtime/cdp.d.ts +2 -0
- package/dist/runtime/cdp.d.ts.map +1 -1
- package/dist/runtime/cdp.js +68 -5
- package/dist/runtime/cdp.js.map +1 -1
- package/dist/runtime/deps-readiness.d.ts.map +1 -1
- package/dist/runtime/deps-readiness.js +3 -23
- package/dist/runtime/deps-readiness.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../src/evidence/assertions.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAU,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChD,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;KAAE,CAAC;CAChD;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAc3D;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../src/evidence/assertions.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAU,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChD,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;KAAE,CAAC;CAChD;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAc3D;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAgBD,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAOlD,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAExE;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtE;AAqBD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,GAC5C,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAgBxB;AAED,qFAAqF;AACrF,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GACpC,OAAO,CAkBT;AAED,yFAAyF;AACzF,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EACrC,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,SAAS,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACzD,MAAM,SAAiB,GACtB,MAAM,GAAG,IAAI,CAEf;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EACrC,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,SAAS,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACzD,MAAM,SAAiB,GACtB,MAAM,EAAE,CA0CV"}
|
|
@@ -22,7 +22,6 @@ const controlActions = new Set([
|
|
|
22
22
|
'call',
|
|
23
23
|
'index_artifacts',
|
|
24
24
|
'assert_exit_code',
|
|
25
|
-
'assert_file',
|
|
26
25
|
'branch',
|
|
27
26
|
'repeat',
|
|
28
27
|
'set',
|
|
@@ -61,6 +60,8 @@ function hasProofExpectation(node) {
|
|
|
61
60
|
return text(node.contains) || text(node.match) || meaningfulAssertion(node.assert);
|
|
62
61
|
if (node.action === 'assert_json')
|
|
63
62
|
return meaningfulAssertion(node.assert);
|
|
63
|
+
if (node.action === 'assert_file')
|
|
64
|
+
return text(node.path) && text(node.contains);
|
|
64
65
|
return (node.action === 'ui.wait_for' &&
|
|
65
66
|
[node.selector, node.test_id, node.testID, node.text, node.expected].some(text));
|
|
66
67
|
}
|
|
@@ -98,7 +99,8 @@ export function potentiallyEligibleProof(id, nodes) {
|
|
|
98
99
|
}
|
|
99
100
|
if (node.action === 'ui.wait_for')
|
|
100
101
|
return [...nodes.values()].some((entry) => PROOF_INPUT_ACTIONS.has(entry.action));
|
|
101
|
-
return node.action === 'assert_json'
|
|
102
|
+
return ((node.action === 'assert_json' || node.action === 'assert_file') &&
|
|
103
|
+
typeof node.path === 'string');
|
|
102
104
|
}
|
|
103
105
|
/** All eligible child assertions are retained; the singular API returns the last one. */
|
|
104
106
|
export function executedProofIndex(id, nodes, entries, artifacts, before = entries.length) {
|
|
@@ -140,6 +142,14 @@ export function executedProofIndices(id, nodes, entries, artifacts, before = ent
|
|
|
140
142
|
.some((entry) => entry.ok && PROOF_INPUT_ACTIONS.has(entry.action))
|
|
141
143
|
? [currentIndex]
|
|
142
144
|
: [];
|
|
145
|
+
if (node.action === 'assert_file') {
|
|
146
|
+
const observation = current.ok ? current.output : current.error_details;
|
|
147
|
+
return isRecord(observation) &&
|
|
148
|
+
hasProofExpectation({ ...observation, action: 'assert_file' }) &&
|
|
149
|
+
observation.matched === current.ok
|
|
150
|
+
? [currentIndex]
|
|
151
|
+
: [];
|
|
152
|
+
}
|
|
143
153
|
return typeof node.path === 'string' &&
|
|
144
154
|
artifacts.some((artifact) => artifact.path === node.path && artifact.category === 'proof')
|
|
145
155
|
? [currentIndex]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/evidence/assertions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,QAAQ,EACR,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAqB5B,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO;QACL,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;YACtD,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAA0D,EAAE;YACpF,CAAC,CAAC,EAAE,CAAC;QACP,QAAQ,EAAE;YACR,KAAK,EAAE,MAAM,CAAC,WAAW,CACvB,8BAA8B,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBACtE,MAAM;gBACN,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE;aACpB,CAAC,CACH;SACF;KACF,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/evidence/assertions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,QAAQ,EACR,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAqB5B,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO;QACL,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;YACtD,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAA0D,EAAE;YACpF,CAAC,CAAC,EAAE,CAAC;QACP,QAAQ,EAAE;YACR,KAAK,EAAE,MAAM,CAAC,WAAW,CACvB,8BAA8B,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBACtE,MAAM;gBACN,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE;aACpB,CAAC,CACH;SACF;KACF,CAAC;AACJ,CAAC;AAaD,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAClD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,KAAK;IACL,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,iBAAiB;IACjB,kBAAkB;IAClB,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,KAAK;CACN,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC;IAC9D,UAAU;IACV,cAAc;IACd,cAAc;IACd,UAAU;IACV,SAAS;IACT,eAAe;CAChB,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAAU,EAAE,IAAe;IAC9D,OAAO,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAU,EAAE,MAAc;IAC5D,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,OAAO,MAAM,GAAG,MAAM,CAAC;AACzB,CAAC;AAED,gGAAgG;AAChG,SAAS,mBAAmB,CAAC,IAAe;IAC1C,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IACtF,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAW,EAAE;QACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC;QACnD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtF,CAAC,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrF,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjF,OAAO,CACL,IAAI,CAAC,MAAM,KAAK,aAAa;QAC7B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAChF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAqB,EACrB,SAA6C;IAE7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC3C,SAAS,OAAO,CAAC,QAAuB,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,IAAI,GAAG,EAAU;QAC9E,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC3D,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,GAAG,CAAC,CAAC;gBAChE,OAAO,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,wBAAwB,CACtC,EAAU,EACV,KAAqC;IAErC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QACxB,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAC3B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAChF,CAAC;IACJ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACzD,OAAO,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa;QAC/B,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACpF,OAAO,CACL,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC;QAChE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAC9B,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,kBAAkB,CAChC,EAAU,EACV,KAAqC,EACrC,OAAmC,EACnC,SAAyD,EACzD,MAAM,GAAG,OAAO,CAAC,MAAM;IAEvB,OAAO,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,EAAU,EACV,KAAqC,EACrC,OAAmC,EACnC,SAAyD,EACzD,MAAM,GAAG,OAAO,CAAC,MAAM;IAEvB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC1D,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACvF,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;aAC/B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aACzC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAChF,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrF,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzC,OAAO,KAAK,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC;YAC7E,CAAC,CAAC,CAAC,YAAY,CAAC;YAChB,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa;QAC/B,OAAO,OAAO;aACX,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;aACtB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC,YAAY,CAAC;YAChB,CAAC,CAAC,EAAE,CAAC;IACT,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QACxE,OAAO,QAAQ,CAAC,WAAW,CAAC;YAC1B,mBAAmB,CAAC,EAAE,GAAG,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;YAC9D,WAAW,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE;YAClC,CAAC,CAAC,CAAC,YAAY,CAAC;YAChB,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IACD,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAClC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC;QAC1F,CAAC,CAAC,CAAC,YAAY,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,cAAc,CACrB,OAAmC,EACnC,EAAU,EACV,MAAM,GAAG,OAAO,CAAC,MAAM;IAEvB,KAAK,IAAI,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
|
package/dist/evidence/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
export { proofDocument } from './assertions.js';
|
|
3
3
|
export type { OccurrenceRecordingCoverage } from './moments.js';
|
|
4
4
|
export { indexRecordingTimelines, occurrenceRecordingCoverage } from './moments.js';
|
|
5
|
-
export { validateRecordedEvidencePackage } from './package.js';
|
|
5
|
+
export { deriveReviewedRecipeClaims, validateRecordedEvidencePackage } from './package.js';
|
|
6
6
|
export { planRecipeEvidence } from './plan.js';
|
|
7
7
|
export type { RecordedEvidencePackageInput } from '@farmslot/protocol';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,YAAY,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/evidence/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Portable evidence validation; importing this entry does not load capture or filesystem code. */
|
|
2
2
|
export { proofDocument } from './assertions.js';
|
|
3
3
|
export { indexRecordingTimelines, occurrenceRecordingCoverage } from './moments.js';
|
|
4
|
-
export { validateRecordedEvidencePackage } from './package.js';
|
|
4
|
+
export { deriveReviewedRecipeClaims, validateRecordedEvidencePackage } from './package.js';
|
|
5
5
|
export { planRecipeEvidence } from './plan.js';
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { type RecipeValidationResult, type RecordedEvidencePackageInput } from '@farmslot/protocol';
|
|
1
|
+
import { type RecipeClaimEvidence, type RecipeValidationResult, type RecipeVisualReviewAuthority, type RecordedEvidencePackageInput } from '@farmslot/protocol';
|
|
2
|
+
/** Current human review is a projection; original package bytes and facts remain intact. */
|
|
3
|
+
export declare function deriveReviewedRecipeClaims(input: RecordedEvidencePackageInput, authority?: RecipeVisualReviewAuthority): RecipeClaimEvidence[];
|
|
2
4
|
/** Validate actual package identities before consumers derive a moment or publish evidence. */
|
|
3
5
|
export declare function validateRecordedEvidencePackage(input: RecordedEvidencePackageInput): RecipeValidationResult;
|
|
4
6
|
//# sourceMappingURL=package.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../src/evidence/package.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../src/evidence/package.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,mBAAmB,EAGxB,KAAK,sBAAsB,EAE3B,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EAKlC,MAAM,oBAAoB,CAAC;AA0C5B,4FAA4F;AAC5F,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,4BAA4B,EACnC,SAAS,CAAC,EAAE,2BAA2B,GACtC,mBAAmB,EAAE,CAKvB;AAED,+FAA+F;AAC/F,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,4BAA4B,GAClC,sBAAsB,CAiKxB"}
|
package/dist/evidence/package.js
CHANGED
|
@@ -1,7 +1,42 @@
|
|
|
1
|
-
import { digestRecipeDocument, isRecord, validateAcceptanceStatusLedger, validateRecipeArtifactPackage, validateRecipeRecordingTimelineBinding, } from '@farmslot/protocol';
|
|
1
|
+
import { digestRecipeDocument, isRecord, recordedVisualJudgments, validateAcceptanceStatusLedger, validateRecipeArtifactPackage, validateRecipeRecordingTimelineBinding, } from '@farmslot/protocol';
|
|
2
2
|
import { deriveRecipeClaims } from './claims.js';
|
|
3
3
|
import { indexRecordingTimelines } from './moments.js';
|
|
4
4
|
import { planRecipeEvidence } from './plan.js';
|
|
5
|
+
/** The same engine derivation serves stored validation and authenticated review. */
|
|
6
|
+
function deriveClaimsFromInput(input, judgments = []) {
|
|
7
|
+
const resolution = input.recipeResolution;
|
|
8
|
+
const documents = new Map(resolution.dependencies.map((dependency) => [
|
|
9
|
+
dependency.ref,
|
|
10
|
+
input.resolvedRecipes[dependency.digest],
|
|
11
|
+
]));
|
|
12
|
+
const registered = isRecord(input.invocation) && Array.isArray(input.invocation.claims)
|
|
13
|
+
? input.invocation.claims
|
|
14
|
+
: undefined;
|
|
15
|
+
const plan = planRecipeEvidence(input.recipe, documents, registered);
|
|
16
|
+
const trace = Array.isArray(input.trace)
|
|
17
|
+
? input.trace
|
|
18
|
+
: isRecord(input.trace) && Array.isArray(input.trace.entries)
|
|
19
|
+
? input.trace.entries
|
|
20
|
+
: [];
|
|
21
|
+
return deriveRecipeClaims({
|
|
22
|
+
recipeRunId: input.claims.recipeRunId,
|
|
23
|
+
...plan,
|
|
24
|
+
trace: trace,
|
|
25
|
+
artifacts: (isRecord(input.manifest)
|
|
26
|
+
? input.manifest.artifacts
|
|
27
|
+
: []),
|
|
28
|
+
segments: input.claims.recording.segments,
|
|
29
|
+
judgments,
|
|
30
|
+
timelines: indexRecordingTimelines(Object.values(input.timelines)),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** Current human review is a projection; original package bytes and facts remain intact. */
|
|
34
|
+
export function deriveReviewedRecipeClaims(input, authority) {
|
|
35
|
+
const validation = validateRecordedEvidencePackage(input);
|
|
36
|
+
if (validation.status !== 'valid' || !input.claims)
|
|
37
|
+
throw new TypeError('Visual review requires a valid retained engine claim package.');
|
|
38
|
+
return deriveClaimsFromInput(input, authority ? recordedVisualJudgments(input, authority) : []);
|
|
39
|
+
}
|
|
5
40
|
/** Validate actual package identities before consumers derive a moment or publish evidence. */
|
|
6
41
|
export function validateRecordedEvidencePackage(input) {
|
|
7
42
|
const base = validateRecipeArtifactPackage(input);
|
|
@@ -54,33 +89,11 @@ export function validateRecordedEvidencePackage(input) {
|
|
|
54
89
|
}
|
|
55
90
|
if (base.status === 'valid' && input.recipe && isRecord(input.manifest)) {
|
|
56
91
|
try {
|
|
57
|
-
const resolution = input.recipeResolution;
|
|
58
|
-
const documents = new Map(resolution.dependencies.map((dependency) => [
|
|
59
|
-
dependency.ref,
|
|
60
|
-
input.resolvedRecipes[dependency.digest],
|
|
61
|
-
]));
|
|
62
|
-
const registered = isRecord(input.invocation) && Array.isArray(input.invocation.claims)
|
|
63
|
-
? input.invocation.claims
|
|
64
|
-
: undefined;
|
|
65
92
|
if (input.invocation &&
|
|
66
93
|
(!isRecord(input.summary) ||
|
|
67
94
|
input.summary.invocationDigest !== digestRecipeDocument(input.invocation)))
|
|
68
95
|
issue('recipe-invocation.json', 'Claim registration does not match the retained execution inputs.');
|
|
69
|
-
const
|
|
70
|
-
const trace = Array.isArray(input.trace)
|
|
71
|
-
? input.trace
|
|
72
|
-
: isRecord(input.trace) && Array.isArray(input.trace.entries)
|
|
73
|
-
? input.trace.entries
|
|
74
|
-
: [];
|
|
75
|
-
const derived = deriveRecipeClaims({
|
|
76
|
-
recipeRunId: recipeRunId ?? input.claims.recipeRunId,
|
|
77
|
-
...plan,
|
|
78
|
-
trace: trace,
|
|
79
|
-
artifacts: input.manifest.artifacts,
|
|
80
|
-
segments: input.claims.recording.segments,
|
|
81
|
-
judgments: input.claims.judgments,
|
|
82
|
-
timelines: indexRecordingTimelines(Object.values(input.timelines)),
|
|
83
|
-
});
|
|
96
|
+
const derived = deriveClaimsFromInput(input, input.claims.judgments);
|
|
84
97
|
for (const actual of derived) {
|
|
85
98
|
if (!input.claims.criteria.some((claim) => claim.id === actual.id))
|
|
86
99
|
issue(`claims.${actual.id}`, 'Registered claim is missing from the stored ledger.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/evidence/package.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,QAAQ,
|
|
1
|
+
{"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/evidence/package.ts"],"names":[],"mappings":"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"}
|
package/dist/node/writers.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type RecipeArtifactManifestEntry, type RecipeResolutionDocument } from '@farmslot/protocol';
|
|
1
|
+
import { type RecipeArtifactManifestEntry, type RecipeClaimLedger, type RecipeResolutionDocument } from '@farmslot/protocol';
|
|
2
2
|
import type { RecipeInvocationDocument } from '../core/invocation.js';
|
|
3
3
|
import type { ArtifactWriter, RecipeRunnerProvenance, RecipeRunStatus, SummaryDocument, SummaryWriter, TraceEntry, TraceWriter } from '../core/types.js';
|
|
4
4
|
export declare class JsonArtifactWriter implements ArtifactWriter {
|
|
@@ -10,7 +10,9 @@ export declare class JsonArtifactWriter implements ArtifactWriter {
|
|
|
10
10
|
writeInvocation(invocation: RecipeInvocationDocument): Promise<void>;
|
|
11
11
|
register(entry: RecipeArtifactManifestEntry): void;
|
|
12
12
|
list(): RecipeArtifactManifestEntry[];
|
|
13
|
-
|
|
13
|
+
/** Every engine consumer gets the same attempt-local publication candidate. */
|
|
14
|
+
writeEvidenceManifest(claims: RecipeClaimLedger): Promise<string>;
|
|
15
|
+
write(status: RecipeRunStatus, runner?: RecipeRunnerProvenance, metadata?: Readonly<Record<string, unknown>>): Promise<string>;
|
|
14
16
|
}
|
|
15
17
|
export declare class JsonTraceWriter implements TraceWriter {
|
|
16
18
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writers.d.ts","sourceRoot":"","sources":["../../src/node/writers.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"writers.d.ts","sourceRoot":"","sources":["../../src/node/writers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAE9B,MAAM,oBAAoB,CAAC;AAM5B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,aAAa,EACb,UAAU,EACV,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,kBAAmB,YAAW,cAAc;;gBAI3C,YAAY,EAAE,MAAM;IAI1B,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB5C,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAapE,qBAAqB,CAAC,UAAU,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IAY5E,eAAe,CAAC,UAAU,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1E,QAAQ,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI;IAMlD,IAAI,IAAI,2BAA2B,EAAE;IAIrC,+EAA+E;IACzE,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoCjE,KAAK,CACT,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,sBAAsB,EAC/B,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,GAC/C,OAAO,CAAC,MAAM,CAAC;CASnB;AAED,qBAAa,eAAgB,YAAW,WAAW;;gBAKrC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,sBAAsB;IAKjE,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAI/B,IAAI,IAAI,UAAU,EAAE;IAId,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAO/B;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,aAAa,CAAC,EAAE,GACvD,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,cAAc,CAAC,CAcvE;AAED,qBAAa,iBAAkB,YAAW,aAAa;;gBAGzC,YAAY,EAAE,MAAM;IAI1B,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;CAGvD"}
|
package/dist/node/writers.js
CHANGED
|
@@ -69,8 +69,37 @@ export class JsonArtifactWriter {
|
|
|
69
69
|
list() {
|
|
70
70
|
return [...this.#entries];
|
|
71
71
|
}
|
|
72
|
-
|
|
72
|
+
/** Every engine consumer gets the same attempt-local publication candidate. */
|
|
73
|
+
async writeEvidenceManifest(claims) {
|
|
74
|
+
if (this.#entries.some((artifact) => artifact.path === 'evidence-manifest.json'))
|
|
75
|
+
throw new Error('evidence-manifest.json is owned by the recipe engine.');
|
|
76
|
+
const media = this.list().filter((artifact) => artifact.type === 'screenshot' || artifact.type === 'video');
|
|
77
|
+
const recording = media.find((artifact) => artifact.type === 'video' && artifact.record === 'full_run');
|
|
78
|
+
const manifest = {
|
|
79
|
+
version: 1,
|
|
80
|
+
preferred_mode: 'screenshots',
|
|
81
|
+
summary: claims.criteria.map((claim) => `${claim.id}: ${claim.verdict}`).join('; '),
|
|
82
|
+
...(recording ? { videos: { after: recording.path, preferred: true } } : {}),
|
|
83
|
+
standalone: media
|
|
84
|
+
.filter((artifact) => artifact !== recording)
|
|
85
|
+
.map((artifact) => ({
|
|
86
|
+
label: artifact.label ?? artifact.nodeId ?? artifact.path,
|
|
87
|
+
file: artifact.path,
|
|
88
|
+
note: `Recorded in recipe execution ${claims.recipeRunId}.`,
|
|
89
|
+
})),
|
|
90
|
+
};
|
|
91
|
+
const manifestPath = await writeJsonWithinRoot(this.#artifactsDir, 'evidence-manifest.json', manifest);
|
|
92
|
+
this.register({
|
|
93
|
+
path: 'evidence-manifest.json',
|
|
94
|
+
type: 'json',
|
|
95
|
+
category: 'system',
|
|
96
|
+
label: 'Engine-derived publication selection',
|
|
97
|
+
});
|
|
98
|
+
return manifestPath;
|
|
99
|
+
}
|
|
100
|
+
async write(status, runner, metadata = {}) {
|
|
73
101
|
return writeJsonWithinRoot(this.#artifactsDir, 'artifact-manifest.json', {
|
|
102
|
+
...metadata,
|
|
74
103
|
version: 1,
|
|
75
104
|
runStatus: status,
|
|
76
105
|
...(runner ? { provenance: { runner } } : {}),
|
package/dist/node/writers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writers.js","sourceRoot":"","sources":["../../src/node/writers.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"writers.js","sourceRoot":"","sources":["../../src/node/writers.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/cdp.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../../src/runtime/cdp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../../src/runtime/cdp.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/cdp.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
+
import * as timersPromises from 'node:timers/promises';
|
|
2
3
|
import WebSocket from 'ws';
|
|
3
|
-
import { HUD_PANEL_BOUNDS, hudIntentDisplay, hudSecondaryText, waitForHudPaint, } from '@farmslot/protocol/recipe';
|
|
4
|
+
import { HUD_PANEL_BOUNDS, hudIntentDisplay, hudSecondaryText, validateRecipeActionRelationships, waitForHudPaint, } from '@farmslot/protocol/recipe';
|
|
4
5
|
import { gestureDurationMs, gesturePhase, gesturePoints, gestureSegmentDuration, gestureTarget, } from '../adapters/gesture.js';
|
|
5
6
|
import { RecipeExecutionError, RUNTIME_CONNECTION_CLOSED } from '../core/failure.js';
|
|
6
7
|
import { asNumber, asOptionalString, asString, isRecord } from '../core/json.js';
|
|
@@ -597,7 +598,7 @@ export class CdpWebPage {
|
|
|
597
598
|
}
|
|
598
599
|
}
|
|
599
600
|
async setInput(selector, value) {
|
|
600
|
-
const before = await this.evaluate(`(() => { ${deepQueryHelpersExpression()} const root = querySelectorDeep(${JSON.stringify(selector)}); if (!root) throw new Error('Selector not found: ${escapeForJsMessage(selector)}'); const el = root.matches('input, textarea, [contenteditable="true"], [contenteditable=""]') ? root : querySelectorDeep('input, textarea, [contenteditable="true"], [contenteditable=""]', root); if (!el) throw new Error('Input target not found inside selector: ${escapeForJsMessage(selector)}'); if (el
|
|
601
|
+
const before = await this.evaluate(`(() => { ${deepQueryHelpersExpression()} const root = querySelectorDeep(${JSON.stringify(selector)}); if (!root) throw new Error('Selector not found: ${escapeForJsMessage(selector)}'); const el = root.matches('input, textarea, [contenteditable="true"], [contenteditable=""]') ? root : querySelectorDeep('input, textarea, [contenteditable="true"], [contenteditable=""]', root); if (!el) throw new Error('Input target not found inside selector: ${escapeForJsMessage(selector)}'); if (isDisabledDeep(el)) throw new Error('Input target is disabled: ${escapeForJsMessage(selector)}'); el.scrollIntoView({ block: 'center', inline: 'nearest' }); el.focus(); if (typeof el.select === 'function') { el.select(); } else { const range = document.createRange(); range.selectNodeContents(el); const selection = window.getSelection(); selection.removeAllRanges(); selection.addRange(range); } return { selector: ${JSON.stringify(selector)}, tagName: el.tagName, previousValue: el.value ?? el.textContent ?? '' }; })()`);
|
|
601
602
|
await this.keyPress('Backspace');
|
|
602
603
|
if (value)
|
|
603
604
|
await this.session.call('Input.insertText', { text: value });
|
|
@@ -717,8 +718,36 @@ export class CdpWebPage {
|
|
|
717
718
|
};
|
|
718
719
|
}
|
|
719
720
|
async waitFor(options) {
|
|
721
|
+
const validation = validateRecipeActionRelationships({ action: 'ui.wait_for', ...options });
|
|
722
|
+
if (validation.status !== 'valid')
|
|
723
|
+
throw new RecipeExecutionError('harness', validation.findings.map((finding) => finding.message).join(' '));
|
|
720
724
|
const timeoutMs = options.timeoutMs ?? 5_000;
|
|
721
|
-
|
|
725
|
+
const deadline = Date.now() + timeoutMs;
|
|
726
|
+
const expression = `(() => { ${deepQueryHelpersExpression()} return ${waitForPredicateExpression(options)}; })()`;
|
|
727
|
+
let lastEnabled;
|
|
728
|
+
do {
|
|
729
|
+
options.signal?.throwIfAborted();
|
|
730
|
+
const observed = await this.evaluate(expression, {
|
|
731
|
+
signal: options.signal,
|
|
732
|
+
timeoutMs: Math.max(1, deadline - Date.now()),
|
|
733
|
+
});
|
|
734
|
+
options.signal?.throwIfAborted();
|
|
735
|
+
if (typeof observed === 'object' && typeof observed.enabled === 'boolean')
|
|
736
|
+
lastEnabled = observed.enabled;
|
|
737
|
+
if (typeof observed === 'boolean' ? observed : observed.matched)
|
|
738
|
+
return options.enabled === undefined
|
|
739
|
+
? { matched: true }
|
|
740
|
+
: { matched: true, enabled: lastEnabled };
|
|
741
|
+
const remaining = deadline - Date.now();
|
|
742
|
+
if (remaining <= 0)
|
|
743
|
+
break;
|
|
744
|
+
await timersPromises.setTimeout(Math.min(100, remaining), undefined, {
|
|
745
|
+
signal: options.signal,
|
|
746
|
+
});
|
|
747
|
+
} while (Date.now() <= deadline);
|
|
748
|
+
if (options.enabled !== undefined)
|
|
749
|
+
throw new RecipeExecutionError('subject', `ui.wait_for timed out: expected enabled=${options.enabled}, last observed enabled=${lastEnabled ?? 'unavailable'}.`);
|
|
750
|
+
throw new Error('ui.wait_for timed out');
|
|
722
751
|
}
|
|
723
752
|
async waitForSelector(selector, options = {}) {
|
|
724
753
|
return this.waitFor({ selector, timeoutMs: options.timeoutMs });
|
|
@@ -864,6 +893,11 @@ function isTransientCdpContextError(error) {
|
|
|
864
893
|
export function createCdpWebUiTransport(options) {
|
|
865
894
|
return {
|
|
866
895
|
async execute(action, node, context) {
|
|
896
|
+
if (action === 'ui.wait_for') {
|
|
897
|
+
const validation = validateRecipeActionRelationships({ ...node, action });
|
|
898
|
+
if (validation.status !== 'valid')
|
|
899
|
+
throw new RecipeExecutionError('harness', validation.findings.map((finding) => finding.message).join(' '));
|
|
900
|
+
}
|
|
867
901
|
const input = { action, node, context };
|
|
868
902
|
return withCdpWebPage(options, input, async (page) => {
|
|
869
903
|
switch (action) {
|
|
@@ -904,6 +938,8 @@ export function createCdpWebUiTransport(options) {
|
|
|
904
938
|
selector: asOptionalString(selectorForUiInput(node), 'ui.wait_for.selector'),
|
|
905
939
|
text: asOptionalString(node.text, 'ui.wait_for.text'),
|
|
906
940
|
expected: asOptionalString(node.expected, 'ui.wait_for.expected'),
|
|
941
|
+
enabled: node.enabled,
|
|
942
|
+
signal: context.signal,
|
|
907
943
|
timeoutMs: node.timeout_ms == null
|
|
908
944
|
? undefined
|
|
909
945
|
: asNumber(node.timeout_ms, 'ui.wait_for.timeout_ms'),
|
|
@@ -1085,7 +1121,7 @@ function visibleTargetsExpression() {
|
|
|
1085
1121
|
label: includeLabel ? textFor(el) : undefined,
|
|
1086
1122
|
test_id: el.getAttribute('data-testid') || el.getAttribute('data-test-id') || el.getAttribute('data-test') || undefined,
|
|
1087
1123
|
selector: cssPath(el),
|
|
1088
|
-
enabled: !(el
|
|
1124
|
+
enabled: !(isDisabledDeep(el)),
|
|
1089
1125
|
selected: el.getAttribute('aria-selected') === 'true' || undefined,
|
|
1090
1126
|
focused: document.activeElement === el || undefined,
|
|
1091
1127
|
bounds: rect ? { x: Math.round(rect.left), y: Math.round(rect.top), width: Math.round(rect.width), height: Math.round(rect.height) } : undefined
|
|
@@ -1419,6 +1455,17 @@ async function renderCdpHud(page, node, context) {
|
|
|
1419
1455
|
{ timeoutMs: 10_000, signal: context.signal });
|
|
1420
1456
|
}
|
|
1421
1457
|
function waitForPredicateExpression(options) {
|
|
1458
|
+
if (options.enabled !== undefined) {
|
|
1459
|
+
return `(() => {
|
|
1460
|
+
const matches = querySelectorAllDeep(${JSON.stringify(options.selector)});
|
|
1461
|
+
if (matches.length > 1) throw new Error('ui.wait_for target is ambiguous');
|
|
1462
|
+
if (!matches.length) return { matched: false };
|
|
1463
|
+
const target = matches[0];
|
|
1464
|
+
const enabled = observedEnabledDeep(target);
|
|
1465
|
+
if (enabled === null) throw new Error('ui.wait_for target has no observable enabled state');
|
|
1466
|
+
return { matched: (${JSON.stringify(options.expected)} !== 'visible' || isVisibleDeep(target)) && enabled === ${options.enabled}, enabled };
|
|
1467
|
+
})()`;
|
|
1468
|
+
}
|
|
1422
1469
|
let presentExpression;
|
|
1423
1470
|
let visibleExpression;
|
|
1424
1471
|
if (options.selector && options.text) {
|
|
@@ -1467,6 +1514,22 @@ function deepQueryHelpersExpression() {
|
|
|
1467
1514
|
return matches;
|
|
1468
1515
|
};
|
|
1469
1516
|
const querySelectorDeep = (selector, root = document) => querySelectorAllDeep(selector, root)[0] ?? null;
|
|
1517
|
+
const isDisabledDeep = (element) => {
|
|
1518
|
+
if (element.disabled === true || element.matches(':disabled')) return true;
|
|
1519
|
+
let current = element;
|
|
1520
|
+
while (current) {
|
|
1521
|
+
if (String(current.getAttribute('aria-disabled') || '').toLowerCase() === 'true') return true;
|
|
1522
|
+
const root = current.getRootNode();
|
|
1523
|
+
current = current.parentElement || shadowHostFor(root);
|
|
1524
|
+
}
|
|
1525
|
+
return false;
|
|
1526
|
+
};
|
|
1527
|
+
const observedEnabledDeep = (element) => {
|
|
1528
|
+
const roles = String(element.getAttribute('role') || '').toLowerCase().split(/\\s+/);
|
|
1529
|
+
const interactiveRoles = ['button', 'checkbox', 'combobox', 'gridcell', 'link', 'listbox', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'radio', 'scrollbar', 'searchbox', 'slider', 'spinbutton', 'switch', 'tab', 'textbox', 'treeitem'];
|
|
1530
|
+
const observable = typeof element.disabled === 'boolean' || element.matches('a[href], area[href]') || roles.some((role) => interactiveRoles.includes(role));
|
|
1531
|
+
return observable ? !isDisabledDeep(element) : null;
|
|
1532
|
+
};
|
|
1470
1533
|
const isRenderedDeep = (element) => {
|
|
1471
1534
|
if (!element || element.getClientRects().length === 0) return false;
|
|
1472
1535
|
let current = element;
|
|
@@ -1498,7 +1561,7 @@ function deepQueryHelpersExpression() {
|
|
|
1498
1561
|
};
|
|
1499
1562
|
const clickablePointDeep = (element, observeObstruction = false) => {
|
|
1500
1563
|
if (!isVisibleDeep(element)) throw new Error('Target is not visible');
|
|
1501
|
-
if (element
|
|
1564
|
+
if (isDisabledDeep(element)) throw new Error('Target is disabled');
|
|
1502
1565
|
const rect = element.getBoundingClientRect();
|
|
1503
1566
|
const x = Math.max(0, Math.min(window.innerWidth - 1, rect.left + rect.width / 2));
|
|
1504
1567
|
const y = Math.max(0, Math.min(window.innerHeight - 1, rect.top + rect.height / 2));
|