yaml-flow 8.0.0 → 8.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/browser/asset-integrity.json +2 -2
  2. package/browser/board-livecards-localstorage.js +5 -5
  3. package/cli/browser-api/board-live-cards-browser-adapter.d.ts +2 -2
  4. package/cli/{execution-interface-C_A6WCiK.d.ts → execution-interface-ftO1W7Po.d.ts} +4 -2
  5. package/cli/node/board-live-cards-cli.js +7 -7
  6. package/cli/node/card-store-cli.js +1 -1
  7. package/cli/node/execution-adapter.d.ts +47 -2
  8. package/cli/node/execution-adapter.js +2 -2
  9. package/cli/node/fs-board-adapter.d.ts +4 -4
  10. package/cli/node/fs-board-adapter.js +7 -7
  11. package/cli/node/step-machine-cli.js +4 -4
  12. package/cli/{types-CziUxkiv.d.ts → types-C2YQXFwo.d.ts} +1 -1
  13. package/examples/ARCHITECTURE.md +188 -0
  14. package/examples/board/demo-shell-with-server.html +2 -2
  15. package/examples/board-local/demo-shell-localstorage.html +3 -3
  16. package/examples/step-machine-cli/json/double-handler.js +20 -0
  17. package/examples/step-machine-cli/json/mixed-handlers.flow.json +118 -0
  18. package/examples/step-machine-cli/json/mixed-handlers.input.json +5 -0
  19. package/examples/step-machine-cli/json/scale-handler.js +13 -0
  20. package/examples/step-machine-cli/yaml/double-handler.js +20 -0
  21. package/examples/step-machine-cli/yaml/mixed-handlers.flow.yaml +94 -0
  22. package/examples/step-machine-cli/yaml/mixed-handlers.input.json +5 -0
  23. package/examples/step-machine-cli/yaml/scale-handler.js +13 -0
  24. package/lib/board-live-cards-node.cjs +7 -7
  25. package/lib/board-live-cards-node.d.cts +46 -2
  26. package/lib/board-live-cards-node.d.ts +46 -2
  27. package/lib/board-live-cards-node.js +7 -7
  28. package/lib/board-live-cards-public.cjs +1 -1
  29. package/lib/board-live-cards-public.js +1 -1
  30. package/lib/board-live-cards-server-runtime.cjs +2 -2
  31. package/lib/board-live-cards-server-runtime.js +2 -2
  32. package/lib/execution-refs.cjs +1 -1
  33. package/lib/execution-refs.d.cts +4 -2
  34. package/lib/execution-refs.d.ts +4 -2
  35. package/lib/execution-refs.js +1 -1
  36. package/lib/server-runtime/index.cjs +2 -2
  37. package/lib/server-runtime/index.js +2 -2
  38. package/package.json +4 -4
  39. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/card-store-ref.json +0 -1
  40. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/chat-handler.json +0 -1
  41. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/outputs-store-ref.json +0 -1
  42. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/task-executor.json +0 -1
  43. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.state-snapshot/board/graph.json +0 -29
  44. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.state-snapshot/board/lastJournalProcessedId.json +0 -1
  45. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime-out/.outputs/status.json +0 -25
  46. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/cards/card-market-prices/computed_values.json +0 -67
  47. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/cards/card-portfolio/computed_values.json +0 -1
  48. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/cards/card-portfolio-value/computed_values.json +0 -52
  49. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/data-objects/holdings.json +0 -22
  50. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/data-objects/positions.json +0 -46
  51. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/data-objects/quotes.json +0 -35
  52. package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/status.json +0 -113
