@crewx/sdk 0.9.0-rc.92 → 0.9.0-rc.93

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/esm/index.js CHANGED
@@ -360,8 +360,8 @@ ${r.join(`
360
360
  LIMIT ${Nc+1}
361
361
  `),d=a.length>Nc;return {edges:a.slice(0,Nc).map(l=>({callerAgentId:l.caller_agent_id??null,agentId:l.agent_id,taskCount:l.task_count,totalTokens:l.input_tokens+l.output_tokens,outputTokens:l.output_tokens})),truncated:d}}catch(i){throw new T("DB_ERROR","Failed to get delegation matrix",i)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(g.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(inArray(g.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(inArray(g.status,e.statuses)),e.from&&r.push(gte(g.started_at,e.from)),e.to&&r.push(lt(g.started_at,e.to));let o=r.length>0?and(...r):void 0,i=(e.order??"DESC")==="ASC"?asc(g.started_at):desc(g.started_at),s={id:g.id,agent_id:g.agent_id,status:g.status,prompt:g.prompt,started_at:g.started_at,completed_at:g.completed_at,thread_id:g.thread_id};return e.limit?n.db.select(s).from(g).where(o).orderBy(i).limit(e.limit).all():n.db.select(s).from(g).where(o).orderBy(i).all()}catch(r){throw new T("DB_ERROR","Failed to find task evidence",r)}finally{n.close();}}findThreadChains(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,i=[isNotNull(g.thread_id),isNull(g.parent_task_id),isNull(g.caller_agent_id),or$1(isNull(g.platform),ne(g.platform,"workflow")),or$1(isNull(g.metadata),and(notLike(g.metadata,'%"kind":"workflow_card"%'),notLike(g.metadata,'%"kind":"workflow_ui_instance"%'))),or$1(isNull(g.metadata),notLike(g.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&i.push(eq(g.workspace_id,e.workspaceId)),e.from&&i.push(gte(g.started_at,e.from)),e.to&&i.push(lt(g.started_at,e.to));let s=n.db.select({id:g.id,agent_id:g.agent_id,status:g.status,prompt:g.prompt,started_at:g.started_at,completed_at:g.completed_at,thread_id:g.thread_id}).from(g).where(and(...i)).orderBy(asc(g.started_at),asc(g.id)).all(),a=new Map;for(let c of s){if(!c.thread_id)continue;let l={id:c.id,agentId:c.agent_id,status:c.status,prompt:c.prompt,startedAt:c.started_at,completedAt:c.completed_at},u=a.get(c.thread_id);u?u.push(l):a.set(c.thread_id,[l]);}let d=[];for(let[c,l]of a){let u=l.filter(f=>f.agentId===e.targetAgentId).length;u<2||d.push({threadId:c,targetAgentTurnCount:u,turns:l});}return d.sort((c,l)=>{let u=c.turns[c.turns.length-1].startedAt,f=l.turns[l.turns.length-1].startedAt;return u<f?1:u>f?-1:0}),d.slice(0,r).map(c=>({threadId:c.threadId,targetAgentTurnCount:c.targetAgentTurnCount,turns:c.turns.slice(-o)}))}catch(r){throw new T("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}};var nv=new Set(["Read","Grep","Find","Glob"]),rv=["git status","git log","git branch","git diff --stat","git show","git remote","git rev-parse","git ls-files","pwd","ls ","echo ","cat ","head ","tail ","npx skill tsserver find","npx skill tsserver refs","npx skill tsserver type","crewx memory index","crewx memory find","crewx memory get","crewx doc toc","crewx doc section","crewx doc status","crewx search","crewx agent ls","crewx agent list"],ov=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/],iv=8e3,sv=100,av=3,dv=Number.MAX_SAFE_INTEGER;function Ur(){return typeof performance<"u"?performance.now():Date.now()}function cv(t){let e=t.toLowerCase();return e==="bash"||e==="terminal"?"Bash":e==="read"||e==="view"?"Read":e==="edit"||e==="apply_patch"?"Edit":e==="write"?"Write":e==="grep"||e==="rg"?"Grep":e==="glob"||e==="find"?"Find":t}function lv(t,e){if(nv.has(t))return true;if(t!=="Bash"||!e)return false;let n=e.split(`
362
362
  `)[0].trimStart();return ov.some(r=>r.test(n))?false:rv.some(r=>n.startsWith(r))}function po(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function uv(t,e,n){if(t!=="Read"||!e)return "ok";let o=e.split(`
363
- `).find(i=>i.trim()&&!i.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let i=Kg.statSync(o);if(n){let s=Date.parse(n);if(!Number.isNaN(s)&&i.mtimeMs>s)return "stale"}return "ok"}catch{return "unknown"}}function pv(t){let e=new Set;for(let n of t)try{let r=JSON.parse(n);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":null}function gv(t){if(!Array.isArray(t))return [];let e=t,n=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=pv(n),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...Ft(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...ei("",a.message,r));let i=new Map,s=[];for(let a of o)if(a.type==="tool_use"){let d={tool:cv(a.toolName??""),input:a.toolInput??null,result:null,isError:false},c=a.toolUseId;if(c){if(i.has(c)){i.get(c).input=d.input;continue}i.set(c,d);}s.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&i.has(a.toolUseId)){let d=i.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=s.length-1;d>=0;d--)if(s[d].result===null){s[d].isError=a.isError===true,s[d].result=a.resultPreview??null;break}}return s}function fv(t,e){let n=gv(t),r=[];for(let o of n){let i=o.tool==="Bash"?o.input?.split(`
364
- `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,s=lv(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:i,result:o.result,status:uv(o.tool,o.input,e),reusable:s});}return r}function mv(t,e){try{return t.readLogs(e)?.entries??[]}catch{return []}}function hv(t){let e=t.entry,n=`tool="${po(e.tool)}"`,r=e.cmd?` cmd="${po(e.cmd)}"`:"",o="";if(e.reusable&&(o=e.status==="stale"?' reused="stale"':' reused="ok"'),e.reusable&&e.status==="stale")return [` <entry ${n}${r}${o}>\u26A0\uFE0F changed since \u2014 re-read</entry>`];if(e.result){let i=ra(e.result),s=Math.min(t.bodyCharsShown??i.length,i.length);return [` <entry ${n}${r}${o}>`,i.length>s?po(i.slice(0,s))+` \u2026 [truncated, ${s}/${i.length} chars shown]`:po(i)," </entry>"]}return [` <entry ${n}${r}${o} />`]}function Xg(t){let e=["<activity_log>"],{entries:n,omissions:r,tokenCap:o,totalEntries:i}=t,s=r.reduce((a,d)=>a+d.count,0);if(n.length===0&&s===0)e.push(" <!-- no activity found in previous tasks -->");else {if(e.push(" <!-- tool activity from previous tasks -->"),r.length>0){e.push(` <!-- activity_log_budget token_cap="${o}" included_entries="${n.length}" omitted_entries="${s}" total_entries="${i}" -->`);for(let a of r)e.push(` <!-- omitted_entries reason="${po(a.reason)}" count="${a.count}": ${po(a.message)} -->`);}for(let a of n)e.push(...hv(a));}return e.push("</activity_log>"),e}function yv(t){return typeof t!="number"||!Number.isFinite(t)||t<0?iv:Math.floor(t)}function _v(t,e,n){let r=Math.floor(e/sv),o=Math.pow(2,t+r);return !Number.isFinite(o)||o<=0?0:Math.floor(n/o)}function wv(t,e){let n=Math.pow(2,e+av);return !Number.isFinite(n)||n<=0?0:Math.floor(t/n)}function Fc(t,e,n,r){let o=t.result?.length??null,i=o===null?null:Math.min(o,Math.max(0,n));return {entry:t,newestIndex:e,bodyLimitChars:n,bodyCharsShown:o===null?null:Math.max(0,Math.min(r??i??0,i??0)),originalBodyChars:o}}function Yg(t,e){let n=[];return t>0&&n.push({reason:"token_cap",count:t,message:"older entries omitted after the per-task token cap was reached"}),e>0&&n.push({reason:"repository_limit",count:e,message:"older entries omitted by the explicit repository safety limit before budgeting"}),n}function Qg(t){let e=Yg(t.omittedByTokenCap,t.repositoryLimitOmitted);return Xg({entries:t.entries,omissions:e,tokenCap:t.tokenCap,totalEntries:t.totalEntries}).join(`
363
+ `).find(i=>i.trim()&&!i.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let i=Kg.statSync(o);if(n){let s=Date.parse(n);if(!Number.isNaN(s)&&i.mtimeMs>s)return "stale"}return "ok"}catch{return "unknown"}}function pv(t){let e=new Set;for(let n of t)try{let r=JSON.parse(n);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":e.has("tool_call")||e.has("tool_call_update")?"grok":null}function gv(t){if(!Array.isArray(t))return [];let e=t,n=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=pv(n),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...Ft(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...ei("",a.message,r));let i=new Map,s=[];for(let a of o)if(a.type==="tool_use"){let d={tool:cv(a.toolName??""),input:a.toolInput??null,result:null,isError:false},c=a.toolUseId;if(c){if(i.has(c)){i.get(c).input=d.input;continue}i.set(c,d);}s.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&i.has(a.toolUseId)){let d=i.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=s.length-1;d>=0;d--)if(s[d].result===null){s[d].isError=a.isError===true,s[d].result=a.resultPreview??null;break}}return s}function fv(t,e){let n=gv(t),r=[];for(let o of n){let i=o.tool==="Bash"?o.input?.split(`
364
+ `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,s=lv(o.tool,o.input)&&!o.isError&&o.result!==null;r.push({tool:o.tool,cmd:i,result:o.result,status:uv(o.tool,o.input,e),reusable:s});}return r}function mv(t,e){try{return t.readLogs(e)?.entries??[]}catch{return []}}function hv(t){let e=t.entry,n=`tool="${po(e.tool)}"`,r=e.cmd?` cmd="${po(e.cmd)}"`:"",o="";if(e.reusable&&(o=e.status==="stale"?' reused="stale"':' reused="ok"'),e.reusable&&e.status==="stale")return [` <entry ${n}${r}${o}>\u26A0\uFE0F changed since \u2014 re-read</entry>`];if(e.result){let i=ra(e.result),s=Math.min(t.bodyCharsShown??i.length,i.length);return [` <entry ${n}${r}${o}>`,i.length>s?po(i.slice(0,s))+` \u2026 [truncated, ${s}/${i.length} chars shown]`:po(i)," </entry>"]}return [` <entry ${n}${r}${o} />`]}function Xg(t){let e=["<activity_log>"],{entries:n,omissions:r,tokenCap:o,totalEntries:i}=t,s=r.reduce((a,d)=>a+d.count,0);if(n.length===0&&s===0)e.push(" <!-- no activity found in previous tasks -->");else {if(e.push(" <!-- tool activity from previous tasks -->"),r.length>0){e.push(` <!-- activity_log_budget token_cap="${o}" included_entries="${n.length}" omitted_entries="${s}" total_entries="${i}" -->`);for(let a of r)e.push(` <!-- omitted_entries reason="${po(a.reason)}" count="${a.count}": ${po(a.message)} -->`);}for(let a of n)e.push(...hv(a));}return e.push("</activity_log>"),e}function yv(t){return typeof t!="number"||!Number.isFinite(t)||t<0?iv:Math.floor(t)}function _v(t,e,n){let r=Math.floor(e/sv),o=Math.pow(2,t+r);return !Number.isFinite(o)||o<=0?0:Math.floor(n/o)}function wv(t,e){let n=Math.pow(2,e+av);return !Number.isFinite(n)||n<=0?0:Math.floor(t/n)}function Fc(t,e,n,r){let o=t.result?.length??null,i=o===null?null:Math.min(o,Math.max(0,n));return {entry:t,newestIndex:e,bodyLimitChars:n,bodyCharsShown:o===null?null:Math.max(0,Math.min(r??i??0,i??0)),originalBodyChars:o}}function Yg(t,e){let n=[];return t>0&&n.push({reason:"token_cap",count:t,message:"older entries omitted after the per-task token cap was reached"}),e>0&&n.push({reason:"repository_limit",count:e,message:"older entries omitted by the explicit repository safety limit before budgeting"}),n}function Qg(t){let e=Yg(t.omittedByTokenCap,t.repositoryLimitOmitted);return Xg({entries:t.entries,omissions:e,tokenCap:t.tokenCap,totalEntries:t.totalEntries}).join(`
365
365
  `)}function $c(t,e){let n=t(e);return !Number.isFinite(n)||n<0?0:Math.floor(n)}function Tv(t){let{entry:e,bodyLimitChars:n}=t;if(!e.result)return null;let r=Math.min(e.result.length,Math.max(0,n)),o=E=>{let _=Fc(e,t.newestIndex,n,E),v=[...t.selectedEntries,_],A=Qg({entries:v,tokenCap:t.tokenCap,totalEntries:t.totalEntries,omittedByTokenCap:t.totalEntries-v.length-t.repositoryLimitOmitted,repositoryLimitOmitted:t.repositoryLimitOmitted});return {candidate:_,tokenCount:$c(t.countTokens,A)}},i=E=>{let _=o(E);return _.tokenCount<=t.tokenCap?_:null},s=Fc(e,t.newestIndex,n,r),a=t.fullFragmentTokenCount??o(r).tokenCount;if(a<=t.tokenCap)return s;let d=i(0);if(!d){let E=Math.min(32,r),_=null,v=-1;for(let A=1;A<=E;A++){let I=Math.floor(r*A/E);if(I<=v)continue;let S=i(I);S&&(_=S.candidate,v=I);}return _}let c=d.tokenCount,l=E=>{if(r===0)return c;let _=E/r;return Math.ceil(c+(a-c)*_)},u=0,f=r+1;for(;f-u>1;){let E=Math.floor((u+f)/2);l(E)<=t.tokenCap?u=E:f=E;}let m=i(u);if(m)return m.candidate;let y=0,h=u+1;for(;h-y>1;){let E=Math.floor((y+h)/2);i(E)?y=E:h=E;}return i(y)?.candidate??null}function kv(t){let e=t.repositoryEntryLimit,n=typeof e=="number"&&Number.isFinite(e)&&e>=0&&t.entries.length>e,r=n?t.entries.length-Math.floor(e):0,i=[...n?t.entries.slice(r):t.entries].reverse(),s=[],a=t.entries.length;for(let f=0;f<i.length;f++){let m=i[f],y=_v(t.taskDistance,f,t.baseEntryChars),h=Fc(m,f,y),E=[...s,h],_=a-E.length-r,v=Qg({entries:E,tokenCap:t.tokenCap,totalEntries:a,omittedByTokenCap:_,repositoryLimitOmitted:r}),A=$c(t.countTokens,v);if(A<=t.tokenCap){s.push(h);continue}let I=Tv({selectedEntries:s,entry:m,newestIndex:f,bodyLimitChars:y,tokenCap:t.tokenCap,totalEntries:a,repositoryLimitOmitted:r,countTokens:t.countTokens,fullFragmentTokenCount:A});I&&s.push(I);break}let d=a-s.length-r,c=Yg(d,r),l=Xg({entries:s,omissions:c,tokenCap:t.tokenCap,totalEntries:a}).join(`
366
366
  `),u=$c(t.countTokens,l);return {taskId:t.taskId,taskDistance:t.taskDistance,tokenCap:t.tokenCap,tokenCount:u,includedEntries:s.length,omittedEntries:c.reduce((f,m)=>f+m.count,0),totalEntries:a,omissions:c,entries:s,activityLog:l}}function Bc(t){return {threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,activityLogTokenBudget:t.activityLogTokenBudget,baseEntryChars:t.baseEntryChars,tasks:[],activityLogByTask:new Map}}function vv(t){return !Number.isFinite(t)||t<0?0:Math.floor(t)}function Ev(t){return t.length}function jc(t){let e=yv(t.maxEntryChars),n=vv(t.activityLogTokenBudget),r=Math.max(0,Math.floor(t.lookback));if(!r||!t.threadId||!t.agentId)return Bc({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let o=Ur(),i={calls:0,chars:0},s=new Map,a=_=>{let v=s.get(_);if(v!==void 0)return v;i.calls+=1,i.chars+=_.length;let A=t.countTokens(_);return s.set(_,A),A},d=(_,v)=>{let A=Math.max(0,Ur()-o),I=Math.round(A),S=JSON.stringify(t.threadId);console.info(`[crewx] prompt-preparation activity-log threadId=${S} taskQueryMs=${Math.round(_)} builderMs=${Math.round(v)} countTokensCalls=${i.calls} countTokensChars=${i.chars} elapsedMs=${I}`),A>1e3&&console.warn(`[crewx] prompt-preparation slow threadId=${S} elapsedMs=${I}`);},c,l,u=Ur();try{l=new uo,c=l.findTasksByThread(t.threadId,void 0,{projection:"activity-log"}).filter(_=>!_.parent_task_id&&_.agent_id===t.agentId).sort((_,v)=>v.started_at>_.started_at?1:-1).slice(0,r);}catch{return d(Ur()-u,0),Bc({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e})}let f=Ur()-u;if(!c.length)return d(f,0),Bc({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let m=Ur(),y=[];for(let _ of c){let v=mv(l,_.id);y.push({taskId:_.id,entries:fv(v,_.completed_at)});}let h=[],E=new Map;for(let _=0;_<y.length;_++){let{taskId:v,entries:A}=y[_];if(A.length===0)continue;let I=kv({taskId:v,entries:A,taskDistance:_,baseEntryChars:e,tokenCap:wv(n,_),countTokens:a,repositoryEntryLimit:t.repositoryEntryLimit});h.push(I),E.set(v,I.activityLog);}return d(f,Ur()-m),{threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e,tasks:h,activityLogByTask:E}}function Zg(t){if(t.activityLogTokenBudget!==void 0&&!t.countTokens)throw new Error("countTokens is required when activityLogTokenBudget is supplied");return jc({threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,maxEntryChars:t.maxEntryChars,activityLogTokenBudget:t.activityLogTokenBudget??dv,countTokens:t.countTokens??Ev,repositoryEntryLimit:t.repositoryEntryLimit}).activityLogByTask}p();p();var Rv={agentId:z$1.string().describe("The agent ID to query"),query:z$1.string().describe("The query message to send"),context:z$1.string().optional().describe("Additional context"),thread:z$1.string().optional().describe("Thread ID for conversation continuity")},Av={agentId:z$1.string().describe("The agent ID to execute"),task:z$1.string().describe("The task description to execute"),context:z$1.string().optional().describe("Additional context"),thread:z$1.string().optional().describe("Thread ID for conversation continuity")};function ef(t,e,n){t.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of n){let i=e.agents.get(o);i&&r.push({id:i.id,name:i.name??i.id,description:i.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),t.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",Rv,async({agentId:r,query:o,context:i,thread:s})=>{if(!n.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.query(r,o,{context:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),t.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",Av,async({agentId:r,task:o,context:i,thread:s})=>{if(!n.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.execute(r,o,{context:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}p();function tf(t){return t.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function nf(t,e){return e?await e(t)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Sv(t,e){let n=new McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return ef(n,t,e),n}function qc(t,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let n=new Set(e.agents),r=new Map;return async o=>{let i=tf(o);if(i)return i;let s=await nf(o,e.auth);if(s)return s;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=Sv(t,n),c=new WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:l=>{r.set(l,{transport:c,server:d});},onsessionclosed:l=>{r.delete(l);},enableJsonResponse:true});return await d.connect(c),c.handleRequest(o)}}p();function Gc(t){let e=Te.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function ha(t){let e=Gc(t);return createHash("sha256").update(e).digest("hex")}p();p();function Ii(t){let n=t.renderer!==void 0||t.surfaces!==void 0||t.stateProjection!==void 0||Object.values(t.actions).some(o=>o.resultProjection!==void 0)?{id:t.id,version:t.version,renderer:t.renderer,surfaces:t.surfaces,stateProjection:t.stateProjection,actions:t.actions}:{id:t.id,version:t.version,actions:t.actions},r=Ue(n);return createHash("sha256").update(Pr(r)).digest("hex")}function Wc(t){return `${t.id}\0${t.version}`}function sf(t){if(!/^\d+$/.test(String(t.version))||t.version<1||t.id.length<1||t.id.length>128)throw new P("DEFINITION_UNSUPPORTED","UI definition is invalid");if(!/^[0-9a-f]{64}$/.test(t.hash)||Ii(t)!==t.hash)throw new P("DEFINITION_UNSUPPORTED","UI definition hash is invalid");for(let[e,n]of Object.entries(t.actions)){if(!e||!Array.isArray(n.capabilities)||n.capabilities.some(r=>!Ov(r)))throw new P("DEFINITION_UNSUPPORTED","UI action declaration is invalid");if(n.inputKeys&&(!Array.isArray(n.inputKeys)||n.inputKeys.some(r=>typeof r!="string"||!r)))throw new P("DEFINITION_UNSUPPORTED","UI action input declaration is invalid");n.resultProjection&&of(n.resultProjection);}if(t.renderer!==void 0&&(!t.renderer||t.renderer.length>128))throw new P("DEFINITION_UNSUPPORTED","UI definition renderer is invalid");if(t.surfaces&&(!Array.isArray(t.surfaces)||t.surfaces.some(e=>!e||e.length>64)))throw new P("DEFINITION_UNSUPPORTED","UI definition surfaces are invalid");t.stateProjection&&of(t.stateProjection);}function of(t){if(!Array.isArray(t.allow)||t.allow.some(e=>!/^[A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*$/.test(e)))throw new P("DEFINITION_UNSUPPORTED","UI projection policy is invalid")}function Ov(t){return t.length>0&&t.length<=128&&t!=="*"&&t!=="all"&&!/[/*]/.test(t)}p();function ya(t,e,n){let r=new Set(e),o=n===void 0?void 0:new Set(n);return t.filter(i=>r.has(i)&&(o===void 0||o.has(i)))}p();p();function nr(){if(process.env.CREWX_HOME)try{return Kg.realpathSync(process.env.CREWX_HOME)}catch{return Te.join(vg.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?Te.join(process.env.XDG_CONFIG_HOME,"crewx"):Te.join(vg.homedir(),".crewx")}p();p();var ve=class extends T{reason;constructor(e,n="VALIDATION",r=e,o){super(n,r,o),this.name="CommonCodeRepositoryError",this.reason=e;}},cf="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function $v(){let t=randomBytes(16),e="";for(let n of t)e+=cf[n%cf.length];return e.slice(0,12)}function Ta(){return `c_${$v()}`}function jv(t){return typeof t=="string"&&hi.includes(t)}function qv(t){return typeof t=="string"&&yi.includes(t)}function fo(t){if(!jv(t))throw new ve("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function lf(t){if(!qv(t))throw new ve("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function uf(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new ve("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function mo(t){if(typeof t!="string"||t.trim().length===0)throw new ve("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function wa(t){if(typeof t!="string"||t.trim().length===0)throw new ve("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function rr(t,e){return and(eq(M.code_group,t),or$1(isNull(M.workspace_id),eq(M.workspace_id,e)))}var ka=class extends _e{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!existsSync(n))throw new T("NOT_FOUND","Database not found");e&&mkdirSync(dirname(n),{recursive:true});let r=z(n);if(e)try{ke(r.db,n);}catch(o){throw r.close(),o}return r}listSelectable(e,n){if(fo(e),mo(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(M).where(and(rr(e,n),eq(M.is_archived,0))).orderBy(asc(M.sort_order),asc(M.code)).all()}catch(o){throw new T("DB_ERROR","Failed to list selectable common codes",o)}finally{r.close();}}listForHistory(e,n){if(fo(e),mo(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(M).where(rr(e,n)).orderBy(asc(M.sort_order),asc(M.code)).all()}catch(o){throw new T("DB_ERROR","Failed to list common-code history",o)}finally{r.close();}}reorder(e){let n=e.group;if(fo(n),mo(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new ve("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let o of e.codes)wa(o);if(new Set(e.codes).size!==e.codes.length)throw new ve("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new ve("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder scope does not exist");let r=this.openHandle(true);try{return r.db.transaction(o=>{let i=o.select().from(M).where(rr(n,e.workspaceId)).all(),s=i.filter(m=>m.is_archived===0),a=new Set(i.map(m=>m.code)),d=new Set(s.map(m=>m.code)),c=e.codes.find(m=>!a.has(m));if(c)throw new ve("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${c}`);if(e.codes.length!==s.length||e.codes.some(m=>!d.has(m)))throw new ve("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let l=new Map(s.map(m=>[m.code,m])),u=e.codes.map(m=>{let y=l.get(m);if(!y)throw new ve("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${m}`);return y}),f;for(let[m,y]of u.entries())y.sort_order!==m&&(f??=new Date().toISOString(),o.update(M).set({sort_order:m,updated_at:f}).where(and(eq(M.code_group,n),eq(M.code,y.code))).run());return o.select().from(M).where(rr(n,e.workspaceId)).orderBy(asc(M.sort_order),asc(M.code)).all()},{behavior:"immediate"})}catch(o){throw o instanceof T?o:new T("DB_ERROR","Failed to reorder common codes",o)}finally{r.close();}}resolve(e,n){if(fo(e),wa(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(M).where(and(eq(M.code_group,e),eq(M.code,n))).limit(1).get()??null}catch(o){throw new T("DB_ERROR","Failed to resolve common code",o)}finally{r.close();}}createThreadState(e){mo(e.workspaceId);let n=uf(e.name);lf(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{if(o.select({code:M.code}).from(M).where(and(rr("THREAD_STATE",e.workspaceId),eq(M.is_archived,0),eq(M.code_name,n))).limit(1).get())throw new ve("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let s=o.select({maxSortOrder:sql`max(${M.sort_order})`}).from(M).where(rr("THREAD_STATE",e.workspaceId)).get(),a=new Date().toISOString(),d=Ta();for(;o.select({code:M.code}).from(M).where(and(eq(M.code_group,"THREAD_STATE"),eq(M.code,d))).limit(1).get();)d=Ta();o.insert(M).values({code_group:"THREAD_STATE",code:d,code_name:n,color:e.color,sort_order:(s?.maxSortOrder??-1)+1,workspace_id:e.workspaceId,is_builtin:0,is_archived:0,metadata:null,created_at:a,updated_at:a}).run();let c=o.select().from(M).where(and(eq(M.code_group,"THREAD_STATE"),eq(M.code,d))).limit(1).get();if(!c)throw new T("DB_ERROR","Created common code could not be read back");return c},{behavior:"immediate"})}catch(o){throw o instanceof T?o:new T("DB_ERROR","Failed to create thread state common code",o)}finally{r.close();}}updateDisplay(e){if(fo(e.group),wa(e.code),mo(e.workspaceId),e.name===void 0&&e.color===void 0)throw new ve("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:uf(e.name);e.color!==void 0&&lf(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{let i=o.select().from(M).where(and(eq(M.code_group,e.group),eq(M.code,e.code))).limit(1).get();if(!i)throw new ve("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e.group}/${e.code}`);if(this.assertOwnership(i,e.workspaceId),n===null&&i.is_builtin!==1)throw new ve("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&i.is_archived===0){let d=and(rr(e.group,e.workspaceId),eq(M.is_archived,0));if(o.select({code:M.code}).from(M).where(and(d,eq(M.code_name,n),sql`${M.code} <> ${e.code}`)).limit(1).get())throw new ve("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`)}let s={updated_at:new Date().toISOString()};e.name!==void 0&&(s.code_name=n??null),e.color!==void 0&&(s.color=e.color),o.update(M).set(s).where(and(eq(M.code_group,e.group),eq(M.code,e.code))).run();let a=o.select().from(M).where(and(eq(M.code_group,e.group),eq(M.code,e.code))).limit(1).get();if(!a)throw new T("DB_ERROR","Updated common code could not be read back");return a},{behavior:"immediate"})}catch(o){throw o instanceof T?o:new T("DB_ERROR","Failed to update common-code display values",o)}finally{r.close();}}archive(e,n,r,o=true){if(fo(e),wa(n),mo(r),typeof o!="boolean")throw new ve("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let i=this.openHandle(true);try{return i.db.transaction(s=>{let a=s.select().from(M).where(and(eq(M.code_group,e),eq(M.code,n))).limit(1).get();if(!a)throw new ve("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(a.is_builtin===1)throw new ve("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(a,r),!o&&a.code_name!==null&&s.select({code:M.code}).from(M).where(and(rr(e,r),eq(M.is_archived,0),eq(M.code_name,a.code_name),ne(M.code,n))).limit(1).get())throw new ve("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${a.code_name}`);s.update(M).set({is_archived:o?1:0,updated_at:new Date().toISOString()}).where(and(eq(M.code_group,e),eq(M.code,n))).run();let d=s.select().from(M).where(and(eq(M.code_group,e),eq(M.code,n))).limit(1).get();if(!d)throw new T("DB_ERROR","Archived common code could not be read back");return d},{behavior:"immediate"})}catch(s){throw s instanceof T?s:new T("DB_ERROR","Failed to archive common code",s)}finally{i.close();}}assertOwnership(e,n){if(e.workspace_id!==null&&e.workspace_id!==n)throw new ve("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};p();p();var Vc=["outcome_plan","contract_check","feature_link","use_verify","result_review"];new Set(Vc);p();p();var pf=["success","failed","completed"];new Set(pf);p();var or=class extends T{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function Ri(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function Xv(t){let n=Ri(t).threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {priority:null,state:null};let r=n;return {priority:typeof r.priority=="string"?r.priority:null,state:typeof r.state=="string"?r.state:null}}var va=class extends _e{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=dirname(n);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(n))throw new T("NOT_FOUND","Database not found");let r=z(n);if(e)try{ke(r.db,n);}catch(o){throw r.close(),o}return r}validateWorkspaceId(e,n){return e.db.select({id:Jn.id}).from(Jn).where(eq(Jn.id,n)).limit(1).get()?n:null}topLevelTaskPredicateSql(e="child"){return sql.raw(`NOT EXISTS (
367
367
  SELECT 1 FROM tasks parent
package/dist/index.js CHANGED
@@ -360,8 +360,8 @@ ${r.join(`
360
360
  LIMIT ${Nc+1}
361
361
  `),d=a.length>Nc;return {edges:a.slice(0,Nc).map(l=>({callerAgentId:l.caller_agent_id??null,agentId:l.agent_id,taskCount:l.task_count,totalTokens:l.input_tokens+l.output_tokens,outputTokens:l.output_tokens})),truncated:d}}catch(i){throw new w("DB_ERROR","Failed to get delegation matrix",i)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(g.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(g.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(g.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(g.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(g.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,i=(e.order??"DESC")==="ASC"?drizzleOrm.asc(g.started_at):drizzleOrm.desc(g.started_at),s={id:g.id,agent_id:g.agent_id,status:g.status,prompt:g.prompt,started_at:g.started_at,completed_at:g.completed_at,thread_id:g.thread_id};return e.limit?n.db.select(s).from(g).where(o).orderBy(i).limit(e.limit).all():n.db.select(s).from(g).where(o).orderBy(i).all()}catch(r){throw new w("DB_ERROR","Failed to find task evidence",r)}finally{n.close();}}findThreadChains(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,i=[drizzleOrm.isNotNull(g.thread_id),drizzleOrm.isNull(g.parent_task_id),drizzleOrm.isNull(g.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(g.platform),drizzleOrm.ne(g.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(g.metadata),drizzleOrm.and(drizzleOrm.notLike(g.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(g.metadata,'%"kind":"workflow_ui_instance"%'))),drizzleOrm.or(drizzleOrm.isNull(g.metadata),drizzleOrm.notLike(g.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&i.push(drizzleOrm.eq(g.workspace_id,e.workspaceId)),e.from&&i.push(drizzleOrm.gte(g.started_at,e.from)),e.to&&i.push(drizzleOrm.lt(g.started_at,e.to));let s=n.db.select({id:g.id,agent_id:g.agent_id,status:g.status,prompt:g.prompt,started_at:g.started_at,completed_at:g.completed_at,thread_id:g.thread_id}).from(g).where(drizzleOrm.and(...i)).orderBy(drizzleOrm.asc(g.started_at),drizzleOrm.asc(g.id)).all(),a=new Map;for(let c of s){if(!c.thread_id)continue;let l={id:c.id,agentId:c.agent_id,status:c.status,prompt:c.prompt,startedAt:c.started_at,completedAt:c.completed_at},u=a.get(c.thread_id);u?u.push(l):a.set(c.thread_id,[l]);}let d=[];for(let[c,l]of a){let u=l.filter(f=>f.agentId===e.targetAgentId).length;u<2||d.push({threadId:c,targetAgentTurnCount:u,turns:l});}return d.sort((c,l)=>{let u=c.turns[c.turns.length-1].startedAt,f=l.turns[l.turns.length-1].startedAt;return u<f?1:u>f?-1:0}),d.slice(0,r).map(c=>({threadId:c.threadId,targetAgentTurnCount:c.targetAgentTurnCount,turns:c.turns.slice(-o)}))}catch(r){throw new w("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}};var Yk=new Set(["Read","Grep","Find","Glob"]),Qk=["git status","git log","git branch","git diff --stat","git show","git remote","git rev-parse","git ls-files","pwd","ls ","echo ","cat ","head ","tail ","npx skill tsserver find","npx skill tsserver refs","npx skill tsserver type","crewx memory index","crewx memory find","crewx memory get","crewx doc toc","crewx doc section","crewx doc status","crewx search","crewx agent ls","crewx agent list"],Zk=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/],ev=8e3,tv=100,nv=3,rv=Number.MAX_SAFE_INTEGER;function Mr(){return typeof performance<"u"?performance.now():Date.now()}function ov(t){let e=t.toLowerCase();return e==="bash"||e==="terminal"?"Bash":e==="read"||e==="view"?"Read":e==="edit"||e==="apply_patch"?"Edit":e==="write"?"Write":e==="grep"||e==="rg"?"Grep":e==="glob"||e==="find"?"Find":t}function iv(t,e){if(Yk.has(t))return true;if(t!=="Bash"||!e)return false;let n=e.split(`
362
362
  `)[0].trimStart();return Zk.some(r=>r.test(n))?false:Qk.some(r=>n.startsWith(r))}function uo(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function sv(t,e,n){if(t!=="Read"||!e)return "ok";let o=e.split(`
363
- `).find(i=>i.trim()&&!i.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let i=Vg__namespace.statSync(o);if(n){let s=Date.parse(n);if(!Number.isNaN(s)&&i.mtimeMs>s)return "stale"}return "ok"}catch{return "unknown"}}function av(t){let e=new Set;for(let n of t)try{let r=JSON.parse(n);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":null}function dv(t){if(!Array.isArray(t))return [];let e=t,n=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=av(n),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...Bt(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...Zo("",a.message,r));let i=new Map,s=[];for(let a of o)if(a.type==="tool_use"){let d={tool:ov(a.toolName??""),input:a.toolInput??null,result:null,isError:false},c=a.toolUseId;if(c){if(i.has(c)){i.get(c).input=d.input;continue}i.set(c,d);}s.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&i.has(a.toolUseId)){let d=i.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=s.length-1;d>=0;d--)if(s[d].result===null){s[d].isError=a.isError===true,s[d].result=a.resultPreview??null;break}}return s}function cv(t,e){let n=dv(t),r=[];for(let o of n){let i=o.tool==="Bash"?o.input?.split(`
364
- `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,s=iv(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:i,result:o.result,status:sv(o.tool,o.input,e),reusable:s});}return r}function lv(t,e){try{return t.readLogs(e)?.entries??[]}catch{return []}}function uv(t){let e=t.entry,n=`tool="${uo(e.tool)}"`,r=e.cmd?` cmd="${uo(e.cmd)}"`:"",o="";if(e.reusable&&(o=e.status==="stale"?' reused="stale"':' reused="ok"'),e.reusable&&e.status==="stale")return [` <entry ${n}${r}${o}>\u26A0\uFE0F changed since \u2014 re-read</entry>`];if(e.result){let i=na(e.result),s=Math.min(t.bodyCharsShown??i.length,i.length);return [` <entry ${n}${r}${o}>`,i.length>s?uo(i.slice(0,s))+` \u2026 [truncated, ${s}/${i.length} chars shown]`:uo(i)," </entry>"]}return [` <entry ${n}${r}${o} />`]}function Jg(t){let e=["<activity_log>"],{entries:n,omissions:r,tokenCap:o,totalEntries:i}=t,s=r.reduce((a,d)=>a+d.count,0);if(n.length===0&&s===0)e.push(" <!-- no activity found in previous tasks -->");else {if(e.push(" <!-- tool activity from previous tasks -->"),r.length>0){e.push(` <!-- activity_log_budget token_cap="${o}" included_entries="${n.length}" omitted_entries="${s}" total_entries="${i}" -->`);for(let a of r)e.push(` <!-- omitted_entries reason="${uo(a.reason)}" count="${a.count}": ${uo(a.message)} -->`);}for(let a of n)e.push(...uv(a));}return e.push("</activity_log>"),e}function pv(t){return typeof t!="number"||!Number.isFinite(t)||t<0?ev:Math.floor(t)}function gv(t,e,n){let r=Math.floor(e/tv),o=Math.pow(2,t+r);return !Number.isFinite(o)||o<=0?0:Math.floor(n/o)}function fv(t,e){let n=Math.pow(2,e+nv);return !Number.isFinite(n)||n<=0?0:Math.floor(t/n)}function Bc(t,e,n,r){let o=t.result?.length??null,i=o===null?null:Math.min(o,Math.max(0,n));return {entry:t,newestIndex:e,bodyLimitChars:n,bodyCharsShown:o===null?null:Math.max(0,Math.min(r??i??0,i??0)),originalBodyChars:o}}function Kg(t,e){let n=[];return t>0&&n.push({reason:"token_cap",count:t,message:"older entries omitted after the per-task token cap was reached"}),e>0&&n.push({reason:"repository_limit",count:e,message:"older entries omitted by the explicit repository safety limit before budgeting"}),n}function Xg(t){let e=Kg(t.omittedByTokenCap,t.repositoryLimitOmitted);return Jg({entries:t.entries,omissions:e,tokenCap:t.tokenCap,totalEntries:t.totalEntries}).join(`
363
+ `).find(i=>i.trim()&&!i.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let i=Vg__namespace.statSync(o);if(n){let s=Date.parse(n);if(!Number.isNaN(s)&&i.mtimeMs>s)return "stale"}return "ok"}catch{return "unknown"}}function av(t){let e=new Set;for(let n of t)try{let r=JSON.parse(n);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":e.has("tool_call")||e.has("tool_call_update")?"grok":null}function dv(t){if(!Array.isArray(t))return [];let e=t,n=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=av(n),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...Bt(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...Zo("",a.message,r));let i=new Map,s=[];for(let a of o)if(a.type==="tool_use"){let d={tool:ov(a.toolName??""),input:a.toolInput??null,result:null,isError:false},c=a.toolUseId;if(c){if(i.has(c)){i.get(c).input=d.input;continue}i.set(c,d);}s.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&i.has(a.toolUseId)){let d=i.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=s.length-1;d>=0;d--)if(s[d].result===null){s[d].isError=a.isError===true,s[d].result=a.resultPreview??null;break}}return s}function cv(t,e){let n=dv(t),r=[];for(let o of n){let i=o.tool==="Bash"?o.input?.split(`
364
+ `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,s=iv(o.tool,o.input)&&!o.isError&&o.result!==null;r.push({tool:o.tool,cmd:i,result:o.result,status:sv(o.tool,o.input,e),reusable:s});}return r}function lv(t,e){try{return t.readLogs(e)?.entries??[]}catch{return []}}function uv(t){let e=t.entry,n=`tool="${uo(e.tool)}"`,r=e.cmd?` cmd="${uo(e.cmd)}"`:"",o="";if(e.reusable&&(o=e.status==="stale"?' reused="stale"':' reused="ok"'),e.reusable&&e.status==="stale")return [` <entry ${n}${r}${o}>\u26A0\uFE0F changed since \u2014 re-read</entry>`];if(e.result){let i=na(e.result),s=Math.min(t.bodyCharsShown??i.length,i.length);return [` <entry ${n}${r}${o}>`,i.length>s?uo(i.slice(0,s))+` \u2026 [truncated, ${s}/${i.length} chars shown]`:uo(i)," </entry>"]}return [` <entry ${n}${r}${o} />`]}function Jg(t){let e=["<activity_log>"],{entries:n,omissions:r,tokenCap:o,totalEntries:i}=t,s=r.reduce((a,d)=>a+d.count,0);if(n.length===0&&s===0)e.push(" <!-- no activity found in previous tasks -->");else {if(e.push(" <!-- tool activity from previous tasks -->"),r.length>0){e.push(` <!-- activity_log_budget token_cap="${o}" included_entries="${n.length}" omitted_entries="${s}" total_entries="${i}" -->`);for(let a of r)e.push(` <!-- omitted_entries reason="${uo(a.reason)}" count="${a.count}": ${uo(a.message)} -->`);}for(let a of n)e.push(...uv(a));}return e.push("</activity_log>"),e}function pv(t){return typeof t!="number"||!Number.isFinite(t)||t<0?ev:Math.floor(t)}function gv(t,e,n){let r=Math.floor(e/tv),o=Math.pow(2,t+r);return !Number.isFinite(o)||o<=0?0:Math.floor(n/o)}function fv(t,e){let n=Math.pow(2,e+nv);return !Number.isFinite(n)||n<=0?0:Math.floor(t/n)}function Bc(t,e,n,r){let o=t.result?.length??null,i=o===null?null:Math.min(o,Math.max(0,n));return {entry:t,newestIndex:e,bodyLimitChars:n,bodyCharsShown:o===null?null:Math.max(0,Math.min(r??i??0,i??0)),originalBodyChars:o}}function Kg(t,e){let n=[];return t>0&&n.push({reason:"token_cap",count:t,message:"older entries omitted after the per-task token cap was reached"}),e>0&&n.push({reason:"repository_limit",count:e,message:"older entries omitted by the explicit repository safety limit before budgeting"}),n}function Xg(t){let e=Kg(t.omittedByTokenCap,t.repositoryLimitOmitted);return Jg({entries:t.entries,omissions:e,tokenCap:t.tokenCap,totalEntries:t.totalEntries}).join(`
365
365
  `)}function Fc(t,e){let n=t(e);return !Number.isFinite(n)||n<0?0:Math.floor(n)}function mv(t){let{entry:e,bodyLimitChars:n}=t;if(!e.result)return null;let r=Math.min(e.result.length,Math.max(0,n)),o=v=>{let _=Bc(e,t.newestIndex,n,v),k=[...t.selectedEntries,_],R=Xg({entries:k,tokenCap:t.tokenCap,totalEntries:t.totalEntries,omittedByTokenCap:t.totalEntries-k.length-t.repositoryLimitOmitted,repositoryLimitOmitted:t.repositoryLimitOmitted});return {candidate:_,tokenCount:Fc(t.countTokens,R)}},i=v=>{let _=o(v);return _.tokenCount<=t.tokenCap?_:null},s=Bc(e,t.newestIndex,n,r),a=t.fullFragmentTokenCount??o(r).tokenCount;if(a<=t.tokenCap)return s;let d=i(0);if(!d){let v=Math.min(32,r),_=null,k=-1;for(let R=1;R<=v;R++){let E=Math.floor(r*R/v);if(E<=k)continue;let C=i(E);C&&(_=C.candidate,k=E);}return _}let c=d.tokenCount,l=v=>{if(r===0)return c;let _=v/r;return Math.ceil(c+(a-c)*_)},u=0,f=r+1;for(;f-u>1;){let v=Math.floor((u+f)/2);l(v)<=t.tokenCap?u=v:f=v;}let m=i(u);if(m)return m.candidate;let y=0,h=u+1;for(;h-y>1;){let v=Math.floor((y+h)/2);i(v)?y=v:h=v;}return i(y)?.candidate??null}function hv(t){let e=t.repositoryEntryLimit,n=typeof e=="number"&&Number.isFinite(e)&&e>=0&&t.entries.length>e,r=n?t.entries.length-Math.floor(e):0,i=[...n?t.entries.slice(r):t.entries].reverse(),s=[],a=t.entries.length;for(let f=0;f<i.length;f++){let m=i[f],y=gv(t.taskDistance,f,t.baseEntryChars),h=Bc(m,f,y),v=[...s,h],_=a-v.length-r,k=Xg({entries:v,tokenCap:t.tokenCap,totalEntries:a,omittedByTokenCap:_,repositoryLimitOmitted:r}),R=Fc(t.countTokens,k);if(R<=t.tokenCap){s.push(h);continue}let E=mv({selectedEntries:s,entry:m,newestIndex:f,bodyLimitChars:y,tokenCap:t.tokenCap,totalEntries:a,repositoryLimitOmitted:r,countTokens:t.countTokens,fullFragmentTokenCount:R});E&&s.push(E);break}let d=a-s.length-r,c=Kg(d,r),l=Jg({entries:s,omissions:c,tokenCap:t.tokenCap,totalEntries:a}).join(`
366
366
  `),u=Fc(t.countTokens,l);return {taskId:t.taskId,taskDistance:t.taskDistance,tokenCap:t.tokenCap,tokenCount:u,includedEntries:s.length,omittedEntries:c.reduce((f,m)=>f+m.count,0),totalEntries:a,omissions:c,entries:s,activityLog:l}}function Hc(t){return {threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,activityLogTokenBudget:t.activityLogTokenBudget,baseEntryChars:t.baseEntryChars,tasks:[],activityLogByTask:new Map}}function yv(t){return !Number.isFinite(t)||t<0?0:Math.floor(t)}function _v(t){return t.length}function $c(t){let e=pv(t.maxEntryChars),n=yv(t.activityLogTokenBudget),r=Math.max(0,Math.floor(t.lookback));if(!r||!t.threadId||!t.agentId)return Hc({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let o=Mr(),i={calls:0,chars:0},s=new Map,a=_=>{let k=s.get(_);if(k!==void 0)return k;i.calls+=1,i.chars+=_.length;let R=t.countTokens(_);return s.set(_,R),R},d=(_,k)=>{let R=Math.max(0,Mr()-o),E=Math.round(R),C=JSON.stringify(t.threadId);console.info(`[crewx] prompt-preparation activity-log threadId=${C} taskQueryMs=${Math.round(_)} builderMs=${Math.round(k)} countTokensCalls=${i.calls} countTokensChars=${i.chars} elapsedMs=${E}`),R>1e3&&console.warn(`[crewx] prompt-preparation slow threadId=${C} elapsedMs=${E}`);},c,l,u=Mr();try{l=new lo,c=l.findTasksByThread(t.threadId,void 0,{projection:"activity-log"}).filter(_=>!_.parent_task_id&&_.agent_id===t.agentId).sort((_,k)=>k.started_at>_.started_at?1:-1).slice(0,r);}catch{return d(Mr()-u,0),Hc({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e})}let f=Mr()-u;if(!c.length)return d(f,0),Hc({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let m=Mr(),y=[];for(let _ of c){let k=lv(l,_.id);y.push({taskId:_.id,entries:cv(k,_.completed_at)});}let h=[],v=new Map;for(let _=0;_<y.length;_++){let{taskId:k,entries:R}=y[_];if(R.length===0)continue;let E=hv({taskId:k,entries:R,taskDistance:_,baseEntryChars:e,tokenCap:fv(n,_),countTokens:a,repositoryEntryLimit:t.repositoryEntryLimit});h.push(E),v.set(k,E.activityLog);}return d(f,Mr()-m),{threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e,tasks:h,activityLogByTask:v}}function Yg(t){if(t.activityLogTokenBudget!==void 0&&!t.countTokens)throw new Error("countTokens is required when activityLogTokenBudget is supplied");return $c({threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,maxEntryChars:t.maxEntryChars,activityLogTokenBudget:t.activityLogTokenBudget??rv,countTokens:t.countTokens??_v,repositoryEntryLimit:t.repositoryEntryLimit}).activityLogByTask}p();p();var Tv={agentId:zod.z.string().describe("The agent ID to query"),query:zod.z.string().describe("The query message to send"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")},kv={agentId:zod.z.string().describe("The agent ID to execute"),task:zod.z.string().describe("The task description to execute"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")};function Qg(t,e,n){t.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of n){let i=e.agents.get(o);i&&r.push({id:i.id,name:i.name??i.id,description:i.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),t.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",Tv,async({agentId:r,query:o,context:i,thread:s})=>{if(!n.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.query(r,o,{context:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),t.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",kv,async({agentId:r,task:o,context:i,thread:s})=>{if(!n.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.execute(r,o,{context:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}p();function Zg(t){return t.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function ef(t,e){return e?await e(t)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Iv(t,e){let n=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return Qg(n,t,e),n}function jc(t,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let n=new Set(e.agents),r=new Map;return async o=>{let i=Zg(o);if(i)return i;let s=await ef(o,e.auth);if(s)return s;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=Iv(t,n),c=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:l=>{r.set(l,{transport:c,server:d});},onsessionclosed:l=>{r.delete(l);},enableJsonResponse:true});return await d.connect(c),c.handleRequest(o)}}p();function qc(t){let e=we__namespace.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function ma(t){let e=qc(t);return crypto$1.createHash("sha256").update(e).digest("hex")}p();p();function Ei(t){let n=t.renderer!==void 0||t.surfaces!==void 0||t.stateProjection!==void 0||Object.values(t.actions).some(o=>o.resultProjection!==void 0)?{id:t.id,version:t.version,renderer:t.renderer,surfaces:t.surfaces,stateProjection:t.stateProjection,actions:t.actions}:{id:t.id,version:t.version,actions:t.actions},r=Me(n);return crypto$1.createHash("sha256").update(xr(r)).digest("hex")}function Gc(t){return `${t.id}\0${t.version}`}function rf(t){if(!/^\d+$/.test(String(t.version))||t.version<1||t.id.length<1||t.id.length>128)throw new x("DEFINITION_UNSUPPORTED","UI definition is invalid");if(!/^[0-9a-f]{64}$/.test(t.hash)||Ei(t)!==t.hash)throw new x("DEFINITION_UNSUPPORTED","UI definition hash is invalid");for(let[e,n]of Object.entries(t.actions)){if(!e||!Array.isArray(n.capabilities)||n.capabilities.some(r=>!bv(r)))throw new x("DEFINITION_UNSUPPORTED","UI action declaration is invalid");if(n.inputKeys&&(!Array.isArray(n.inputKeys)||n.inputKeys.some(r=>typeof r!="string"||!r)))throw new x("DEFINITION_UNSUPPORTED","UI action input declaration is invalid");n.resultProjection&&nf(n.resultProjection);}if(t.renderer!==void 0&&(!t.renderer||t.renderer.length>128))throw new x("DEFINITION_UNSUPPORTED","UI definition renderer is invalid");if(t.surfaces&&(!Array.isArray(t.surfaces)||t.surfaces.some(e=>!e||e.length>64)))throw new x("DEFINITION_UNSUPPORTED","UI definition surfaces are invalid");t.stateProjection&&nf(t.stateProjection);}function nf(t){if(!Array.isArray(t.allow)||t.allow.some(e=>!/^[A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*$/.test(e)))throw new x("DEFINITION_UNSUPPORTED","UI projection policy is invalid")}function bv(t){return t.length>0&&t.length<=128&&t!=="*"&&t!=="all"&&!/[/*]/.test(t)}p();function ha(t,e,n){let r=new Set(e),o=n===void 0?void 0:new Set(n);return t.filter(i=>r.has(i)&&(o===void 0||o.has(i)))}p();p();function tr(){if(process.env.CREWX_HOME)try{return Vg__namespace.realpathSync(process.env.CREWX_HOME)}catch{return we__namespace.join(Tg__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?we__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):we__namespace.join(Tg__namespace.homedir(),".crewx")}p();p();var ke=class extends w{reason;constructor(e,n="VALIDATION",r=e,o){super(n,r,o),this.name="CommonCodeRepositoryError",this.reason=e;}},af="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Mv(){let t=crypto$1.randomBytes(16),e="";for(let n of t)e+=af[n%af.length];return e.slice(0,12)}function wa(){return `c_${Mv()}`}function Uv(t){return typeof t=="string"&&mi.includes(t)}function Hv(t){return typeof t=="string"&&hi.includes(t)}function go(t){if(!Uv(t))throw new ke("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function df(t){if(!Hv(t))throw new ke("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function cf(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new ke("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function fo(t){if(typeof t!="string"||t.trim().length===0)throw new ke("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function _a(t){if(typeof t!="string"||t.trim().length===0)throw new ke("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function nr(t,e){return drizzleOrm.and(drizzleOrm.eq(L.code_group,t),drizzleOrm.or(drizzleOrm.isNull(L.workspace_id),drizzleOrm.eq(L.workspace_id,e)))}var Ta=class extends ye{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=we.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!Vg.existsSync(n))throw new w("NOT_FOUND","Database not found");e&&Vg.mkdirSync(we.dirname(n),{recursive:true});let r=W(n);if(e)try{Te(r.db,n);}catch(o){throw r.close(),o}return r}listSelectable(e,n){if(go(e),fo(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(L).where(drizzleOrm.and(nr(e,n),drizzleOrm.eq(L.is_archived,0))).orderBy(drizzleOrm.asc(L.sort_order),drizzleOrm.asc(L.code)).all()}catch(o){throw new w("DB_ERROR","Failed to list selectable common codes",o)}finally{r.close();}}listForHistory(e,n){if(go(e),fo(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(L).where(nr(e,n)).orderBy(drizzleOrm.asc(L.sort_order),drizzleOrm.asc(L.code)).all()}catch(o){throw new w("DB_ERROR","Failed to list common-code history",o)}finally{r.close();}}reorder(e){let n=e.group;if(go(n),fo(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new ke("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let o of e.codes)_a(o);if(new Set(e.codes).size!==e.codes.length)throw new ke("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new ke("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder scope does not exist");let r=this.openHandle(true);try{return r.db.transaction(o=>{let i=o.select().from(L).where(nr(n,e.workspaceId)).all(),s=i.filter(m=>m.is_archived===0),a=new Set(i.map(m=>m.code)),d=new Set(s.map(m=>m.code)),c=e.codes.find(m=>!a.has(m));if(c)throw new ke("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${c}`);if(e.codes.length!==s.length||e.codes.some(m=>!d.has(m)))throw new ke("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let l=new Map(s.map(m=>[m.code,m])),u=e.codes.map(m=>{let y=l.get(m);if(!y)throw new ke("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${m}`);return y}),f;for(let[m,y]of u.entries())y.sort_order!==m&&(f??=new Date().toISOString(),o.update(L).set({sort_order:m,updated_at:f}).where(drizzleOrm.and(drizzleOrm.eq(L.code_group,n),drizzleOrm.eq(L.code,y.code))).run());return o.select().from(L).where(nr(n,e.workspaceId)).orderBy(drizzleOrm.asc(L.sort_order),drizzleOrm.asc(L.code)).all()},{behavior:"immediate"})}catch(o){throw o instanceof w?o:new w("DB_ERROR","Failed to reorder common codes",o)}finally{r.close();}}resolve(e,n){if(go(e),_a(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(L).where(drizzleOrm.and(drizzleOrm.eq(L.code_group,e),drizzleOrm.eq(L.code,n))).limit(1).get()??null}catch(o){throw new w("DB_ERROR","Failed to resolve common code",o)}finally{r.close();}}createThreadState(e){fo(e.workspaceId);let n=cf(e.name);df(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{if(o.select({code:L.code}).from(L).where(drizzleOrm.and(nr("THREAD_STATE",e.workspaceId),drizzleOrm.eq(L.is_archived,0),drizzleOrm.eq(L.code_name,n))).limit(1).get())throw new ke("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let s=o.select({maxSortOrder:drizzleOrm.sql`max(${L.sort_order})`}).from(L).where(nr("THREAD_STATE",e.workspaceId)).get(),a=new Date().toISOString(),d=wa();for(;o.select({code:L.code}).from(L).where(drizzleOrm.and(drizzleOrm.eq(L.code_group,"THREAD_STATE"),drizzleOrm.eq(L.code,d))).limit(1).get();)d=wa();o.insert(L).values({code_group:"THREAD_STATE",code:d,code_name:n,color:e.color,sort_order:(s?.maxSortOrder??-1)+1,workspace_id:e.workspaceId,is_builtin:0,is_archived:0,metadata:null,created_at:a,updated_at:a}).run();let c=o.select().from(L).where(drizzleOrm.and(drizzleOrm.eq(L.code_group,"THREAD_STATE"),drizzleOrm.eq(L.code,d))).limit(1).get();if(!c)throw new w("DB_ERROR","Created common code could not be read back");return c},{behavior:"immediate"})}catch(o){throw o instanceof w?o:new w("DB_ERROR","Failed to create thread state common code",o)}finally{r.close();}}updateDisplay(e){if(go(e.group),_a(e.code),fo(e.workspaceId),e.name===void 0&&e.color===void 0)throw new ke("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:cf(e.name);e.color!==void 0&&df(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{let i=o.select().from(L).where(drizzleOrm.and(drizzleOrm.eq(L.code_group,e.group),drizzleOrm.eq(L.code,e.code))).limit(1).get();if(!i)throw new ke("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e.group}/${e.code}`);if(this.assertOwnership(i,e.workspaceId),n===null&&i.is_builtin!==1)throw new ke("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&i.is_archived===0){let d=drizzleOrm.and(nr(e.group,e.workspaceId),drizzleOrm.eq(L.is_archived,0));if(o.select({code:L.code}).from(L).where(drizzleOrm.and(d,drizzleOrm.eq(L.code_name,n),drizzleOrm.sql`${L.code} <> ${e.code}`)).limit(1).get())throw new ke("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`)}let s={updated_at:new Date().toISOString()};e.name!==void 0&&(s.code_name=n??null),e.color!==void 0&&(s.color=e.color),o.update(L).set(s).where(drizzleOrm.and(drizzleOrm.eq(L.code_group,e.group),drizzleOrm.eq(L.code,e.code))).run();let a=o.select().from(L).where(drizzleOrm.and(drizzleOrm.eq(L.code_group,e.group),drizzleOrm.eq(L.code,e.code))).limit(1).get();if(!a)throw new w("DB_ERROR","Updated common code could not be read back");return a},{behavior:"immediate"})}catch(o){throw o instanceof w?o:new w("DB_ERROR","Failed to update common-code display values",o)}finally{r.close();}}archive(e,n,r,o=true){if(go(e),_a(n),fo(r),typeof o!="boolean")throw new ke("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let i=this.openHandle(true);try{return i.db.transaction(s=>{let a=s.select().from(L).where(drizzleOrm.and(drizzleOrm.eq(L.code_group,e),drizzleOrm.eq(L.code,n))).limit(1).get();if(!a)throw new ke("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(a.is_builtin===1)throw new ke("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(a,r),!o&&a.code_name!==null&&s.select({code:L.code}).from(L).where(drizzleOrm.and(nr(e,r),drizzleOrm.eq(L.is_archived,0),drizzleOrm.eq(L.code_name,a.code_name),drizzleOrm.ne(L.code,n))).limit(1).get())throw new ke("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${a.code_name}`);s.update(L).set({is_archived:o?1:0,updated_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(L.code_group,e),drizzleOrm.eq(L.code,n))).run();let d=s.select().from(L).where(drizzleOrm.and(drizzleOrm.eq(L.code_group,e),drizzleOrm.eq(L.code,n))).limit(1).get();if(!d)throw new w("DB_ERROR","Archived common code could not be read back");return d},{behavior:"immediate"})}catch(s){throw s instanceof w?s:new w("DB_ERROR","Failed to archive common code",s)}finally{i.close();}}assertOwnership(e,n){if(e.workspace_id!==null&&e.workspace_id!==n)throw new ke("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};p();p();var zc=["outcome_plan","contract_check","feature_link","use_verify","result_review"];new Set(zc);p();p();var lf=["success","failed","completed"];new Set(lf);p();var rr=class extends w{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function Ii(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function Wv(t){let n=Ii(t).threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {priority:null,state:null};let r=n;return {priority:typeof r.priority=="string"?r.priority:null,state:typeof r.state=="string"?r.state:null}}var ka=class extends ye{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=we.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=we.dirname(n);Vg.existsSync(o)||Vg.mkdirSync(o,{recursive:true});}else if(!Vg.existsSync(n))throw new w("NOT_FOUND","Database not found");let r=W(n);if(e)try{Te(r.db,n);}catch(o){throw r.close(),o}return r}validateWorkspaceId(e,n){return e.db.select({id:Vn.id}).from(Vn).where(drizzleOrm.eq(Vn.id,n)).limit(1).get()?n:null}topLevelTaskPredicateSql(e="child"){return drizzleOrm.sql.raw(`NOT EXISTS (
367
367
  SELECT 1 FROM tasks parent
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewx/sdk",
3
- "version": "0.9.0-rc.92",
3
+ "version": "0.9.0-rc.93",
4
4
  "license": "UNLICENSED",
5
5
  "engines": {
6
6
  "node": ">=20.19.0"