@crewx/sdk 0.9.0-rc.160 → 0.9.0-rc.162

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 (53) hide show
  1. package/dist/agent-interceptor/chain.d.ts +25 -0
  2. package/dist/agent-interceptor/index.d.ts +6 -0
  3. package/dist/agent-interceptor/model-runner.d.ts +19 -0
  4. package/dist/agent-interceptor/program-runner.d.ts +13 -0
  5. package/dist/agent-interceptor/protocol.d.ts +68 -0
  6. package/dist/agent-interceptor/run-stop.d.ts +3 -0
  7. package/dist/agent-interceptor/schema.d.ts +267 -0
  8. package/dist/agent-interceptor/types.d.ts +88 -0
  9. package/dist/app/app.d.ts +10 -1
  10. package/dist/app/index.d.ts +2 -0
  11. package/dist/app/index.js +10 -10
  12. package/dist/app/schedule-contract.d.ts +59 -0
  13. package/dist/esm/app/index.js +10 -10
  14. package/dist/esm/index.js +237 -229
  15. package/dist/esm/plugins/index.js +86 -81
  16. package/dist/esm/publish/index.js +2 -2
  17. package/dist/esm/repository/index.js +98 -93
  18. package/dist/esm/skills/index.js +2 -2
  19. package/dist/events/types.d.ts +12 -0
  20. package/dist/facade/Crewx.d.ts +9 -0
  21. package/dist/index.browser.d.ts +2 -0
  22. package/dist/index.browser.js +4 -4
  23. package/dist/index.d.ts +14 -3
  24. package/dist/index.js +306 -298
  25. package/dist/mcp-app/app-icon-read.d.ts +7 -0
  26. package/dist/mcp-app/app-schedule.d.ts +85 -0
  27. package/dist/mcp-app/dev-checks.d.ts +2 -0
  28. package/dist/mcp-app/discovery.d.ts +3 -0
  29. package/dist/mcp-app/index.d.ts +5 -1
  30. package/dist/mcp-app/skill-backend.d.ts +5 -2
  31. package/dist/mcp-app/workspace-snapshot.d.ts +3 -0
  32. package/dist/plugins/index.js +83 -78
  33. package/dist/provider/bridge.d.ts +5 -1
  34. package/dist/provider/cli/adapter.types.d.ts +9 -0
  35. package/dist/provider-account/accounts.d.ts +15 -0
  36. package/dist/provider-account/index.d.ts +5 -0
  37. package/dist/provider-account/registry.d.ts +30 -0
  38. package/dist/provider-account/types.d.ts +40 -0
  39. package/dist/publish/errors.d.ts +1 -1
  40. package/dist/publish/index.d.ts +5 -0
  41. package/dist/publish/index.js +2 -2
  42. package/dist/repository/index.js +99 -94
  43. package/dist/repository/task.repository.d.ts +7 -0
  44. package/dist/repository/thread.repository.d.ts +1 -0
  45. package/dist/skills/index.js +2 -2
  46. package/dist/types/index.d.ts +33 -0
  47. package/dist/types/task-log.types.d.ts +3 -1
  48. package/dist/ui-instance/types.d.ts +8 -0
  49. package/dist/ui-plugin/app-icon.d.ts +50 -0
  50. package/dist/ui-plugin/index.d.ts +2 -0
  51. package/dist/ui-plugin/types.d.ts +2 -1
  52. package/dist/utils/id.d.ts +1 -1
  53. package/package.json +1 -1