@@ -1,4 +1,4 @@
1
- import*as d from'fs';import {createRequire}from'module';import'ajv-formats';import*as g from'path';import {createHash,randomUUID}from'crypto';import'proper-lockfile';import*as O from'os';import'net';import'url';import'child_process';var S="b64:";function q(r){let n=r.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-r.length%4)%4),e=globalThis.Buffer;if(e)return e.from(n,"base64").toString("utf8");if(typeof atob=="function"){let o=atob(n),t=new Uint8Array(o.length);for(let s=0;s<o.length;s+=1)t[s]=o.charCodeAt(s);return new TextDecoder().decode(t)}throw new Error("No base64 decoder available in this runtime")}function R(r){if(!r.startsWith(S))throw new Error(`Invalid ref format (expected ${S}<base64url(json)>): ${r}`);let n;try{n=JSON.parse(q(r.slice(S.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${r}`)}if(!n||typeof n!="object")throw new Error(`Invalid ref format (expected object payload): ${r}`);let e=n;if(typeof e.kind!="string"||typeof e.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${r}`);return {kind:e.kind,value:e.value}}var D=createRequire(import.meta.url);D("./jsonata-sync.cjs");var B=createRequire(import.meta.url);B("./jsonata-sync.cjs");function E(r,n){function e(){return r.readIndex()??{}}function o(t,s,a){let i=String(s||"").split(".").filter(Boolean);if(i.length===0)return a&&typeof a=="object"&&!Array.isArray(a)?a:{value:a};let u={...t},c=u;for(let l=0;l<i.length-1;l++){let f=i[l],p=c[f],b=p&&typeof p=="object"&&!Array.isArray(p)?{...p}:{};c[f]=b,c=b;}return c[i[i.length-1]]=a,u}return {readCard(t){let s=e()[t];return !s||!r.cardExists(s.key)?null:r.readCard(s.key)},readCardKey(t){return e()[t]?.key??null},readAllCards(){let t=[];for(let[s,a]of Object.entries(e())){if(!r.cardExists(a.key))continue;let i=r.readCard(a.key);i?t.push(i):n?.(`[card-store] could not read card "${s}" at key "${a.key}"`);}return t},readChecksumIndex(){let t={};for(let[s,a]of Object.entries(e()))t[s]=a.checksum;return t},changedSince(t){let s=e(),a=[];for(let[i,u]of Object.entries(s))t[i]!==u.checksum&&a.push(i);for(let i of Object.keys(t))s[i]||a.push(i);return a},validateUpsert(t,s){let a=e(),i=a[t],u=Object.entries(a).find(([,c])=>c.key===s);return i&&i.key!==s?{ok:false,error:`Card id "${t}" is already mapped to key "${i.key}", cannot remap to "${s}"`}:u&&u[0]!==t?{ok:false,error:`Key "${s}" is already mapped to card id "${u[0]}", cannot remap to "${t}"`}:{ok:true}},writeCard(t,s,a){let i=e(),u=a??i[t]?.key??r.defaultCardKey(t),c=r.writeCard(u,s);i[t]={key:u,checksum:c,updatedAt:new Date().toISOString()},r.writeIndex(i);},patchCard(t,s,a){let i=e(),u=i[t];if(!u||!r.cardExists(u.key))throw new Error(`card "${t}" not found`);let c=r.readCard(u.key);if(!c||typeof c!="object"||Array.isArray(c))throw new Error(`card "${t}" is not patchable`);let l=o(c,s,a),f=r.writeCard(u.key,l);i[t]={key:u.key,checksum:f,updatedAt:new Date().toISOString()},r.writeIndex(i);},removeCard(t){let s=e();s[t]&&(delete s[t],r.writeIndex(s));},readIndex(){return e()}}}function A(r){function n(t){return {status:"success",data:t}}function e(t){return {status:"fail",error:t}}function o(t){return {status:"error",error:t instanceof Error?t.message:String(t)}}return {get(t){try{let s=t.params?.id;if(s){let a=r.readCard(s);return a?n({cards:[a]}):e(`card "${s}" not found`)}return n({cards:r.readAllCards()})}catch(s){return o(s)}},set(t){try{let s=t.body;if(s==null)return e("set requires a body (card object or array of cards)");let a=Array.isArray(s)?s:[s];for(let i of a){if(typeof i.id!="string")return e("each card must have a string `id` field");r.writeCard(i.id,i);}return n({count:a.length})}catch(s){return o(s)}},del(t){try{let s=t.body?.ids??[],a=t.params?.id,i=a?[...s,a]:s;if(i.length===0)return e("del requires body.ids (string[]) or params.id");for(let u of i)r.removeCard(u);return n({count:i.length})}catch(s){return o(s)}},patch(t){try{let s=t.params?.id,a=t.params?.path;if(!s)return e("patch requires params.id");if(!a)return e("patch requires params.path");let i=t.body,u=i&&Object.prototype.hasOwnProperty.call(i,"value")?i.value:t.body;return r.patchCard(s,a,u),n({count:1})}catch(s){return o(s)}}}}function M(r,n){if(process.platform!=="win32"){d.renameSync(r,n);return}let e=[10,20,40,80,160];for(let o=0;o<=e.length;o++)try{d.renameSync(r,n);return}catch(t){let s=t.code;if((s==="EPERM"||s==="EBUSY")&&o<e.length){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e[o]);continue}throw t}}function G(r){function n(o){return g.join(r,...o.split("/"))+".json"}function e(o,t,s,a){if(d.existsSync(o))for(let i of d.readdirSync(o,{withFileTypes:true})){let u=t?`${t}/${i.name}`:i.name;if(i.isDirectory()){e(g.join(o,i.name),u,s,a);continue}if(!i.isFile()||!i.name.endsWith(".json"))continue;let c=u.replace(/\.json$/,"");(!s||c.startsWith(s))&&a.push(c);}}return {read(o){let t=n(o);if(!d.existsSync(t))return null;try{return JSON.parse(d.readFileSync(t,"utf-8"))}catch{return null}},write(o,t){let s=n(o),a=`${s}.${process.pid}.${randomUUID()}.tmp`;d.mkdirSync(g.dirname(s),{recursive:true}),d.writeFileSync(a,JSON.stringify(t,null,2),"utf-8"),M(a,s);},delete(o){let t=n(o);try{d.existsSync(t)&&d.unlinkSync(t);}catch{}},listKeys(o){let t=[];return e(r,"",o,t),t.sort()}}}function k(r){if(r==null||typeof r!="object")return JSON.stringify(r);if(Array.isArray(r))return `[${r.map(k).join(",")}]`;let n=r;return `{${Object.keys(n).sort().map(o=>`${JSON.stringify(o)}:${k(n[o])}`).join(",")}}`}function U(r){return createHash("sha256").update(k(r)).digest("hex")}function _(r,n){let e={...r};for(let[o,t]of Object.entries(n))t!==null&&typeof t=="object"&&!Array.isArray(t)&&e[o]!==null&&typeof e[o]=="object"&&!Array.isArray(e[o])?e[o]=_(e[o],t):e[o]=t;return e}function T(r,n,e){if(n.length===0)return r;let[o,...t]=n;if(t.length===0)return {...r,[o]:e};let s=r[o]!==null&&typeof r[o]=="object"&&!Array.isArray(r[o])?r[o]:{};return {...r,[o]:T(s,t,e)}}function H(r){let n=G(r);return {read:e=>n.read(e),get(e,o){let t=n.read(e);if(t===null)return null;let s=t;for(let a of o.split(".").filter(Boolean)){if(s===null||typeof s!="object"||Array.isArray(s))return null;s=s[a]??null;}return s??null},write:(e,o)=>n.write(e,o),delete:e=>n.delete(e),listKeys:e=>n.listKeys(e),shallowMerge(e,o){let t=n.read(e)??{};n.write(e,{...t,...o});},deepMerge(e,o){let t=n.read(e)??{};n.write(e,_(t,o));},patch(e,o,t){let s=n.read(e)??{},a=o.split(".").filter(Boolean);n.write(e,T(s,a,t));}}}function j(r){let n=H(r);return {readIndex(){return n.read("_index")},writeIndex(e){n.write("_index",e);},readCard(e){return n.read(e)},writeCard(e,o){return n.write(e,o),U(o)},cardExists(e){return n.read(e)!==null},defaultCardKey(e){return e}}}function x(...r){return g.resolve(...r)}g.join(O.tmpdir(),".board-live-cards-git-bash-cache.json");function w(r,n,e){let o=r.indexOf(n),t=o!==-1?r[o+1]:void 0;if(!t)throw new Error(`Missing ${n}
1
+ import*as d from'fs';import {createRequire}from'module';import'ajv-formats';import*as g from'path';import {createHash,randomUUID}from'crypto';import'proper-lockfile';import*as O from'os';import'net';import'url';import'child_process';var S="b64:";function q(r){let n=r.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-r.length%4)%4),e=globalThis.Buffer;if(e)return e.from(n,"base64").toString("utf8");if(typeof atob=="function"){let o=atob(n),t=new Uint8Array(o.length);for(let s=0;s<o.length;s+=1)t[s]=o.charCodeAt(s);return new TextDecoder().decode(t)}throw new Error("No base64 decoder available in this runtime")}function R(r){if(!r.startsWith(S))throw new Error(`Invalid ref format (expected ${S}<base64url(json)>): ${r}`);let n;try{n=JSON.parse(q(r.slice(S.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${r}`)}if(!n||typeof n!="object")throw new Error(`Invalid ref format (expected object payload): ${r}`);let e=n;if(typeof e.kind!="string"||typeof e.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${r}`);return {kind:e.kind,value:e.value}}var D=createRequire(import.meta.url);D("./jsonata-sync.cjs");var K=createRequire(import.meta.url);K("./jsonata-sync.cjs");function E(r,n){function e(){return r.readIndex()??{}}function o(t,s,a){let i=String(s||"").split(".").filter(Boolean);if(i.length===0)return a&&typeof a=="object"&&!Array.isArray(a)?a:{value:a};let u={...t},c=u;for(let l=0;l<i.length-1;l++){let f=i[l],p=c[f],b=p&&typeof p=="object"&&!Array.isArray(p)?{...p}:{};c[f]=b,c=b;}return c[i[i.length-1]]=a,u}return {readCard(t){let s=e()[t];return !s||!r.cardExists(s.key)?null:r.readCard(s.key)},readCardKey(t){return e()[t]?.key??null},readAllCards(){let t=[];for(let[s,a]of Object.entries(e())){if(!r.cardExists(a.key))continue;let i=r.readCard(a.key);i?t.push(i):n?.(`[card-store] could not read card "${s}" at key "${a.key}"`);}return t},readChecksumIndex(){let t={};for(let[s,a]of Object.entries(e()))t[s]=a.checksum;return t},changedSince(t){let s=e(),a=[];for(let[i,u]of Object.entries(s))t[i]!==u.checksum&&a.push(i);for(let i of Object.keys(t))s[i]||a.push(i);return a},validateUpsert(t,s){let a=e(),i=a[t],u=Object.entries(a).find(([,c])=>c.key===s);return i&&i.key!==s?{ok:false,error:`Card id "${t}" is already mapped to key "${i.key}", cannot remap to "${s}"`}:u&&u[0]!==t?{ok:false,error:`Key "${s}" is already mapped to card id "${u[0]}", cannot remap to "${t}"`}:{ok:true}},writeCard(t,s,a){let i=e(),u=a??i[t]?.key??r.defaultCardKey(t),c=r.writeCard(u,s);i[t]={key:u,checksum:c,updatedAt:new Date().toISOString()},r.writeIndex(i);},patchCard(t,s,a){let i=e(),u=i[t];if(!u||!r.cardExists(u.key))throw new Error(`card "${t}" not found`);let c=r.readCard(u.key);if(!c||typeof c!="object"||Array.isArray(c))throw new Error(`card "${t}" is not patchable`);let l=o(c,s,a),f=r.writeCard(u.key,l);i[t]={key:u.key,checksum:f,updatedAt:new Date().toISOString()},r.writeIndex(i);},removeCard(t){let s=e();s[t]&&(delete s[t],r.writeIndex(s));},readIndex(){return e()}}}function A(r){function n(t){return {status:"success",data:t}}function e(t){return {status:"fail",error:t}}function o(t){return {status:"error",error:t instanceof Error?t.message:String(t)}}return {get(t){try{let s=t.params?.id;if(s){let a=r.readCard(s);return a?n({cards:[a]}):e(`card "${s}" not found`)}return n({cards:r.readAllCards()})}catch(s){return o(s)}},set(t){try{let s=t.body;if(s==null)return e("set requires a body (card object or array of cards)");let a=Array.isArray(s)?s:[s];for(let i of a){if(typeof i.id!="string")return e("each card must have a string `id` field");r.writeCard(i.id,i);}return n({count:a.length})}catch(s){return o(s)}},del(t){try{let s=t.body?.ids??[],a=t.params?.id,i=a?[...s,a]:s;if(i.length===0)return e("del requires body.ids (string[]) or params.id");for(let u of i)r.removeCard(u);return n({count:i.length})}catch(s){return o(s)}},patch(t){try{let s=t.params?.id,a=t.params?.path;if(!s)return e("patch requires params.id");if(!a)return e("patch requires params.path");let i=t.body,u=i&&Object.prototype.hasOwnProperty.call(i,"value")?i.value:t.body;return r.patchCard(s,a,u),n({count:1})}catch(s){return o(s)}}}}function M(r,n){if(process.platform!=="win32"){d.renameSync(r,n);return}let e=[10,20,40,80,160];for(let o=0;o<=e.length;o++)try{d.renameSync(r,n);return}catch(t){let s=t.code;if((s==="EPERM"||s==="EBUSY")&&o<e.length){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e[o]);continue}throw t}}function G(r){function n(o){return g.join(r,...o.split("/"))+".json"}function e(o,t,s,a){if(d.existsSync(o))for(let i of d.readdirSync(o,{withFileTypes:true})){let u=t?`${t}/${i.name}`:i.name;if(i.isDirectory()){e(g.join(o,i.name),u,s,a);continue}if(!i.isFile()||!i.name.endsWith(".json"))continue;let c=u.replace(/\.json$/,"");(!s||c.startsWith(s))&&a.push(c);}}return {read(o){let t=n(o);if(!d.existsSync(t))return null;try{return JSON.parse(d.readFileSync(t,"utf-8"))}catch{return null}},write(o,t){let s=n(o),a=`${s}.${process.pid}.${randomUUID()}.tmp`;d.mkdirSync(g.dirname(s),{recursive:true}),d.writeFileSync(a,JSON.stringify(t,null,2),"utf-8"),M(a,s);},delete(o){let t=n(o);try{d.existsSync(t)&&d.unlinkSync(t);}catch{}},listKeys(o){let t=[];return e(r,"",o,t),t.sort()}}}function k(r){if(r==null||typeof r!="object")return JSON.stringify(r);if(Array.isArray(r))return `[${r.map(k).join(",")}]`;let n=r;return `{${Object.keys(n).sort().map(o=>`${JSON.stringify(o)}:${k(n[o])}`).join(",")}}`}function U(r){return createHash("sha256").update(k(r)).digest("hex")}function _(r,n){let e={...r};for(let[o,t]of Object.entries(n))t!==null&&typeof t=="object"&&!Array.isArray(t)&&e[o]!==null&&typeof e[o]=="object"&&!Array.isArray(e[o])?e[o]=_(e[o],t):e[o]=t;return e}function T(r,n,e){if(n.length===0)return r;let[o,...t]=n;if(t.length===0)return {...r,[o]:e};let s=r[o]!==null&&typeof r[o]=="object"&&!Array.isArray(r[o])?r[o]:{};return {...r,[o]:T(s,t,e)}}function H(r){let n=G(r);return {read:e=>n.read(e),get(e,o){let t=n.read(e);if(t===null)return null;let s=t;for(let a of o.split(".").filter(Boolean)){if(s===null||typeof s!="object"||Array.isArray(s))return null;s=s[a]??null;}return s??null},write:(e,o)=>n.write(e,o),delete:e=>n.delete(e),listKeys:e=>n.listKeys(e),shallowMerge(e,o){let t=n.read(e)??{};n.write(e,{...t,...o});},deepMerge(e,o){let t=n.read(e)??{};n.write(e,_(t,o));},patch(e,o,t){let s=n.read(e)??{},a=o.split(".").filter(Boolean);n.write(e,T(s,a,t));}}}function j(r){let n=H(r);return {readIndex(){return n.read("_index")},writeIndex(e){n.write("_index",e);},readCard(e){return n.read(e)},writeCard(e,o){return n.write(e,o),U(o)},cardExists(e){return n.read(e)!==null},defaultCardKey(e){return e}}}function x(...r){return g.resolve(...r)}g.join(O.tmpdir(),".board-live-cards-git-bash-cache.json");function w(r,n,e){let o=r.indexOf(n),t=o!==-1?r[o+1]:void 0;if(!t)throw new Error(`Missing ${n}
2
2
  Usage: ${e}`);return t}function h(r,n){let e=r.indexOf(n);return e!==-1?r[e+1]:void 0}function W(r,n){return r.includes(n)}async function I(){let r=[];for await(let n of process.stdin)r.push(Buffer.isBuffer(n)?n:Buffer.from(n));return Buffer.concat(r).toString("utf-8")}var $=["card-store \u2014 JSON/YAML read/write for a board card store",""," card-store get --store-ref <ref> [--id <card-id>] [--yaml]"," Print one card (--id) or all cards."," Default: JSON array. --yaml: YAML multi-doc.",""," card-store set --store-ref <ref> [--ref <jsonfile> | --ref-yaml <yamlfile>] [--yaml]"," Write cards into the store."," --ref <file> JSON file (array or single object)"," --ref-yaml <file> YAML multi-doc file"," --yaml treat stdin as YAML (default stdin format is JSON)"," Each card must contain a string `id` field.",""," card-store del --store-ref <ref> --id <card-id> [--id <card-id> ...]"," Delete one or more cards by ID.",""," card-store patch --store-ref <ref> --id <card-id> --path <dot.path> [--value-json <json>]"," Patch one card field by dot-path assignment."," If --value-json is omitted, stdin is parsed as JSON value."].join(`
3
3
  `);async function z(r){let n=r[0],e=r.slice(1);if(!n||n==="help"||n==="--help"||n==="-h"){console.error($);return}let o=w(e,"--store-ref",`card-store ${n} --store-ref <b64-ref>`),t=R(o),s=A(E(j(t.value),i=>console.error(`[card-store] ${i}`))),a=W(e,"--yaml");if(n==="get"){let i=h(e,"--id"),u=s.get({params:i?{id:i}:{}});u.status!=="success"&&(console.error(`card-store get: ${u.error}`),process.exit(1));let c=u.data.cards;if(c.length===0)return;if(a){let{stringify:l}=await import('yaml');process.stdout.write(c.map(f=>`---
4
4
  ${l(f)}`).join(""));}else process.stdout.write(JSON.stringify(c,null,2)+`
@@ -1,4 +1,30 @@
1
- import { E as ExecutionRef, a as ExecutionResult } from '../execution-interface-C_A6WCiK.js';
1
+ import { E as ExecutionRef, A as ArgsMassaging, a as ExecutionResult } from '../execution-interface-ftO1W7Po.js';
2
+
3
+ /**
4
+ * cli/common/args-massaging — JSONata-based mapping from logical args to
5
+ * transport-specific shape.
6
+ *
7
+ * `argsMassaging` is a property of `ExecutionRef`, so honoring it is the job
8
+ * of every adapter (Node spawn, HTTP, Azure Function, etc.). This helper is
9
+ * the shared pure-JSONata implementation reused by all adapters.
10
+ *
11
+ * Adapters call this as the first step inside their `invokeRefSync` /
12
+ * `dispatchExecution` implementation, then perform their transport using
13
+ * `cmdArgs` / `body` / `url`.
14
+ */
15
+
16
+ interface MassagedArgs {
17
+ /** Resolved argv tail for local transports. */
18
+ cmdArgs?: string[];
19
+ /** Resolved stdin payload for local transports. */
20
+ stdin?: unknown;
21
+ /** Resolved final URL string for http transports. */
22
+ url?: string;
23
+ /** Resolved request headers for http transports. */
24
+ headers?: Record<string, string>;
25
+ /** Resolved request body for http transports. */
26
+ body?: unknown;
27
+ }
2
28
 
3
29
  /**
4
30
  * execution-adapter.ts
@@ -89,6 +115,7 @@ declare function buildLocalBaseSpec(ref: ExecutionRef, cliDir: string): {
89
115
  command: string;
90
116
  baseArgs: string[];
91
117
  };
118
+
92
119
  /** Normalized envelope returned by invokeRefSync. */
93
120
  interface InvokeRefResult {
94
121
  /** Outcome key — drives transitions in the step machine ('success' | 'failure' | custom). */
@@ -108,6 +135,24 @@ interface InvokeRefSyncOptions {
108
135
  /** Label used in error messages (default: 'invokeRefSync'). */
109
136
  label?: string;
110
137
  }
138
+ interface InvokeExecutionRefOptions extends InvokeRefSyncOptions {
139
+ /** Extra async transport handlers keyed by `ExecutionRef.howToRun`. */
140
+ transports?: Record<string, TransportInvoker>;
141
+ /** Extra synchronous transport handlers keyed by `ExecutionRef.howToRun`. */
142
+ syncTransports?: Record<string, SyncTransportInvoker>;
143
+ }
144
+ type TransportInvoker = (ref: ExecutionRef, args: Record<string, unknown>, options?: InvokeExecutionRefOptions) => Promise<InvokeRefResult>;
145
+ type SyncTransportInvoker = (ref: ExecutionRef, args: Record<string, unknown>, options?: InvokeExecutionRefOptions) => InvokeRefResult;
146
+ interface CreateExecutionRefInvokerOptions extends InvokeExecutionRefOptions {
147
+ }
148
+ interface ExecutionRefInvoker {
149
+ invoke(ref: ExecutionRef, args: Record<string, unknown>): Promise<InvokeRefResult>;
150
+ invokeSync(ref: ExecutionRef, args: Record<string, unknown>): InvokeRefResult;
151
+ }
152
+ declare function evaluateArgsMassaging(argsMassaging: ArgsMassaging | undefined, args: Record<string, unknown>, label?: string): MassagedArgs;
153
+ declare function invokeExecutionRef(ref: ExecutionRef, args: Record<string, unknown>, options?: InvokeExecutionRefOptions): Promise<InvokeRefResult>;
154
+ declare function invokeExecutionRefSync(ref: ExecutionRef, args: Record<string, unknown>, options?: InvokeExecutionRefOptions): InvokeRefResult;
155
+ declare function createExecutionRefInvoker(options?: CreateExecutionRefInvokerOptions): ExecutionRefInvoker;
111
156
  /**
112
157
  * Invoke an ExecutionRef synchronously with a request/reply contract.
113
158
  *
@@ -171,4 +216,4 @@ declare function localNodeExecutorRef(scriptPath: string): ExecutionRef;
171
216
  */
172
217
  declare function dispatchTaskExecutorDetached(ref: ExecutionRef, args: TaskExecutorArgs, cliDir: string): void;
173
218
 
174
- export { type BoardCliCallbackArgs, type ExecutionAdapter, type ExecutionAdapterOptions, type InvokeRefResult, type InvokeRefSyncOptions, type TaskExecutorArgs, buildLocalBaseSpec, builtInBoardCliRef, builtInSourceCliExecutorRef, createExecutionAdapter, dispatchTaskExecutorDetached, invokeRefSync, localNodeExecutorRef };
219
+ export { type BoardCliCallbackArgs, type CreateExecutionRefInvokerOptions, type ExecutionAdapter, type ExecutionAdapterOptions, type ExecutionRefInvoker, type InvokeExecutionRefOptions, type InvokeRefResult, type InvokeRefSyncOptions, type SyncTransportInvoker, type TaskExecutorArgs, type TransportInvoker, buildLocalBaseSpec, builtInBoardCliRef, builtInSourceCliExecutorRef, createExecutionAdapter, createExecutionRefInvoker, dispatchTaskExecutorDetached, evaluateArgsMassaging, invokeExecutionRef, invokeExecutionRefSync, invokeRefSync, localNodeExecutorRef };
@@ -1,3 +1,3 @@
1
- import*as p from'fs';import {existsSync}from'fs';import*as f from'path';import {dirname,resolve}from'path';import {spawnSync,execFileSync,spawn,execFile}from'child_process';import {createRequire}from'module';import {fileURLToPath}from'url';import*as B from'os';import'net';import'crypto';var $=dirname(fileURLToPath(import.meta.url)),U=createRequire(import.meta.url);function D(){let t=resolve($,"./jsonata-sync.cjs");return existsSync(t)?t:resolve($,"../../card-compute/jsonata-sync.cjs")}var g=U(D());var w="b64:";function K(t){let r=new TextEncoder().encode(t),e=globalThis.Buffer,o;if(e)o=e.from(r).toString("base64");else if(typeof btoa=="function"){let n="";for(let s of r)n+=String.fromCharCode(s);o=btoa(n);}else throw new Error("No base64 encoder available in this runtime");return o.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function z(t){let r=t.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-t.length%4)%4),e=globalThis.Buffer;if(e)return e.from(r,"base64").toString("utf8");if(typeof atob=="function"){let o=atob(r),n=new Uint8Array(o.length);for(let s=0;s<o.length;s+=1)n[s]=o.charCodeAt(s);return new TextDecoder().decode(n)}throw new Error("No base64 decoder available in this runtime")}function h(t){return `${w}${K(JSON.stringify(t))}`}function v(t){if(!t.startsWith(w))throw new Error(`Invalid ref format (expected ${w}<base64url(json)>): ${t}`);let r;try{r=JSON.parse(z(t.slice(w.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${t}`)}if(!r||typeof r!="object")throw new Error(`Invalid ref format (expected object payload): ${t}`);let e=r;if(typeof e.kind!="string"||typeof e.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${t}`);return {kind:e.kind,value:e.value}}function Q(t){if(typeof t=="object"&&t!==null){let{command:e,args:o=[],...n}=t,s=C(e,o);return {...n,command:s.command,args:s.args}}let r=O(t);if(r.length===0)throw new Error(`Empty command spec: ${JSON.stringify(t)}`);return C(r[0],r.slice(1))}function C(t,r){return /^(node|node\.exe)$/i.test(t)?{command:process.execPath,args:r}:/\.m?js$/i.test(t)?{command:process.execPath,args:[t,...r]}:{command:t,args:r}}function O(t){let r=[],e="",o=null;for(let n of t.trim()){if(o){n===o?o=null:e+=n;continue}if(n==='"'||n==="'"){o=n;continue}if(/\s/.test(n)){e&&(r.push(e),e="");continue}e+=n;}if(o)throw new Error(`Unterminated quote in command: ${t}`);return e&&r.push(e),r}function b(t){return process.platform==="win32"&&/\.(cmd|bat)$/i.test(t)}function k(t,r){let{command:e,args:o=[],cwd:n,env:s,timeoutMs:i}=t;return execFileSync(e,o,{shell:b(e),timeout:i,encoding:r?.encoding??"utf-8",cwd:n,windowsHide:true,env:s?{...process.env,...s}:void 0,input:r?.input})}function Y(t,r){let{command:e,args:o=[],cwd:n,env:s,timeoutMs:i=3e4}=t;execFile(e,o,{shell:b(e),encoding:"utf8",windowsHide:true,timeout:i,maxBuffer:10*1024*1024,cwd:n,env:s?{...process.env,...s}:void 0},(a,u,d)=>r(a??null,u,d));}f.join(B.tmpdir(),".board-live-cards-git-bash-cache.json");function E(t){let{command:r,args:e=[]}=t;if(process.platform==="win32"){spawn(r,e,{detached:true,stdio:"ignore",windowsHide:true,shell:b(r)}).unref();return}spawn(r,e,{detached:true,stdio:"ignore"}).unref();}function S(t,r,e){let o=f.join(t,"board-live-cards-cli.js");if(p.existsSync(o))return {cmd:process.execPath,args:[o,r,...e]};let n=f.join(t,"board-live-cards-cli.ts"),s=f.join(t,"..","..","node_modules","tsx","dist","cli.mjs"),i=f.join(t,"..","..","node_modules",".bin","tsx"),a=p.existsSync(s)?s:i;return p.existsSync(n)&&p.existsSync(a)?{cmd:process.execPath,args:[a,n,r,...e]}:{cmd:process.platform==="win32"?"npx.cmd":"npx",args:["tsx",n,r,...e]}}function J(){return {executeSync(t,r,e){return k({command:t,args:r,cwd:e?.cwd,timeoutMs:e?.timeout,env:e?.env},{encoding:e?.encoding,input:e?.input})},executeAsync(t,r,e){Y({command:t,args:r},e);},resolveInvocation(t,r){let e=Q({command:t,args:r});return {cmd:e.command,args:e.args??[]}},splitCommand:O,spawnDetached(t,r){E({command:t,args:r});}}}function T(t,r,e){if(!t||typeof t!="object")return {};let o={};if(Array.isArray(t.cmdTemplate)){let n=[];for(let s of t.cmdTemplate)try{n.push(String(g(s).evaluate(r)));}catch(i){let a=i instanceof Error?i.message:String(i);throw new Error(`[${e}] argsMassaging.cmdTemplate failed on "${s}": ${a}`)}o.cmdArgs=n;}if(typeof t.stdinTemplate=="string")try{o.stdin=g(t.stdinTemplate).evaluate(r);}catch(n){let s=n instanceof Error?n.message:String(n);throw new Error(`[${e}] argsMassaging.stdinTemplate failed: ${s}`)}if(typeof t.urlTemplate=="string")try{o.url=String(g(t.urlTemplate).evaluate(r));}catch(n){let s=n instanceof Error?n.message:String(n);throw new Error(`[${e}] argsMassaging.urlTemplate failed: ${s}`)}if(typeof t.headerTemplate=="string")try{let n=g(t.headerTemplate).evaluate(r);if(typeof n!="object"||n===null)throw new Error(`headerTemplate must produce an object, got: ${JSON.stringify(n)}`);o.headers=n;}catch(n){let s=n instanceof Error?n.message:String(n);throw new Error(`[${e}] argsMassaging.headerTemplate failed: ${s}`)}if(typeof t.bodyTemplate=="string")try{o.body=g(t.bodyTemplate).evaluate(r);}catch(n){let s=n instanceof Error?n.message:String(n);throw new Error(`[${e}] argsMassaging.bodyTemplate failed: ${s}`)}return o}async function Z(t,r){return g(t).evaluate(r)}async function tt(t,r){let e=await Z(t,r);if(typeof e!="string")throw new Error(`argsMassaging expression did not produce a string: ${t} \u2192 ${JSON.stringify(e)}`);return e}function et(t,r){let e=typeof t=="object"?t.value:v(t).value;switch(e){case "source-cli-task-executor":{let o=f.join(r,"source-cli-task-executor.js");if(p.existsSync(o))return {command:process.execPath,args:[o]};let n=f.join(r,"source-cli-task-executor.ts"),s=f.join(r,"..","..","node_modules","tsx","dist","cli.mjs"),i=f.join(r,"..","..","node_modules",".bin","tsx"),a=p.existsSync(s)?s:i;return p.existsSync(n)&&p.existsSync(a)?{command:process.execPath,args:[a,n]}:{command:process.execPath,args:[o]}}case "board-live-cards":{let{cmd:o,args:n}=S(r,"_",[]);return {command:o,args:n}}default:throw new Error(`resolveBuiltIn: unknown built-in name "${e}". Supported: source-cli-task-executor, board-live-cards`)}}function R(t,r){if(t.howToRun==="built-in"){let{command:o,args:n}=et(t.whatToRun,r);return {command:o,baseArgs:n}}let e=typeof t.whatToRun=="object"?t.whatToRun.value:v(t.whatToRun).value;switch(t.howToRun){case "local-node":return {command:process.execPath,baseArgs:[e]};case "local-python":return {command:process.platform==="win32"?"python":"python3",baseArgs:[e]};case "local-process":return {command:e,baseArgs:[]};default:throw new Error(`resolveBaseInvocation: howToRun "${t.howToRun}" is not a local transport`)}}function M(t,r){let e=[t.subcommand];return t.inRef&&e.push("--in-ref",t.inRef),t.outRef&&e.push("--out-ref",t.outRef),t.errRef&&e.push("--err-ref",t.errRef),r&&e.push("--extra",Buffer.from(JSON.stringify(r)).toString("base64")),e}function rt(t,r){return {subcommand:t.subcommand,...t.inRef?{inRef:t.inRef}:{},...t.outRef?{outRef:t.outRef}:{},...t.errRef?{errRef:t.errRef}:{},...r?{extra:r}:{}}}function nt(t,r){return R(t,r)}function ot(t){let r=t.trim();if(!r)throw new Error("empty stdout");try{return JSON.parse(r)}catch{let e=r.split(/\r?\n/).filter(Boolean),o=e[e.length-1];return JSON.parse(o)}}function jt(t,r,e){let o=e?.label??"invokeRefSync",n=e?.cliDir??e?.cwd??process.cwd(),s;try{s=T(t.argsMassaging,r,o);}catch(c){return {result:"failure",data:{error:c instanceof Error?c.message:String(c)}}}let i;try{i=nt(t,n);}catch(c){let l=c instanceof Error?c.message:String(c);return {result:"failure",data:{error:`[${o}] ref resolution failed: ${l}`}}}let a=[...i.baseArgs,...s.cmdArgs??[]],u=JSON.stringify(s.stdin??r),d=J(),m;try{m=d.executeSync(i.command,a,{timeout:e?.timeoutMs??3e4,encoding:"utf-8",cwd:e?.cwd,input:u});}catch(c){let l=c,_=(l.stderr?String(l.stderr):"").trim(),H=typeof l.status=="number"?l.status:"unknown",A=_||l.message;return {result:"failure",data:{error:`[${o}] ref exited with status ${H}${A?`: ${A}`:""}`}}}try{let c=ot(m);return {result:"success",data:c&&typeof c=="object"&&!Array.isArray(c)?c:{stdout:c}}}catch{return {result:"success",data:{stdout:m.trim()}}}}function $t(t){let{cliDir:r}=t;return {async invokeTaskExecutor(e,o){if(e.howToRun==="http:post"||e.howToRun==="http:get")return N(e,o);let{command:s,baseArgs:i}=R(e,r),a;if(e.argsMassaging?.cmdTemplate){let d={...o,whatToRun:e.whatToRun};a=await Promise.all(e.argsMassaging.cmdTemplate.map(c=>tt(c,d)));}else a=M(o,e.extra);let u=[...i,...a];try{return k({command:s,args:u}),{status:"success"}}catch(d){return {status:"error",error:d instanceof Error?d.message:String(d)}}},invokeBoardCliCallback(e,o){let n,s;if(e.howToRun==="built-in"){let a=S(r,o.command,o.argv),u=spawnSync(a.cmd,a.args,{encoding:"utf-8",windowsHide:true});return u.status!==0?{status:"error",error:`board CLI exited ${u.status}: ${u.stderr?.trim()}`}:{status:"success"}}({command:n,baseArgs:s}=R(e,r));let i=spawnSync(n,[...s,o.command,...o.argv],{encoding:"utf-8",windowsHide:true});return i.status!==0?{status:"error",error:`board CLI exited ${i.status}: ${i.stderr?.trim()}`}:{status:"success"}}}}async function N(t,r){let e={...r,whatToRun:t.whatToRun},o=T(t.argsMassaging,e,"_invokeTaskExecutorHttp"),n=o.url??(typeof t.whatToRun=="object"?t.whatToRun.value:v(t.whatToRun).value),s=o.body?o.body:rt(r,t.extra),i={"Content-Type":"application/json"},a=o.headers?{...i,...o.headers}:i,u=await fetch(n,{method:t.howToRun==="http:get"?"GET":"POST",headers:a,body:JSON.stringify(s)});if(!u.ok){let m=await u.text().catch(()=>"");return {status:"error",error:`HTTP ${u.status}: ${m}`}}let d=await u.json().catch(()=>null);return d&&typeof d.status=="string"?d:{status:"success"}}function Pt(){return {meta:"task-executor",howToRun:"built-in",whatToRun:h({kind:"built-in",value:"source-cli-task-executor"})}}function Ct(){return {meta:"board-live-cards",howToRun:"built-in",whatToRun:h({kind:"built-in",value:"board-live-cards"})}}function Bt(t){return {meta:"task-executor",howToRun:"local-node",whatToRun:h({kind:"fs-path",value:t})}}function Ot(t,r,e){if(t.howToRun==="http:post"||t.howToRun==="http:get"){N(t,r).catch(a=>{console.error(`[dispatchTaskExecutorDetached] HTTP dispatch failed: ${a.message}`);});return}let{command:n,baseArgs:s}=R(t,e),i=M(r,t.extra);E({command:n,args:[...s,...i]});}
2
- export{nt as buildLocalBaseSpec,Ct as builtInBoardCliRef,Pt as builtInSourceCliExecutorRef,$t as createExecutionAdapter,Ot as dispatchTaskExecutorDetached,jt as invokeRefSync,Bt as localNodeExecutorRef};//# sourceMappingURL=execution-adapter.js.map
1
+ import*as m from'fs';import {existsSync}from'fs';import*as g from'path';import {dirname,resolve}from'path';import {spawnSync,execFileSync,spawn,execFile}from'child_process';import {createRequire}from'module';import {fileURLToPath}from'url';import*as B from'os';import'net';import'crypto';var P=dirname(fileURLToPath(import.meta.url)),Z=createRequire(import.meta.url);function tt(){let t=resolve(P,"./jsonata-sync.cjs");return existsSync(t)?t:resolve(P,"../../card-compute/jsonata-sync.cjs")}var p=Z(tt());var k="b64:";function et(t){let n=new TextEncoder().encode(t),e=globalThis.Buffer,o;if(e)o=e.from(n).toString("base64");else if(typeof btoa=="function"){let r="";for(let s of n)r+=String.fromCharCode(s);o=btoa(r);}else throw new Error("No base64 encoder available in this runtime");return o.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function nt(t){let n=t.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-t.length%4)%4),e=globalThis.Buffer;if(e)return e.from(n,"base64").toString("utf8");if(typeof atob=="function"){let o=atob(n),r=new Uint8Array(o.length);for(let s=0;s<o.length;s+=1)r[s]=o.charCodeAt(s);return new TextDecoder().decode(r)}throw new Error("No base64 decoder available in this runtime")}function R(t){return `${k}${et(JSON.stringify(t))}`}function y(t){if(!t.startsWith(k))throw new Error(`Invalid ref format (expected ${k}<base64url(json)>): ${t}`);let n;try{n=JSON.parse(nt(t.slice(k.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${t}`)}if(!n||typeof n!="object")throw new Error(`Invalid ref format (expected object payload): ${t}`);let e=n;if(typeof e.kind!="string"||typeof e.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${t}`);return {kind:e.kind,value:e.value}}function it(t){if(typeof t=="object"&&t!==null){let{command:e,args:o=[],...r}=t,s=O(e,o);return {...r,command:s.command,args:s.args}}let n=J(t);if(n.length===0)throw new Error(`Empty command spec: ${JSON.stringify(t)}`);return O(n[0],n.slice(1))}function O(t,n){return /^(node|node\.exe)$/i.test(t)?{command:process.execPath,args:n}:/\.m?js$/i.test(t)?{command:process.execPath,args:[t,...n]}:{command:t,args:n}}function J(t){let n=[],e="",o=null;for(let r of t.trim()){if(o){r===o?o=null:e+=r;continue}if(r==='"'||r==="'"){o=r;continue}if(/\s/.test(r)){e&&(n.push(e),e="");continue}e+=r;}if(o)throw new Error(`Unterminated quote in command: ${t}`);return e&&n.push(e),n}function b(t){return process.platform==="win32"&&/\.(cmd|bat)$/i.test(t)}function S(t,n){let{command:e,args:o=[],cwd:r,env:s,timeoutMs:i}=t;return execFileSync(e,o,{shell:b(e),timeout:i,encoding:n?.encoding??"utf-8",cwd:r,windowsHide:true,env:s?{...process.env,...s}:void 0,input:n?.input})}function at(t,n){let{command:e,args:o=[],cwd:r,env:s,timeoutMs:i=3e4}=t;execFile(e,o,{shell:b(e),encoding:"utf8",windowsHide:true,timeout:i,maxBuffer:10*1024*1024,cwd:r,env:s?{...process.env,...s}:void 0},(a,d,c)=>n(a??null,d,c));}g.join(B.tmpdir(),".board-live-cards-git-bash-cache.json");function T(t){let{command:n,args:e=[]}=t;if(process.platform==="win32"){spawn(n,e,{detached:true,stdio:"ignore",windowsHide:true,shell:b(n)}).unref();return}spawn(n,e,{detached:true,stdio:"ignore"}).unref();}function A(t,n,e){let o=g.join(t,"board-live-cards-cli.js");if(m.existsSync(o))return {cmd:process.execPath,args:[o,n,...e]};let r=g.join(t,"board-live-cards-cli.ts"),s=g.join(t,"..","..","node_modules","tsx","dist","cli.mjs"),i=g.join(t,"..","..","node_modules",".bin","tsx"),a=m.existsSync(s)?s:i;return m.existsSync(r)&&m.existsSync(a)?{cmd:process.execPath,args:[a,r,n,...e]}:{cmd:process.platform==="win32"?"npx.cmd":"npx",args:["tsx",r,n,...e]}}function M(){return {executeSync(t,n,e){return S({command:t,args:n,cwd:e?.cwd,timeoutMs:e?.timeout,env:e?.env},{encoding:e?.encoding,input:e?.input})},executeAsync(t,n,e){at({command:t,args:n},e);},resolveInvocation(t,n){let e=it({command:t,args:n});return {cmd:e.command,args:e.args??[]}},splitCommand:J,spawnDetached(t,n){T({command:t,args:n});}}}function j(t,n,e){if(!t||typeof t!="object")return {};let o={};if(Array.isArray(t.cmdTemplate)){let r=[];for(let s of t.cmdTemplate)try{r.push(String(p(s).evaluate(n)));}catch(i){let a=i instanceof Error?i.message:String(i);throw new Error(`[${e}] argsMassaging.cmdTemplate failed on "${s}": ${a}`)}o.cmdArgs=r;}if(typeof t.stdinTemplate=="string")try{o.stdin=p(t.stdinTemplate).evaluate(n);}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`[${e}] argsMassaging.stdinTemplate failed: ${s}`)}if(typeof t.urlTemplate=="string")try{o.url=String(p(t.urlTemplate).evaluate(n));}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`[${e}] argsMassaging.urlTemplate failed: ${s}`)}if(typeof t.headerTemplate=="string")try{let r=p(t.headerTemplate).evaluate(n);if(typeof r!="object"||r===null)throw new Error(`headerTemplate must produce an object, got: ${JSON.stringify(r)}`);o.headers=r;}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`[${e}] argsMassaging.headerTemplate failed: ${s}`)}if(typeof t.bodyTemplate=="string")try{o.body=p(t.bodyTemplate).evaluate(n);}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`[${e}] argsMassaging.bodyTemplate failed: ${s}`)}return o}async function ct(t,n){return p(t).evaluate(n)}async function ut(t,n){let e=await ct(t,n);if(typeof e!="string")throw new Error(`argsMassaging expression did not produce a string: ${t} \u2192 ${JSON.stringify(e)}`);return e}function dt(t,n){let e=typeof t=="object"?t.value:y(t).value;switch(e){case "source-cli-task-executor":{let o=g.join(n,"source-cli-task-executor.js");if(m.existsSync(o))return {command:process.execPath,args:[o]};let r=g.join(n,"source-cli-task-executor.ts"),s=g.join(n,"..","..","node_modules","tsx","dist","cli.mjs"),i=g.join(n,"..","..","node_modules",".bin","tsx"),a=m.existsSync(s)?s:i;return m.existsSync(r)&&m.existsSync(a)?{command:process.execPath,args:[a,r]}:{command:process.execPath,args:[o]}}case "board-live-cards":{let{cmd:o,args:r}=A(n,"_",[]);return {command:o,args:r}}default:throw new Error(`resolveBuiltIn: unknown built-in name "${e}". Supported: source-cli-task-executor, board-live-cards`)}}function E(t,n){if(t.howToRun==="built-in"){let{command:o,args:r}=dt(t.whatToRun,n);return {command:o,baseArgs:r}}let e=typeof t.whatToRun=="object"?t.whatToRun.value:y(t.whatToRun).value;switch(t.howToRun){case "local-node":return {command:process.execPath,baseArgs:[e]};case "local-python":return {command:process.platform==="win32"?"python":"python3",baseArgs:[e]};case "local-process":return {command:e,baseArgs:[]};default:throw new Error(`resolveBaseInvocation: howToRun "${t.howToRun}" is not a local transport`)}}function L(t,n){let e=[t.subcommand];return t.inRef&&e.push("--in-ref",t.inRef),t.outRef&&e.push("--out-ref",t.outRef),t.errRef&&e.push("--err-ref",t.errRef),n&&e.push("--extra",Buffer.from(JSON.stringify(n)).toString("base64")),e}function lt(t,n){return {subcommand:t.subcommand,...t.inRef?{inRef:t.inRef}:{},...t.outRef?{outRef:t.outRef}:{},...t.errRef?{errRef:t.errRef}:{},...n?{extra:n}:{}}}function ft(t,n){return E(t,n)}function _(t){let n=t.trim();if(!n)throw new Error("empty stdout");try{return JSON.parse(n)}catch{let e=n.split(/\r?\n/).filter(Boolean),o=e[e.length-1];return JSON.parse(o)}}function F(t){let n=t.whatToRun;return typeof n=="object"?n.value:y(n).value}function U(t,n){return {...n,whatToRun:F(t),...t.extra?{extra:t.extra}:{}}}function q(t,n,e="invokeExecutionRef"){return j(t,n,e)}function G(t){return t&&typeof t=="object"&&!Array.isArray(t)&&typeof t.result=="string"&&t.data&&typeof t.data=="object"&&!Array.isArray(t.data)?t:{result:"success",data:t&&typeof t=="object"&&!Array.isArray(t)?t:{stdout:t}}}function x(t){return {result:"failure",data:{error:t}}}function h(t,n,e){let o=e?.label??"invokeExecutionRefSync",r=e?.cliDir??e?.cwd??process.cwd(),s;try{s=q(t.argsMassaging,U(t,n),o);}catch(u){let f=u instanceof Error?u.message:String(u);return x(f)}let i;try{i=ft(t,r);}catch(u){let f=u instanceof Error?u.message:String(u);return x(`[${o}] ref resolution failed: ${f}`)}let a=[...i.baseArgs,...s.cmdArgs??[]],d=JSON.stringify(s.stdin??n),c=M(),l;try{l=c.executeSync(i.command,a,{timeout:e?.timeoutMs??3e4,encoding:"utf-8",cwd:e?.cwd,input:d});}catch(u){let f=u,K=(f.stderr?String(f.stderr):"").trim(),V=typeof f.status=="number"?f.status:"unknown",$=K||f.message;return x(`[${o}] ref exited with status ${V}${$?`: ${$}`:""}`)}try{return G(_(l))}catch{return {result:"success",data:{stdout:l.trim()}}}}async function H(t,n,e){let o=e?.label??"invokeExecutionRef",r;try{r=q(t.argsMassaging,U(t,n),o);}catch(c){let l=c instanceof Error?c.message:String(c);return x(l)}let s=F(t),i=r.headers?{"Content-Type":"application/json",...r.headers}:{"Content-Type":"application/json"},a=r.url??s,d;if(t.howToRun==="http:get"){let c=r.body&&typeof r.body=="object"&&!Array.isArray(r.body)?r.body:n,l=new URLSearchParams(Object.entries(c).filter(([,u])=>u!=null).map(([u,f])=>[u,String(f)]));l.size>0&&(a=`${a}${a.includes("?")?"&":"?"}${l.toString()}`);}else d=JSON.stringify(r.body??n);try{let c=await fetch(a,{method:t.howToRun==="http:get"?"GET":"POST",headers:i,body:d});if(!c.ok){let u=await c.text().catch(()=>"");return x(`[${o}] HTTP ${c.status}${u?`: ${u}`:""}`)}let l=await c.text();if(!l.trim())return {result:"success",data:{}};try{return G(_(l))}catch{return {result:"success",data:{stdout:l.trim()}}}}catch(c){let l=c instanceof Error?c.message:String(c);return x(`[${o}] ${l}`)}}var gt={"local-node":async(t,n,e)=>h(t,n,e),"local-python":async(t,n,e)=>h(t,n,e),"local-process":async(t,n,e)=>h(t,n,e),"built-in":async(t,n,e)=>h(t,n,e),"http:post":H,"http:get":H},pt={"local-node":h,"local-python":h,"local-process":h,"built-in":h};async function mt(t,n,e){let o=e?.transports?.[t.howToRun]??gt[t.howToRun];return o?o(t,n,e):x(`[${e?.label??"invokeExecutionRef"}] unsupported howToRun: ${t.howToRun}`)}function D(t,n,e){let o=e?.syncTransports?.[t.howToRun]??pt[t.howToRun];return o?o(t,n,e):x(`[${e?.label??"invokeExecutionRefSync"}] unsupported sync howToRun: ${t.howToRun}`)}function Lt(t){return {invoke(n,e){return mt(n,e,t)},invokeSync(n,e){return D(n,e,t)}}}function _t(t,n,e){return D(t,n,e)}function Ft(t){let{cliDir:n}=t;return {async invokeTaskExecutor(e,o){if(e.howToRun==="http:post"||e.howToRun==="http:get")return z(e,o);let{command:s,baseArgs:i}=E(e,n),a;if(e.argsMassaging?.cmdTemplate){let c={...o,whatToRun:e.whatToRun};a=await Promise.all(e.argsMassaging.cmdTemplate.map(u=>ut(u,c)));}else a=L(o,e.extra);let d=[...i,...a];try{return S({command:s,args:d}),{status:"success"}}catch(c){return {status:"error",error:c instanceof Error?c.message:String(c)}}},invokeBoardCliCallback(e,o){let r,s;if(e.howToRun==="built-in"){let a=A(n,o.command,o.argv),d=spawnSync(a.cmd,a.args,{encoding:"utf-8",windowsHide:true});return d.status!==0?{status:"error",error:`board CLI exited ${d.status}: ${d.stderr?.trim()}`}:{status:"success"}}({command:r,baseArgs:s}=E(e,n));let i=spawnSync(r,[...s,o.command,...o.argv],{encoding:"utf-8",windowsHide:true});return i.status!==0?{status:"error",error:`board CLI exited ${i.status}: ${i.stderr?.trim()}`}:{status:"success"}}}}async function z(t,n){let e={...n,whatToRun:t.whatToRun},o=j(t.argsMassaging,e,"_invokeTaskExecutorHttp"),r=o.url??(typeof t.whatToRun=="object"?t.whatToRun.value:y(t.whatToRun).value),s=o.body?o.body:lt(n,t.extra),i={"Content-Type":"application/json"},a=o.headers?{...i,...o.headers}:i,d=await fetch(r,{method:t.howToRun==="http:get"?"GET":"POST",headers:a,body:JSON.stringify(s)});if(!d.ok){let l=await d.text().catch(()=>"");return {status:"error",error:`HTTP ${d.status}: ${l}`}}let c=await d.json().catch(()=>null);return c&&typeof c.status=="string"?c:{status:"success"}}function Ut(){return {meta:"task-executor",howToRun:"built-in",whatToRun:R({kind:"built-in",value:"source-cli-task-executor"})}}function qt(){return {meta:"board-live-cards",howToRun:"built-in",whatToRun:R({kind:"built-in",value:"board-live-cards"})}}function Gt(t){return {meta:"task-executor",howToRun:"local-node",whatToRun:R({kind:"fs-path",value:t})}}function Dt(t,n,e){if(t.howToRun==="http:post"||t.howToRun==="http:get"){z(t,n).catch(a=>{console.error(`[dispatchTaskExecutorDetached] HTTP dispatch failed: ${a.message}`);});return}let{command:r,baseArgs:s}=E(t,e),i=L(n,t.extra);T({command:r,args:[...s,...i]});}
2
+ export{ft as buildLocalBaseSpec,qt as builtInBoardCliRef,Ut as builtInSourceCliExecutorRef,Ft as createExecutionAdapter,Lt as createExecutionRefInvoker,Dt as dispatchTaskExecutorDetached,q as evaluateArgsMassaging,mt as invokeExecutionRef,D as invokeExecutionRefSync,_t as invokeRefSync,Gt as localNodeExecutorRef};//# sourceMappingURL=execution-adapter.js.map
3
3
  //# sourceMappingURL=execution-adapter.js.map
