@crewx/sdk 0.9.0-rc.137 → 0.9.0-rc.139
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/activity-log/builder.d.ts +3 -0
- package/dist/app/app.d.ts +8 -1
- package/dist/app/backend-env.d.ts +3 -0
- package/dist/app/index.d.ts +4 -2
- package/dist/app/index.js +9 -9
- package/dist/app/runtime.d.ts +7 -2
- package/dist/conversation/sqlite-provider.d.ts +0 -1
- package/dist/conversation/types.d.ts +1 -0
- package/dist/esm/app/index.js +9 -9
- package/dist/esm/index.js +283 -233
- package/dist/esm/plugins/index.js +157 -108
- package/dist/esm/publish/index.js +2 -2
- package/dist/esm/repository/index.js +174 -125
- package/dist/esm/skills/index.js +2 -2
- package/dist/index.d.ts +5 -4
- package/dist/index.js +290 -240
- package/dist/mcp-app/diagnostic-reason.d.ts +3 -0
- package/dist/mcp-app/types.d.ts +1 -0
- package/dist/mcp-app/workspace-snapshot.d.ts +1 -0
- package/dist/plugins/index.js +157 -108
- package/dist/publish/index.js +2 -2
- package/dist/repository/index.d.ts +2 -2
- package/dist/repository/index.js +174 -125
- package/dist/repository/task-status.d.ts +9 -2
- package/dist/repository/task.repository.d.ts +7 -2
- package/dist/repository/thread.repository.d.ts +23 -1
- package/dist/skills/index.js +2 -2
- package/dist/types/task-log.types.d.ts +1 -0
- package/dist/ui-plugin/csp.d.ts +4 -1
- package/dist/ui-plugin/index.d.ts +1 -1
- package/dist/ui-plugin/types.d.ts +4 -0
- package/package.json +1 -1
|
@@ -32,6 +32,7 @@ export interface ActivityLogTaskResult {
|
|
|
32
32
|
omissions: ActivityLogOmission[];
|
|
33
33
|
entries: ActivityLogRenderedEntry[];
|
|
34
34
|
activityLog: string;
|
|
35
|
+
readable?: false;
|
|
35
36
|
}
|
|
36
37
|
export interface ActivityLogByTaskResult {
|
|
37
38
|
threadId: string;
|
|
@@ -50,6 +51,7 @@ export interface BuildActivityLogByTaskBudgetOptions {
|
|
|
50
51
|
activityLogTokenBudget: number;
|
|
51
52
|
countTokens: CountTokens;
|
|
52
53
|
repositoryEntryLimit?: number;
|
|
54
|
+
currentTaskId?: string;
|
|
53
55
|
}
|
|
54
56
|
export interface BuildActivityLogByTaskOptions {
|
|
55
57
|
threadId: string;
|
|
@@ -60,6 +62,7 @@ export interface BuildActivityLogByTaskOptions {
|
|
|
60
62
|
activityLogTokenBudget?: number;
|
|
61
63
|
countTokens?: CountTokens;
|
|
62
64
|
repositoryEntryLimit?: number;
|
|
65
|
+
currentTaskId?: string;
|
|
63
66
|
}
|
|
64
67
|
export interface ActivityLogResult {
|
|
65
68
|
threadId: string;
|
package/dist/app/app.d.ts
CHANGED
|
@@ -42,9 +42,14 @@ export interface AppRuntimeOptions<State extends JsonObject = JsonObject> {
|
|
|
42
42
|
readonly state?: State;
|
|
43
43
|
readonly workspaceRoot: string;
|
|
44
44
|
}
|
|
45
|
+
export type AppFailureOutcome = 'failed' | 'rejected';
|
|
45
46
|
export interface AppErrorMapping {
|
|
46
47
|
readonly code: string;
|
|
47
48
|
readonly detail: string | null;
|
|
49
|
+
readonly outcome?: AppFailureOutcome;
|
|
50
|
+
}
|
|
51
|
+
export interface AppErrorOptions {
|
|
52
|
+
readonly outcome?: AppFailureOutcome;
|
|
48
53
|
}
|
|
49
54
|
export interface AppErrorContext {
|
|
50
55
|
readonly input: unknown;
|
|
@@ -56,8 +61,10 @@ export type DeepReadonly<T> = T extends (...args: never[]) => unknown ? T : T ex
|
|
|
56
61
|
export declare class AppError extends Error {
|
|
57
62
|
readonly code: string;
|
|
58
63
|
readonly detail: string | null;
|
|
59
|
-
|
|
64
|
+
readonly outcome: AppFailureOutcome;
|
|
65
|
+
constructor(code: string, detail?: string | null, options?: AppErrorOptions);
|
|
60
66
|
}
|
|
67
|
+
export declare function normalizeFailureOutcome(value: unknown): AppFailureOutcome;
|
|
61
68
|
export declare class CrewXApp<State extends JsonObject = JsonObject> {
|
|
62
69
|
static readonly devtools: {
|
|
63
70
|
readonly log: boolean;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const SKILL_BACKEND_ENV_NAMES: readonly ["CREWX_APP_INSTANCE_ID", "CREWX_THREAD_ID"];
|
|
2
|
+
export type SkillBackendEnvName = (typeof SKILL_BACKEND_ENV_NAMES)[number];
|
|
3
|
+
export declare function isSkillBackendEnv(value: unknown): value is readonly SkillBackendEnvName[];
|
package/dist/app/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { AppError, CrewXApp, Tool, generateManifest, getToolDeclarations, } from './app.js';
|
|
2
|
-
export type { AppDefinition, AppErrorContext, AppErrorMapping, AppRuntimeOptions, CrewXAppConstructor, DeepReadonly, JsonObject, JsonSchema, ToolDeclaration, ToolOptions, ToolResult, } from './app.js';
|
|
2
|
+
export type { AppDefinition, AppErrorContext, AppErrorMapping, AppErrorOptions, AppFailureOutcome, AppRuntimeOptions, CrewXAppConstructor, DeepReadonly, JsonObject, JsonSchema, ToolDeclaration, ToolOptions, ToolResult, } from './app.js';
|
|
3
|
+
export { SKILL_BACKEND_ENV_NAMES, isSkillBackendEnv } from './backend-env.js';
|
|
4
|
+
export type { SkillBackendEnvName } from './backend-env.js';
|
|
3
5
|
export { executeAppRequest, runSkillApp } from './runtime.js';
|
|
4
|
-
export type { RunSkillAppOptions } from './runtime.js';
|
|
6
|
+
export type { AppFailureInfo, RunSkillAppOptions } from './runtime.js';
|
|
5
7
|
export { runAppEntry } from './entry.js';
|
|
6
8
|
export type { AppEntryOptions } from './entry.js';
|
package/dist/app/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
'use strict';var fs=require('fs'),util=require('util'),console$1=require('console'),stream=require('stream');var
|
|
2
|
-
`;}catch(s){a("EXECUTION_FAILED",s),o=
|
|
3
|
-
`;}catch(y){a("EXECUTION_FAILED",y),
|
|
4
|
-
`;}}r.write(
|
|
5
|
-
`);try{return await t()}finally{for(let n of e)console[n]=r.get(n);}}function
|
|
6
|
-
`),o=true);}function
|
|
7
|
-
`),
|
|
8
|
-
`);}}function
|
|
9
|
-
`);}function
|
|
1
|
+
'use strict';var fs=require('fs'),util=require('util'),console$1=require('console'),stream=require('stream');var D=Symbol;D.metadata===void 0&&Object.defineProperty(Symbol,"metadata",{configurable:false,value:Symbol.for("Symbol.metadata")});var L=D.metadata,S=Symbol.for("crewx.app.tool-metadata"),g=class extends Error{code;detail;outcome;constructor(e,r=null,n){super(e),this.name="AppError",this.code=e,this.detail=r,this.outcome=C(n?.outcome);}};function C(t){return t==="rejected"?"rejected":"failed"}var R=class{static devtools=process.env.CREWX_APP_DEV==="1"?Object.freeze({log:true}):void 0;currentState;stateWasSet=false;workspaceRoot;constructor(e={workspaceRoot:process.cwd()}){this.currentState=e.state??{},this.workspaceRoot=e.workspaceRoot;}get state(){return this.currentState}get didSetState(){return this.stateWasSet}setState(e){this.currentState=e,this.stateWasSet=true;}emptyState(){return {}}validate(e,r,n){}mapError(e){return {code:"EXECUTION_FAILED",detail:null}}errorState(e,r,n){return {...A(n.state)?n.state:{},error:{code:e,detail:r}}}};function X(t){return function(e,r){if(r.static||r.private||r.kind!=="method")throw new TypeError("@Tool can decorate public instance methods only");let n=r.metadata;if(!n)throw new TypeError("standard decorator metadata is unavailable");let i=Object.hasOwn(n,S)?n[S]:[];if(i.some(a=>a.methodName===String(r.name)))throw new TypeError(`@Tool is declared more than once for ${String(r.name)}`);n[S]=[...i,{methodName:String(r.name),options:Object.freeze({...t})}];}}function I(t){let e=t[L],r=e&&Object.hasOwn(e,S)?e[S]:[],n=new Map(r.map(a=>[a.methodName,a])),i=Object.getOwnPropertyNames(t.prototype).map(a=>n.get(a)).filter(a=>a!==void 0);if(i.length!==r.length)throw new TypeError("a @Tool method is missing from the App prototype");return i}function U(t,e){if(e.length===0)throw new TypeError("backendCommand must name the skill command");let r=t.definition,n=I(t),i=new Set,a=n.map(({options:o})=>{if(i.has(o.name))throw new TypeError(`duplicate @Tool name: ${o.name}`);return i.add(o.name),{actionId:o.name,...o.dataInputs===void 0?{}:{dataInputs:[...o.dataInputs]},confirmation:o.confirmation??"none",capability:o.capability??"app.read",mutation:o.mutation??true,inputSchema:o.inputSchema,resultProjection:o.resultProjection??{allow:[...r.stateProjection.allow]},backend:{type:"skill",command:[...e]},_meta:{description:o.description}}});return {...r,actions:a}}function A(t){if(t===null||typeof t!="object"||Array.isArray(t))return false;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}var N=["CREWX_APP_INSTANCE_ID","CREWX_THREAD_ID"];function M(t){if(!Array.isArray(t)||t.length===0)return false;let e=new Set;for(let r of t){if(!N.some(n=>n===r)||e.has(r))return false;e.add(r);}return true}var $=1,K=64*1024;function B(t,e,r=process.env.CREWX_WORKSPACE_ROOT??process.cwd()){return P(t,e,r)}async function P(t,e,r,n,i=true){let a=A(e)?e:void 0,o=a?.input,l=a?.state,s=new t({state:A(l)?l:{},workspaceRoot:r}),y=A(o)?o:{},m=A(l)?l:s.emptyState();try{if(!a||Object.keys(a).length!==4||!["schemaVersion","actionId","input","state"].every(p=>Object.hasOwn(a,p))||a.schemaVersion!==$||typeof a.actionId!="string"||!A(o)||!A(l))throw new g("INPUT_INVALID");y=o,m=l,s=new t({state:m,workspaceRoot:r}),await s.validate(a.actionId,y,m);let c=I(t).find(({options:p})=>p.name===a.actionId);if(!c)throw new g("INPUT_INVALID");let u=s[c.methodName];if(typeof u!="function")throw new g("EXECUTION_FAILED");let f=()=>u.call(s,y),d=i?await H(f):await f();if(d!==void 0&&!A(d))throw new g("EXECUTION_FAILED");return {...s.didSetState?{state:s.state}:{},...d===void 0?{}:{result:d}}}catch(c){let u,f=c,d=c instanceof g?c:void 0;if(d)u={code:d.code,detail:d.detail,outcome:d.outcome};else try{u=s.mapError(c);}catch(k){u={code:"EXECUTION_FAILED",detail:null},f=k;}let p=Z(u?.code),E=p?u.code:"EXECUTION_FAILED",O=typeof u?.detail=="string"?u.detail:null,w=p?C(u.outcome):"failed",h;try{h=s.errorState(E,O,{input:y,state:m});}catch(k){f=new AggregateError([f,k],"App error handling failed"),h=s.emptyState();}return n?.(E,f,{outcome:w,detail:O,expected:d!==void 0&&f===d}),{outcome:w,errorCode:E,state:A(h)?h:s.emptyState()}}}async function V(t,e={}){let r=e.output??process.stdout,n;if(e.preloadedInput!==void 0)n=e.preloadedInput.value;else try{n=JSON.parse(q(e.inputFd??0,K));}catch{n=void 0;}let i=false,a=(s,y,m)=>{i=true,e.onFailure?.(s,y,m);},o;try{o=await P(t,n,process.env.CREWX_WORKSPACE_ROOT??process.cwd(),a,e.consoleManaged!==!0);}catch(s){a("EXECUTION_FAILED",s),o=F(e.emptyState);}Y(o)&&!i&&a(o.errorCode,void 0,{outcome:o.outcome,detail:null,expected:false});let l;try{o=(e.sanitize??v)(o),l=`${JSON.stringify(o)}
|
|
2
|
+
`;}catch(s){a("EXECUTION_FAILED",s),o=F(e.emptyState);try{l=`${JSON.stringify((e.sanitize??v)(o))}
|
|
3
|
+
`;}catch(y){a("EXECUTION_FAILED",y),l=`${JSON.stringify(o)}
|
|
4
|
+
`;}}r.write(l);}function q(t,e){let r=new TextDecoder,n="",i=0;for(;;){let a=new Uint8Array(8192),o=fs.readSync(t,a,0,a.length,null);if(o===0)break;if(i+=o,i>e)throw new g("INPUT_INVALID");n+=r.decode(a.subarray(0,o),{stream:true});}return n+r.decode()}async function H(t){let e=["log","info","debug"],r=new Map;for(let n of e)r.set(n,console[n]),console[n]=(...i)=>process.stderr.write(`${util.format(...i)}
|
|
5
|
+
`);try{return await t()}finally{for(let n of e)console[n]=r.get(n);}}function F(t={}){return {outcome:"failed",errorCode:"EXECUTION_FAILED",state:{...t,error:{code:"EXECUTION_FAILED",detail:null}}}}function Y(t){return (t.outcome==="failed"||t.outcome==="rejected")&&typeof t.errorCode=="string"}function Z(t){return typeof t=="string"&&/^[A-Z][A-Z0-9_]{0,127}$/u.test(t)}function v(t){return t}var te=64*1024,j={depth:null,maxArrayLength:null,maxStringLength:null},_=class extends stream.Writable{#e="buffer";#t=[];_write(e,r,n){if(this.#e==="buffer"){this.#t.push(typeof e=="string"?e:Uint8Array.from(e)),n();return}if(this.#e==="discard"){n();return}process.stderr.write(e,n);}flushToStderr(){this.#e="stderr";for(let e of this.#t)process.stderr.write(e);this.#t=[];}discard(){this.#e="discard",this.#t=[];}};async function ne(t,e={}){let r=process.stdout,n=r.write.bind(r),i=new _,a=new console$1.Console({stdout:i,stderr:i,inspectOptions:{...j}});globalThis.console=a;let o=false,l="-",s="-",y,m=false,c,u;try{let p=re(e.inputFd??0);l=oe(p.value),s=T(process.env.CREWX_APP_REQUEST_ID),y=new Date().toISOString();try{c=await t();}catch(w){m=!0,u=w;}let E=c?.default;if(!m&&E?.devtools?.log===!0?(Object.assign(util.inspect.defaultOptions,j),f(y),i.flushToStderr()):i.discard(),m){d("EXECUTION_FAILED",u),x(n,e,d);return}try{if(typeof c?.runSkillApp!="function")throw new TypeError("App module does not export runSkillApp");let w={sanitize:e.sanitize,emptyState:e.emptyState,preloadedInput:{value:p.value},onFailure:d,consoleManaged:!0,output:{write:n}};await c.runSkillApp(E,w);}catch(w){d("EXECUTION_FAILED",w),x(n,e,d);}}catch(p){d("EXECUTION_FAILED",p),x(n,e,d);}finally{process.exitCode=0;}function f(p){o||(process.stderr.write(`[crewx-app] ${p??new Date().toISOString()} ${T(l)} req=${s}
|
|
6
|
+
`),o=true);}function d(p,E,O){f();let w=O?.expected===true&&O.detail?` ${T(O.detail)}`:"";process.stderr.write(`[crewx-app] ${O?.outcome??"failed"} ${T(p)}${w}
|
|
7
|
+
`),E!==void 0&&O?.expected!==true&&process.stderr.write(`${util.inspect(E,j)}
|
|
8
|
+
`);}}function re(t){try{let e=[],r=0;for(;;){let n=new Uint8Array(8192),i=fs.readSync(t,n,0,n.length,null);if(i===0)break;if(r+=i,r>te)return {value:void 0};e.push(n.subarray(0,i));}return {value:JSON.parse(Buffer.concat(e,r).toString("utf8"))}}catch{return {value:void 0}}}function oe(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)&&typeof t.actionId=="string"?t.actionId:"-"}function T(t){return typeof t!="string"||t.length===0?"-":t.replace(/[\u0000-\u001f\u007f\u2028\u2029]/gu,"_")}function x(t,e,r){let n={code:"EXECUTION_FAILED",detail:null},a={outcome:"failed",errorCode:"EXECUTION_FAILED",state:e.emptyState!==null&&typeof e.emptyState=="object"&&!Array.isArray(e.emptyState)?{...e.emptyState,error:n}:{error:n}},o=a;try{o=(e.sanitize??ae)(a);}catch(l){r("EXECUTION_FAILED",l);}t(`${JSON.stringify(o)}
|
|
9
|
+
`);}function ae(t){return t}exports.AppError=g;exports.CrewXApp=R;exports.SKILL_BACKEND_ENV_NAMES=N;exports.Tool=X;exports.executeAppRequest=B;exports.generateManifest=U;exports.getToolDeclarations=I;exports.isSkillBackendEnv=M;exports.runAppEntry=ne;exports.runSkillApp=V;
|
package/dist/app/runtime.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import { type CrewXAppConstructor, type JsonObject } from './app.js';
|
|
1
|
+
import { type AppFailureOutcome, type CrewXAppConstructor, type JsonObject } from './app.js';
|
|
2
|
+
export interface AppFailureInfo {
|
|
3
|
+
readonly outcome: AppFailureOutcome;
|
|
4
|
+
readonly detail: string | null;
|
|
5
|
+
readonly expected: boolean;
|
|
6
|
+
}
|
|
2
7
|
export interface RunSkillAppOptions {
|
|
3
8
|
readonly sanitize?: (value: unknown) => unknown;
|
|
4
9
|
readonly inputFd?: number;
|
|
@@ -7,7 +12,7 @@ export interface RunSkillAppOptions {
|
|
|
7
12
|
readonly preloadedInput?: {
|
|
8
13
|
readonly value: unknown;
|
|
9
14
|
};
|
|
10
|
-
readonly onFailure?: (errorCode: string, error?: unknown) => void;
|
|
15
|
+
readonly onFailure?: (errorCode: string, error?: unknown, info?: AppFailureInfo) => void;
|
|
11
16
|
readonly consoleManaged?: boolean;
|
|
12
17
|
}
|
|
13
18
|
export declare function executeAppRequest(appClass: CrewXAppConstructor, rawRequest: unknown, workspaceRoot?: string): Promise<JsonObject>;
|
|
@@ -78,6 +78,7 @@ export interface FetchHistoryOptions {
|
|
|
78
78
|
maxContextLength?: number;
|
|
79
79
|
includeHighlights?: boolean;
|
|
80
80
|
currentTraceId?: string;
|
|
81
|
+
agentId?: string;
|
|
81
82
|
}
|
|
82
83
|
export interface IConversationHistoryProvider {
|
|
83
84
|
ensureThread(threadId: string, platform: Platform, workspaceId?: string, creator?: ThreadCreationOptions): Promise<{
|
package/dist/esm/app/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {readSync}from'fs';import {format,inspect}from'util';import {Console}from'console';import {Writable}from'stream';var
|
|
2
|
-
`;}catch(s){a("EXECUTION_FAILED",s),o=
|
|
3
|
-
`;}catch(y){a("EXECUTION_FAILED",y),
|
|
4
|
-
`;}}r.write(
|
|
5
|
-
`);try{return await t()}finally{for(let n of e)console[n]=r.get(n);}}function
|
|
6
|
-
`),o=true);}function
|
|
7
|
-
`),
|
|
8
|
-
`);}}function
|
|
9
|
-
`);}function
|
|
1
|
+
import {readSync}from'fs';import {format,inspect}from'util';import {Console}from'console';import {Writable}from'stream';var N=Symbol;N.metadata===void 0&&Object.defineProperty(Symbol,"metadata",{configurable:false,value:Symbol.for("Symbol.metadata")});var X=N.metadata,S=Symbol.for("crewx.app.tool-metadata"),g=class extends Error{code;detail;outcome;constructor(e,r=null,n){super(e),this.name="AppError",this.code=e,this.detail=r,this.outcome=j(n?.outcome);}};function j(t){return t==="rejected"?"rejected":"failed"}var C=class{static devtools=process.env.CREWX_APP_DEV==="1"?Object.freeze({log:true}):void 0;currentState;stateWasSet=false;workspaceRoot;constructor(e={workspaceRoot:process.cwd()}){this.currentState=e.state??{},this.workspaceRoot=e.workspaceRoot;}get state(){return this.currentState}get didSetState(){return this.stateWasSet}setState(e){this.currentState=e,this.stateWasSet=true;}emptyState(){return {}}validate(e,r,n){}mapError(e){return {code:"EXECUTION_FAILED",detail:null}}errorState(e,r,n){return {...A(n.state)?n.state:{},error:{code:e,detail:r}}}};function U(t){return function(e,r){if(r.static||r.private||r.kind!=="method")throw new TypeError("@Tool can decorate public instance methods only");let n=r.metadata;if(!n)throw new TypeError("standard decorator metadata is unavailable");let i=Object.hasOwn(n,S)?n[S]:[];if(i.some(a=>a.methodName===String(r.name)))throw new TypeError(`@Tool is declared more than once for ${String(r.name)}`);n[S]=[...i,{methodName:String(r.name),options:Object.freeze({...t})}];}}function T(t){let e=t[X],r=e&&Object.hasOwn(e,S)?e[S]:[],n=new Map(r.map(a=>[a.methodName,a])),i=Object.getOwnPropertyNames(t.prototype).map(a=>n.get(a)).filter(a=>a!==void 0);if(i.length!==r.length)throw new TypeError("a @Tool method is missing from the App prototype");return i}function M(t,e){if(e.length===0)throw new TypeError("backendCommand must name the skill command");let r=t.definition,n=T(t),i=new Set,a=n.map(({options:o})=>{if(i.has(o.name))throw new TypeError(`duplicate @Tool name: ${o.name}`);return i.add(o.name),{actionId:o.name,...o.dataInputs===void 0?{}:{dataInputs:[...o.dataInputs]},confirmation:o.confirmation??"none",capability:o.capability??"app.read",mutation:o.mutation??true,inputSchema:o.inputSchema,resultProjection:o.resultProjection??{allow:[...r.stateProjection.allow]},backend:{type:"skill",command:[...e]},_meta:{description:o.description}}});return {...r,actions:a}}function A(t){if(t===null||typeof t!="object"||Array.isArray(t))return false;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}var F=["CREWX_APP_INSTANCE_ID","CREWX_THREAD_ID"];function z(t){if(!Array.isArray(t)||t.length===0)return false;let e=new Set;for(let r of t){if(!F.some(n=>n===r)||e.has(r))return false;e.add(r);}return true}var K=1,B=64*1024;function V(t,e,r=process.env.CREWX_WORKSPACE_ROOT??process.cwd()){return J(t,e,r)}async function J(t,e,r,n,i=true){let a=A(e)?e:void 0,o=a?.input,l=a?.state,s=new t({state:A(l)?l:{},workspaceRoot:r}),y=A(o)?o:{},m=A(l)?l:s.emptyState();try{if(!a||Object.keys(a).length!==4||!["schemaVersion","actionId","input","state"].every(p=>Object.hasOwn(a,p))||a.schemaVersion!==K||typeof a.actionId!="string"||!A(o)||!A(l))throw new g("INPUT_INVALID");y=o,m=l,s=new t({state:m,workspaceRoot:r}),await s.validate(a.actionId,y,m);let c=T(t).find(({options:p})=>p.name===a.actionId);if(!c)throw new g("INPUT_INVALID");let u=s[c.methodName];if(typeof u!="function")throw new g("EXECUTION_FAILED");let f=()=>u.call(s,y),d=i?await Y(f):await f();if(d!==void 0&&!A(d))throw new g("EXECUTION_FAILED");return {...s.didSetState?{state:s.state}:{},...d===void 0?{}:{result:d}}}catch(c){let u,f=c,d=c instanceof g?c:void 0;if(d)u={code:d.code,detail:d.detail,outcome:d.outcome};else try{u=s.mapError(c);}catch(R){u={code:"EXECUTION_FAILED",detail:null},f=R;}let p=Q(u?.code),E=p?u.code:"EXECUTION_FAILED",O=typeof u?.detail=="string"?u.detail:null,w=p?j(u.outcome):"failed",h;try{h=s.errorState(E,O,{input:y,state:m});}catch(R){f=new AggregateError([f,R],"App error handling failed"),h=s.emptyState();}return n?.(E,f,{outcome:w,detail:O,expected:d!==void 0&&f===d}),{outcome:w,errorCode:E,state:A(h)?h:s.emptyState()}}}async function q(t,e={}){let r=e.output??process.stdout,n;if(e.preloadedInput!==void 0)n=e.preloadedInput.value;else try{n=JSON.parse(H(e.inputFd??0,B));}catch{n=void 0;}let i=false,a=(s,y,m)=>{i=true,e.onFailure?.(s,y,m);},o;try{o=await J(t,n,process.env.CREWX_WORKSPACE_ROOT??process.cwd(),a,e.consoleManaged!==!0);}catch(s){a("EXECUTION_FAILED",s),o=v(e.emptyState);}Z(o)&&!i&&a(o.errorCode,void 0,{outcome:o.outcome,detail:null,expected:false});let l;try{o=(e.sanitize??P)(o),l=`${JSON.stringify(o)}
|
|
2
|
+
`;}catch(s){a("EXECUTION_FAILED",s),o=v(e.emptyState);try{l=`${JSON.stringify((e.sanitize??P)(o))}
|
|
3
|
+
`;}catch(y){a("EXECUTION_FAILED",y),l=`${JSON.stringify(o)}
|
|
4
|
+
`;}}r.write(l);}function H(t,e){let r=new TextDecoder,n="",i=0;for(;;){let a=new Uint8Array(8192),o=readSync(t,a,0,a.length,null);if(o===0)break;if(i+=o,i>e)throw new g("INPUT_INVALID");n+=r.decode(a.subarray(0,o),{stream:true});}return n+r.decode()}async function Y(t){let e=["log","info","debug"],r=new Map;for(let n of e)r.set(n,console[n]),console[n]=(...i)=>process.stderr.write(`${format(...i)}
|
|
5
|
+
`);try{return await t()}finally{for(let n of e)console[n]=r.get(n);}}function v(t={}){return {outcome:"failed",errorCode:"EXECUTION_FAILED",state:{...t,error:{code:"EXECUTION_FAILED",detail:null}}}}function Z(t){return (t.outcome==="failed"||t.outcome==="rejected")&&typeof t.errorCode=="string"}function Q(t){return typeof t=="string"&&/^[A-Z][A-Z0-9_]{0,127}$/u.test(t)}function P(t){return t}var ne=64*1024,x={depth:null,maxArrayLength:null,maxStringLength:null},D=class extends Writable{#e="buffer";#t=[];_write(e,r,n){if(this.#e==="buffer"){this.#t.push(typeof e=="string"?e:Uint8Array.from(e)),n();return}if(this.#e==="discard"){n();return}process.stderr.write(e,n);}flushToStderr(){this.#e="stderr";for(let e of this.#t)process.stderr.write(e);this.#t=[];}discard(){this.#e="discard",this.#t=[];}};async function re(t,e={}){let r=process.stdout,n=r.write.bind(r),i=new D,a=new Console({stdout:i,stderr:i,inspectOptions:{...x}});globalThis.console=a;let o=false,l="-",s="-",y,m=false,c,u;try{let p=oe(e.inputFd??0);l=ae(p.value),s=k(process.env.CREWX_APP_REQUEST_ID),y=new Date().toISOString();try{c=await t();}catch(w){m=!0,u=w;}let E=c?.default;if(!m&&E?.devtools?.log===!0?(Object.assign(inspect.defaultOptions,x),f(y),i.flushToStderr()):i.discard(),m){d("EXECUTION_FAILED",u),_(n,e,d);return}try{if(typeof c?.runSkillApp!="function")throw new TypeError("App module does not export runSkillApp");let w={sanitize:e.sanitize,emptyState:e.emptyState,preloadedInput:{value:p.value},onFailure:d,consoleManaged:!0,output:{write:n}};await c.runSkillApp(E,w);}catch(w){d("EXECUTION_FAILED",w),_(n,e,d);}}catch(p){d("EXECUTION_FAILED",p),_(n,e,d);}finally{process.exitCode=0;}function f(p){o||(process.stderr.write(`[crewx-app] ${p??new Date().toISOString()} ${k(l)} req=${s}
|
|
6
|
+
`),o=true);}function d(p,E,O){f();let w=O?.expected===true&&O.detail?` ${k(O.detail)}`:"";process.stderr.write(`[crewx-app] ${O?.outcome??"failed"} ${k(p)}${w}
|
|
7
|
+
`),E!==void 0&&O?.expected!==true&&process.stderr.write(`${inspect(E,x)}
|
|
8
|
+
`);}}function oe(t){try{let e=[],r=0;for(;;){let n=new Uint8Array(8192),i=readSync(t,n,0,n.length,null);if(i===0)break;if(r+=i,r>ne)return {value:void 0};e.push(n.subarray(0,i));}return {value:JSON.parse(Buffer.concat(e,r).toString("utf8"))}}catch{return {value:void 0}}}function ae(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)&&typeof t.actionId=="string"?t.actionId:"-"}function k(t){return typeof t!="string"||t.length===0?"-":t.replace(/[\u0000-\u001f\u007f\u2028\u2029]/gu,"_")}function _(t,e,r){let n={code:"EXECUTION_FAILED",detail:null},a={outcome:"failed",errorCode:"EXECUTION_FAILED",state:e.emptyState!==null&&typeof e.emptyState=="object"&&!Array.isArray(e.emptyState)?{...e.emptyState,error:n}:{error:n}},o=a;try{o=(e.sanitize??ie)(a);}catch(l){r("EXECUTION_FAILED",l);}t(`${JSON.stringify(o)}
|
|
9
|
+
`);}function ie(t){return t}export{g as AppError,C as CrewXApp,F as SKILL_BACKEND_ENV_NAMES,U as Tool,V as executeAppRequest,M as generateManifest,T as getToolDeclarations,z as isSkillBackendEnv,re as runAppEntry,q as runSkillApp};
|