package/dist/app/index.js CHANGED
@@ -1,10 +1,10 @@
1
- 'use strict';var util=require('util'),fs=require('fs'),crypto=require('crypto'),console$1=require('console'),stream=require('stream');var h=["text/plain","application/json"];var Y=Symbol;Y.metadata===void 0&&Object.defineProperty(Symbol,"metadata",{configurable:false,value:Symbol.for("Symbol.metadata")});var ue=Y.metadata,N=Symbol.for("crewx.app.tool-metadata"),A=class extends Error{code;detail;outcome;constructor(t,n=null,o){super(t),this.name="AppError",this.code=t,this.detail=n,this.outcome=B(o?.outcome);}};function B(e){return e==="rejected"?"rejected":"failed"}var q=class{static devtools=process.env.CREWX_APP_DEV==="1"?Object.freeze({log:true}):void 0;currentState;stateWasSet=false;answerBody;answerRange;callContext;workspaceRoot;constructor(t={workspaceRoot:process.cwd()}){this.currentState=t.state??{},this.workspaceRoot=t.workspaceRoot,this.callContext=t.context===void 0?void 0:fe(t.context);}get context(){if(this.callContext===void 0)throw new TypeError("this.context is only set when the Host runs the action; pass options.context when you construct the App in a test");return this.callContext}get state(){return this.currentState}get didSetState(){return this.stateWasSet}setState(t){this.currentState=t,this.stateWasSet=true;}get didSetContent(){return this.answerBody!==void 0}get producedContent(){return this.answerBody===void 0?void 0:{body:this.answerBody,...this.answerRange===void 0?{}:{range:this.answerRange}}}setContent(t,n){if(typeof t!="string"&&!(t instanceof Uint8Array))throw new TypeError("setContent needs a string or a Uint8Array");if(n!==void 0&&!me(n))throw new TypeError("setContent range must be { startLine, lineCount, totalLines }, three integers of at least 1");this.answerBody=typeof t=="string"?new TextEncoder().encode(t):new Uint8Array(t),this.answerRange=n===void 0?void 0:{startLine:n.startLine,lineCount:n.lineCount,totalLines:n.totalLines};}emptyState(){return {}}validate(t,n,o){}mapError(t){return {code:"EXECUTION_FAILED",detail:null}}errorState(t,n,o){return {...O(o.state)?o.state:{},error:{code:t,detail:n}}}};function ce(e){return function(t,n){if(n.static||n.private||n.kind!=="method")throw new TypeError("@Tool can decorate public instance methods only");let o=n.metadata;if(!o)throw new TypeError("standard decorator metadata is unavailable");let i=Object.hasOwn(o,N)?o[N]:[];if(i.some(s=>s.methodName===String(n.name)))throw new TypeError(`@Tool is declared more than once for ${String(n.name)}`);let r=e.content===void 0?void 0:pe(e.name,e.content);o[N]=[...i,{methodName:String(n.name),options:Object.freeze({...e,...r===void 0?{}:{content:r}})}];}}function D(e){let t=e[ue],n=t&&Object.hasOwn(t,N)?t[N]:[],o=new Map(n.map(r=>[r.methodName,r])),i=Object.getOwnPropertyNames(e.prototype).map(r=>o.get(r)).filter(r=>r!==void 0);if(i.length!==n.length)throw new TypeError("a @Tool method is missing from the App prototype");return i}function H(e){let t=e.definition,n=D(e),o=new Set;return n.map(({options:i})=>{if(o.has(i.name))throw new TypeError(`duplicate @Tool name: ${i.name}`);return o.add(i.name),{actionId:i.name,...i.dataInputs===void 0?{}:{dataInputs:[...i.dataInputs]},confirmation:i.confirmation??"none",capability:i.capability??"app.read",mutation:i.mutation??true,inputSchema:i.inputSchema,...i.content===void 0?{}:{content:ye(i.content)},resultProjection:i.resultProjection??{allow:[...t.stateProjection.allow]},_meta:{description:i.description}}})}function le(e,t){if(t.length===0)throw new TypeError("backendCommand must name the skill command");let n=H(e).map(({_meta:o,...i})=>({...i,backend:{type:"skill",command:[...t]},_meta:o}));return {...e.definition,actions:n}}function pe(e,t){let n=r=>{throw new TypeError(`@Tool ${e}: content ${r}`)},o=(r,s,u)=>{if(!O(u))return n(`${r} must be an object`);for(let a of Object.keys(u))if(a==="mediaType"){if(!h.includes(u[a]))return n(`${r}.mediaType must be one of ${h.join(", ")}`)}else if(a===s){if(typeof u[a]!="boolean")return n(`${r}.${a} must be true or false`)}else return n(`${r} has the unknown key "${a}"`);return Object.hasOwn(u,"mediaType")?Object.freeze({...u}):n(`${r}.mediaType is required`)};if(!O(t))return n("must be an object");let i={};for(let r of Object.keys(t))if(r==="in")i[r]=o("in","required",t[r]);else if(r==="out")i[r]=o("out","range",t[r]);else return n(`has the unknown key "${r}"; use "in" and/or "out"`);return Object.keys(i).length===0?n('needs "in" and/or "out"'):Object.freeze(i)}function fe(e){return Object.freeze({instanceId:e.instanceId,threadId:e.threadId,actor:e.actor,requestId:e.requestId,nowMs:e.nowMs})}function ye(e){let t={};for(let[n,o]of Object.entries(e))t[n]={...o};return t}function me(e){return O(e)&&["startLine","lineCount","totalLines"].every(t=>Number.isSafeInteger(e[t])&&e[t]>=1)}function O(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}var Te=/^[A-Za-z0-9._:-]{1,128}$/u,Ee=/[\u0000-\u001f\u007f\u2028\u2029]/u;function K(e=process.env){let t=G(e.CREWX_APP_INSTANCE_ID),n=e.CREWX_APP_REQUEST_ID,o=e.CREWX_APP_ACTOR_KIND,i=e.CREWX_APP_NOW_MS;if(t===void 0||typeof n!="string"||!Te.test(n)||o!=="user"&&o!=="agent"||typeof i!="string"||!/^\d{1,16}$/u.test(i))return;let r=Number(i);if(!Number.isSafeInteger(r))return;let s=e.CREWX_THREAD_ID===void 0?null:G(e.CREWX_THREAD_ID);if(s!==void 0)return Object.freeze({instanceId:t,threadId:s,actor:o,requestId:n,nowMs:r})}function G(e){if(!(typeof e!="string"||e.length===0||Ee.test(e)))return new TextEncoder().encode(e).byteLength<=512?e:void 0}var ge="dist/tools.json",Ae=1,Ce="dist/main.mjs";var Q=["CREWX_APP_INSTANCE_ID","CREWX_THREAD_ID"];function Oe(e){if(!Array.isArray(e)||e.length===0)return false;let t=new Set;for(let n of e){if(!Q.some(o=>o===n)||t.has(n))return false;t.add(n);}return true}var j=2,L=2097152;var R=2*1024*1024,U=2e4;function $(e){return crypto.createHash("sha256").update(e).digest("hex")}function F(e){if(e.byteLength===0)return 0;let t=0;for(let n of e)n===10&&(t+=1);return e[e.byteLength-1]!==10&&(t+=1),t}var be=L+1+R,Se=64*1024,Ie=10,P={kind:"invalid"};function he(e,t){try{let n=[],o=0;for(;;){let s=new Uint8Array(Se),u=fs.readSync(e,s,0,s.length,null);if(u===0)break;if(o+=u,o>t)return;n.push(s.subarray(0,u));}let i=new Uint8Array(o),r=0;for(let s of n)i.set(s,r),r+=s.byteLength;return i}catch{return}}function M(e){return Re(he(e,be))}function Re(e){if(e===void 0)return P;let t=e.indexOf(Ie);if(e.byteLength<=L){let o=Le(Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8"));if(o.ok&&!(t>=0&&b(o.value)&&o.value.schemaVersion===j))return {kind:"v1",value:o.value}}if(t<=0||t>L)return P;let n;try{n=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(e.subarray(0,t)));}catch{return P}return !b(n)||n.schemaVersion!==j?P:{kind:"v2",header:n,body:e.subarray(t+1)}}var Ne="actionId,content,input,schemaVersion,state",xe="bytes,lines,mediaType,sha256",ke="mediaType,range",De=/^[a-f0-9]{64}$/u,je=new TextDecoder("utf-8",{fatal:true,ignoreBOM:true});function te(e,t){let n=a=>({code:a,outcome:"rejected"});if(x(e)!==Ne||e.schemaVersion!==j||typeof e.actionId!="string"||!b(e.input)||!b(e.state)||!b(e.content)||x(e.content)!=="in,out")return {code:"INPUT_INVALID",outcome:"failed"};let o=e.content,i,r=o.in;if(r===null){if(t.byteLength!==0)return n(t.byteLength>R?"CONTENT_TOO_LARGE":"CONTENT_DIGEST_MISMATCH")}else {if(!b(r)||x(r)!==xe||!Z(r.mediaType)||!ee(r.bytes,R)||!ee(r.lines,U)||typeof r.sha256!="string"||!De.test(r.sha256)||t.byteLength!==r.bytes)return n(t.byteLength>R?"CONTENT_TOO_LARGE":"CONTENT_DIGEST_MISMATCH");if($(t)!==r.sha256||F(t)!==r.lines)return n("CONTENT_DIGEST_MISMATCH");let a;try{a=je.decode(t);}catch{return n("CONTENT_ENCODING_INVALID")}i={mediaType:r.mediaType,text:a};}let s,u=o.out;if(u!==null){if(!b(u)||x(u)!==ke||!Z(u.mediaType))return n("CONTENT_SOURCE_UNSUPPORTED");let a=u.range;if(a!==null&&!Ue(a))return n("CONTENT_SOURCE_UNSUPPORTED");s={mediaType:u.mediaType,...a===null?{}:{range:{startLine:a.startLine,lineCount:a.lineCount}}};}return {actionId:e.actionId,input:e.input,state:e.state,content:{...i===void 0?{}:{in:i},...s===void 0?{}:{out:s}}}}function ne(e){return Object.hasOwn(e,"code")}function oe(e,t){let n=o=>({code:o,outcome:"rejected"});if(e?.in===void 0){if(t.in!==void 0)return n("CONTENT_SOURCE_UNSUPPORTED")}else if(t.in===void 0){if(e.in.required===true)return n("CONTENT_REQUIRED")}else if(t.in.mediaType!==e.in.mediaType)return n("CONTENT_SOURCE_UNSUPPORTED");if(e?.out===void 0){if(t.out!==void 0)return n("CONTENT_SOURCE_UNSUPPORTED")}else {if(t.out===void 0)return n("CONTENT_REQUIRED");if(t.out.mediaType!==e.out.mediaType||t.out.range!==void 0&&e.out.range!==true)return n("CONTENT_SOURCE_UNSUPPORTED")}}function v(e,t){let{content:n,...o}=e,i=t===void 0?o:{...o,content:{bytes:t.body.byteLength,lines:F(t.body),sha256:$(t.body),...t.range===void 0?{}:{range:t.range}}},r=new TextEncoder().encode(`${JSON.stringify(i)}
2
- `);if(t===void 0)return r;let s=new Uint8Array(r.byteLength+t.body.byteLength);return s.set(r,0),s.set(t.body,r.byteLength),s}function re(e){if(e.body.byteLength>R||F(e.body)>U)return {code:"CONTENT_TOO_LARGE",outcome:"failed"}}function Le(e){try{return {ok:!0,value:JSON.parse(e)}}catch{return {ok:false}}}function x(e){return Object.keys(e).sort().join(",")}function b(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Z(e){return typeof e=="string"&&h.includes(e)}function ee(e,t){return Number.isSafeInteger(e)&&e>=0&&e<=t}function Ue(e){return b(e)&&x(e)==="lineCount,startLine"&&Number.isSafeInteger(e.startLine)&&e.startLine>=1&&Number.isSafeInteger(e.lineCount)&&e.lineCount>=1&&e.lineCount<=U}var Pe=1;async function Me(e,t,n=process.env.CREWX_WORKSPACE_ROOT??process.cwd(),o){return (await se(e,t,n,void 0,true,void 0,o)).response}async function se(e,t,n,o,i=true,r,s){let u=r!==void 0,a=O(t)?t:void 0,m=a?.input,T=a?.state,d=new e({state:O(T)?T:{},workspaceRoot:n,...s===void 0?{}:{context:s}}),C=O(m)?m:{},E=O(T)?T:d.emptyState(),y={};try{let c;if(u){if(a===void 0)throw new A("INPUT_INVALID");let f=te(a,r);if(ne(f))throw new A(f.code,null,{outcome:f.outcome});(({actionId:c,input:C,state:E}=f)),y=f.content;}else {if(!a||Object.keys(a).length!==4||!["schemaVersion","actionId","input","state"].every(f=>Object.hasOwn(a,f))||a.schemaVersion!==Pe||typeof a.actionId!="string"||!O(m)||!O(T))throw new A("INPUT_INVALID");c=a.actionId,C=m,E=T;}d=new e({state:E,workspaceRoot:n,...s===void 0?{}:{context:s}}),await d.validate(c,C,E);let l=D(e).find(({options:f})=>f.name===c);if(!l)throw new A("INPUT_INVALID");let g=d[l.methodName];if(typeof g!="function")throw new A("EXECUTION_FAILED");let p=oe(l.options.content,y);if(p)throw new A(p.code,null,{outcome:p.outcome});let k=Object.freeze({...y.in===void 0?{}:{in:Object.freeze({text:y.in.text})},...y.out===void 0?{}:{out:Object.freeze(y.out.range===void 0?{}:{range:Object.freeze({...y.out.range})})}}),I=()=>g.call(d,C,k),S=i?await Je(I):await I();if(S!==void 0&&!O(S))throw new A("EXECUTION_FAILED");let _;if(y.out!==void 0){if(_=d.producedContent,_===void 0)throw new A("EXECUTION_FAILED","content.out was requested but setContent was never called");let f=re(_);if(f)throw new A(f.code,null,{outcome:f.outcome})}else if(d.didSetContent)throw new A("EXECUTION_FAILED","setContent was called but the request asked for no content.out");return {response:{...d.didSetState?{state:d.state}:{},...S===void 0?{}:{result:S}},..._===void 0?{}:{answer:_}}}catch(c){let l,g=c,p=c instanceof A?c:void 0;if(p)l={code:p.code,detail:p.detail,outcome:p.outcome};else try{l=d.mapError(c);}catch(X){l={code:"EXECUTION_FAILED",detail:null},g=X;}let k=qe(l?.code),I=k?l.code:"EXECUTION_FAILED",S=typeof l?.detail=="string"?l.detail:null,_=k?B(l.outcome):"failed",f;try{f=d.errorState(I,S,{input:C,state:E});}catch(X){g=new AggregateError([g,X],"App error handling failed"),f=d.emptyState();}return o?.(I,g,{outcome:_,detail:S,expected:p!==void 0&&g===p}),{response:{outcome:_,errorCode:I,state:O(f)?f:d.emptyState()}}}}async function ve(e,t={}){let n=t.output??process.stdout,o,i;if(t.preloadedInput!==void 0)o=t.preloadedInput.value,i=t.preloadedInput.body;else {let d=M(t.inputFd??0);d.kind==="v1"?o=d.value:d.kind==="v2"&&(o=d.header,i=d.body);}let r=i!==void 0,s=t.context??K(),u=false,a=(d,C,E)=>{u=true,t.onFailure?.(d,C,E);},m;try{m=await se(e,o,process.env.CREWX_WORKSPACE_ROOT??process.cwd(),a,t.consoleManaged!==!0,i,s);}catch(d){a("EXECUTION_FAILED",d),m={response:ie(t.emptyState)};}Xe(m.response)&&!u&&a(m.response.errorCode,void 0,{outcome:m.response.outcome,detail:null,expected:false});let T;try{let d=(t.sanitize??ae)(m.response);T=r?v(d,m.answer):`${JSON.stringify(d)}
3
- `;}catch(d){a("EXECUTION_FAILED",d);let C=ie(t.emptyState);try{let E=(t.sanitize??ae)(C);T=r?v(E):`${JSON.stringify(E)}
4
- `;}catch(E){a("EXECUTION_FAILED",E),T=r?v(C):`${JSON.stringify(C)}
5
- `;}}n.write(T);}async function Je(e){let t=["log","info","debug"],n=new Map;for(let o of t)n.set(o,console[o]),console[o]=(...i)=>process.stderr.write(`${util.format(...i)}
6
- `);try{return await e()}finally{for(let o of t)console[o]=n.get(o);}}function ie(e={}){return {outcome:"failed",errorCode:"EXECUTION_FAILED",state:{...e,error:{code:"EXECUTION_FAILED",detail:null}}}}function Xe(e){return (e.outcome==="failed"||e.outcome==="rejected")&&typeof e.errorCode=="string"}function qe(e){return typeof e=="string"&&/^[A-Z][A-Z0-9_]{0,127}$/u.test(e)}function ae(e){return e}var z={depth:null,maxArrayLength:null,maxStringLength:null},W=class extends stream.Writable{#e="buffer";#t=[];_write(t,n,o){if(this.#e==="buffer"){this.#t.push(typeof t=="string"?t:Uint8Array.from(t)),o();return}if(this.#e==="discard"){o();return}process.stderr.write(t,o);}flushToStderr(){this.#e="stderr";for(let t of this.#t)process.stderr.write(t);this.#t=[];}discard(){this.#e="discard",this.#t=[];}};async function $e(e,t={}){let n=process.stdout,o=n.write.bind(n),i=new W,r=new console$1.Console({stdout:i,stderr:i,inspectOptions:{...z}});globalThis.console=r;let s=false,u="-",a="-",m,T=false,d,C;try{let c=Ve(t.inputFd??0);u=We(c.value),a=J(process.env.CREWX_APP_REQUEST_ID),m=new Date().toISOString();try{d=await e();}catch(p){T=!0,C=p;}let l=d?.default;if(!T&&l?.devtools?.log===!0?(Object.assign(util.inspect.defaultOptions,z),E(m),i.flushToStderr()):i.discard(),T){y("EXECUTION_FAILED",C),V(o,t,y);return}try{if(typeof d?.runSkillApp!="function")throw new TypeError("App module does not export runSkillApp");let p={sanitize:t.sanitize,emptyState:t.emptyState??ze(l),preloadedInput:c.body===void 0?{value:c.value}:{value:c.value,body:c.body},onFailure:y,consoleManaged:!0,output:{write:o}};await d.runSkillApp(l,p);}catch(p){y("EXECUTION_FAILED",p),V(o,t,y);}}catch(c){y("EXECUTION_FAILED",c),V(o,t,y);}finally{process.exitCode=0;}function E(c){s||(process.stderr.write(`[crewx-app] ${c??new Date().toISOString()} ${J(u)} req=${a}
7
- `),s=true);}function y(c,l,g){E();let p=g?.expected===true&&g.detail?` ${J(g.detail)}`:"";process.stderr.write(`[crewx-app] ${g?.outcome??"failed"} ${J(c)}${p}
8
- `),l!==void 0&&g?.expected!==true&&process.stderr.write(`${util.inspect(l,z)}
9
- `);}}function ze(e){if(typeof e=="function")try{let n=new e({workspaceRoot:process.cwd()}).emptyState();return n!==null&&typeof n=="object"&&!Array.isArray(n)?n:void 0}catch{return}}function Ve(e){let t=M(e);return t.kind==="v1"?{value:t.value}:t.kind==="v2"?{value:t.header,body:t.body}:{value:void 0}}function We(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&typeof e.actionId=="string"?e.actionId:"-"}function J(e){return typeof e!="string"||e.length===0?"-":e.replace(/[\u0000-\u001f\u007f\u2028\u2029]/gu,"_")}function V(e,t,n){let o={code:"EXECUTION_FAILED",detail:null},r={outcome:"failed",errorCode:"EXECUTION_FAILED",state:t.emptyState!==null&&typeof t.emptyState=="object"&&!Array.isArray(t.emptyState)?{...t.emptyState,error:o}:{error:o}},s=r;try{s=(t.sanitize??Ye)(r);}catch(u){n("EXECUTION_FAILED",u);}e(`${JSON.stringify(s)}
10
- `);}function Ye(e){return e}exports.APP_TOOLS_FILE=ge;exports.APP_TOOLS_SCHEMA_VERSION=Ae;exports.APP_TOOL_ENTRY=Ce;exports.AppError=A;exports.CrewXApp=q;exports.SKILL_BACKEND_ENV_NAMES=Q;exports.Tool=ce;exports.executeAppRequest=Me;exports.generateManifest=le;exports.generateToolDeclarations=H;exports.getToolDeclarations=D;exports.isSkillBackendEnv=Oe;exports.readAppContext=K;exports.runAppEntry=$e;exports.runSkillApp=ve;
1
+ 'use strict';var util=require('util'),fs=require('fs'),crypto=require('crypto'),console$1=require('console'),stream=require('stream');var D=["text/plain","application/json"];var k=[5,15,30,60],x=Object.freeze({min:15e3,max:6e5,default:3e5}),we=1,z="schedule:",be="schedule",Ie="exit 78",re=["standby","disabled","draining","degraded"],Re=["cron","cron_manual","app_enable"],Ne=/^[A-Z][A-Z0-9_]{0,63}$/u;function ie(e){return typeof e=="string"&&Ne.test(e)}var oe=["status","everyMinutes","lastStartedAt","lastFinishedAt","lastOutcome","lastErrorCode","nextRunAt","periodic","periodicReason"],De=["unset","on","off"],xe=["available","unavailable"],V=64,Pe=128;function ae(e){return k.includes(e)}function W(e){return Number.isSafeInteger(e)&&e>=x.min&&e<=x.max}function se(e){return re.includes(e)}function de(e){if(!ke(e)||Object.keys(e).length!==oe.length||!oe.every(o=>Object.hasOwn(e,o))||typeof e.status!="string"||!De.includes(e.status)||!ae(e.everyMinutes)||!F(e.lastStartedAt,V)||!F(e.lastFinishedAt,V)||!F(e.lastOutcome,Pe)||!F(e.nextRunAt,V)||e.lastErrorCode!==null&&!ie(e.lastErrorCode)||typeof e.periodic!="string"||!xe.includes(e.periodic))return;let t=e.periodic;if(!(t==="available"?e.periodicReason!==null:!se(e.periodicReason))&&!(e.nextRunAt!==null&&(e.status!=="on"||t!=="available")))return Object.freeze({status:e.status,everyMinutes:e.everyMinutes,lastStartedAt:e.lastStartedAt,lastFinishedAt:e.lastFinishedAt,lastOutcome:e.lastOutcome,lastErrorCode:e.lastErrorCode,nextRunAt:e.nextRunAt,periodic:t,periodicReason:e.periodicReason})}function F(e,n){return e===null||typeof e=="string"&&e.length>0&&e.length<=n}function ke(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}var ue=Symbol;ue.metadata===void 0&&Object.defineProperty(Symbol,"metadata",{configurable:false,value:Symbol.for("Symbol.metadata")});var Ue=ue.metadata,U=Symbol.for("crewx.app.tool-metadata"),l=class extends Error{code;detail;outcome;constructor(n,t=null,o){super(n),this.name="AppError",this.code=n,this.detail=t,this.outcome=G(o?.outcome);}};function G(e){return e==="rejected"?"rejected":"failed"}var Y=class{static devtools=process.env.CREWX_APP_DEV==="1"?Object.freeze({log:true}):void 0;currentState;stateWasSet=false;answerBody;answerRange;callContext;callSchedule;scheduleDirective;workspaceRoot;constructor(n={workspaceRoot:process.cwd()}){this.currentState=n.state??{},this.workspaceRoot=n.workspaceRoot,this.callContext=n.context===void 0?void 0:ve(n.context),this.callSchedule=n.schedule===void 0?void 0:Object.freeze({...n.schedule});}get schedule(){return this.callSchedule}requestSchedule(n){if(typeof n!="boolean")throw new TypeError("requestSchedule needs true or false");if(this.callSchedule===void 0)throw new l("SCHEDULE_UNSUPPORTED","this App has no schedule on this Host");let t=this.callContext?.actor;if(t==="schedule")throw new l("SCHEDULE_UNSUPPORTED","a scheduled run cannot change its own schedule",{outcome:"rejected"});if(n&&t!=="user")throw new l("SCHEDULE_ENABLE_DENIED","only the person at the screen can turn a schedule on",{outcome:"rejected"});this.scheduleDirective=Object.freeze({enabled:n});}get didRequestSchedule(){return this.scheduleDirective}get context(){if(this.callContext===void 0)throw new TypeError("this.context is only set when the Host runs the action; pass options.context when you construct the App in a test");return this.callContext}get state(){return this.currentState}get didSetState(){return this.stateWasSet}setState(n){this.currentState=n,this.stateWasSet=true;}get didSetContent(){return this.answerBody!==void 0}get producedContent(){return this.answerBody===void 0?void 0:{body:this.answerBody,...this.answerRange===void 0?{}:{range:this.answerRange}}}setContent(n,t){if(typeof n!="string"&&!(n instanceof Uint8Array))throw new TypeError("setContent needs a string or a Uint8Array");if(t!==void 0&&!He(t))throw new TypeError("setContent range must be { startLine, lineCount, totalLines }, three integers of at least 1");this.answerBody=typeof n=="string"?new TextEncoder().encode(n):new Uint8Array(n),this.answerRange=t===void 0?void 0:{startLine:t.startLine,lineCount:t.lineCount,totalLines:t.totalLines};}emptyState(){return {}}validate(n,t,o){}mapError(n){return {code:"EXECUTION_FAILED",detail:null}}errorState(n,t,o){return {...T(o.state)?o.state:{},error:{code:n,detail:t}}}};function Le(e){return function(n,t){if(t.static||t.private||t.kind!=="method")throw new TypeError("@Tool can decorate public instance methods only");let o=t.metadata;if(!o)throw new TypeError("standard decorator metadata is unavailable");let i=Object.hasOwn(o,U)?o[U]:[];if(i.some(u=>u.methodName===String(t.name)))throw new TypeError(`@Tool is declared more than once for ${String(t.name)}`);let r=e.content===void 0?void 0:Me(e.name,e.content),s=e.schedule===void 0?void 0:Fe(e);if(s!==void 0&&i.some(u=>u.options.schedule!==void 0))throw new TypeError(`@Tool ${e.name}: an App declares at most one scheduled action`);o[U]=[...i,{methodName:String(t.name),options:Object.freeze({...e,...r===void 0?{}:{content:r},...s===void 0?{}:{schedule:s}})}];}}function L(e){let n=e[Ue],t=n&&Object.hasOwn(n,U)?n[U]:[],o=new Map(t.map(r=>[r.methodName,r])),i=Object.getOwnPropertyNames(e.prototype).map(r=>o.get(r)).filter(r=>r!==void 0);if(i.length!==t.length)throw new TypeError("a @Tool method is missing from the App prototype");return i}function ce(e){return L(e).some(({options:n})=>n.schedule!==void 0)}function le(e){let n=e.definition,t=L(e),o=new Set;return t.map(({options:i})=>{if(o.has(i.name))throw new TypeError(`duplicate @Tool name: ${i.name}`);return o.add(i.name),{actionId:i.name,...i.dataInputs===void 0?{}:{dataInputs:[...i.dataInputs]},confirmation:i.confirmation??"none",capability:i.capability??"app.read",mutation:i.mutation??true,inputSchema:i.inputSchema,...i.content===void 0?{}:{content:Xe(i.content)},...i.schedule===void 0?{}:{schedule:{...i.schedule}},resultProjection:i.resultProjection??{allow:[...n.stateProjection.allow]},_meta:{description:i.description}}})}function je(e,n){if(n.length===0)throw new TypeError("backendCommand must name the skill command");let t=le(e).map(({_meta:o,...i})=>({...i,backend:{type:"skill",command:[...n]},_meta:o}));return {...e.definition,actions:t}}function Me(e,n){let t=r=>{throw new TypeError(`@Tool ${e}: content ${r}`)},o=(r,s,u)=>{if(!T(u))return t(`${r} must be an object`);for(let a of Object.keys(u))if(a==="mediaType"){if(!D.includes(u[a]))return t(`${r}.mediaType must be one of ${D.join(", ")}`)}else if(a===s){if(typeof u[a]!="boolean")return t(`${r}.${a} must be true or false`)}else return t(`${r} has the unknown key "${a}"`);return Object.hasOwn(u,"mediaType")?Object.freeze({...u}):t(`${r}.mediaType is required`)};if(!T(n))return t("must be an object");let i={};for(let r of Object.keys(n))if(r==="in")i[r]=o("in","required",n[r]);else if(r==="out")i[r]=o("out","range",n[r]);else return t(`has the unknown key "${r}"; use "in" and/or "out"`);return Object.keys(i).length===0?t('needs "in" and/or "out"'):Object.freeze(i)}function Fe(e){let n=o=>{throw new TypeError(`@Tool ${e.name}: schedule ${o}`)},t=e.schedule;if(!T(t))return n("must be an object");for(let o of Object.keys(t))if(o!=="everyMinutes"&&o!=="timeoutMs")return n(`has the unknown key "${o}"`);return k.includes(t.everyMinutes)?t.timeoutMs!==void 0&&!W(t.timeoutMs)?n(`timeoutMs must be an integer from ${x.min} to ${x.max}`):e.content!==void 0?n("cannot be combined with content"):e.dataInputs!==void 0?n("cannot be combined with dataInputs"):e.confirmation!==void 0&&e.confirmation!=="none"?n("cannot require a native confirmation"):Object.freeze({everyMinutes:t.everyMinutes,...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}}):n(`everyMinutes must be one of ${k.join(", ")}`)}function ve(e){return Object.freeze({instanceId:e.instanceId,threadId:e.threadId,actor:e.actor,requestId:e.requestId,nowMs:e.nowMs})}function Xe(e){let n={};for(let[t,o]of Object.entries(e))n[t]={...o};return n}function He(e){return T(e)&&["startLine","lineCount","totalLines"].every(n=>Number.isSafeInteger(e[n])&&e[n]>=1)}function T(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}var Je=/^[A-Za-z0-9._:-]{1,128}$/u,qe=/[\u0000-\u001f\u007f\u2028\u2029]/u,Ke=512;function Q(e=process.env){let n=pe(e.CREWX_APP_INSTANCE_ID),t=e.CREWX_APP_REQUEST_ID,o=e.CREWX_APP_ACTOR_KIND,i=e.CREWX_APP_NOW_MS;if(n===void 0||typeof t!="string"||!Je.test(t)||o!=="user"&&o!=="agent"&&o!=="schedule"||typeof i!="string"||!/^\d{1,16}$/u.test(i))return;let r=Number(i);if(!Number.isSafeInteger(r))return;let s=e.CREWX_THREAD_ID===void 0?null:pe(e.CREWX_THREAD_ID);if(s!==void 0&&!(o==="schedule"&&(s!==null||!n.startsWith(z))))return Object.freeze({instanceId:n,threadId:s,actor:o,requestId:t,nowMs:r})}function pe(e){if(!(typeof e!="string"||e.length===0||qe.test(e)))return new TextEncoder().encode(e).byteLength<=Ke?e:void 0}var $e="dist/tools.json",Be=1,Ve="dist/main.mjs";var fe=["CREWX_APP_INSTANCE_ID","CREWX_THREAD_ID"];function ze(e){if(!Array.isArray(e)||e.length===0)return false;let n=new Set;for(let t of e){if(!fe.some(o=>o===t)||n.has(t))return false;n.add(t);}return true}var v=2,X=2097152;var P=2*1024*1024,H=2e4;function Z(e){return crypto.createHash("sha256").update(e).digest("hex")}function J(e){if(e.byteLength===0)return 0;let n=0;for(let t of e)t===10&&(n+=1);return e[e.byteLength-1]!==10&&(n+=1),n}var Ge=X+1+P,Qe=64*1024,Ze=10,q={kind:"invalid"};function en(e,n){try{let t=[],o=0;for(;;){let s=new Uint8Array(Qe),u=fs.readSync(e,s,0,s.length,null);if(u===0)break;if(o+=u,o>n)return;t.push(s.subarray(0,u));}let i=new Uint8Array(o),r=0;for(let s of t)i.set(s,r),r+=s.byteLength;return i}catch{return}}function K(e){return nn(en(e,Ge))}function nn(e){if(e===void 0)return q;let n=e.indexOf(Ze);if(e.byteLength<=X){let o=dn(Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8"));if(o.ok&&!(n>=0&&b(o.value)&&o.value.schemaVersion===v))return {kind:"v1",value:o.value}}if(n<=0||n>X)return q;let t;try{t=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(e.subarray(0,n)));}catch{return q}return !b(t)||t.schemaVersion!==v?q:{kind:"v2",header:t,body:e.subarray(n+1)}}var tn="actionId,content,input,schemaVersion,state",on="bytes,lines,mediaType,sha256",rn="mediaType,range",an=/^[a-f0-9]{64}$/u,sn=new TextDecoder("utf-8",{fatal:true,ignoreBOM:true});function Ee(e,n){let t=a=>({code:a,outcome:"rejected"});if(j(e)!==tn||e.schemaVersion!==v||typeof e.actionId!="string"||!b(e.input)||!b(e.state)||!b(e.content)||j(e.content)!=="in,out")return {code:"INPUT_INVALID",outcome:"failed"};let o=e.content,i,r=o.in;if(r===null){if(n.byteLength!==0)return t(n.byteLength>P?"CONTENT_TOO_LARGE":"CONTENT_DIGEST_MISMATCH")}else {if(!b(r)||j(r)!==on||!ye(r.mediaType)||!me(r.bytes,P)||!me(r.lines,H)||typeof r.sha256!="string"||!an.test(r.sha256)||n.byteLength!==r.bytes)return t(n.byteLength>P?"CONTENT_TOO_LARGE":"CONTENT_DIGEST_MISMATCH");if(Z(n)!==r.sha256||J(n)!==r.lines)return t("CONTENT_DIGEST_MISMATCH");let a;try{a=sn.decode(n);}catch{return t("CONTENT_ENCODING_INVALID")}i={mediaType:r.mediaType,text:a};}let s,u=o.out;if(u!==null){if(!b(u)||j(u)!==rn||!ye(u.mediaType))return t("CONTENT_SOURCE_UNSUPPORTED");let a=u.range;if(a!==null&&!un(a))return t("CONTENT_SOURCE_UNSUPPORTED");s={mediaType:u.mediaType,...a===null?{}:{range:{startLine:a.startLine,lineCount:a.lineCount}}};}return {actionId:e.actionId,input:e.input,state:e.state,content:{...i===void 0?{}:{in:i},...s===void 0?{}:{out:s}}}}function Ae(e){return Object.hasOwn(e,"code")}function Se(e,n){let t=o=>({code:o,outcome:"rejected"});if(e?.in===void 0){if(n.in!==void 0)return t("CONTENT_SOURCE_UNSUPPORTED")}else if(n.in===void 0){if(e.in.required===true)return t("CONTENT_REQUIRED")}else if(n.in.mediaType!==e.in.mediaType)return t("CONTENT_SOURCE_UNSUPPORTED");if(e?.out===void 0){if(n.out!==void 0)return t("CONTENT_SOURCE_UNSUPPORTED")}else {if(n.out===void 0)return t("CONTENT_REQUIRED");if(n.out.mediaType!==e.out.mediaType||n.out.range!==void 0&&e.out.range!==true)return t("CONTENT_SOURCE_UNSUPPORTED")}}function $(e,n){let{content:t,...o}=e,i=n===void 0?o:{...o,content:{bytes:n.body.byteLength,lines:J(n.body),sha256:Z(n.body),...n.range===void 0?{}:{range:n.range}}},r=new TextEncoder().encode(`${JSON.stringify(i)}
2
+ `);if(n===void 0)return r;let s=new Uint8Array(r.byteLength+n.body.byteLength);return s.set(r,0),s.set(n.body,r.byteLength),s}function he(e){if(e.body.byteLength>P||J(e.body)>H)return {code:"CONTENT_TOO_LARGE",outcome:"failed"}}function dn(e){try{return {ok:!0,value:JSON.parse(e)}}catch{return {ok:false}}}function j(e){return Object.keys(e).sort().join(",")}function b(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}function ye(e){return typeof e=="string"&&D.includes(e)}function me(e,n){return Number.isSafeInteger(e)&&e>=0&&e<=n}function un(e){return b(e)&&j(e)==="lineCount,startLine"&&Number.isSafeInteger(e.startLine)&&e.startLine>=1&&Number.isSafeInteger(e.lineCount)&&e.lineCount>=1&&e.lineCount<=H}var ln=1;async function pn(e,n,t=process.env.CREWX_WORKSPACE_ROOT??process.cwd(),o){return (await _e(e,n,t,void 0,true,void 0,o)).response}async function _e(e,n,t,o,i=true,r,s){let u=r!==void 0,a=T(n)?n:void 0,E=a?.input,A=a?.state,d=new e({state:T(A)?A:{},workspaceRoot:t,...s===void 0?{}:{context:s}}),h=T(E)?E:{},S=T(A)?A:d.emptyState(),f={},y=a!==void 0&&Object.hasOwn(a,"schedule"),C;try{let m;if(u){if(a===void 0||y)throw new l("INPUT_INVALID");let p=Ee(a,r);if(Ae(p))throw new l(p.code,null,{outcome:p.outcome});(({actionId:m,input:h,state:S}=p)),f=p.content;}else {let p=y&&a!==void 0?de(a.schedule):void 0;if(!a||Object.keys(a).length!==(y?5:4)||!["schemaVersion","actionId","input","state"].every(ge=>Object.hasOwn(a,ge))||a.schemaVersion!==ln||typeof a.actionId!="string"||!T(E)||!T(A)||y&&p===void 0)throw new l("INPUT_INVALID");m=a.actionId,h=E,S=A,C=p;}d=new e({state:S,workspaceRoot:t,...s===void 0?{}:{context:s},...C===void 0?{}:{schedule:C}}),await d.validate(m,h,S);let c=L(e).find(({options:p})=>p.name===m);if(!c)throw new l("INPUT_INVALID");if(C!==void 0&&(c.options.content!==void 0||!ce(e)))throw new l("INPUT_INVALID");let g=d[c.methodName];if(typeof g!="function")throw new l("EXECUTION_FAILED");let _=Se(c.options.content,f);if(_)throw new l(_.code,null,{outcome:_.outcome});let M=Object.freeze({...f.in===void 0?{}:{in:Object.freeze({text:f.in.text})},...f.out===void 0?{}:{out:Object.freeze(f.out.range===void 0?{}:{range:Object.freeze({...f.out.range})})}}),N=()=>g.call(d,h,M),I=i?await yn(N):await N();if(I!==void 0&&!T(I))throw new l("EXECUTION_FAILED");let w;if(f.out!==void 0){if(w=d.producedContent,w===void 0)throw new l("EXECUTION_FAILED","content.out was requested but setContent was never called");let p=he(w);if(p)throw new l(p.code,null,{outcome:p.outcome})}else if(d.didSetContent)throw new l("EXECUTION_FAILED","setContent was called but the request asked for no content.out");let R=d.didRequestSchedule;return {response:{...d.didSetState?{state:d.state}:{},...I===void 0?{}:{result:I},...R===void 0?{}:{schedule:{enabled:R.enabled}}},...w===void 0?{}:{answer:w}}}catch(m){let c,g=m,_=m instanceof l?m:void 0;if(_)c={code:_.code,detail:_.detail,outcome:_.outcome};else try{c=d.mapError(m);}catch(p){c={code:"EXECUTION_FAILED",detail:null},g=p;}let M=En(c?.code),N=M?c.code:"EXECUTION_FAILED",I=typeof c?.detail=="string"?c.detail:null,w=M?G(c.outcome):"failed",R;try{R=d.errorState(N,I,{input:h,state:S});}catch(p){g=new AggregateError([g,p],"App error handling failed"),R=d.emptyState();}return o?.(N,g,{outcome:w,detail:I,expected:_!==void 0&&g===_}),{response:{outcome:w,errorCode:N,state:T(R)?R:d.emptyState()}}}}async function fn(e,n={}){let t=n.output??process.stdout,o,i;if(n.preloadedInput!==void 0)o=n.preloadedInput.value,i=n.preloadedInput.body;else {let d=K(n.inputFd??0);d.kind==="v1"?o=d.value:d.kind==="v2"&&(o=d.header,i=d.body);}let r=i!==void 0,s=n.context??Q(),u=false,a=(d,h,S)=>{u=true,n.onFailure?.(d,h,S);},E;try{E=await _e(e,o,process.env.CREWX_WORKSPACE_ROOT??process.cwd(),a,n.consoleManaged!==!0,i,s);}catch(d){a("EXECUTION_FAILED",d),E={response:Te(n.emptyState)};}mn(E.response)&&!u&&a(E.response.errorCode,void 0,{outcome:E.response.outcome,detail:null,expected:false});let A;try{let d=(n.sanitize??Ce)(E.response);A=r?$(d,E.answer):`${JSON.stringify(d)}
3
+ `;}catch(d){a("EXECUTION_FAILED",d);let h=Te(n.emptyState);try{let S=(n.sanitize??Ce)(h);A=r?$(S):`${JSON.stringify(S)}
4
+ `;}catch(S){a("EXECUTION_FAILED",S),A=r?$(h):`${JSON.stringify(h)}
5
+ `;}}t.write(A);}async function yn(e){let n=["log","info","debug"],t=new Map;for(let o of n)t.set(o,console[o]),console[o]=(...i)=>process.stderr.write(`${util.format(...i)}
6
+ `);try{return await e()}finally{for(let o of n)console[o]=t.get(o);}}function Te(e={}){return {outcome:"failed",errorCode:"EXECUTION_FAILED",state:{...e,error:{code:"EXECUTION_FAILED",detail:null}}}}function mn(e){return (e.outcome==="failed"||e.outcome==="rejected")&&typeof e.errorCode=="string"}function En(e){return typeof e=="string"&&/^[A-Z][A-Z0-9_]{0,127}$/u.test(e)}function Ce(e){return e}var ee={depth:null,maxArrayLength:null,maxStringLength:null},te=class extends stream.Writable{#e="buffer";#n=[];_write(n,t,o){if(this.#e==="buffer"){this.#n.push(typeof n=="string"?n:Uint8Array.from(n)),o();return}if(this.#e==="discard"){o();return}process.stderr.write(n,o);}flushToStderr(){this.#e="stderr";for(let n of this.#n)process.stderr.write(n);this.#n=[];}discard(){this.#e="discard",this.#n=[];}};async function hn(e,n={}){let t=process.stdout,o=t.write.bind(t),i=new te,r=new console$1.Console({stdout:i,stderr:i,inspectOptions:{...ee}});globalThis.console=r;let s=false,u="-",a="-",E,A=false,d,h;try{let y=Cn(n.inputFd??0);u=_n(y.value),a=B(process.env.CREWX_APP_REQUEST_ID),E=new Date().toISOString();try{d=await e();}catch(c){A=!0,h=c;}let C=d?.default;if(!A&&C?.devtools?.log===!0?(Object.assign(util.inspect.defaultOptions,ee),S(E),i.flushToStderr()):i.discard(),A){f("EXECUTION_FAILED",h),ne(o,n,f);return}try{if(typeof d?.runSkillApp!="function")throw new TypeError("App module does not export runSkillApp");let c={sanitize:n.sanitize,emptyState:n.emptyState??Tn(C),preloadedInput:y.body===void 0?{value:y.value}:{value:y.value,body:y.body},onFailure:f,consoleManaged:!0,output:{write:o}};await d.runSkillApp(C,c);}catch(c){f("EXECUTION_FAILED",c),ne(o,n,f);}}catch(y){f("EXECUTION_FAILED",y),ne(o,n,f);}finally{process.exitCode=0;}function S(y){s||(process.stderr.write(`[crewx-app] ${y??new Date().toISOString()} ${B(u)} req=${a}
7
+ `),s=true);}function f(y,C,m){S();let c=m?.expected===true&&m.detail?` ${B(m.detail)}`:"";process.stderr.write(`[crewx-app] ${m?.outcome??"failed"} ${B(y)}${c}
8
+ `),C!==void 0&&m?.expected!==true&&process.stderr.write(`${util.inspect(C,ee)}
9
+ `);}}function Tn(e){if(typeof e=="function")try{let t=new e({workspaceRoot:process.cwd()}).emptyState();return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}catch{return}}function Cn(e){let n=K(e);return n.kind==="v1"?{value:n.value}:n.kind==="v2"?{value:n.header,body:n.body}:{value:void 0}}function _n(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&typeof e.actionId=="string"?e.actionId:"-"}function B(e){return typeof e!="string"||e.length===0?"-":e.replace(/[\u0000-\u001f\u007f\u2028\u2029]/gu,"_")}function ne(e,n,t){let o={code:"EXECUTION_FAILED",detail:null},r={outcome:"failed",errorCode:"EXECUTION_FAILED",state:n.emptyState!==null&&typeof n.emptyState=="object"&&!Array.isArray(n.emptyState)?{...n.emptyState,error:o}:{error:o}},s=r;try{s=(n.sanitize??On)(r);}catch(u){t("EXECUTION_FAILED",u);}e(`${JSON.stringify(s)}
10
+ `);}function On(e){return e}exports.APP_SCHEDULE_ACTOR_KIND=be;exports.APP_SCHEDULE_INERT_COMMAND=Ie;exports.APP_SCHEDULE_INSTANCE_PREFIX=z;exports.APP_SCHEDULE_INTERVALS_MINUTES=k;exports.APP_SCHEDULE_MAX_PER_APP=we;exports.APP_SCHEDULE_PERIODIC_REASONS=re;exports.APP_SCHEDULE_TIMEOUT_MS=x;exports.APP_TOOLS_FILE=$e;exports.APP_TOOLS_SCHEMA_VERSION=Be;exports.APP_TOOL_ENTRY=Ve;exports.AppError=l;exports.CrewXApp=Y;exports.SCHEDULE_TRIGGERS=Re;exports.SKILL_BACKEND_ENV_NAMES=fe;exports.Tool=Le;exports.executeAppRequest=pn;exports.generateManifest=je;exports.generateToolDeclarations=le;exports.getToolDeclarations=L;exports.isAppScheduleCode=ie;exports.isAppScheduleIntervalMinutes=ae;exports.isAppSchedulePeriodicReason=se;exports.isAppScheduleTimeoutMs=W;exports.isSkillBackendEnv=ze;exports.readAppContext=Q;exports.runAppEntry=hn;exports.runSkillApp=fn;
@@ -0,0 +1,59 @@
1
+ export declare const APP_SCHEDULE_INTERVALS_MINUTES: readonly [5, 15, 30, 60];
2
+ export type AppScheduleIntervalMinutes = (typeof APP_SCHEDULE_INTERVALS_MINUTES)[number];
3
+ export declare const APP_SCHEDULE_TIMEOUT_MS: Readonly<{
4
+ min: 15000;
5
+ max: 600000;
6
+ default: 300000;
7
+ }>;
8
+ export declare const APP_SCHEDULE_MAX_PER_APP = 1;
9
+ export declare const APP_SCHEDULE_INSTANCE_PREFIX = "schedule:";
10
+ export declare const APP_SCHEDULE_ACTOR_KIND = "schedule";
11
+ export declare const APP_SCHEDULE_INERT_COMMAND = "exit 78";
12
+ export declare const APP_SCHEDULE_PERIODIC_REASONS: readonly ["standby", "disabled", "draining", "degraded"];
13
+ export type AppSchedulePeriodicReason = (typeof APP_SCHEDULE_PERIODIC_REASONS)[number];
14
+ export declare const SCHEDULE_TRIGGERS: readonly ["cron", "cron_manual", "app_enable"];
15
+ export type ScheduleTrigger = (typeof SCHEDULE_TRIGGERS)[number];
16
+ export interface ToolScheduleDeclaration {
17
+ readonly everyMinutes: AppScheduleIntervalMinutes;
18
+ readonly timeoutMs?: number;
19
+ }
20
+ export type AppScheduleStatus = 'unset' | 'on' | 'off';
21
+ export type AppSchedulePeriodic = 'available' | 'unavailable';
22
+ export type AppScheduleRunVerdict = {
23
+ readonly outcome: 'success';
24
+ } | {
25
+ readonly outcome: 'failure';
26
+ readonly code: string;
27
+ };
28
+ export declare const APP_SCHEDULE_CODE_PATTERN: RegExp;
29
+ export declare function isAppScheduleCode(value: unknown): value is string;
30
+ export interface AppScheduleSnapshot {
31
+ readonly status: AppScheduleStatus;
32
+ readonly everyMinutes: AppScheduleIntervalMinutes;
33
+ readonly lastStartedAt: string | null;
34
+ readonly lastFinishedAt: string | null;
35
+ readonly lastOutcome: string | null;
36
+ readonly lastErrorCode: string | null;
37
+ readonly nextRunAt: string | null;
38
+ readonly periodic: AppSchedulePeriodic;
39
+ readonly periodicReason: AppSchedulePeriodicReason | null;
40
+ }
41
+ export interface AppScheduleDirective {
42
+ readonly enabled: boolean;
43
+ }
44
+ export type AppScheduleActorKind = 'user' | 'agent' | 'schedule';
45
+ export type ScheduleDirectiveDecision = {
46
+ readonly allow: true;
47
+ } | {
48
+ readonly allow: false;
49
+ readonly code: 'SCHEDULE_ENABLE_DENIED' | 'SCHEDULE_DIRECTIVE_UNSUPPORTED';
50
+ };
51
+ export declare function decideScheduleDirective(input: {
52
+ readonly actorKind: AppScheduleActorKind;
53
+ readonly directive: AppScheduleDirective;
54
+ }): ScheduleDirectiveDecision;
55
+ export declare function isAppScheduleIntervalMinutes(value: unknown): value is AppScheduleIntervalMinutes;
56
+ export declare function isAppScheduleTimeoutMs(value: unknown): value is number;
57
+ export declare function isAppSchedulePeriodicReason(value: unknown): value is AppSchedulePeriodicReason;
58
+ export declare function parseAppScheduleSnapshot(value: unknown): AppScheduleSnapshot | undefined;
59
+ export declare function parseAppScheduleDirective(value: unknown): AppScheduleDirective | undefined;
@@ -1,10 +1,10 @@
1
- import {format,inspect}from'util';import {readSync}from'fs';import {createHash}from'crypto';import {Console}from'console';import {Writable}from'stream';var R=["text/plain","application/json"];var H=Symbol;H.metadata===void 0&&Object.defineProperty(Symbol,"metadata",{configurable:false,value:Symbol.for("Symbol.metadata")});var ce=H.metadata,x=Symbol.for("crewx.app.tool-metadata"),A=class extends Error{code;detail;outcome;constructor(t,n=null,o){super(t),this.name="AppError",this.code=t,this.detail=n,this.outcome=K(o?.outcome);}};function K(e){return e==="rejected"?"rejected":"failed"}var B=class{static devtools=process.env.CREWX_APP_DEV==="1"?Object.freeze({log:true}):void 0;currentState;stateWasSet=false;answerBody;answerRange;callContext;workspaceRoot;constructor(t={workspaceRoot:process.cwd()}){this.currentState=t.state??{},this.workspaceRoot=t.workspaceRoot,this.callContext=t.context===void 0?void 0:ye(t.context);}get context(){if(this.callContext===void 0)throw new TypeError("this.context is only set when the Host runs the action; pass options.context when you construct the App in a test");return this.callContext}get state(){return this.currentState}get didSetState(){return this.stateWasSet}setState(t){this.currentState=t,this.stateWasSet=true;}get didSetContent(){return this.answerBody!==void 0}get producedContent(){return this.answerBody===void 0?void 0:{body:this.answerBody,...this.answerRange===void 0?{}:{range:this.answerRange}}}setContent(t,n){if(typeof t!="string"&&!(t instanceof Uint8Array))throw new TypeError("setContent needs a string or a Uint8Array");if(n!==void 0&&!Te(n))throw new TypeError("setContent range must be { startLine, lineCount, totalLines }, three integers of at least 1");this.answerBody=typeof t=="string"?new TextEncoder().encode(t):new Uint8Array(t),this.answerRange=n===void 0?void 0:{startLine:n.startLine,lineCount:n.lineCount,totalLines:n.totalLines};}emptyState(){return {}}validate(t,n,o){}mapError(t){return {code:"EXECUTION_FAILED",detail:null}}errorState(t,n,o){return {...O(o.state)?o.state:{},error:{code:t,detail:n}}}};function le(e){return function(t,n){if(n.static||n.private||n.kind!=="method")throw new TypeError("@Tool can decorate public instance methods only");let o=n.metadata;if(!o)throw new TypeError("standard decorator metadata is unavailable");let i=Object.hasOwn(o,x)?o[x]:[];if(i.some(s=>s.methodName===String(n.name)))throw new TypeError(`@Tool is declared more than once for ${String(n.name)}`);let r=e.content===void 0?void 0:fe(e.name,e.content);o[x]=[...i,{methodName:String(n.name),options:Object.freeze({...e,...r===void 0?{}:{content:r}})}];}}function j(e){let t=e[ce],n=t&&Object.hasOwn(t,x)?t[x]:[],o=new Map(n.map(r=>[r.methodName,r])),i=Object.getOwnPropertyNames(e.prototype).map(r=>o.get(r)).filter(r=>r!==void 0);if(i.length!==n.length)throw new TypeError("a @Tool method is missing from the App prototype");return i}function G(e){let t=e.definition,n=j(e),o=new Set;return n.map(({options:i})=>{if(o.has(i.name))throw new TypeError(`duplicate @Tool name: ${i.name}`);return o.add(i.name),{actionId:i.name,...i.dataInputs===void 0?{}:{dataInputs:[...i.dataInputs]},confirmation:i.confirmation??"none",capability:i.capability??"app.read",mutation:i.mutation??true,inputSchema:i.inputSchema,...i.content===void 0?{}:{content:me(i.content)},resultProjection:i.resultProjection??{allow:[...t.stateProjection.allow]},_meta:{description:i.description}}})}function pe(e,t){if(t.length===0)throw new TypeError("backendCommand must name the skill command");let n=G(e).map(({_meta:o,...i})=>({...i,backend:{type:"skill",command:[...t]},_meta:o}));return {...e.definition,actions:n}}function fe(e,t){let n=r=>{throw new TypeError(`@Tool ${e}: content ${r}`)},o=(r,s,u)=>{if(!O(u))return n(`${r} must be an object`);for(let a of Object.keys(u))if(a==="mediaType"){if(!R.includes(u[a]))return n(`${r}.mediaType must be one of ${R.join(", ")}`)}else if(a===s){if(typeof u[a]!="boolean")return n(`${r}.${a} must be true or false`)}else return n(`${r} has the unknown key "${a}"`);return Object.hasOwn(u,"mediaType")?Object.freeze({...u}):n(`${r}.mediaType is required`)};if(!O(t))return n("must be an object");let i={};for(let r of Object.keys(t))if(r==="in")i[r]=o("in","required",t[r]);else if(r==="out")i[r]=o("out","range",t[r]);else return n(`has the unknown key "${r}"; use "in" and/or "out"`);return Object.keys(i).length===0?n('needs "in" and/or "out"'):Object.freeze(i)}function ye(e){return Object.freeze({instanceId:e.instanceId,threadId:e.threadId,actor:e.actor,requestId:e.requestId,nowMs:e.nowMs})}function me(e){let t={};for(let[n,o]of Object.entries(e))t[n]={...o};return t}function Te(e){return O(e)&&["startLine","lineCount","totalLines"].every(t=>Number.isSafeInteger(e[t])&&e[t]>=1)}function O(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}var Ee=/^[A-Za-z0-9._:-]{1,128}$/u,ge=/[\u0000-\u001f\u007f\u2028\u2029]/u;function $(e=process.env){let t=Q(e.CREWX_APP_INSTANCE_ID),n=e.CREWX_APP_REQUEST_ID,o=e.CREWX_APP_ACTOR_KIND,i=e.CREWX_APP_NOW_MS;if(t===void 0||typeof n!="string"||!Ee.test(n)||o!=="user"&&o!=="agent"||typeof i!="string"||!/^\d{1,16}$/u.test(i))return;let r=Number(i);if(!Number.isSafeInteger(r))return;let s=e.CREWX_THREAD_ID===void 0?null:Q(e.CREWX_THREAD_ID);if(s!==void 0)return Object.freeze({instanceId:t,threadId:s,actor:o,requestId:n,nowMs:r})}function Q(e){if(!(typeof e!="string"||e.length===0||ge.test(e)))return new TextEncoder().encode(e).byteLength<=512?e:void 0}var Ae="dist/tools.json",Ce=1,Oe="dist/main.mjs";var Z=["CREWX_APP_INSTANCE_ID","CREWX_THREAD_ID"];function we(e){if(!Array.isArray(e)||e.length===0)return false;let t=new Set;for(let n of e){if(!Z.some(o=>o===n)||t.has(n))return false;t.add(n);}return true}var L=2,U=2097152;var N=2*1024*1024,F=2e4;function z(e){return createHash("sha256").update(e).digest("hex")}function P(e){if(e.byteLength===0)return 0;let t=0;for(let n of e)n===10&&(t+=1);return e[e.byteLength-1]!==10&&(t+=1),t}var Se=U+1+N,Ie=64*1024,he=10,M={kind:"invalid"};function Re(e,t){try{let n=[],o=0;for(;;){let s=new Uint8Array(Ie),u=readSync(e,s,0,s.length,null);if(u===0)break;if(o+=u,o>t)return;n.push(s.subarray(0,u));}let i=new Uint8Array(o),r=0;for(let s of n)i.set(s,r),r+=s.byteLength;return i}catch{return}}function v(e){return Ne(Re(e,Se))}function Ne(e){if(e===void 0)return M;let t=e.indexOf(he);if(e.byteLength<=U){let o=Ue(Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8"));if(o.ok&&!(t>=0&&S(o.value)&&o.value.schemaVersion===L))return {kind:"v1",value:o.value}}if(t<=0||t>U)return M;let n;try{n=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(e.subarray(0,t)));}catch{return M}return !S(n)||n.schemaVersion!==L?M:{kind:"v2",header:n,body:e.subarray(t+1)}}var xe="actionId,content,input,schemaVersion,state",ke="bytes,lines,mediaType,sha256",De="mediaType,range",je=/^[a-f0-9]{64}$/u,Le=new TextDecoder("utf-8",{fatal:true,ignoreBOM:true});function ne(e,t){let n=a=>({code:a,outcome:"rejected"});if(k(e)!==xe||e.schemaVersion!==L||typeof e.actionId!="string"||!S(e.input)||!S(e.state)||!S(e.content)||k(e.content)!=="in,out")return {code:"INPUT_INVALID",outcome:"failed"};let o=e.content,i,r=o.in;if(r===null){if(t.byteLength!==0)return n(t.byteLength>N?"CONTENT_TOO_LARGE":"CONTENT_DIGEST_MISMATCH")}else {if(!S(r)||k(r)!==ke||!ee(r.mediaType)||!te(r.bytes,N)||!te(r.lines,F)||typeof r.sha256!="string"||!je.test(r.sha256)||t.byteLength!==r.bytes)return n(t.byteLength>N?"CONTENT_TOO_LARGE":"CONTENT_DIGEST_MISMATCH");if(z(t)!==r.sha256||P(t)!==r.lines)return n("CONTENT_DIGEST_MISMATCH");let a;try{a=Le.decode(t);}catch{return n("CONTENT_ENCODING_INVALID")}i={mediaType:r.mediaType,text:a};}let s,u=o.out;if(u!==null){if(!S(u)||k(u)!==De||!ee(u.mediaType))return n("CONTENT_SOURCE_UNSUPPORTED");let a=u.range;if(a!==null&&!Fe(a))return n("CONTENT_SOURCE_UNSUPPORTED");s={mediaType:u.mediaType,...a===null?{}:{range:{startLine:a.startLine,lineCount:a.lineCount}}};}return {actionId:e.actionId,input:e.input,state:e.state,content:{...i===void 0?{}:{in:i},...s===void 0?{}:{out:s}}}}function oe(e){return Object.hasOwn(e,"code")}function re(e,t){let n=o=>({code:o,outcome:"rejected"});if(e?.in===void 0){if(t.in!==void 0)return n("CONTENT_SOURCE_UNSUPPORTED")}else if(t.in===void 0){if(e.in.required===true)return n("CONTENT_REQUIRED")}else if(t.in.mediaType!==e.in.mediaType)return n("CONTENT_SOURCE_UNSUPPORTED");if(e?.out===void 0){if(t.out!==void 0)return n("CONTENT_SOURCE_UNSUPPORTED")}else {if(t.out===void 0)return n("CONTENT_REQUIRED");if(t.out.mediaType!==e.out.mediaType||t.out.range!==void 0&&e.out.range!==true)return n("CONTENT_SOURCE_UNSUPPORTED")}}function J(e,t){let{content:n,...o}=e,i=t===void 0?o:{...o,content:{bytes:t.body.byteLength,lines:P(t.body),sha256:z(t.body),...t.range===void 0?{}:{range:t.range}}},r=new TextEncoder().encode(`${JSON.stringify(i)}
2
- `);if(t===void 0)return r;let s=new Uint8Array(r.byteLength+t.body.byteLength);return s.set(r,0),s.set(t.body,r.byteLength),s}function ie(e){if(e.body.byteLength>N||P(e.body)>F)return {code:"CONTENT_TOO_LARGE",outcome:"failed"}}function Ue(e){try{return {ok:!0,value:JSON.parse(e)}}catch{return {ok:false}}}function k(e){return Object.keys(e).sort().join(",")}function S(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ee(e){return typeof e=="string"&&R.includes(e)}function te(e,t){return Number.isSafeInteger(e)&&e>=0&&e<=t}function Fe(e){return S(e)&&k(e)==="lineCount,startLine"&&Number.isSafeInteger(e.startLine)&&e.startLine>=1&&Number.isSafeInteger(e.lineCount)&&e.lineCount>=1&&e.lineCount<=F}var Me=1;async function ve(e,t,n=process.env.CREWX_WORKSPACE_ROOT??process.cwd(),o){return (await de(e,t,n,void 0,true,void 0,o)).response}async function de(e,t,n,o,i=true,r,s){let u=r!==void 0,a=O(t)?t:void 0,m=a?.input,T=a?.state,d=new e({state:O(T)?T:{},workspaceRoot:n,...s===void 0?{}:{context:s}}),C=O(m)?m:{},E=O(T)?T:d.emptyState(),y={};try{let c;if(u){if(a===void 0)throw new A("INPUT_INVALID");let f=ne(a,r);if(oe(f))throw new A(f.code,null,{outcome:f.outcome});(({actionId:c,input:C,state:E}=f)),y=f.content;}else {if(!a||Object.keys(a).length!==4||!["schemaVersion","actionId","input","state"].every(f=>Object.hasOwn(a,f))||a.schemaVersion!==Me||typeof a.actionId!="string"||!O(m)||!O(T))throw new A("INPUT_INVALID");c=a.actionId,C=m,E=T;}d=new e({state:E,workspaceRoot:n,...s===void 0?{}:{context:s}}),await d.validate(c,C,E);let l=j(e).find(({options:f})=>f.name===c);if(!l)throw new A("INPUT_INVALID");let g=d[l.methodName];if(typeof g!="function")throw new A("EXECUTION_FAILED");let p=re(l.options.content,y);if(p)throw new A(p.code,null,{outcome:p.outcome});let D=Object.freeze({...y.in===void 0?{}:{in:Object.freeze({text:y.in.text})},...y.out===void 0?{}:{out:Object.freeze(y.out.range===void 0?{}:{range:Object.freeze({...y.out.range})})}}),h=()=>g.call(d,C,D),I=i?await Xe(h):await h();if(I!==void 0&&!O(I))throw new A("EXECUTION_FAILED");let b;if(y.out!==void 0){if(b=d.producedContent,b===void 0)throw new A("EXECUTION_FAILED","content.out was requested but setContent was never called");let f=ie(b);if(f)throw new A(f.code,null,{outcome:f.outcome})}else if(d.didSetContent)throw new A("EXECUTION_FAILED","setContent was called but the request asked for no content.out");return {response:{...d.didSetState?{state:d.state}:{},...I===void 0?{}:{result:I}},...b===void 0?{}:{answer:b}}}catch(c){let l,g=c,p=c instanceof A?c:void 0;if(p)l={code:p.code,detail:p.detail,outcome:p.outcome};else try{l=d.mapError(c);}catch(q){l={code:"EXECUTION_FAILED",detail:null},g=q;}let D=Be(l?.code),h=D?l.code:"EXECUTION_FAILED",I=typeof l?.detail=="string"?l.detail:null,b=D?K(l.outcome):"failed",f;try{f=d.errorState(h,I,{input:C,state:E});}catch(q){g=new AggregateError([g,q],"App error handling failed"),f=d.emptyState();}return o?.(h,g,{outcome:b,detail:I,expected:p!==void 0&&g===p}),{response:{outcome:b,errorCode:h,state:O(f)?f:d.emptyState()}}}}async function Je(e,t={}){let n=t.output??process.stdout,o,i;if(t.preloadedInput!==void 0)o=t.preloadedInput.value,i=t.preloadedInput.body;else {let d=v(t.inputFd??0);d.kind==="v1"?o=d.value:d.kind==="v2"&&(o=d.header,i=d.body);}let r=i!==void 0,s=t.context??$(),u=false,a=(d,C,E)=>{u=true,t.onFailure?.(d,C,E);},m;try{m=await de(e,o,process.env.CREWX_WORKSPACE_ROOT??process.cwd(),a,t.consoleManaged!==!0,i,s);}catch(d){a("EXECUTION_FAILED",d),m={response:ae(t.emptyState)};}qe(m.response)&&!u&&a(m.response.errorCode,void 0,{outcome:m.response.outcome,detail:null,expected:false});let T;try{let d=(t.sanitize??se)(m.response);T=r?J(d,m.answer):`${JSON.stringify(d)}
3
- `;}catch(d){a("EXECUTION_FAILED",d);let C=ae(t.emptyState);try{let E=(t.sanitize??se)(C);T=r?J(E):`${JSON.stringify(E)}
4
- `;}catch(E){a("EXECUTION_FAILED",E),T=r?J(C):`${JSON.stringify(C)}
5
- `;}}n.write(T);}async function Xe(e){let t=["log","info","debug"],n=new Map;for(let o of t)n.set(o,console[o]),console[o]=(...i)=>process.stderr.write(`${format(...i)}
6
- `);try{return await e()}finally{for(let o of t)console[o]=n.get(o);}}function ae(e={}){return {outcome:"failed",errorCode:"EXECUTION_FAILED",state:{...e,error:{code:"EXECUTION_FAILED",detail:null}}}}function qe(e){return (e.outcome==="failed"||e.outcome==="rejected")&&typeof e.errorCode=="string"}function Be(e){return typeof e=="string"&&/^[A-Z][A-Z0-9_]{0,127}$/u.test(e)}function se(e){return e}var V={depth:null,maxArrayLength:null,maxStringLength:null},Y=class extends Writable{#e="buffer";#t=[];_write(t,n,o){if(this.#e==="buffer"){this.#t.push(typeof t=="string"?t:Uint8Array.from(t)),o();return}if(this.#e==="discard"){o();return}process.stderr.write(t,o);}flushToStderr(){this.#e="stderr";for(let t of this.#t)process.stderr.write(t);this.#t=[];}discard(){this.#e="discard",this.#t=[];}};async function ze(e,t={}){let n=process.stdout,o=n.write.bind(n),i=new Y,r=new Console({stdout:i,stderr:i,inspectOptions:{...V}});globalThis.console=r;let s=false,u="-",a="-",m,T=false,d,C;try{let c=We(t.inputFd??0);u=Ye(c.value),a=X(process.env.CREWX_APP_REQUEST_ID),m=new Date().toISOString();try{d=await e();}catch(p){T=!0,C=p;}let l=d?.default;if(!T&&l?.devtools?.log===!0?(Object.assign(inspect.defaultOptions,V),E(m),i.flushToStderr()):i.discard(),T){y("EXECUTION_FAILED",C),W(o,t,y);return}try{if(typeof d?.runSkillApp!="function")throw new TypeError("App module does not export runSkillApp");let p={sanitize:t.sanitize,emptyState:t.emptyState??Ve(l),preloadedInput:c.body===void 0?{value:c.value}:{value:c.value,body:c.body},onFailure:y,consoleManaged:!0,output:{write:o}};await d.runSkillApp(l,p);}catch(p){y("EXECUTION_FAILED",p),W(o,t,y);}}catch(c){y("EXECUTION_FAILED",c),W(o,t,y);}finally{process.exitCode=0;}function E(c){s||(process.stderr.write(`[crewx-app] ${c??new Date().toISOString()} ${X(u)} req=${a}
7
- `),s=true);}function y(c,l,g){E();let p=g?.expected===true&&g.detail?` ${X(g.detail)}`:"";process.stderr.write(`[crewx-app] ${g?.outcome??"failed"} ${X(c)}${p}
8
- `),l!==void 0&&g?.expected!==true&&process.stderr.write(`${inspect(l,V)}
9
- `);}}function Ve(e){if(typeof e=="function")try{let n=new e({workspaceRoot:process.cwd()}).emptyState();return n!==null&&typeof n=="object"&&!Array.isArray(n)?n:void 0}catch{return}}function We(e){let t=v(e);return t.kind==="v1"?{value:t.value}:t.kind==="v2"?{value:t.header,body:t.body}:{value:void 0}}function Ye(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&typeof e.actionId=="string"?e.actionId:"-"}function X(e){return typeof e!="string"||e.length===0?"-":e.replace(/[\u0000-\u001f\u007f\u2028\u2029]/gu,"_")}function W(e,t,n){let o={code:"EXECUTION_FAILED",detail:null},r={outcome:"failed",errorCode:"EXECUTION_FAILED",state:t.emptyState!==null&&typeof t.emptyState=="object"&&!Array.isArray(t.emptyState)?{...t.emptyState,error:o}:{error:o}},s=r;try{s=(t.sanitize??He)(r);}catch(u){n("EXECUTION_FAILED",u);}e(`${JSON.stringify(s)}
10
- `);}function He(e){return e}export{Ae as APP_TOOLS_FILE,Ce as APP_TOOLS_SCHEMA_VERSION,Oe as APP_TOOL_ENTRY,A as AppError,B as CrewXApp,Z as SKILL_BACKEND_ENV_NAMES,le as Tool,ve as executeAppRequest,pe as generateManifest,G as generateToolDeclarations,j as getToolDeclarations,we as isSkillBackendEnv,$ as readAppContext,ze as runAppEntry,Je as runSkillApp};
1
+ import {format,inspect}from'util';import {readSync}from'fs';import {createHash}from'crypto';import {Console}from'console';import {Writable}from'stream';var x=["text/plain","application/json"];var U=[5,15,30,60],P=Object.freeze({min:15e3,max:6e5,default:3e5}),be=1,W="schedule:",Ie="schedule",Re="exit 78",ie=["standby","disabled","draining","degraded"],Ne=["cron","cron_manual","app_enable"],De=/^[A-Z][A-Z0-9_]{0,63}$/u;function ae(e){return typeof e=="string"&&De.test(e)}var re=["status","everyMinutes","lastStartedAt","lastFinishedAt","lastOutcome","lastErrorCode","nextRunAt","periodic","periodicReason"],xe=["unset","on","off"],Pe=["available","unavailable"],z=64,ke=128;function se(e){return U.includes(e)}function Y(e){return Number.isSafeInteger(e)&&e>=P.min&&e<=P.max}function de(e){return ie.includes(e)}function ue(e){if(!Ue(e)||Object.keys(e).length!==re.length||!re.every(o=>Object.hasOwn(e,o))||typeof e.status!="string"||!xe.includes(e.status)||!se(e.everyMinutes)||!v(e.lastStartedAt,z)||!v(e.lastFinishedAt,z)||!v(e.lastOutcome,ke)||!v(e.nextRunAt,z)||e.lastErrorCode!==null&&!ae(e.lastErrorCode)||typeof e.periodic!="string"||!Pe.includes(e.periodic))return;let t=e.periodic;if(!(t==="available"?e.periodicReason!==null:!de(e.periodicReason))&&!(e.nextRunAt!==null&&(e.status!=="on"||t!=="available")))return Object.freeze({status:e.status,everyMinutes:e.everyMinutes,lastStartedAt:e.lastStartedAt,lastFinishedAt:e.lastFinishedAt,lastOutcome:e.lastOutcome,lastErrorCode:e.lastErrorCode,nextRunAt:e.nextRunAt,periodic:t,periodicReason:e.periodicReason})}function v(e,n){return e===null||typeof e=="string"&&e.length>0&&e.length<=n}function Ue(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}var ce=Symbol;ce.metadata===void 0&&Object.defineProperty(Symbol,"metadata",{configurable:false,value:Symbol.for("Symbol.metadata")});var Le=ce.metadata,L=Symbol.for("crewx.app.tool-metadata"),l=class extends Error{code;detail;outcome;constructor(n,t=null,o){super(n),this.name="AppError",this.code=n,this.detail=t,this.outcome=Q(o?.outcome);}};function Q(e){return e==="rejected"?"rejected":"failed"}var G=class{static devtools=process.env.CREWX_APP_DEV==="1"?Object.freeze({log:true}):void 0;currentState;stateWasSet=false;answerBody;answerRange;callContext;callSchedule;scheduleDirective;workspaceRoot;constructor(n={workspaceRoot:process.cwd()}){this.currentState=n.state??{},this.workspaceRoot=n.workspaceRoot,this.callContext=n.context===void 0?void 0:Xe(n.context),this.callSchedule=n.schedule===void 0?void 0:Object.freeze({...n.schedule});}get schedule(){return this.callSchedule}requestSchedule(n){if(typeof n!="boolean")throw new TypeError("requestSchedule needs true or false");if(this.callSchedule===void 0)throw new l("SCHEDULE_UNSUPPORTED","this App has no schedule on this Host");let t=this.callContext?.actor;if(t==="schedule")throw new l("SCHEDULE_UNSUPPORTED","a scheduled run cannot change its own schedule",{outcome:"rejected"});if(n&&t!=="user")throw new l("SCHEDULE_ENABLE_DENIED","only the person at the screen can turn a schedule on",{outcome:"rejected"});this.scheduleDirective=Object.freeze({enabled:n});}get didRequestSchedule(){return this.scheduleDirective}get context(){if(this.callContext===void 0)throw new TypeError("this.context is only set when the Host runs the action; pass options.context when you construct the App in a test");return this.callContext}get state(){return this.currentState}get didSetState(){return this.stateWasSet}setState(n){this.currentState=n,this.stateWasSet=true;}get didSetContent(){return this.answerBody!==void 0}get producedContent(){return this.answerBody===void 0?void 0:{body:this.answerBody,...this.answerRange===void 0?{}:{range:this.answerRange}}}setContent(n,t){if(typeof n!="string"&&!(n instanceof Uint8Array))throw new TypeError("setContent needs a string or a Uint8Array");if(t!==void 0&&!Je(t))throw new TypeError("setContent range must be { startLine, lineCount, totalLines }, three integers of at least 1");this.answerBody=typeof n=="string"?new TextEncoder().encode(n):new Uint8Array(n),this.answerRange=t===void 0?void 0:{startLine:t.startLine,lineCount:t.lineCount,totalLines:t.totalLines};}emptyState(){return {}}validate(n,t,o){}mapError(n){return {code:"EXECUTION_FAILED",detail:null}}errorState(n,t,o){return {...T(o.state)?o.state:{},error:{code:n,detail:t}}}};function je(e){return function(n,t){if(t.static||t.private||t.kind!=="method")throw new TypeError("@Tool can decorate public instance methods only");let o=t.metadata;if(!o)throw new TypeError("standard decorator metadata is unavailable");let i=Object.hasOwn(o,L)?o[L]:[];if(i.some(u=>u.methodName===String(t.name)))throw new TypeError(`@Tool is declared more than once for ${String(t.name)}`);let r=e.content===void 0?void 0:Fe(e.name,e.content),s=e.schedule===void 0?void 0:ve(e);if(s!==void 0&&i.some(u=>u.options.schedule!==void 0))throw new TypeError(`@Tool ${e.name}: an App declares at most one scheduled action`);o[L]=[...i,{methodName:String(t.name),options:Object.freeze({...e,...r===void 0?{}:{content:r},...s===void 0?{}:{schedule:s}})}];}}function j(e){let n=e[Le],t=n&&Object.hasOwn(n,L)?n[L]:[],o=new Map(t.map(r=>[r.methodName,r])),i=Object.getOwnPropertyNames(e.prototype).map(r=>o.get(r)).filter(r=>r!==void 0);if(i.length!==t.length)throw new TypeError("a @Tool method is missing from the App prototype");return i}function le(e){return j(e).some(({options:n})=>n.schedule!==void 0)}function pe(e){let n=e.definition,t=j(e),o=new Set;return t.map(({options:i})=>{if(o.has(i.name))throw new TypeError(`duplicate @Tool name: ${i.name}`);return o.add(i.name),{actionId:i.name,...i.dataInputs===void 0?{}:{dataInputs:[...i.dataInputs]},confirmation:i.confirmation??"none",capability:i.capability??"app.read",mutation:i.mutation??true,inputSchema:i.inputSchema,...i.content===void 0?{}:{content:He(i.content)},...i.schedule===void 0?{}:{schedule:{...i.schedule}},resultProjection:i.resultProjection??{allow:[...n.stateProjection.allow]},_meta:{description:i.description}}})}function Me(e,n){if(n.length===0)throw new TypeError("backendCommand must name the skill command");let t=pe(e).map(({_meta:o,...i})=>({...i,backend:{type:"skill",command:[...n]},_meta:o}));return {...e.definition,actions:t}}function Fe(e,n){let t=r=>{throw new TypeError(`@Tool ${e}: content ${r}`)},o=(r,s,u)=>{if(!T(u))return t(`${r} must be an object`);for(let a of Object.keys(u))if(a==="mediaType"){if(!x.includes(u[a]))return t(`${r}.mediaType must be one of ${x.join(", ")}`)}else if(a===s){if(typeof u[a]!="boolean")return t(`${r}.${a} must be true or false`)}else return t(`${r} has the unknown key "${a}"`);return Object.hasOwn(u,"mediaType")?Object.freeze({...u}):t(`${r}.mediaType is required`)};if(!T(n))return t("must be an object");let i={};for(let r of Object.keys(n))if(r==="in")i[r]=o("in","required",n[r]);else if(r==="out")i[r]=o("out","range",n[r]);else return t(`has the unknown key "${r}"; use "in" and/or "out"`);return Object.keys(i).length===0?t('needs "in" and/or "out"'):Object.freeze(i)}function ve(e){let n=o=>{throw new TypeError(`@Tool ${e.name}: schedule ${o}`)},t=e.schedule;if(!T(t))return n("must be an object");for(let o of Object.keys(t))if(o!=="everyMinutes"&&o!=="timeoutMs")return n(`has the unknown key "${o}"`);return U.includes(t.everyMinutes)?t.timeoutMs!==void 0&&!Y(t.timeoutMs)?n(`timeoutMs must be an integer from ${P.min} to ${P.max}`):e.content!==void 0?n("cannot be combined with content"):e.dataInputs!==void 0?n("cannot be combined with dataInputs"):e.confirmation!==void 0&&e.confirmation!=="none"?n("cannot require a native confirmation"):Object.freeze({everyMinutes:t.everyMinutes,...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}}):n(`everyMinutes must be one of ${U.join(", ")}`)}function Xe(e){return Object.freeze({instanceId:e.instanceId,threadId:e.threadId,actor:e.actor,requestId:e.requestId,nowMs:e.nowMs})}function He(e){let n={};for(let[t,o]of Object.entries(e))n[t]={...o};return n}function Je(e){return T(e)&&["startLine","lineCount","totalLines"].every(n=>Number.isSafeInteger(e[n])&&e[n]>=1)}function T(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}var qe=/^[A-Za-z0-9._:-]{1,128}$/u,Ke=/[\u0000-\u001f\u007f\u2028\u2029]/u,$e=512;function Z(e=process.env){let n=fe(e.CREWX_APP_INSTANCE_ID),t=e.CREWX_APP_REQUEST_ID,o=e.CREWX_APP_ACTOR_KIND,i=e.CREWX_APP_NOW_MS;if(n===void 0||typeof t!="string"||!qe.test(t)||o!=="user"&&o!=="agent"&&o!=="schedule"||typeof i!="string"||!/^\d{1,16}$/u.test(i))return;let r=Number(i);if(!Number.isSafeInteger(r))return;let s=e.CREWX_THREAD_ID===void 0?null:fe(e.CREWX_THREAD_ID);if(s!==void 0&&!(o==="schedule"&&(s!==null||!n.startsWith(W))))return Object.freeze({instanceId:n,threadId:s,actor:o,requestId:t,nowMs:r})}function fe(e){if(!(typeof e!="string"||e.length===0||Ke.test(e)))return new TextEncoder().encode(e).byteLength<=$e?e:void 0}var Be="dist/tools.json",Ve=1,ze="dist/main.mjs";var ye=["CREWX_APP_INSTANCE_ID","CREWX_THREAD_ID"];function We(e){if(!Array.isArray(e)||e.length===0)return false;let n=new Set;for(let t of e){if(!ye.some(o=>o===t)||n.has(t))return false;n.add(t);}return true}var X=2,H=2097152;var k=2*1024*1024,J=2e4;function ee(e){return createHash("sha256").update(e).digest("hex")}function q(e){if(e.byteLength===0)return 0;let n=0;for(let t of e)t===10&&(n+=1);return e[e.byteLength-1]!==10&&(n+=1),n}var Qe=H+1+k,Ze=64*1024,en=10,K={kind:"invalid"};function nn(e,n){try{let t=[],o=0;for(;;){let s=new Uint8Array(Ze),u=readSync(e,s,0,s.length,null);if(u===0)break;if(o+=u,o>n)return;t.push(s.subarray(0,u));}let i=new Uint8Array(o),r=0;for(let s of t)i.set(s,r),r+=s.byteLength;return i}catch{return}}function $(e){return tn(nn(e,Qe))}function tn(e){if(e===void 0)return K;let n=e.indexOf(en);if(e.byteLength<=H){let o=un(Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8"));if(o.ok&&!(n>=0&&I(o.value)&&o.value.schemaVersion===X))return {kind:"v1",value:o.value}}if(n<=0||n>H)return K;let t;try{t=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(e.subarray(0,n)));}catch{return K}return !I(t)||t.schemaVersion!==X?K:{kind:"v2",header:t,body:e.subarray(n+1)}}var on="actionId,content,input,schemaVersion,state",rn="bytes,lines,mediaType,sha256",an="mediaType,range",sn=/^[a-f0-9]{64}$/u,dn=new TextDecoder("utf-8",{fatal:true,ignoreBOM:true});function Ae(e,n){let t=a=>({code:a,outcome:"rejected"});if(M(e)!==on||e.schemaVersion!==X||typeof e.actionId!="string"||!I(e.input)||!I(e.state)||!I(e.content)||M(e.content)!=="in,out")return {code:"INPUT_INVALID",outcome:"failed"};let o=e.content,i,r=o.in;if(r===null){if(n.byteLength!==0)return t(n.byteLength>k?"CONTENT_TOO_LARGE":"CONTENT_DIGEST_MISMATCH")}else {if(!I(r)||M(r)!==rn||!me(r.mediaType)||!Ee(r.bytes,k)||!Ee(r.lines,J)||typeof r.sha256!="string"||!sn.test(r.sha256)||n.byteLength!==r.bytes)return t(n.byteLength>k?"CONTENT_TOO_LARGE":"CONTENT_DIGEST_MISMATCH");if(ee(n)!==r.sha256||q(n)!==r.lines)return t("CONTENT_DIGEST_MISMATCH");let a;try{a=dn.decode(n);}catch{return t("CONTENT_ENCODING_INVALID")}i={mediaType:r.mediaType,text:a};}let s,u=o.out;if(u!==null){if(!I(u)||M(u)!==an||!me(u.mediaType))return t("CONTENT_SOURCE_UNSUPPORTED");let a=u.range;if(a!==null&&!cn(a))return t("CONTENT_SOURCE_UNSUPPORTED");s={mediaType:u.mediaType,...a===null?{}:{range:{startLine:a.startLine,lineCount:a.lineCount}}};}return {actionId:e.actionId,input:e.input,state:e.state,content:{...i===void 0?{}:{in:i},...s===void 0?{}:{out:s}}}}function Se(e){return Object.hasOwn(e,"code")}function he(e,n){let t=o=>({code:o,outcome:"rejected"});if(e?.in===void 0){if(n.in!==void 0)return t("CONTENT_SOURCE_UNSUPPORTED")}else if(n.in===void 0){if(e.in.required===true)return t("CONTENT_REQUIRED")}else if(n.in.mediaType!==e.in.mediaType)return t("CONTENT_SOURCE_UNSUPPORTED");if(e?.out===void 0){if(n.out!==void 0)return t("CONTENT_SOURCE_UNSUPPORTED")}else {if(n.out===void 0)return t("CONTENT_REQUIRED");if(n.out.mediaType!==e.out.mediaType||n.out.range!==void 0&&e.out.range!==true)return t("CONTENT_SOURCE_UNSUPPORTED")}}function B(e,n){let{content:t,...o}=e,i=n===void 0?o:{...o,content:{bytes:n.body.byteLength,lines:q(n.body),sha256:ee(n.body),...n.range===void 0?{}:{range:n.range}}},r=new TextEncoder().encode(`${JSON.stringify(i)}
2
+ `);if(n===void 0)return r;let s=new Uint8Array(r.byteLength+n.body.byteLength);return s.set(r,0),s.set(n.body,r.byteLength),s}function Te(e){if(e.body.byteLength>k||q(e.body)>J)return {code:"CONTENT_TOO_LARGE",outcome:"failed"}}function un(e){try{return {ok:!0,value:JSON.parse(e)}}catch{return {ok:false}}}function M(e){return Object.keys(e).sort().join(",")}function I(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}function me(e){return typeof e=="string"&&x.includes(e)}function Ee(e,n){return Number.isSafeInteger(e)&&e>=0&&e<=n}function cn(e){return I(e)&&M(e)==="lineCount,startLine"&&Number.isSafeInteger(e.startLine)&&e.startLine>=1&&Number.isSafeInteger(e.lineCount)&&e.lineCount>=1&&e.lineCount<=J}var pn=1;async function fn(e,n,t=process.env.CREWX_WORKSPACE_ROOT??process.cwd(),o){return (await Oe(e,n,t,void 0,true,void 0,o)).response}async function Oe(e,n,t,o,i=true,r,s){let u=r!==void 0,a=T(n)?n:void 0,E=a?.input,A=a?.state,d=new e({state:T(A)?A:{},workspaceRoot:t,...s===void 0?{}:{context:s}}),h=T(E)?E:{},S=T(A)?A:d.emptyState(),f={},y=a!==void 0&&Object.hasOwn(a,"schedule"),C;try{let m;if(u){if(a===void 0||y)throw new l("INPUT_INVALID");let p=Ae(a,r);if(Se(p))throw new l(p.code,null,{outcome:p.outcome});(({actionId:m,input:h,state:S}=p)),f=p.content;}else {let p=y&&a!==void 0?ue(a.schedule):void 0;if(!a||Object.keys(a).length!==(y?5:4)||!["schemaVersion","actionId","input","state"].every(we=>Object.hasOwn(a,we))||a.schemaVersion!==pn||typeof a.actionId!="string"||!T(E)||!T(A)||y&&p===void 0)throw new l("INPUT_INVALID");m=a.actionId,h=E,S=A,C=p;}d=new e({state:S,workspaceRoot:t,...s===void 0?{}:{context:s},...C===void 0?{}:{schedule:C}}),await d.validate(m,h,S);let c=j(e).find(({options:p})=>p.name===m);if(!c)throw new l("INPUT_INVALID");if(C!==void 0&&(c.options.content!==void 0||!le(e)))throw new l("INPUT_INVALID");let w=d[c.methodName];if(typeof w!="function")throw new l("EXECUTION_FAILED");let _=he(c.options.content,f);if(_)throw new l(_.code,null,{outcome:_.outcome});let F=Object.freeze({...f.in===void 0?{}:{in:Object.freeze({text:f.in.text})},...f.out===void 0?{}:{out:Object.freeze(f.out.range===void 0?{}:{range:Object.freeze({...f.out.range})})}}),D=()=>w.call(d,h,F),R=i?await mn(D):await D();if(R!==void 0&&!T(R))throw new l("EXECUTION_FAILED");let b;if(f.out!==void 0){if(b=d.producedContent,b===void 0)throw new l("EXECUTION_FAILED","content.out was requested but setContent was never called");let p=Te(b);if(p)throw new l(p.code,null,{outcome:p.outcome})}else if(d.didSetContent)throw new l("EXECUTION_FAILED","setContent was called but the request asked for no content.out");let N=d.didRequestSchedule;return {response:{...d.didSetState?{state:d.state}:{},...R===void 0?{}:{result:R},...N===void 0?{}:{schedule:{enabled:N.enabled}}},...b===void 0?{}:{answer:b}}}catch(m){let c,w=m,_=m instanceof l?m:void 0;if(_)c={code:_.code,detail:_.detail,outcome:_.outcome};else try{c=d.mapError(m);}catch(p){c={code:"EXECUTION_FAILED",detail:null},w=p;}let F=An(c?.code),D=F?c.code:"EXECUTION_FAILED",R=typeof c?.detail=="string"?c.detail:null,b=F?Q(c.outcome):"failed",N;try{N=d.errorState(D,R,{input:h,state:S});}catch(p){w=new AggregateError([w,p],"App error handling failed"),N=d.emptyState();}return o?.(D,w,{outcome:b,detail:R,expected:_!==void 0&&w===_}),{response:{outcome:b,errorCode:D,state:T(N)?N:d.emptyState()}}}}async function yn(e,n={}){let t=n.output??process.stdout,o,i;if(n.preloadedInput!==void 0)o=n.preloadedInput.value,i=n.preloadedInput.body;else {let d=$(n.inputFd??0);d.kind==="v1"?o=d.value:d.kind==="v2"&&(o=d.header,i=d.body);}let r=i!==void 0,s=n.context??Z(),u=false,a=(d,h,S)=>{u=true,n.onFailure?.(d,h,S);},E;try{E=await Oe(e,o,process.env.CREWX_WORKSPACE_ROOT??process.cwd(),a,n.consoleManaged!==!0,i,s);}catch(d){a("EXECUTION_FAILED",d),E={response:Ce(n.emptyState)};}En(E.response)&&!u&&a(E.response.errorCode,void 0,{outcome:E.response.outcome,detail:null,expected:false});let A;try{let d=(n.sanitize??_e)(E.response);A=r?B(d,E.answer):`${JSON.stringify(d)}
3
+ `;}catch(d){a("EXECUTION_FAILED",d);let h=Ce(n.emptyState);try{let S=(n.sanitize??_e)(h);A=r?B(S):`${JSON.stringify(S)}
4
+ `;}catch(S){a("EXECUTION_FAILED",S),A=r?B(h):`${JSON.stringify(h)}
5
+ `;}}t.write(A);}async function mn(e){let n=["log","info","debug"],t=new Map;for(let o of n)t.set(o,console[o]),console[o]=(...i)=>process.stderr.write(`${format(...i)}
6
+ `);try{return await e()}finally{for(let o of n)console[o]=t.get(o);}}function Ce(e={}){return {outcome:"failed",errorCode:"EXECUTION_FAILED",state:{...e,error:{code:"EXECUTION_FAILED",detail:null}}}}function En(e){return (e.outcome==="failed"||e.outcome==="rejected")&&typeof e.errorCode=="string"}function An(e){return typeof e=="string"&&/^[A-Z][A-Z0-9_]{0,127}$/u.test(e)}function _e(e){return e}var ne={depth:null,maxArrayLength:null,maxStringLength:null},oe=class extends Writable{#e="buffer";#n=[];_write(n,t,o){if(this.#e==="buffer"){this.#n.push(typeof n=="string"?n:Uint8Array.from(n)),o();return}if(this.#e==="discard"){o();return}process.stderr.write(n,o);}flushToStderr(){this.#e="stderr";for(let n of this.#n)process.stderr.write(n);this.#n=[];}discard(){this.#e="discard",this.#n=[];}};async function Tn(e,n={}){let t=process.stdout,o=t.write.bind(t),i=new oe,r=new Console({stdout:i,stderr:i,inspectOptions:{...ne}});globalThis.console=r;let s=false,u="-",a="-",E,A=false,d,h;try{let y=_n(n.inputFd??0);u=On(y.value),a=V(process.env.CREWX_APP_REQUEST_ID),E=new Date().toISOString();try{d=await e();}catch(c){A=!0,h=c;}let C=d?.default;if(!A&&C?.devtools?.log===!0?(Object.assign(inspect.defaultOptions,ne),S(E),i.flushToStderr()):i.discard(),A){f("EXECUTION_FAILED",h),te(o,n,f);return}try{if(typeof d?.runSkillApp!="function")throw new TypeError("App module does not export runSkillApp");let c={sanitize:n.sanitize,emptyState:n.emptyState??Cn(C),preloadedInput:y.body===void 0?{value:y.value}:{value:y.value,body:y.body},onFailure:f,consoleManaged:!0,output:{write:o}};await d.runSkillApp(C,c);}catch(c){f("EXECUTION_FAILED",c),te(o,n,f);}}catch(y){f("EXECUTION_FAILED",y),te(o,n,f);}finally{process.exitCode=0;}function S(y){s||(process.stderr.write(`[crewx-app] ${y??new Date().toISOString()} ${V(u)} req=${a}
7
+ `),s=true);}function f(y,C,m){S();let c=m?.expected===true&&m.detail?` ${V(m.detail)}`:"";process.stderr.write(`[crewx-app] ${m?.outcome??"failed"} ${V(y)}${c}
8
+ `),C!==void 0&&m?.expected!==true&&process.stderr.write(`${inspect(C,ne)}
9
+ `);}}function Cn(e){if(typeof e=="function")try{let t=new e({workspaceRoot:process.cwd()}).emptyState();return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}catch{return}}function _n(e){let n=$(e);return n.kind==="v1"?{value:n.value}:n.kind==="v2"?{value:n.header,body:n.body}:{value:void 0}}function On(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&typeof e.actionId=="string"?e.actionId:"-"}function V(e){return typeof e!="string"||e.length===0?"-":e.replace(/[\u0000-\u001f\u007f\u2028\u2029]/gu,"_")}function te(e,n,t){let o={code:"EXECUTION_FAILED",detail:null},r={outcome:"failed",errorCode:"EXECUTION_FAILED",state:n.emptyState!==null&&typeof n.emptyState=="object"&&!Array.isArray(n.emptyState)?{...n.emptyState,error:o}:{error:o}},s=r;try{s=(n.sanitize??gn)(r);}catch(u){t("EXECUTION_FAILED",u);}e(`${JSON.stringify(s)}
10
+ `);}function gn(e){return e}export{Ie as APP_SCHEDULE_ACTOR_KIND,Re as APP_SCHEDULE_INERT_COMMAND,W as APP_SCHEDULE_INSTANCE_PREFIX,U as APP_SCHEDULE_INTERVALS_MINUTES,be as APP_SCHEDULE_MAX_PER_APP,ie as APP_SCHEDULE_PERIODIC_REASONS,P as APP_SCHEDULE_TIMEOUT_MS,Be as APP_TOOLS_FILE,Ve as APP_TOOLS_SCHEMA_VERSION,ze as APP_TOOL_ENTRY,l as AppError,G as CrewXApp,Ne as SCHEDULE_TRIGGERS,ye as SKILL_BACKEND_ENV_NAMES,je as Tool,fn as executeAppRequest,Me as generateManifest,pe as generateToolDeclarations,j as getToolDeclarations,ae as isAppScheduleCode,se as isAppScheduleIntervalMinutes,de as isAppSchedulePeriodicReason,Y as isAppScheduleTimeoutMs,We as isSkillBackendEnv,Z as readAppContext,Tn as runAppEntry,yn as runSkillApp};