@@ -1,9 +1,9 @@
1
- import { C as CommandInput, a as CommandResult, b as BlobStorage, K as KindValueRef, c as BoardNonCorePlatformAdapter, B as BoardPlatformAdapter, I as InvocationAdapter } from '../types-CziUxkiv.js';
2
- export { d as BoardLiveCardsNonCorePublic, e as BoardLiveCardsPublic, D as DescribeEnvelope, f as createBoardLiveCardsNonCorePublic, g as createBoardLiveCardsPublic, p as parseRef, s as serializeRef } from '../types-CziUxkiv.js';
3
- export { E as ExecutionRef, e as executionRefFromScriptPath, p as parseExecutionRef, s as serializeExecutionRef } from '../execution-interface-C_A6WCiK.js';
1
+ import { C as CommandInput, a as CommandResult, b as BlobStorage, K as KindValueRef, c as BoardNonCorePlatformAdapter, B as BoardPlatformAdapter, I as InvocationAdapter } from '../types-C2YQXFwo.js';
2
+ export { d as BoardLiveCardsNonCorePublic, e as BoardLiveCardsPublic, D as DescribeEnvelope, f as createBoardLiveCardsNonCorePublic, g as createBoardLiveCardsPublic, p as parseRef, s as serializeRef } from '../types-C2YQXFwo.js';
3
+ export { E as ExecutionRef, e as executionRefFromScriptPath, p as parseExecutionRef, s as serializeExecutionRef } from '../execution-interface-ftO1W7Po.js';
4
4
  import { C as CardAdminStore, L as LiveCard } from '../board-live-cards-lib-tjYsPt5U.js';
5
5
  export { a as BOARD_GRAPH_KEY, E as EMPTY_CONFIG, S as SNAPSHOT_SCHEMA_VERSION_V1, c as createCardStore } from '../board-live-cards-lib-tjYsPt5U.js';
6
- export { invokeRefSync } from './execution-adapter.js';
6
+ export { CreateExecutionRefInvokerOptions, ExecutionRefInvoker, InvokeExecutionRefOptions, InvokeRefResult, SyncTransportInvoker, TransportInvoker, createExecutionRefInvoker, evaluateArgsMassaging, invokeExecutionRef, invokeExecutionRefSync, invokeRefSync } from './execution-adapter.js';
7
7
 
8
8
  /**
9
9
  * card-store-lib-public.ts