@crewx/sdk 0.9.0-rc.93 → 0.9.0-rc.94
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/account/config.d.ts +29 -0
- package/dist/account/env-bootstrap.d.ts +5 -0
- package/dist/account/errors.d.ts +1 -1
- package/dist/account/index.d.ts +4 -2
- package/dist/account/index.js +2 -1
- package/dist/conversation/types.d.ts +1 -0
- package/dist/esm/account/index.js +2 -1
- package/dist/esm/index.js +128 -127
- package/dist/esm/plugins/index.js +2 -2
- package/dist/events/types.d.ts +1 -0
- package/dist/index.browser.js +4 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.js +129 -128
- package/dist/plugins/index.js +2 -2
- package/dist/prompt/tag-names.d.ts +18 -0
- package/dist/provider/task-error.types.d.ts +2 -1
- package/dist/types/index.d.ts +2 -0
- package/package.json +2 -1
- package/templates/agents/default.yaml +22 -13
- package/templates/documents/crewx-quick-guide.md +1 -1
|
@@ -314,7 +314,7 @@ ${r.join(`
|
|
|
314
314
|
`),o=r.length>ko?`${r.slice(0,ko-1)}${yo}`:r;return [{timestamp:t,type:"info",content:o}]}function ma(t,e){let n=Y(e.type);if(n==="thought"){let r=Y(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=Y(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return ha(t,e);if(n==="tool_call"){let r=Y(e.toolCallId),o=Y(e.toolName)??Y(e.title),s=e.rawInput===void 0?void 0:Et(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:o,toolInput:s}]}if(n==="tool_call_update"){let r=Y(e.status);return r!=="completed"&&r!=="failed"&&r!=="error"?[]:[{timestamp:t,type:"tool_result",toolUseId:Y(e.toolCallId),toolName:Y(e.toolName)??Y(e.title),resultPreview:ua(e),isError:r!=="completed"||e.isError===true}]}if(n==="error"){let r=wo(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var Hn={command:"grok",createSessionId:()=>randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=We(e.model),o=e.effort??r,s=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],i=n?["--model",n]:[],d=n?Ge("grok").some(de=>de.id===n):false,l=n&&d?yt("grok",n):[],c=!o||l.length===0||l.includes(o)?o:void 0,u=no(c),g=e.additionalArgs??[],f=de=>g.some(te=>te===de||te.startsWith(`${de}=`)),m=e.providerOptions,I=m?.alwaysApprove,S=m?.sandbox,v=f("--permission-mode")?[]:Zr(e.mode),$=f("--always-approve")?[]:eo(I),j=f("--sandbox")?[]:to(S);return {args:["--no-auto-update",...s,"--single",t,"--output-format","streaming-json","--no-alt-screen",...i,...u,...v,...$,...j,...g]}},extractText(t){let e=[],n=false;for(let r of t.split(`
|
|
315
315
|
`).flatMap(wt))typeof r.type=="string"&&(n=true),r.type==="text"&&typeof r.data=="string"&&e.push(r.data);return e.length>0?e.join(""):n?"":t.trim()},extractFailure(t){for(let e of wt(t))if(e.type==="error"){let n=wo(e);return To(Et(e))?new Le(n,Yt):new z(n,Yt)}return null},interpretExit(t,e){if(t===0)return null;let n=Eo(e)||`Grok CLI exited with code ${t}.`;return To(e)?new Le(n,Yt):new z(n,Yt)},parseResultMeta(t){let n=t.split(`
|
|
316
316
|
`).flatMap(wt).find(r=>r.type==="end");return n?{usage:ga(n),model:pa(n)}:{usage:fa(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return wt(t).flatMap(r=>ma(pe(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return st(n)&&typeof n.type=="string"?aa.has(n.type):!1}catch{return false}}};var Ro={codex:Pn,claude:Nn,opencode:Ln,antigravity:$n,copilot:Dn,grok:Hn};function Io(t){if(t.startsWith("cli/"))return Ro[t.slice(4)]}function _a(t,e){let n=t.trimStart();if(!n.startsWith("{"))return false;let r;try{r=JSON.parse(n);}catch{return false}let o=r.type;if(typeof o!="string")return false;let s=e?va[e]:void 0;return s?s(r,o):Object.values(Ao).some(i=>i(r,o))}function Qt(t,e){let n=t.split(`
|
|
317
|
-
`).filter(r=>r.trim());return n.length===0?false:n.every(r=>_a(r,e))}function ie(t){return typeof t=="object"&&t!==null}function vo(t,e){if(e==="assistant"||e==="user"){let n=t.message;return ie(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||ie(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?ie(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function ka(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:vo(t,e)}function ya(t,e){if(e==="item.updated"||e.startsWith("thread.")||e.startsWith("turn."))return true;if(e==="item.started"||e==="item.completed"){let n=t.item;return ie(n)&&typeof n.type=="string"}return false}function Ta(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||ie(t.part):e==="text"||e==="tool_use"?ie(t.part):e==="result"?typeof t.result=="string":false}function wa(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||ie(t.part)||e==="result"&&typeof t.result=="string")}function Ea(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?ie(t.data):e==="result"?typeof t.result=="string":false}function Ra(t,e){return e==="message"?typeof t.role=="string":e==="tool_use"?typeof t.tool_name=="string"||typeof t.tool_id=="string":e==="tool_result"?typeof t.tool_id=="string"||typeof t.status=="string":false}function Ia(t,e){return e==="available_commands"?ie(t.tools)||ie(t.commands):e==="usage"?ie(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||ie(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var Ao={claude:vo,codex:ya,opencode:Ta,copilot:Ea,gemini:Ra},va={...Ao,claude:ka,opencode:wa,grok:Ia,antigravity:()=>false};var xa=200,Sa=200;function Oa(t){if(typeof t!="object"||t===null||!("code"in t))return;let e=t.code;return typeof e=="string"&&e.length>0?e:void 0}function ba(t){let e=t instanceof p?t.code:void 0,n=t instanceof p?t.cause:t,r=Oa(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function So(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function Ca(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Na(t){if(!t)return {};try{let e=JSON.parse(t);return Ca(e)?e:{}}catch{return {}}}function Oo(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var Fn=class extends Ue{name="sqlite-tracing";unsubs=[];dbPath;version;taskRepo;queues=new Map;metrics={flushCount:0,flushedEntries:0,maxQueueEntries:0,maxQueueBytes:0,appendFailureCount:0,appendFailureEntries:0,appendFailureBytes:0,appendFailureByCode:{},appendFailureByCause:{}};constructor(e){super(),this.dbPath=join(e?.dbRoot??homedir(),".crewx","crewx.db"),this.version=e?.version??"unknown";}attach(e){let n=new Gt({dbPath:this.dbPath});n.resolveDbPath(),this.taskRepo=n;let r=process.cwd(),s=existsSync(join(r,"crewx.yaml"))||existsSync(join(r,"crewx.yml"))?or(r):null,i=process.argv.join(" ");this.unsubs.push(e.on("task:start",d=>{try{let l=d.callerAgentId??null,c=d.parentTaskId??null,u=d.rootTraceId??d.traceId,g=d.metadata?JSON.stringify(d.metadata):JSON.stringify({provider:d.provider??"cli/claude"});n.startTask({id:d.traceId,agentId:d.agentRef.replace(/^@/,""),prompt:d.message,mode:d.mode,status:"running",pid:d.pid??null,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,command:i,codingAgentCommand:d.codingAgentCommand??null,workspaceId:d.workspaceId??s,projectId:d.projectId??null,callerAgentId:l,parentTaskId:c,traceId:u,metadata:g,threadId:d.threadId??null});}catch{}}),e.on("task:output",d=>{try{this.enqueueLog(d.traceId,{timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output});}catch(l){let c={timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output};this.recordAppendFailure(l,[c],So(c));}}),e.on("task:end",d=>{try{this.flushTaskLogs(d.traceId);let l=typeof d.metadata?.runEpoch=="number"?d.metadata.runEpoch:null,c=d.error?JSON.stringify({code:d.error.code,message:d.error.message,...d.error.providerCode?{providerCode:d.error.providerCode}:{}}):null,u=d.result??null,g=!1;if(d.error&&(!u||u.trim()==="")){let f=this.recoverPartialResult(d.traceId,d,l);f&&(u=f,g=!0);}n.finishTask({id:d.traceId,status:d.error?"failed":"success",result:u,error:c,completedAt:d.timestamp.toISOString(),durationMs:d.durationMs,exitCode:d.exitCode??null,inputTokens:d.inputTokens??0,outputTokens:d.outputTokens??0,cachedInputTokens:d.cachedInputTokens??0,costUsd:d.costUsd??0,model:d.model??null,runEpoch:l,partialResultRecovered:g});}catch{}}));}detach(e){try{this.flushAllTaskLogs();}finally{this.clearAllTimers(),this.unsubs.forEach(n=>n()),this.unsubs=[],this.queues.clear(),this.taskRepo=void 0;}}getMetrics(){let e=0,n=0;for(let r of this.queues.values())e+=r.entries.length,n+=r.bytes;return {...this.metrics,appendFailureByCode:{...this.metrics.appendFailureByCode},appendFailureByCause:{...this.metrics.appendFailureByCause},pendingQueueEntries:e,pendingQueueBytes:n}}enqueueLog(e,n){let r=this.queues.get(e);if(r||(r={entries:[],bytes:0},this.queues.set(e,r)),r.entries.push(n),r.bytes+=So(n),this.metrics.maxQueueEntries=Math.max(this.metrics.maxQueueEntries,r.entries.length),this.metrics.maxQueueBytes=Math.max(this.metrics.maxQueueBytes,r.bytes),r.entries.length>=xa){this.flushTaskLogs(e);return}if(!r.timer){let o=setTimeout(()=>{let s=this.queues.get(e);!s||s.timer!==o||(s.timer=void 0,this.flushTaskLogs(e));},Sa);r.timer=o;}}recoverPartialResult(e,n,r){try{let o=this.taskRepo?.getTask(e);if(!o||o.status!=="running"||Oo(o.run_epoch)!==Oo(r))return;let s=Na(o.metadata),i=typeof s.provider=="string"?s.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!i)return;let d=Io(i);if(!d?.extractPartialText)return;let c=this.taskRepo?.readLogs(e)?.entries.filter(g=>g.level==="stdout").map(g=>g.message).join(`
|
|
317
|
+
`).filter(r=>r.trim());return n.length===0?false:n.every(r=>_a(r,e))}function ie(t){return typeof t=="object"&&t!==null}function vo(t,e){if(e==="assistant"||e==="user"){let n=t.message;return ie(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||ie(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?ie(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function ka(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:vo(t,e)}function ya(t,e){if(e==="item.updated"||e.startsWith("thread.")||e.startsWith("turn."))return true;if(e==="item.started"||e==="item.completed"){let n=t.item;return ie(n)&&typeof n.type=="string"}return false}function Ta(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||ie(t.part):e==="text"||e==="tool_use"?ie(t.part):e==="result"?typeof t.result=="string":false}function wa(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||ie(t.part)||e==="result"&&typeof t.result=="string")}function Ea(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?ie(t.data):e==="result"?typeof t.result=="string":false}function Ra(t,e){return e==="message"?typeof t.role=="string":e==="tool_use"?typeof t.tool_name=="string"||typeof t.tool_id=="string":e==="tool_result"?typeof t.tool_id=="string"||typeof t.status=="string":false}function Ia(t,e){return e==="available_commands"?ie(t.tools)||ie(t.commands):e==="usage"?ie(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||ie(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var Ao={claude:vo,codex:ya,opencode:Ta,copilot:Ea,gemini:Ra},va={...Ao,claude:ka,opencode:wa,grok:Ia,antigravity:()=>false};var xa=200,Sa=200;function Oa(t){if(typeof t!="object"||t===null||!("code"in t))return;let e=t.code;return typeof e=="string"&&e.length>0?e:void 0}function ba(t){let e=t instanceof p?t.code:void 0,n=t instanceof p?t.cause:t,r=Oa(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function So(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function Ca(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Na(t){if(!t)return {};try{let e=JSON.parse(t);return Ca(e)?e:{}}catch{return {}}}function Oo(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var Fn=class extends Ue{name="sqlite-tracing";unsubs=[];dbPath;version;taskRepo;queues=new Map;metrics={flushCount:0,flushedEntries:0,maxQueueEntries:0,maxQueueBytes:0,appendFailureCount:0,appendFailureEntries:0,appendFailureBytes:0,appendFailureByCode:{},appendFailureByCause:{}};constructor(e){super(),this.dbPath=join(e?.dbRoot??homedir(),".crewx","crewx.db"),this.version=e?.version??"unknown";}attach(e){let n=new Gt({dbPath:this.dbPath});n.resolveDbPath(),this.taskRepo=n;let r=process.cwd(),s=existsSync(join(r,"crewx.yaml"))||existsSync(join(r,"crewx.yml"))?or(r):null,i=process.argv.join(" ");this.unsubs.push(e.on("task:start",d=>{try{let l=d.callerAgentId??null,c=d.parentTaskId??null,u=d.rootTraceId??d.traceId,g=d.metadata?JSON.stringify(d.metadata):JSON.stringify({provider:d.provider??"cli/claude"});n.startTask({id:d.traceId,agentId:d.agentRef.replace(/^@/,""),prompt:d.message,mode:d.mode,status:"running",pid:d.pid??null,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,command:i,codingAgentCommand:d.codingAgentCommand??null,workspaceId:d.workspaceId??s,projectId:d.projectId??null,callerAgentId:l,parentTaskId:c,traceId:u,metadata:g,threadId:d.threadId??null});}catch{}}),e.on("task:output",d=>{try{this.enqueueLog(d.traceId,{timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output});}catch(l){let c={timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output};this.recordAppendFailure(l,[c],So(c));}}),e.on("task:end",d=>{try{this.flushTaskLogs(d.traceId);let l=typeof d.metadata?.runEpoch=="number"?d.metadata.runEpoch:null,c=d.error?JSON.stringify({code:d.error.code,message:d.error.message,...d.error.providerCode?{providerCode:d.error.providerCode}:{},...d.error.mode?{mode:d.error.mode}:{}}):null,u=d.result??null,g=!1;if(d.error&&(!u||u.trim()==="")){let f=this.recoverPartialResult(d.traceId,d,l);f&&(u=f,g=!0);}n.finishTask({id:d.traceId,status:d.error?"failed":"success",result:u,error:c,completedAt:d.timestamp.toISOString(),durationMs:d.durationMs,exitCode:d.exitCode??null,inputTokens:d.inputTokens??0,outputTokens:d.outputTokens??0,cachedInputTokens:d.cachedInputTokens??0,costUsd:d.costUsd??0,model:d.model??null,runEpoch:l,partialResultRecovered:g});}catch{}}));}detach(e){try{this.flushAllTaskLogs();}finally{this.clearAllTimers(),this.unsubs.forEach(n=>n()),this.unsubs=[],this.queues.clear(),this.taskRepo=void 0;}}getMetrics(){let e=0,n=0;for(let r of this.queues.values())e+=r.entries.length,n+=r.bytes;return {...this.metrics,appendFailureByCode:{...this.metrics.appendFailureByCode},appendFailureByCause:{...this.metrics.appendFailureByCause},pendingQueueEntries:e,pendingQueueBytes:n}}enqueueLog(e,n){let r=this.queues.get(e);if(r||(r={entries:[],bytes:0},this.queues.set(e,r)),r.entries.push(n),r.bytes+=So(n),this.metrics.maxQueueEntries=Math.max(this.metrics.maxQueueEntries,r.entries.length),this.metrics.maxQueueBytes=Math.max(this.metrics.maxQueueBytes,r.bytes),r.entries.length>=xa){this.flushTaskLogs(e);return}if(!r.timer){let o=setTimeout(()=>{let s=this.queues.get(e);!s||s.timer!==o||(s.timer=void 0,this.flushTaskLogs(e));},Sa);r.timer=o;}}recoverPartialResult(e,n,r){try{let o=this.taskRepo?.getTask(e);if(!o||o.status!=="running"||Oo(o.run_epoch)!==Oo(r))return;let s=Na(o.metadata),i=typeof s.provider=="string"?s.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!i)return;let d=Io(i);if(!d?.extractPartialText)return;let c=this.taskRepo?.readLogs(e)?.entries.filter(g=>g.level==="stdout").map(g=>g.message).join(`
|
|
318
318
|
`)??"";if(!c.trim())return;let u=d.extractPartialText(c);return !u||!u.trim()||Qt(u,i)?void 0:u}catch{return}}flushTaskLogs(e){let n=this.queues.get(e);if(!n||n.entries.length===0){n?.timer&&clearTimeout(n.timer),this.queues.delete(e);return}n.timer&&(clearTimeout(n.timer),n.timer=void 0);let r=n.entries,o=n.bytes;n.entries=[],n.bytes=0,this.metrics.flushCount+=1;try{this.taskRepo?.appendLogs(e,r),this.metrics.flushedEntries+=r.length;}catch(i){this.recordAppendFailure(i,r,o);}let s=this.queues.get(e);s&&s.entries.length===0&&(s.timer&&clearTimeout(s.timer),this.queues.delete(e));}flushAllTaskLogs(){for(let e of [...this.queues.keys()])this.flushTaskLogs(e);}clearAllTimers(){for(let e of this.queues.values())e.timer&&(clearTimeout(e.timer),e.timer=void 0);}recordAppendFailure(e,n,r){let o=ba(e);this.metrics.appendFailureCount+=1,this.metrics.appendFailureEntries+=n.length,this.metrics.appendFailureBytes+=r,this.metrics.appendFailureByCode[o.code]=(this.metrics.appendFailureByCode[o.code]??0)+1,this.metrics.appendFailureByCause[o.cause]=(this.metrics.appendFailureByCause[o.cause]??0)+1,console.warn("[crewx] sqlite tracing append failed",{code:o.code,cause:o.cause,pendingEntries:n.length,pendingBytes:r});}};var it=class extends p{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function It(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function $a(t){let n=It(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 Zt=class extends ne{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 p("NOT_FOUND","Database not found");let r=L(n);if(e)try{he(r.db,n);}catch(o){throw r.close(),o}return r}validateWorkspaceId(e,n){return e.db.select({id:et.id}).from(et).where(eq(et.id,n)).limit(1).get()?n:null}topLevelTaskPredicateSql(e="child"){return sql.raw(`NOT EXISTS (
|
|
319
319
|
SELECT 1 FROM tasks parent
|
|
320
320
|
WHERE parent.id = ${e}.parent_task_id
|
|
@@ -374,7 +374,7 @@ ${r.join(`
|
|
|
374
374
|
`),c},{behavior:"immediate"})}}catch(s){throw s instanceof p?s:new p("DB_ERROR","Failed to save user message",s)}finally{o.close();}}saveAssistantMessage(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString();o.db.update(h).set({last_message:n,updated_at:s}).where(eq(h.id,e)).run();}catch(s){throw s instanceof p?s:new p("DB_ERROR","Failed to save assistant message",s)}finally{o.close();}}updateThread(e,n){if(!this.dbExists())return;let r=this.openHandle(true);try{let o={updated_at:new Date().toISOString()};n.title!==void 0&&(o.title=n.title,o.title_locked=1),n.titleLocked!==void 0&&(o.title_locked=n.titleLocked?1:0),r.db.update(h).set(o).where(eq(h.id,e)).run();}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to update thread",o)}finally{r.close();}}patchThreadTitleMetadata(e,n,r){let o=n;if(!o||typeof o!="object"||Array.isArray(o))return new it("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(o).some(l=>l!=="priority"&&l!=="state"))return new it("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch only supports priority and state");let i=o;if(i.priority===void 0&&i.state===void 0)return new it("THREAD_TITLE_PATCH_EMPTY","Thread-title metadata patch must change priority or state");for(let l of [i.priority,i.state])if(l!=null&&(typeof l!="string"||l.length===0))return new it("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let d=this.openHandle(true);try{let l=r?and(eq(h.id,e),eq(h.workspace_id,r)):eq(h.id,e);return d.db.transaction(c=>{let u=c.select({metadata:h.metadata}).from(h).where(l).get();if(!u)return null;let g=It(u.metadata),f=g.threadTitle,m=f&&typeof f=="object"&&!Array.isArray(f)?{...f}:{};i.priority===null?delete m.priority:i.priority!==void 0&&(m.priority=i.priority),i.state===null?delete m.state:i.state!==void 0&&(m.state=i.state),Object.keys(m).length>0?g.threadTitle=m:delete g.threadTitle;let I=Object.keys(g).length>0?JSON.stringify(g):null,S=new Date().toISOString();c.update(h).set({metadata:I,updated_at:S}).where(l).run();let v=c.select({metadata:h.metadata}).from(h).where(l).get();if(!v)throw new p("DB_ERROR","Thread-title metadata update could not be read back");let $=$a(v.metadata);return {threadId:e,priority:$.priority,state:$.state}},{behavior:"immediate"})}catch(l){throw l instanceof p?l:new p("DB_ERROR","Failed to patch thread-title metadata",l)}finally{d.close();}}togglePin(e,n){let r=this.openHandle(true);try{let o=n?and(eq(h.id,e),eq(h.workspace_id,n)):eq(h.id,e);return r.db.transaction(s=>{let i=s.select({pinned:h.pinned,metadata:h.metadata}).from(h).where(o).get();if(!i)return null;let d=i.pinned?0:1,l=It(i.metadata);if(d){let c=n?and(eq(h.pinned,1),eq(h.workspace_id,n)):eq(h.pinned,1),u=s.select({metadata:h.metadata}).from(h).where(c).all(),g=null;for(let f of u){let m=It(f.metadata);typeof m.pinOrder=="number"&&(g===null||m.pinOrder<g)&&(g=m.pinOrder);}l.pinOrder=g===null?0:g-1;}else delete l.pinOrder;return s.update(h).set({pinned:d,metadata:Object.keys(l).length>0?JSON.stringify(l):null}).where(o).run(),{pinned:!!d}},{behavior:"immediate"})}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to toggle pin",o)}finally{r.close();}}reorderPins(e,n){let r=this.openHandle(true);try{r.db.transaction(o=>{for(let s=0;s<e.length;s++){let i=n?and(eq(h.id,e[s]),eq(h.workspace_id,n)):eq(h.id,e[s]),d=o.select({metadata:h.metadata}).from(h).where(i).get();if(!d)continue;let l=It(d.metadata);l.pinOrder=s+1,o.update(h).set({metadata:JSON.stringify(l)}).where(i).run();}},{behavior:"immediate"});}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to reorder pins",o)}finally{r.close();}}toggleStar(e,n){let r=this.openHandle(true);try{let o=n?and(eq(h.id,e),eq(h.workspace_id,n)):eq(h.id,e),s=r.db.select({starred:h.starred}).from(h).where(o).get();if(!s)return null;let i=s.starred?0:1;return r.db.update(h).set({starred:i}).where(o).run(),{starred:!!i}}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to toggle star",o)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,o){let i=this.openHandle(true);try{let d=n?and(eq(h.id,e),eq(h.workspace_id,n)):eq(h.id,e);return i.db.transaction(c=>{let u=c.select({metadata:h.metadata}).from(h).where(d).get();if(!u)return null;let g=u.metadata?JSON.parse(u.metadata):{},f=g.overdrive??{},m=o?.defaultTurns??f.defaultTurns??3,I=o?.updatedBy??"ui",S=new Date().toISOString(),v,$,j,de;switch(r){case "enable-count":{let te=o?.turns??m,He=o?.consumeCurrent?Math.max(te-1,0):te;v=He>0?"count":"off",$=He,j=!0,de="count";break}case "enable-latch":{v="latch",$=0,j=!0,de="latch";break}case "disable":{v="off",$=0,j=!1;break}default:{let te=f.state??"off",He=typeof f.remaining=="number"?f.remaining:0;if(te==="count"&&He>0){let b=He-1;b<=0?(v="off",$=0):(v="count",$=b),j=!0,de="count";}else te==="latch"?(v="latch",$=0,j=!0,de="latch"):(v="off",$=0,j=!1);break}}return g.overdrive={state:v,remaining:$,defaultTurns:m,updatedAt:S,updatedBy:I},c.update(h).set({metadata:JSON.stringify(g),updated_at:S}).where(d).run(),{applied:j,appliedMode:de,state:v,remaining:$}},{behavior:"immediate"})}catch(d){throw d instanceof p?d:new p("DB_ERROR","Failed to resolve overdrive",d)}finally{i.close();}}};var qn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Ha(t){let e=randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let o=e[r];o<248&&(n+=qn[o%62]);}for(;n.length<t;)n+=qn[randomBytes(1)[0]%62];return n}function vt(t){return `${t}_${Ha(8)}`}function Po(t,e){let{createHash:n}=pt("crypto"),r=n("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=qn[i%62];return `${t}_${s}`}var Ua=["urgent","high","medium","low"],Fa=["investigating","in-progress","in-review","on-hold","done"],Lo="custom:";var qa=new Set(Ua),Ba=new Set(Fa);function Bn(t){return typeof t=="string"&&qa.has(t)}function jn(t){if(typeof t!="string")return false;if(Ba.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(Lo))return false;let e=t.slice(Lo.length);return e.length>=1&&e.length<=20}function Mo(t){if(!t)return null;try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?null:e}catch{return null}}function Gn(t){let e=Mo(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,o={};return Bn(r.priority)&&(o.priority=r.priority),jn(r.state)&&(o.state=r.state),o}function $o(t,e){let n=Mo(t)??{},r={...Gn(t)};return e.priority===null?delete r.priority:e.priority!==void 0&&(r.priority=e.priority),e.state===null?delete r.state:e.state!==void 0&&(r.state=e.state),r.priority===void 0&&r.state===void 0?delete n.threadTitle:n.threadTitle=r,Object.keys(n).length===0?null:JSON.stringify(n)}var Va="regeneration_replaced";var Ka="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var Ja="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",Vn=class extends p{threadId;highlightId;expectedRevision;currentRevision;constructor(e,n,r,o){super("CONFLICT",`Highlight revision conflict: expected ${r}, current ${o}`),this.name="ThreadHistoryConflictError",this.threadId=e,this.highlightId=n,this.expectedRevision=r,this.currentRevision=o;}},Nt=class extends Vn{},Kn=class extends p{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},Ya=new Set(vr),Xa=new Set(Ir),Qa=new Set(Ar),Za=new Set(xr),ed=50,Uo=100,Fo=280,qo=40,td=new Set(Sr),en=["queued","running"],nd=["success","completed","done","failed","error"];function zn(t){return td.has(t)}function D(t){throw new p("VALIDATION",t)}function fe(t){throw new p("NOT_FOUND",t)}function E(t,e){(typeof t!="string"||t.trim().length===0)&&D(`${e} is required`);}function xt(t={}){let e=t.actor??t,n=e.actorType??"system";return Ya.has(n)||D(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&D("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function rd(t){E(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&E(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&D("title must not be empty"),t.title.length>120&&D("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!Bn(t.priority)&&D(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!jn(t.state)&&D(`invalid state: ${String(t.state)}`);}function od(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&D("beforeSeq and afterSeq cannot be used together");for(let[n,r]of [["beforeSeq",t.beforeSeq],["afterSeq",t.afterSeq]])r!==void 0&&(!Number.isInteger(r)||r<0)&&D(`${n} must be a non-negative integer`);let e=t.limit??ed;return (!Number.isInteger(e)||e<1||e>Uo)&&D(`limit must be between 1 and ${Uo}`),e}function Jn(t){typeof t!="string"&&D("text is required");let e=t.trim();return e.length===0&&D("text must not be empty"),e.length>Fo&&D(`text must be at most ${Fo} characters`),e}function $e(t,e){return E(t??"",e),t}function Yn(t){Za.has(t)||D(`invalid highlight kind: ${String(t)}`);}function sd(t){Qa.has(t)||D(`invalid highlight source: ${String(t)}`);}function id(t){E(t.threadId,"threadId"),E(t.workspaceId,"workspaceId");let e=t.source??"manual";sd(e),Yn(t.kind);let n=Jn(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,o=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let u=t.taskId??(r&&o&&r===o?r:void 0),g=$e(u,"taskId");return (r!==g||o!==g)&&D("manual highlights must cover exactly one task"),{source:e,kind:t.kind,text:n,coversFromTaskId:g,coversToTaskId:g,agentId:t.agentId??null,sourceTaskId:null,detectorVersion:null,contentFingerprint:null}}let s=$e(r,"coversFromTaskId"),i=$e(o,"coversToTaskId"),d=t.sourceTaskId??s,l=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return $e(d??void 0,"sourceTaskId"),$e(l??void 0,"detectorVersion"),$e(c??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:s,coversToTaskId:i,agentId:t.agentId??null,sourceTaskId:d,detectorVersion:l,contentFingerprint:c}}function ad(t,e){(!t||typeof t!="object")&&D(`candidates[${e}] is required`),Yn(t.kind);let n=Jn(t.text),r=$e(t.anchorTaskId,`candidates[${e}].anchorTaskId`),o=$e(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),s=$e(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||Po("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s}));return E(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s,contentFingerprint:i}}function dd(t){Array.isArray(t)||D("candidates must be an array"),t.length>qo&&D(`candidates must contain at most ${qo} items`);let e=new Map;for(let[n,r]of t.entries()){let o=ad(r,n);e.set(o.contentFingerprint,o);}return [...e.values()]}function Ct(t){let e=Gn(t.metadata);return {threadId:t.id,workspaceId:t.workspace_id,title:t.title,priority:e.priority??null,state:e.state??null,metadata:t.metadata,titleLocked:t.title_locked===1,updatedAt:t.updated_at}}function ld(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&D("event payload must be a JSON object"),e}catch(e){throw new p("VALIDATION","event payload must be JSON serializable",e)}}function St(t,e){return t.select({maxSeq:sql`COALESCE(MAX(${C.seq}), 0)`}).from(C).where(eq(C.thread_id,e)).get()?.maxSeq??0}function Ot(t,e){return !!t.select({id:C.id}).from(C).where(eq(C.thread_id,e)).limit(1).get()}function Ze(t,e){Xa.has(e.type)||D(`invalid thread event type: ${String(e.type)}`);let n=vt("the");t.insert(C).values({id:n,thread_id:e.threadId,seq:e.seq,type:e.type,actor_type:e.actorType,actor_id:e.actorId,task_id:e.taskId??null,highlight_id:e.highlightId??null,payload_json:ld(e.payload),created_at:e.createdAt}).run();let r=t.select().from(C).where(eq(C.id,n)).get();if(!r)throw new p("DB_ERROR","Thread event insert did not return a row");return r}function bt(t,e,n,r,o){let s=Ct(e);Ze(t,{threadId:e.id,seq:o,type:"thread.snapshot.imported",actorType:n.actorType,actorId:n.actorId,createdAt:r,payload:{title:s.title,priority:s.priority,state:s.state}});}function nn(t){return {highlightId:t.id,source:t.source,kind:t.kind,status:t.status,coversFromTaskId:t.covers_from_task_id,coversToTaskId:t.covers_to_task_id,revision:t.revision,...t.dismissed_at===null?{}:{dismissedAt:t.dismissed_at}}}function tn(t,e,n,r,o,s,i){let d=o==="thread.highlight.created"?nn(e):{before:i?nn({...e,...i,id:e.id}):void 0,after:nn(e)};return Ze(t,{threadId:e.thread_id,seq:s,type:o,actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source==="manual"?e.covers_from_task_id:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:d})}function cd(t,e,n,r,o,s){return Ze(t,{threadId:e.thread_id,seq:o,type:"thread.highlight.deleted",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:{before:nn(e),...s??{}}})}var rn=class extends ne{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 p("NOT_FOUND","Database not found");if(e){let o=dirname(n);existsSync(o)||mkdirSync(o,{recursive:true});}let r=L(n);if(e)try{he(r.db,n);}catch(o){throw r.close(),o}return r}findThread(e,n,r){let o=eq(h.id,n),s=r===void 0?o:r===null?and(o,isNull(h.workspace_id)):and(o,eq(h.workspace_id,r));return e.select().from(h).where(s).limit(1).get()}findRegenerationRun(e,n,r){let o=e.select().from(x).where(eq(x.id,n)).limit(1).get();if(o&&!(r!==void 0&&!this.findThread(e,o.thread_id,r)))return o}resolveWorkspaceId(e){if(E(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:h.workspace_id}).from(h).where(eq(h.id,e)).limit(1).get()?.workspaceId??null}catch(r){throw r instanceof p?r:new p("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if(E(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let o=this.findThread(r.db,e,n);return o?Ct(o):null}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to read thread snapshot",o)}finally{r.close();}}updateSnapshot(e){rd(e);let n=xt(e),r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let i=this.findThread(s,e.threadId,e.workspaceId);i||fe(`Thread ${e.threadId} not found`);let d=Ct(i),l=e.title!==void 0,c=l&&e.title!==d.title,u=l&&i.title_locked!==1,g=e.priority!==void 0&&e.priority!==d.priority,f=e.state!==void 0&&e.state!==d.state,m=c||g||f;if(!m&&!u)return d;let I=i.metadata;(g||f)&&(I=$o(i.metadata,{priority:e.priority,state:e.state}));let S={};if(m&&(S.metadata=I,S.updated_at=r),c&&(S.title=e.title),l&&(S.title_locked=1),s.update(h).set(S).where(e.workspaceId===void 0?eq(h.id,e.threadId):e.workspaceId===null?and(eq(h.id,e.threadId),isNull(h.workspace_id)):and(eq(h.id,e.threadId),eq(h.workspace_id,e.workspaceId))).run(),!m){let j={...i,title_locked:1};return Ct(j)}let v=St(s,i.id)+1;Ot(s,i.id)||(bt(s,i,n,r,v),v+=1),c&&(Ze(s,{threadId:i.id,seq:v,type:"thread.title.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.title,after:e.title}}),v+=1),g&&(Ze(s,{threadId:i.id,seq:v,type:"thread.priority.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.priority,after:e.priority}}),v+=1),f&&Ze(s,{threadId:i.id,seq:v,type:"thread.state.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.state,after:e.state}});let $={...i,title:c?e.title:i.title,metadata:I,title_locked:l?1:i.title_locked,updated_at:r};return Ct($)},{behavior:"immediate"})}catch(s){throw s instanceof p?s:new p("DB_ERROR","Failed to update thread snapshot",s)}finally{o.close();}}mutateSnapshot(e){return this.updateSnapshot(e)}updateThreadSnapshot(e){return this.updateSnapshot(e)}getLatestSeq(e,n){if(E(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({maxSeq:sql`COALESCE(MAX(${C.seq}), 0)`}).from(C).where(eq(C.thread_id,e)).get()?.maxSeq??0:null}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to read latest thread event sequence",o)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if(E(e,"threadId"),E(n,"workspaceId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({taskId:a.id,prompt:a.prompt,result:a.result,status:a.status,startedAt:a.started_at,completedAt:a.completed_at}).from(a).where(and(eq(a.thread_id,e),eq(a.workspace_id,n),inArray(a.status,nd),or$1(isNull(a.parent_task_id),eq(a.parent_task_id,"")),sql`${a.result} IS NOT NULL AND length(trim(${a.result})) > 0`)).orderBy(asc(a.started_at),asc(a.id)).all().map(i=>({taskId:i.taskId,prompt:i.prompt,result:i.result,status:i.status,startedAt:i.startedAt,completedAt:i.completedAt})):null}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to read completed thread highlight turns",o)}finally{r.close();}}createHighlightRegenerationRun(e){E(e.threadId,"threadId"),E(e.workspaceId,"workspaceId"),E(e.requestId,"requestId"),E(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&E(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>{let s=this.findThread(o,e.threadId,e.workspaceId);s||fe(`Thread ${e.threadId} not found`);let i=o.select().from(x).where(and(eq(x.thread_id,s.id),eq(x.request_id,e.requestId))).orderBy(desc(x.requested_at),desc(x.id)).limit(1).get();if(i)return {run:i,created:!1};let d=o.select().from(x).where(and(eq(x.thread_id,s.id),inArray(x.status,en))).orderBy(asc(x.requested_at),asc(x.id)).limit(1).get();if(d)throw new Kn(d);let l=e.runId??vt("thr");o.insert(x).values({id:l,thread_id:s.id,request_id:e.requestId,status:"queued",detector_version:e.detectorVersion,requested_at:n,started_at:null,completed_at:null,error_code:null,previous_auto_count:null,new_auto_count:null}).run();let c=o.select().from(x).where(eq(x.id,l)).get();if(!c)throw new p("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:c,created:!0}},{behavior:"immediate"})}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to create highlight regeneration run",o)}finally{r.close();}}beginHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}queueHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}getHighlightRegenerationRun(e,n){if(E(e,"runId"),n!==void 0&&E(n,"workspaceId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to read highlight regeneration run",o)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if(E(e,"threadId"),E(n,"workspaceId"),E(r,"requestId"),!existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{return this.findThread(o.db,e,n)?o.db.select().from(x).where(and(eq(x.thread_id,e),eq(x.request_id,r))).orderBy(desc(x.requested_at),desc(x.id)).limit(1).get()??null:null}catch(s){throw s instanceof p?s:new p("DB_ERROR","Failed to read highlight regeneration request",s)}finally{o.close();}}findHighlightRegenerationRun(e,n,r){return this.getHighlightRegenerationRunByRequest(e,n,r)}startHighlightRegenerationRun(e,n){E(e,"runId"),n!==void 0&&E(n,"workspaceId");let r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let i=this.findRegenerationRun(s,e,n);if(i||fe(`Highlight regeneration run ${e} not found`),zn(i.status)||D(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;s.update(x).set({status:"running",started_at:r}).where(and(eq(x.id,i.id),eq(x.status,"queued"))).run();let d=s.select().from(x).where(eq(x.id,i.id)).get();if(!d)throw new p("DB_ERROR","Highlight regeneration run start did not return a row");return d},{behavior:"immediate"})}catch(s){throw s instanceof p?s:new p("DB_ERROR","Failed to start highlight regeneration run",s)}finally{o.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){E(e.runId,"runId"),E(e.errorCode,"errorCode"),e.workspaceId!==void 0&&E(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>{let s=this.findRegenerationRun(o,e.runId,e.workspaceId);if(s||fe(`Highlight regeneration run ${e.runId} not found`),zn(s.status)||D(`invalid highlight regeneration status: ${s.status}`),s.status==="completed"||s.status==="failed")return s;o.update(x).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(and(eq(x.id,s.id),inArray(x.status,en))).run();let i=o.select().from(x).where(eq(x.id,s.id)).get();if(!i)throw new p("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to fail highlight regeneration run",o)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=Ka){E(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>o.update(x).set({status:"failed",completed_at:n,error_code:e}).where(inArray(x.status,en)).run().changes,{behavior:"immediate"})}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to recover interrupted highlight runs",o)}finally{r.close();}}completeHighlightRegenerationRun(e){E(e.runId,"runId"),E(e.threadId,"threadId"),E(e.workspaceId,"workspaceId"),E(e.detectorVersion,"detectorVersion");let n=dd(e.candidates),r=xt(e),o=this.openHandle(true),s=false;try{return o.db.transaction(i=>{let d=this.findRegenerationRun(i,e.runId,e.workspaceId);if((!d||d.thread_id!==e.threadId)&&fe(`Highlight regeneration run ${e.runId} not found`),zn(d.status)||D(`invalid highlight regeneration status: ${d.status}`),d.status==="failed")throw new p("CONFLICT","Highlight regeneration run has already failed");if(d.status==="completed")return {run:d,deletedCount:0,createdCount:0,previousAutoCount:d.previous_auto_count??0,newAutoCount:d.new_auto_count??0};s=!0;let l=this.findThread(i,e.threadId,e.workspaceId);l||fe(`Thread ${e.threadId} not found`),d.detector_version!==e.detectorVersion&&D("detectorVersion does not match the regeneration run");let c=i.select().from(R).where(eq(R.thread_id,l.id)).orderBy(asc(R.created_at),asc(R.id)).all(),u=new Set(n.map(b=>b.contentFingerprint)),g=c.filter(b=>b.source==="auto"&&b.status==="active"&&b.revision===0&&!u.has(b.content_fingerprint??"")),f=c.filter(b=>b.source==="auto"&&b.status==="active").length,m=new Set(c.filter(b=>!g.includes(b)&&b.content_fingerprint).map(b=>b.content_fingerprint)),I=n.filter(b=>!m.has(b.contentFingerprint)),S=new Date().toISOString(),v=St(i,l.id)+1;Ot(i,l.id)||(bt(i,l,r,S,v),v+=1);for(let b of g)i.delete(R).where(eq(R.id,b.id)).run(),cd(i,b,r,S,v,{runId:e.runId,reason:Va}),v+=1;let $=0,j=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let b of I){let Qn=vt("thl");i.insert(R).values({id:Qn,thread_id:l.id,source:"auto",kind:b.kind,status:"active",text:b.text,covers_from_task_id:b.coversFromTaskId,covers_to_task_id:b.coversToTaskId,revision:0,created_at:S,updated_at:S,agent_id:j,source_task_id:b.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:b.contentFingerprint,dismissed_at:null}).run();let Zn=i.select().from(R).where(eq(R.id,Qn)).get();if(!Zn)throw new p("DB_ERROR","Regenerated highlight insert did not return a row");tn(i,Zn,r,S,"thread.highlight.created",v),v+=1,$+=1;}let te=i.select().from(R).where(eq(R.thread_id,l.id)).all().filter(b=>b.source==="auto"&&b.status==="active").length;Ze(i,{threadId:l.id,seq:v,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:S,payload:{runId:d.id,detectorVersion:e.detectorVersion,previousAutoCount:f,newAutoCount:te,deletedCount:g.length,createdCount:$}}),i.update(x).set({status:"completed",started_at:d.started_at??S,completed_at:S,error_code:null,previous_auto_count:f,new_auto_count:te}).where(and(eq(x.id,d.id),inArray(x.status,en))).run();let He=i.select().from(x).where(eq(x.id,d.id)).get();if(!He)throw new p("DB_ERROR","Highlight regeneration completion did not return a row");return {run:He,deletedCount:g.length,createdCount:$,previousAutoCount:f,newAutoCount:te}},{behavior:"immediate"})}catch(i){if(s)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:Ja});}catch{}throw i instanceof p?i:new p("DB_ERROR","Failed to complete highlight regeneration",i)}finally{o.close();}}completeHighlightRegeneration(e){return this.completeHighlightRegenerationRun(e)}replaceAutoHighlightsAtomically(e){return this.completeHighlightRegenerationRun(e)}listTimeline(e,n,r={}){let o=typeof e=="string"?{...r,threadId:e,workspaceId:n}:e;E(o.threadId,"threadId"),E(o.workspaceId,"workspaceId");let s=od(o);if(!existsSync(this.resolveDbPath()))return null;let i=this.openHandle(false);try{if(!this.findThread(i.db,o.threadId,o.workspaceId))return null;let d=i.db.select({maxSeq:sql`COALESCE(MAX(${C.seq}), 0)`}).from(C).where(eq(C.thread_id,o.threadId)).get()?.maxSeq??0,l;o.beforeSeq!==void 0?l=i.db.select().from(C).where(and(eq(C.thread_id,o.threadId),lt(C.seq,o.beforeSeq))).orderBy(desc(C.seq)).limit(s+1).all().reverse():o.afterSeq!==void 0?l=i.db.select().from(C).where(and(eq(C.thread_id,o.threadId),sql`${C.seq} > ${o.afterSeq}`)).orderBy(asc(C.seq)).limit(s+1).all():l=i.db.select().from(C).where(eq(C.thread_id,o.threadId)).orderBy(desc(C.seq)).limit(s+1).all().reverse();let c=l.length>s,u=o.afterSeq!==void 0?l.slice(0,s):c?l.slice(1):l,g=!1,f=u[0];return f&&(g=!!i.db.select({id:C.id}).from(C).where(and(eq(C.thread_id,o.threadId),lt(C.seq,f.seq))).limit(1).get()),{items:u,latestSeq:d,hasMoreOlder:g}}catch(d){throw d instanceof p?d:new p("DB_ERROR","Failed to list thread timeline",d)}finally{i.close();}}listEvents(e,n,r){return this.listTimeline(e,n,r)}getTimeline(e,n,r){return this.listTimeline(e,n,r)}createHighlight(e){let n=id(e),r=xt(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(i=>{let d=this.findThread(i,e.threadId,e.workspaceId);if(d||fe(`Thread ${e.threadId} not found`),n.source==="auto"){let f=i.select().from(R).where(and(eq(R.thread_id,e.threadId),eq(R.source_task_id,n.sourceTaskId),eq(R.detector_version,n.detectorVersion),eq(R.content_fingerprint,n.contentFingerprint))).orderBy(asc(R.created_at),asc(R.id)).limit(1).get();if(f)return f}let l=e.id??vt("thl"),c={id:l,thread_id:e.threadId,source:n.source,kind:n.kind,status:"active",text:n.text,covers_from_task_id:n.coversFromTaskId,covers_to_task_id:n.coversToTaskId,revision:0,created_at:o,updated_at:o,agent_id:n.agentId,source_task_id:n.sourceTaskId,detector_version:n.detectorVersion,content_fingerprint:n.contentFingerprint,dismissed_at:null};i.insert(R).values(c).run();let u=i.select().from(R).where(eq(R.id,l)).get();if(!u)throw new p("DB_ERROR","Highlight insert did not return a row");let g=St(i,d.id)+1;return Ot(i,d.id)||(bt(i,d,r,o,g),g+=1),tn(i,u,r,o,"thread.highlight.created",g),u},{behavior:"immediate"})}catch(i){throw i instanceof p?i:new p("DB_ERROR","Failed to create thread highlight",i)}finally{s.close();}}updateHighlight(e){E(e.threadId,"threadId"),E(e.workspaceId,"workspaceId"),E(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&D("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&D("highlight update requires at least one field"),e.kind!==void 0&&Yn(e.kind);let n=e.text===void 0?void 0:Jn(e.text),r=xt(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(i=>{let d=this.findThread(i,e.threadId,e.workspaceId);d||fe(`Thread ${e.threadId} not found`);let l=i.select().from(R).where(and(eq(R.id,e.highlightId),eq(R.thread_id,d.id))).limit(1).get();if(l||fe(`Highlight ${e.highlightId} not found`),l.revision!==e.expectedRevision)throw new Nt(d.id,l.id,e.expectedRevision,l.revision);if(l.status!=="active")throw new Nt(d.id,l.id,e.expectedRevision,l.revision);let c=e.kind??l.kind,u=n??l.text,g=e.coversFromTaskId??l.covers_from_task_id,f=e.coversToTaskId??l.covers_to_task_id;(!u||g.length===0||f.length===0)&&D("highlight projection is incomplete");let m=c!==l.kind||u!==l.text||g!==l.covers_from_task_id||f!==l.covers_to_task_id,I=r.actorType==="user"&&l.source==="auto"&&m?"manual":l.source;if(!(m||I!==l.source))return l;let v=l.revision+1;i.update(R).set({source:I,kind:c,text:u,covers_from_task_id:g,covers_to_task_id:f,revision:v,updated_at:o}).where(and(eq(R.id,l.id),eq(R.revision,l.revision))).run();let $=i.select().from(R).where(eq(R.id,l.id)).get();if(!$)throw new p("DB_ERROR","Highlight update did not return a row");let j=St(i,d.id)+1;return Ot(i,d.id)||(bt(i,d,r,o,j),j+=1),tn(i,$,r,o,"thread.highlight.updated",j,l),$},{behavior:"immediate"})}catch(i){throw i instanceof p?i:new p("DB_ERROR","Failed to update thread highlight",i)}finally{s.close();}}dismissHighlight(e){E(e.threadId,"threadId"),E(e.workspaceId,"workspaceId"),E(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&D("expectedRevision must be a non-negative integer");let n=xt(e),r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let i=this.findThread(s,e.threadId,e.workspaceId);i||fe(`Thread ${e.threadId} not found`);let d=s.select().from(R).where(and(eq(R.id,e.highlightId),eq(R.thread_id,i.id))).limit(1).get();if(d||fe(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new Nt(i.id,d.id,e.expectedRevision,d.revision);if(d.status==="dismissed")return d;let l=d.revision+1;s.update(R).set({status:"dismissed",text:null,revision:l,updated_at:r,dismissed_at:r}).where(and(eq(R.id,d.id),eq(R.revision,d.revision))).run();let c=s.select().from(R).where(eq(R.id,d.id)).get();if(!c)throw new p("DB_ERROR","Highlight dismissal did not return a row");let u=St(s,i.id)+1;return Ot(s,i.id)||(bt(s,i,n,r,u),u+=1),tn(s,c,n,r,"thread.highlight.deleted",u,d),c},{behavior:"immediate"})}catch(s){throw s instanceof p?s:new p("DB_ERROR","Failed to dismiss thread highlight",s)}finally{o.close();}}listActiveHighlights(e,n,r={}){if(E(e,"threadId"),E(n,"workspaceId"),r.taskId!==void 0&&E(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&E(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&E(r.coversToTaskId,"coversToTaskId"),!existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{if(!this.findThread(o.db,e,n))return null;let i=o.db.select().from(R).where(and(eq(R.thread_id,e),eq(R.status,"active"))).orderBy(asc(R.created_at),asc(R.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return i;let d=o.db.all(sql`
|
|
375
375
|
SELECT id, started_at FROM tasks WHERE thread_id = ${e}
|
|
376
376
|
ORDER BY started_at ASC, id ASC
|
|
377
|
-
`),l=new Map(d.map((f,m)=>[f.id,m])),c=r.taskId===void 0?void 0:l.get(r.taskId),u=r.coversFromTaskId===void 0?void 0:l.get(r.coversFromTaskId),g=r.coversToTaskId===void 0?void 0:l.get(r.coversToTaskId);return i.filter(f=>{let m=l.get(f.covers_from_task_id),I=l.get(f.covers_to_task_id);if(m===void 0||I===void 0)return !1;let S=Math.min(m,I),v=Math.max(m,I);return !(c!==void 0&&(c<S||c>v)||u!==void 0&&v<u||g!==void 0&&S>g)})}catch(s){throw s instanceof p?s:new p("DB_ERROR","Failed to list active thread highlights",s)}finally{o.close();}}listHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}getActiveHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}};var F=class extends p{reason;constructor(e,n="VALIDATION",r=e,o){super(n,r,o),this.name="CommonCodeRepositoryError",this.reason=e;}},jo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function yd(){let t=randomBytes(16),e="";for(let n of t)e+=jo[n%jo.length];return e.slice(0,12)}function Go(){return `c_${yd()}`}function Td(t){return typeof t=="string"&&yn.includes(t)}function wd(t){return typeof t=="string"&&Tn.includes(t)}function ct(t){if(!Td(t))throw new F("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function Wo(t){if(!wd(t))throw new F("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function zo(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new F("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function ut(t){if(typeof t!="string"||t.trim().length===0)throw new F("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function on(t){if(typeof t!="string"||t.trim().length===0)throw new F("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function ze(t,e){return and(eq(k.code_group,t),or$1(isNull(k.workspace_id),eq(k.workspace_id,e)))}var sn=class extends ne{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 p("NOT_FOUND","Database not found");e&&mkdirSync(dirname(n),{recursive:true});let r=L(n);if(e)try{he(r.db,n);}catch(o){throw r.close(),o}return r}listSelectable(e,n){if(ct(e),ut(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(k).where(and(ze(e,n),eq(k.is_archived,0))).orderBy(asc(k.sort_order),asc(k.code)).all()}catch(o){throw new p("DB_ERROR","Failed to list selectable common codes",o)}finally{r.close();}}listForHistory(e,n){if(ct(e),ut(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(k).where(ze(e,n)).orderBy(asc(k.sort_order),asc(k.code)).all()}catch(o){throw new p("DB_ERROR","Failed to list common-code history",o)}finally{r.close();}}reorder(e){let n=e.group;if(ct(n),ut(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let o of e.codes)on(o);if(new Set(e.codes).size!==e.codes.length)throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder scope does not exist");let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(k).where(ze(n,e.workspaceId)).all(),i=s.filter(m=>m.is_archived===0),d=new Set(s.map(m=>m.code)),l=new Set(i.map(m=>m.code)),c=e.codes.find(m=>!d.has(m));if(c)throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${c}`);if(e.codes.length!==i.length||e.codes.some(m=>!l.has(m)))throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let u=new Map(i.map(m=>[m.code,m])),g=e.codes.map(m=>{let I=u.get(m);if(!I)throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${m}`);return I}),f;for(let[m,I]of g.entries())I.sort_order!==m&&(f??=new Date().toISOString(),o.update(k).set({sort_order:m,updated_at:f}).where(and(eq(k.code_group,n),eq(k.code,I.code))).run());return o.select().from(k).where(ze(n,e.workspaceId)).orderBy(asc(k.sort_order),asc(k.code)).all()},{behavior:"immediate"})}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to reorder common codes",o)}finally{r.close();}}resolve(e,n){if(ct(e),on(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(k).where(and(eq(k.code_group,e),eq(k.code,n))).limit(1).get()??null}catch(o){throw new p("DB_ERROR","Failed to resolve common code",o)}finally{r.close();}}createThreadState(e){ut(e.workspaceId);let n=zo(e.name);Wo(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{if(o.select({code:k.code}).from(k).where(and(ze("THREAD_STATE",e.workspaceId),eq(k.is_archived,0),eq(k.code_name,n))).limit(1).get())throw new F("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let i=o.select({maxSortOrder:sql`max(${k.sort_order})`}).from(k).where(ze("THREAD_STATE",e.workspaceId)).get(),d=new Date().toISOString(),l=Go();for(;o.select({code:k.code}).from(k).where(and(eq(k.code_group,"THREAD_STATE"),eq(k.code,l))).limit(1).get();)l=Go();o.insert(k).values({code_group:"THREAD_STATE",code:l,code_name:n,color:e.color,sort_order:(i?.maxSortOrder??-1)+1,workspace_id:e.workspaceId,is_builtin:0,is_archived:0,metadata:null,created_at:d,updated_at:d}).run();let c=o.select().from(k).where(and(eq(k.code_group,"THREAD_STATE"),eq(k.code,l))).limit(1).get();if(!c)throw new p("DB_ERROR","Created common code could not be read back");return c},{behavior:"immediate"})}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to create thread state common code",o)}finally{r.close();}}updateDisplay(e){if(ct(e.group),on(e.code),ut(e.workspaceId),e.name===void 0&&e.color===void 0)throw new F("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:zo(e.name);e.color!==void 0&&Wo(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(k).where(and(eq(k.code_group,e.group),eq(k.code,e.code))).limit(1).get();if(!s)throw new F("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e.group}/${e.code}`);if(this.assertOwnership(s,e.workspaceId),n===null&&s.is_builtin!==1)throw new F("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&s.is_archived===0){let l=and(ze(e.group,e.workspaceId),eq(k.is_archived,0));if(o.select({code:k.code}).from(k).where(and(l,eq(k.code_name,n),sql`${k.code} <> ${e.code}`)).limit(1).get())throw new F("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`)}let i={updated_at:new Date().toISOString()};e.name!==void 0&&(i.code_name=n??null),e.color!==void 0&&(i.color=e.color),o.update(k).set(i).where(and(eq(k.code_group,e.group),eq(k.code,e.code))).run();let d=o.select().from(k).where(and(eq(k.code_group,e.group),eq(k.code,e.code))).limit(1).get();if(!d)throw new p("DB_ERROR","Updated common code could not be read back");return d},{behavior:"immediate"})}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to update common-code display values",o)}finally{r.close();}}archive(e,n,r,o=true){if(ct(e),on(n),ut(r),typeof o!="boolean")throw new F("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let s=this.openHandle(true);try{return s.db.transaction(i=>{let d=i.select().from(k).where(and(eq(k.code_group,e),eq(k.code,n))).limit(1).get();if(!d)throw new F("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(d.is_builtin===1)throw new F("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(d,r),!o&&d.code_name!==null&&i.select({code:k.code}).from(k).where(and(ze(e,r),eq(k.is_archived,0),eq(k.code_name,d.code_name),ne$1(k.code,n))).limit(1).get())throw new F("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${d.code_name}`);i.update(k).set({is_archived:o?1:0,updated_at:new Date().toISOString()}).where(and(eq(k.code_group,e),eq(k.code,n))).run();let l=i.select().from(k).where(and(eq(k.code_group,e),eq(k.code,n))).limit(1).get();if(!l)throw new p("DB_ERROR","Archived common code could not be read back");return l},{behavior:"immediate"})}catch(i){throw i instanceof p?i:new p("DB_ERROR","Failed to archive common code",i)}finally{s.close();}}assertOwnership(e,n){if(e.workspace_id!==null&&e.workspace_id!==n)throw new F("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};function Id(t){return t.replace(/<conversation_history[^>]*>[\s\S]*?<\/conversation_history>/g,"").split(`
|
|
377
|
+
`),l=new Map(d.map((f,m)=>[f.id,m])),c=r.taskId===void 0?void 0:l.get(r.taskId),u=r.coversFromTaskId===void 0?void 0:l.get(r.coversFromTaskId),g=r.coversToTaskId===void 0?void 0:l.get(r.coversToTaskId);return i.filter(f=>{let m=l.get(f.covers_from_task_id),I=l.get(f.covers_to_task_id);if(m===void 0||I===void 0)return !1;let S=Math.min(m,I),v=Math.max(m,I);return !(c!==void 0&&(c<S||c>v)||u!==void 0&&v<u||g!==void 0&&S>g)})}catch(s){throw s instanceof p?s:new p("DB_ERROR","Failed to list active thread highlights",s)}finally{o.close();}}listHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}getActiveHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}};var F=class extends p{reason;constructor(e,n="VALIDATION",r=e,o){super(n,r,o),this.name="CommonCodeRepositoryError",this.reason=e;}},jo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function yd(){let t=randomBytes(16),e="";for(let n of t)e+=jo[n%jo.length];return e.slice(0,12)}function Go(){return `c_${yd()}`}function Td(t){return typeof t=="string"&&yn.includes(t)}function wd(t){return typeof t=="string"&&Tn.includes(t)}function ct(t){if(!Td(t))throw new F("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function Wo(t){if(!wd(t))throw new F("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function zo(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new F("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function ut(t){if(typeof t!="string"||t.trim().length===0)throw new F("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function on(t){if(typeof t!="string"||t.trim().length===0)throw new F("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function ze(t,e){return and(eq(k.code_group,t),or$1(isNull(k.workspace_id),eq(k.workspace_id,e)))}var sn=class extends ne{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 p("NOT_FOUND","Database not found");e&&mkdirSync(dirname(n),{recursive:true});let r=L(n);if(e)try{he(r.db,n);}catch(o){throw r.close(),o}return r}listSelectable(e,n){if(ct(e),ut(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(k).where(and(ze(e,n),eq(k.is_archived,0))).orderBy(asc(k.sort_order),asc(k.code)).all()}catch(o){throw new p("DB_ERROR","Failed to list selectable common codes",o)}finally{r.close();}}listForHistory(e,n){if(ct(e),ut(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(k).where(ze(e,n)).orderBy(asc(k.sort_order),asc(k.code)).all()}catch(o){throw new p("DB_ERROR","Failed to list common-code history",o)}finally{r.close();}}reorder(e){let n=e.group;if(ct(n),ut(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let o of e.codes)on(o);if(new Set(e.codes).size!==e.codes.length)throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder scope does not exist");let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(k).where(ze(n,e.workspaceId)).all(),i=s.filter(m=>m.is_archived===0),d=new Set(s.map(m=>m.code)),l=new Set(i.map(m=>m.code)),c=e.codes.find(m=>!d.has(m));if(c)throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${c}`);if(e.codes.length!==i.length||e.codes.some(m=>!l.has(m)))throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let u=new Map(i.map(m=>[m.code,m])),g=e.codes.map(m=>{let I=u.get(m);if(!I)throw new F("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${m}`);return I}),f;for(let[m,I]of g.entries())I.sort_order!==m&&(f??=new Date().toISOString(),o.update(k).set({sort_order:m,updated_at:f}).where(and(eq(k.code_group,n),eq(k.code,I.code))).run());return o.select().from(k).where(ze(n,e.workspaceId)).orderBy(asc(k.sort_order),asc(k.code)).all()},{behavior:"immediate"})}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to reorder common codes",o)}finally{r.close();}}resolve(e,n){if(ct(e),on(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(k).where(and(eq(k.code_group,e),eq(k.code,n))).limit(1).get()??null}catch(o){throw new p("DB_ERROR","Failed to resolve common code",o)}finally{r.close();}}createThreadState(e){ut(e.workspaceId);let n=zo(e.name);Wo(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{if(o.select({code:k.code}).from(k).where(and(ze("THREAD_STATE",e.workspaceId),eq(k.is_archived,0),eq(k.code_name,n))).limit(1).get())throw new F("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let i=o.select({maxSortOrder:sql`max(${k.sort_order})`}).from(k).where(ze("THREAD_STATE",e.workspaceId)).get(),d=new Date().toISOString(),l=Go();for(;o.select({code:k.code}).from(k).where(and(eq(k.code_group,"THREAD_STATE"),eq(k.code,l))).limit(1).get();)l=Go();o.insert(k).values({code_group:"THREAD_STATE",code:l,code_name:n,color:e.color,sort_order:(i?.maxSortOrder??-1)+1,workspace_id:e.workspaceId,is_builtin:0,is_archived:0,metadata:null,created_at:d,updated_at:d}).run();let c=o.select().from(k).where(and(eq(k.code_group,"THREAD_STATE"),eq(k.code,l))).limit(1).get();if(!c)throw new p("DB_ERROR","Created common code could not be read back");return c},{behavior:"immediate"})}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to create thread state common code",o)}finally{r.close();}}updateDisplay(e){if(ct(e.group),on(e.code),ut(e.workspaceId),e.name===void 0&&e.color===void 0)throw new F("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:zo(e.name);e.color!==void 0&&Wo(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(k).where(and(eq(k.code_group,e.group),eq(k.code,e.code))).limit(1).get();if(!s)throw new F("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e.group}/${e.code}`);if(this.assertOwnership(s,e.workspaceId),n===null&&s.is_builtin!==1)throw new F("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&s.is_archived===0){let l=and(ze(e.group,e.workspaceId),eq(k.is_archived,0));if(o.select({code:k.code}).from(k).where(and(l,eq(k.code_name,n),sql`${k.code} <> ${e.code}`)).limit(1).get())throw new F("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`)}let i={updated_at:new Date().toISOString()};e.name!==void 0&&(i.code_name=n??null),e.color!==void 0&&(i.color=e.color),o.update(k).set(i).where(and(eq(k.code_group,e.group),eq(k.code,e.code))).run();let d=o.select().from(k).where(and(eq(k.code_group,e.group),eq(k.code,e.code))).limit(1).get();if(!d)throw new p("DB_ERROR","Updated common code could not be read back");return d},{behavior:"immediate"})}catch(o){throw o instanceof p?o:new p("DB_ERROR","Failed to update common-code display values",o)}finally{r.close();}}archive(e,n,r,o=true){if(ct(e),on(n),ut(r),typeof o!="boolean")throw new F("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let s=this.openHandle(true);try{return s.db.transaction(i=>{let d=i.select().from(k).where(and(eq(k.code_group,e),eq(k.code,n))).limit(1).get();if(!d)throw new F("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(d.is_builtin===1)throw new F("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(d,r),!o&&d.code_name!==null&&i.select({code:k.code}).from(k).where(and(ze(e,r),eq(k.is_archived,0),eq(k.code_name,d.code_name),ne$1(k.code,n))).limit(1).get())throw new F("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${d.code_name}`);i.update(k).set({is_archived:o?1:0,updated_at:new Date().toISOString()}).where(and(eq(k.code_group,e),eq(k.code,n))).run();let l=i.select().from(k).where(and(eq(k.code_group,e),eq(k.code,n))).limit(1).get();if(!l)throw new p("DB_ERROR","Archived common code could not be read back");return l},{behavior:"immediate"})}catch(i){throw i instanceof p?i:new p("DB_ERROR","Failed to archive common code",i)}finally{s.close();}}assertOwnership(e,n){if(e.workspace_id!==null&&e.workspace_id!==n)throw new F("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};function Id(t){return t.replace(/<crewx_thread_context[^>]*>[\s\S]*?<\/crewx_thread_context>/g,"").replace(/<conversation_history[^>]*>[\s\S]*?<\/conversation_history>/g,"").split(`
|
|
378
378
|
`).filter(o=>!(o.startsWith("Loaded ")&&o.includes("layouts from")||o.includes("[dotenv@")||o.includes("[Nest]")&&o.includes("DEBUG")||o.startsWith("Registered custom layout:")||o.startsWith("Updated custom layout:"))).join(`
|
|
379
379
|
`).trim()}function vd(t){if(t)try{let e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))return;let n=e.provider;return typeof n=="string"?n:void 0}catch{return}}function Ad(t,e,n){if(!t||e==="failed"&&Qt(t,n))return "";let r=t;try{let o=JSON.parse(r);Array.isArray(o)?r=o.filter(s=>s?.type==="text"&&s?.text).map(s=>s.text).join(`
|
|
380
380
|
`):o&&typeof o=="object"&&o.result!==void 0&&(r=o.result||"");}catch{r=Id(r);}return r}var an=class{dbPath;constructor(e){this.dbPath=e??join(homedir(),".crewx","crewx.db");}getThreadRepo(){return new Zt({dbPath:this.dbPath})}getThreadHistoryRepo(){return new rn({dbPath:this.dbPath})}updateThread(e,n){this.getThreadRepo().updateThread(e,{title:n.title});}async ensureThread(e,n,r){let o=this.getThreadRepo(),s=o.findThreadById(e);if(s){if(s.platform!==n)throw new Error(`Thread '${e}' already exists with platform '${s.platform}' \u2014 cannot change to '${n}' (platform is immutable)`);return {created:false}}return o.ensureThread(e,n,r),{created:true}}async fetchHistory(e,n){let r=n?.limit??100,o=this.getThreadRepo(),s=o.findThreadById(e),i=o.findTopLevelTasks(e,void 0,r),d=new Set(["queued","cancelled"]);i=i.filter(g=>(!g.status||!d.has(g.status))&&(!n?.currentTraceId||g.trace_id!==n.currentTraceId));let l=s?.platform??"cli",c=this.rowsToMessages(i),u=n?.includeHighlights===false?void 0:this.readActiveHighlights(e,s?.workspace_id??null);return {threadId:e,platform:l,messages:c,...u?{highlights:u}:{},metadata:{title:s?.title??void 0,firstMessage:s?.first_message??void 0,lastMessage:s?.last_message??void 0,messageCount:s?.message_count??0,updatedAt:s?.updated_at?new Date(s.updated_at).getTime():void 0}}}async fetchThreadState(e){try{let n=this.getThreadHistoryRepo().getSnapshot(e);if(!n)return;let r=new sn({dbPath:this.dbPath}),o=(s,i)=>{try{return r.resolve(s,i)?.code_name||i}catch{return i}};return {...n.title?{title:n.title}:{},...n.priority?{priority:{code:n.priority,name:o("THREAD_PRIORITY",n.priority)}}:{},...n.state?{state:{code:n.state,name:o("THREAD_STATE",n.state)}}:{}}}catch{return}}async fetchHighlights(e){let n=this.getThreadRepo().findThreadById(e);return this.readActiveHighlights(e,n?.workspace_id??null)}async saveUserMessage(e,n,r,o){let{firstMessage:s}=this.getThreadRepo().saveUserMessage(e,n);return {id:e,firstMessage:s}}async saveAssistantMessage(e,n,r,o){return this.getThreadRepo().saveAssistantMessage(e,n),{id:e}}close(){}normalizeStatus(e){if(e&&!["success","completed","done"].includes(e)){if(["failed","error"].includes(e))return "failed";if(e==="running")return "running"}}readActiveHighlights(e,n){if(!n)return [];try{return (this.getThreadHistoryRepo().listActiveHighlights(e,n)??[]).filter(o=>typeof o.text=="string"&&o.text.length>0).map(o=>({id:o.id,text:o.text,kind:o.kind,source:o.source,coversFromTaskId:o.covers_from_task_id,coversToTaskId:o.covers_to_task_id,createdAt:o.created_at}))}catch{return}}rowsToMessages(e){let n=[];for(let r of e){r.prompt&&n.push({id:`${r.id}-user`,text:r.prompt,isAssistant:false,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:{caller_agent_id:r.caller_agent_id,task_id:r.id}});let o=this.normalizeStatus(r.status),s=vd(r.metadata),i=Ad(r.result,o??r.status??null,s);if(i||o==="running"||o==="failed"){let d={agent_id:r.agent_id,task_id:r.id};o&&(d.status=o),o==="failed"&&r.error&&(d.reason=r.error.split(`
|
package/dist/events/types.d.ts
CHANGED
package/dist/index.browser.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {load}from'js-yaml';import'js-tiktoken';import'js-tiktoken/lite';import
|
|
2
|
-
`);
|
|
1
|
+
import {load}from'js-yaml';import'js-tiktoken';import'js-tiktoken/lite';import ze from'js-tiktoken/ranks/o200k_base';import {z as z$1}from'zod';var E=class extends Error{constructor(e,n){let r=n.length>0?` Available: ${n.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},fe={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function w(t,e){let n=t.startsWith("@")?t.slice(1):t,r=e.find(i=>i.id===n);if(r)return r;let o=fe[n];if(o)return o;throw new E(t,e.map(i=>i.id))}var f=class extends Error{constructor(n,r,o){super(n);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout};var Q=new Map;function M(t,e){Q.set(t,e);}function P(t){let e=t.split("/");if(e.length!==2)throw new f(`Invalid provider format: "${t}". Expected namespace/id (e.g., api/webllm)`,t);let[n,r]=e,o=Q.get(n);if(o)return o(r,t);throw new f(`Unsupported provider namespace: "${n}". Register a factory with registerProviderFactory('${n}', factory).`,t)}var me=new Function("u","return import(u)"),R=class t{_agents;_config;_tools=new Map;_apiProviders=new Map;constructor(e,n){this._agents=new Map(e.map(r=>[r.id,r])),this._config=n;}static async fromConfig(e,n){let r=new t(e.agents??[],e),o=e.agents??[],i=c=>Array.isArray(c.provider)?c.provider[0]:c.provider,d=o.filter(c=>i(c)==="api/webllm"),s=o.filter(c=>i(c)==="api/openrouter");if(d.length>0&&await r._initWebLLM(d,n?.onProgress),s.length>0){if(!n?.openrouterApiKey)throw new Error("openrouterApiKey is required when using api/openrouter provider");r._initOpenRouter(s,n.openrouterApiKey);}return r._apiProviders.size>0&&M("api",(c,l)=>{let u=r._apiProviders.get(c);if(!u)throw new f(`Unknown api provider: ${c}`,l);return u}),r}async _initWebLLM(e,n){if(typeof navigator>"u"||!navigator.gpu)throw new Error("WebGPU is not available. Chrome 113+ or Edge 113+ required.");let r=await me("https://esm.run/@mlc-ai/web-llm"),o=e[0]?.inline?.model??"gemma-2-2b-it-q4f16_1-MLC",i=await r.CreateMLCEngine(o,{initProgressCallback:n?s=>n(s):void 0}),d=[];this._apiProviders.set("webllm",{async query(s,c){let l=[];c?.systemPrompt&&l.push({role:"system",content:c.systemPrompt}),l.push(...d),l.push({role:"user",content:s});let u="",h=await i.chat.completions.create({messages:l,stream:true,temperature:.7,max_tokens:4096});for await(let T of h){let p=T.choices?.[0]?.delta?.content??"";u+=p,c?.onOutput&&c.onOutput(u,"stdout");}return d.push({role:"user",content:s}),d.push({role:"assistant",content:u}),u},async execute(s,c){return this.query(s,c)}});}_initOpenRouter(e,n){let r=e[0]?.inline?.model??"google/gemma-2-2b-it",o=[];this._apiProviders.set("openrouter",{async query(i,d){let s=[];d?.systemPrompt&&s.push({role:"system",content:d.systemPrompt}),s.push(...o),s.push({role:"user",content:i});let c=await fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"},body:JSON.stringify({model:d?.model||r,messages:s,stream:true})});if(!c.ok){let p=await c.text();throw new Error(`OpenRouter API error (${c.status}): ${p}`)}let l=c.body.getReader(),u=new TextDecoder,h="",T="";for(;;){let{done:p,value:O}=await l.read();if(p)break;T+=u.decode(O,{stream:true});let V=T.split(`
|
|
2
|
+
`);T=V.pop();for(let ge of V){let b=ge.trim();if(!b||!b.startsWith("data: "))continue;let K=b.slice(6);if(K!=="[DONE]")try{let q=JSON.parse(K).choices?.[0]?.delta?.content??"";h+=q,q&&d?.onOutput&&d.onOutput(h,"stdout");}catch{}}}return o.push({role:"user",content:i}),o.push({role:"assistant",content:h}),h},async execute(i,d){return this.query(i,d)}});}get agents(){return this._agents}get config(){return this._config}get tools(){return this._tools}registerTool(e,n){this._tools.set(e,{name:e,...n});}async query(e,n,r){let o=Date.now(),i;try{i=w(e,Array.from(this._agents.values()));}catch(p){if(p instanceof E)return {ok:false,data:"",error:{code:"AGENT_NOT_FOUND",message:p.message},meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:Date.now()-o}};throw p}let d=Array.isArray(i.provider)?i.provider[0]??"api/default":i.provider,s=r?.provider??d,c=r?.model??i.inline?.model,l=i.options,u=l&&typeof l=="object"&&!Array.isArray(l)?l.query:void 0,h=u&&typeof u=="object"&&!Array.isArray(u)&&typeof u.mode=="string"&&u.mode.trim()||void 0,T;try{T=P(s);}catch(p){return {ok:false,data:"",error:{code:"PROVIDER_ERROR",message:p.message,...p instanceof f?{providerCode:p.code}:{}},meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-o}}}try{return {ok:!0,data:await T.query(n,{model:c,context:r?.context,systemPrompt:i.inline?.system_prompt??i.inline?.prompt,onOutput:r?.onOutput?O=>r.onOutput(O):void 0}),meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-o}}}catch(p){return {ok:false,data:"",error:{code:"QUERY_FAILED",message:p.message,...p instanceof f?{providerCode:p.code}:{},...h?{mode:h}:{}},meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-o}}}}async execute(e,n,r){let o=Date.now(),i;try{i=w(e,Array.from(this._agents.values()));}catch(u){if(u instanceof E)return {ok:false,data:"",error:{code:"AGENT_NOT_FOUND",message:u.message},meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:Date.now()-o}};throw u}let d=Array.isArray(i.provider)?i.provider[0]??"api/default":i.provider,s=r?.provider??d,c=r?.model??i.inline?.model,l;try{l=P(s);}catch(u){return {ok:false,data:"",error:{code:"PROVIDER_ERROR",message:u.message,...u instanceof f?{providerCode:u.code}:{}},meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-o}}}try{return {ok:!0,data:await l.execute(n,{model:c,context:r?.context,systemPrompt:i.inline?.system_prompt??i.inline?.prompt}),meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-o}}}catch(u){return {ok:false,data:"",error:{code:"EXECUTE_FAILED",message:u.message,...u instanceof f?{providerCode:u.code}:{}},meta:{agentId:i.id,provider:s,model:c,durationMs:Date.now()-o}}}}};var g="[REDACTED]",Y="[PATH]";function S(t){if(typeof t!="string")return;let e=t.trim();if(e)return e=e.replace(/^\s*at\s+[^\r\n]+(?:\r?\n|$)/gim,""),e=e.replace(/(^|[\r\n])\s*(?:authorization|proxy-authorization|x-api-key|x-goog-api-key|x-auth-token|cookie|set-cookie)\s*:\s*[^\r\n]*/gim,`$1[HTTP HEADER ${g}]`),e=Te(e),e=e.replace(/\b(?:Bearer|Basic)\s+[A-Za-z0-9._~+\-/]+=*/gi,`${g}`),e=e.replace(/\bsk-[A-Za-z0-9][A-Za-z0-9_-]*/g,g),e=e.replace(/\bghp_[A-Za-z0-9][A-Za-z0-9_-]*/g,g),e=e.replace(/\bxoxb-[A-Za-z0-9-]+/g,g),e=e.replace(/\bxoxp-[A-Za-z0-9-]+/g,g),e=e.replace(/\bAKIA[0-9A-Z]{12,}\b/g,g),e=e.replace(/\bgithub_pat_[A-Za-z0-9_]+/g,g),e=e.replace(/\bgho_[A-Za-z0-9_]+/g,g),e=e.replace(/\bAIza[A-Za-z0-9_-]{20,}\b/g,g),e=e.replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,g),e=e.replace(/\b(?:authorization|api[_ -]?key|access[_ -]?token|auth[_ -]?token|refresh[_ -]?token|token|secret|password)\s*([:=])\s*["']?[^\s,;&"']+/gi,(n,r)=>`${g}${r}${g}`),e=e.replace(/([?&](?:api[_-]?key|access[_-]?token|token)=)[^&\s]+/gi,`$1${g}`),e=e.replace(/(?:\/(?:Users|home|private|var\/folders|tmp|workspace|workspaces|Volumes|opt|etc|srv|Applications)\/[^\s"'`),;]+)/g,Y),e=e.replace(/\b[A-Z]:\\(?:Users|home|Windows|Program Files|workspace|workspaces)\\[^\s"'`),;]*/gi,Y),e=e.replace(/[\r\n]{3,}/g,`
|
|
3
3
|
|
|
4
|
-
`).trim(),he(e,1024)||void 0}function he(t,e){let n=new TextEncoder;if(n.encode(t).byteLength<=e)return t;let
|
|
4
|
+
`).trim(),he(e,1024)||void 0}function he(t,e){let n=new TextEncoder;if(n.encode(t).byteLength<=e)return t;let r="",o=0;for(let i of t){let d=n.encode(i).byteLength;if(o+d>e)break;r+=i,o+=d;}return r}function Te(t){let e=/\b(?:request|response|http)?\s*body\s*[:=]\s*/gim,n="",r=0,o;for(;(o=e.exec(t))!==null;){if(o.index<r)continue;let i=o.index+o[0].length,d=ye(t,i),s=d>=0?d:t.indexOf(`
|
|
5
5
|
`,i)>=0?t.indexOf(`
|
|
6
|
-
`,i):t.length;n+=t.slice(o,r.index),n+=`[HTTP BODY ${p}]`,o=a;}return n+t.slice(o)}function ye(t,e){let n=t[e];if(n==='"'||n==="'")return Ee(t,e,n);if(n!=="{"&&n!=="[")return -1;let o=[],r,i=false;for(let d=e;d<t.length;d+=1){let a=t[d];if(r){i?i=false:a==="\\"?i=true:a===r&&(r=void 0);continue}if(a==='"'||a==="'"){r=a;continue}if(a==="{"||a==="["){o.push(a);continue}if(a!=="}"&&a!=="]")continue;let c=o.pop();if(a==="}"&&c!=="{"||a==="]"&&c!=="[")return -1;if(o.length===0)return d+1}return -1}function Ee(t,e,n){let o=false;for(let r=e+1;r<t.length;r+=1){let i=t[r];if(o)o=false;else if(i==="\\")o=true;else if(i===n)return r+1}return -1}var ve=new Set(["USAGE_LIMITED","CONTEXT_WINDOW_EXCEEDED","INPUT_TOO_LARGE","MODEL_NOT_SUPPORTED","MODEL_AT_CAPACITY","AUTH_REQUIRED","CLI_NOT_AVAILABLE","CLI_UPDATE_REQUIRED","AGENT_NOT_FOUND","PERMISSION_OR_TRUST","TIMEOUT_OR_STUCK","NETWORK_OR_PROVIDER_TRANSIENT","PROVIDER_CONFIGURATION","PROCESS_FAILED"]),xe={QUOTA_EXHAUSTED:"USAGE_LIMITED",RATE_LIMITED:"USAGE_LIMITED",AUTH_REQUIRED:"AUTH_REQUIRED",TIMEOUT_IDLE:"TIMEOUT_OR_STUCK",TIMEOUT_TOTAL:"TIMEOUT_OR_STUCK",PROVIDER_NOT_FOUND:"PROVIDER_CONFIGURATION",INVALID_PROVIDER_FORMAT:"PROVIDER_CONFIGURATION",PROVIDER_CRASHED:"PROCESS_FAILED",EMPTY_OUTPUT:"PROCESS_FAILED"},_e=[{code:"USAGE_LIMITED",pattern:/(?:rate[ _-]?limit|quota|usage[ /_-]?limit|usage exhausted|too many requests|429\b)/i},{code:"CONTEXT_WINDOW_EXCEEDED",pattern:/context (?:window|length)|maximum context|context[_ -]?window[_ -]?exceeded|too many tokens/i},{code:"INPUT_TOO_LARGE",pattern:/input[_ -]?(?:is[_ -]?)?too[_ -]?large|prompt (?:is )?too (?:large|long)|request[_ -]?(?:is[_ -]?)?too[_ -]?large|payload[_ -]?(?:is[_ -]?)?too[_ -]?large|maximum input/i},{code:"MODEL_AT_CAPACITY",pattern:/(?:model|service|provider).*(?:at capacity|overloaded|temporarily busy)|at capacity|overloaded/i},{code:"MODEL_NOT_SUPPORTED",pattern:/(?:model|invalid_request_error).*(?:not[ _-]?supported|unsupported|does[ _-]?not[ _-]?exist|not[ _-]?found|invalid)|model[_-]?not[_-]?(?:found|supported)/i},{code:"AUTH_REQUIRED",pattern:/(?:401\b|unauthori[sz]ed|not logged in|login required|sign[ -]?in required|api key (?:is )?(?:missing|invalid|required)|authentication required)/i},{code:"CLI_UPDATE_REQUIRED",pattern:/(?:requires? a newer version|update (?:your )?cli|cli version.*(?:old|outdated|unsupported)|version mismatch)/i},{code:"CLI_NOT_AVAILABLE",pattern:/(?:ENOENT|command not found|executable.*not found|cli.*(?:not installed|unavailable)|is .* installed\?)/i},{code:"AGENT_NOT_FOUND",pattern:/agent[_ -]?not[_ -]?found|unknown agent/i},{code:"PERMISSION_OR_TRUST",pattern:/(?:permission denied|operation not permitted|workspace trust|not trusted|access denied|EACCES|EPERM)/i},{code:"TIMEOUT_OR_STUCK",pattern:/(?:timeout|timed out|took too long|stuck|idle timeout|ETIMEDOUT)/i},{code:"NETWORK_OR_PROVIDER_TRANSIENT",pattern:/(?:network (?:unreachable|error)|connection (?:reset|refused|closed)|ECONN(?:RESET|REFUSED|ABORTED)|service unavailable|upstream.*(?:5\d\d|error)|provider.*(?:5\d\d|unavailable|down)|\b5\d\d\b)/i},{code:"PROVIDER_CONFIGURATION",pattern:/(?:invalid provider|unsupported provider|provider namespace|provider configuration|provider config|missing provider)/i}];function Ce(t){try{if(!h(t)||t.status!=="failed")return S();let e=Ie(t.error);if(U(e.message))return S();let n=f(t.providerId)??e.provider??null,o=Pe(t.logs),r=Q(e.code);if(r)return C(r,n,e.message,e);let i=A(e.providerCode)??A(e.code),d=i?L(i,e.message):void 0;if(d)return C(d,n,e.message,e,i);let a=Ae(o);if(!ke(e)&&a&&(a.type==="user_stop"||U(a.message)))return S();if(a){let l=Oe(a.code,a.providerCode,a.message);if(l)return C(l,n,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let c=be(e.message,o);return c?C(c.code,n,c.message,e,c.terminal?.providerCode??c.terminal?.code,c.terminal,c.terminal?.structuredFailure?"terminal":"envelope"):C("PROCESS_FAILED",n,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function S(){return {errorCode:null,errorProvider:null}}function C(t,e,n,o,r,i,d="envelope"){let a={};if(i?.resetAt!==void 0&&(a.resetAt=i.resetAt),o?.model&&(a.model=o.model),i?.type&&(a.upstreamType=i.type),r&&(a.upstreamCode=r),t==="CLI_NOT_AVAILABLE"||t==="CLI_UPDATE_REQUIRED"){let m=e?.startsWith("cli/")?e.slice(4):void 0;m&&(a.cliName=m);}let c=d==="terminal"?n:o?.message,l=d==="terminal"?i?.structuredFailure?c:void 0:o?.isEnvelope?c:void 0,u=R(l);return u&&(a.technicalMessage=u),Object.keys(a).length>0?{errorCode:t,errorProvider:e,errorMeta:a}:{errorCode:t,errorProvider:e}}function Ie(t){let e=typeof t=="string"?E(t):t;return h(e)?{isEnvelope:true,code:f(e.code),providerCode:f(e.providerCode),message:f(e.message)??f(e.error),provider:f(e.provider)??f(e.errorProvider),model:f(e.model)}:{isEnvelope:false,...typeof t=="string"&&t.trim()?{message:t.trim()}:{}}}function E(t){try{return JSON.parse(t)}catch{return}}function ke(t){return !!(t.code||t.providerCode||t.message)}function Pe(t){let e=[];if(typeof t=="string"){let n=E(t);if(Array.isArray(n))e.push(...n);else for(let o of t.split(/\r?\n/)){let r=E(o.trim());r!==void 0&&e.push(r);}}else Array.isArray(t)?e.push(...t):h(t)&&e.push(t);return e.flatMap(y)}function y(t){if(!h(t))return [];let e=f(t.type),n=f(t.message);if(n&&!e){let r=E(n);if(Array.isArray(r))return r.flatMap(y);if(h(r))return y(r);let i=n.split(/\r?\n/).map(d=>E(d.trim())).filter(d=>h(d));return i.length>0?i.flatMap(y):t.level==="stderr"?[{type:"stderr",message:n,rank:1,structuredFailure:false}]:y({type:"info",content:n})}if(e==="rate_limit_event"){let r=Y(t.rate_limit_info);return f(r?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:I(r?.message,t.message),resetAt:Me(r?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let r=Y(t.error),i=I(r?.message,r?.detail,t.message,t.errorMessage,t.content),d=I(r?.code,t.code,t.errorCode);return [{type:e,code:d,providerCode:I(r?.providerCode,t.providerCode),message:i,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof t.content=="string"){let r=E(t.content);if(h(r))return y(r)}let o=I(t.errorMessage,t.content);return o&&U(o)?[{type:"user_stop",message:o,rank:1,structuredFailure:false}]:o&&/(?:turn\.failed|type:error)/i.test(o)?[{type:o.match(/turn\.failed/i)?"turn.failed":"error",message:o,rank:3,structuredFailure:false}]:[]}function Ae(t){return [...t].sort((e,n)=>n.rank-e.rank)[0]}function Oe(t,e,n){let o=Q(t);if(o)return o;if(t){let r=L(t,n);if(r)return r}if(e){let r=L(e,n);if(r)return r}return D(n)}function be(t,e){let n=D(t);if(n)return {code:n,message:t};for(let o of [...e].sort((r,i)=>i.rank-r.rank)){let r=D(o.message);if(r)return {code:r,message:o.message,terminal:o}}}function D(t){if(!(typeof t!="string"||!t.trim()))return _e.find(e=>e.pattern.test(t))?.code}function L(t,e){let n=A(t)??t;if(n==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(n!=="UNKNOWN")return xe[n]}function Q(t){let e=A(t);return e&&ve.has(e)?e:void 0}function A(t){return typeof t=="string"&&t.trim()?t.trim().toUpperCase():void 0}function U(t){return t?/\b(?:stopped|killed|aborted|cancelled|canceled)\s+by\s+user\b/i.test(t)||/사용자에 의해 중지됨/.test(t)||/\b(?:SIGTERM\s+143|143\s+SIGTERM)\b/i.test(t):false}function h(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Y(t){return h(t)?t:void 0}function f(t){return typeof t=="string"&&t.trim()?t.trim():void 0}function Me(t){return typeof t=="string"||typeof t=="number"&&Number.isFinite(t)?t:void 0}function I(...t){return t.map(f).find(e=>!!e)}var we=["none","minimal","low","medium","high","xhigh","max","ultra"],Re={claude:["low","medium","high","xhigh","max"],codex:["minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]};var Z={claude:{models:[{id:"claude-fable-5-1",name:"Claude Fable 5.1",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5-1":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-6-astra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}};Object.fromEntries(Object.entries(Z).map(([t,e])=>[t,e.models]));var Le="claude-opus-4-8",Ue="claude-opus-4-8[1m]",J=[{baseModelId:"claude-opus-4-8",catalogModelId:"claude-opus-4-8[1m]"},{baseModelId:"claude-opus-4-7",catalogModelId:"claude-opus-4-7[1m]"},{baseModelId:"claude-opus-4-6",catalogModelId:"claude-opus-4-6[1m]"},{baseModelId:"claude-sonnet-4-6",catalogModelId:"claude-sonnet-4-6[1m]"}];var Ne=new Map(J.map(({baseModelId:t,catalogModelId:e})=>[t,e]));function ee(t){return Ne.get(t)??t}var te=[{legacyId:"Gemini 3.7 Flash (High)",model:"gemini-3.7-flash",effort:"high"},{legacyId:"Gemini 3.7 Flash (Medium)",model:"gemini-3.7-flash",effort:"medium"},{legacyId:"Gemini 3.7 Flash (Low)",model:"gemini-3.7-flash",effort:"low"},{legacyId:"Gemini 3.6 Flash (High)",model:"gemini-3.6-flash",effort:"high"},{legacyId:"Gemini 3.6 Flash (Medium)",model:"gemini-3.6-flash",effort:"medium"},{legacyId:"Gemini 3.6 Flash (Low)",model:"gemini-3.6-flash",effort:"low"},{legacyId:"Gemini 3.5 Flash (Medium)",model:"gemini-3.5-flash",effort:"medium"},{legacyId:"Gemini 3.5 Flash (High)",model:"gemini-3.5-flash",effort:"high"},{legacyId:"Gemini 3.5 Flash (Low)",model:"gemini-3.5-flash",effort:"low"},{legacyId:"Gemini 3.1 Pro (Low)",model:"gemini-3.1-pro",effort:"low"},{legacyId:"Gemini 3.1 Pro (High)",model:"gemini-3.1-pro",effort:"high"},{legacyId:"Claude Sonnet 4.6 (Thinking)",model:"claude-sonnet-4-6"},{legacyId:"Claude Opus 4.6 (Thinking)",model:"claude-opus-4-6-thinking"},{legacyId:"GPT-OSS 120B (Medium)",model:"gpt-oss-120b",effort:"medium"},{legacyId:"gemini-3.7-flash-high",model:"gemini-3.7-flash",effort:"high"},{legacyId:"gemini-3.7-flash-medium",model:"gemini-3.7-flash",effort:"medium"},{legacyId:"gemini-3.7-flash-low",model:"gemini-3.7-flash",effort:"low"},{legacyId:"gemini-3.6-flash-high",model:"gemini-3.6-flash",effort:"high"},{legacyId:"gemini-3.6-flash-medium",model:"gemini-3.6-flash",effort:"medium"},{legacyId:"gemini-3.6-flash-low",model:"gemini-3.6-flash",effort:"low"},{legacyId:"gemini-3.5-flash-high",model:"gemini-3.5-flash",effort:"high"},{legacyId:"gemini-3.5-flash-medium",model:"gemini-3.5-flash",effort:"medium"},{legacyId:"gemini-3.5-flash-low",model:"gemini-3.5-flash",effort:"low"},{legacyId:"gemini-3.1-pro-high",model:"gemini-3.1-pro",effort:"high"},{legacyId:"gemini-3.1-pro-low",model:"gemini-3.1-pro",effort:"low"},{legacyId:"gpt-oss-120b-medium",model:"gpt-oss-120b",effort:"medium"}],Fe=new Map(te.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));function ne(t){if(!t)return {};let e=Fe.get(t);return e?{...e}:{model:t}}function N(t,e){return t==="antigravity"||t==="cli/antigravity"?ne(e):e===void 0?{}:{model:ee(e)}}var re=30,oe=80;Object.keys(Ge.special_tokens);var Be=z$1.object({model:z$1.string().optional(),system_prompt:z$1.string().optional(),prompt:z$1.string().optional(),layout:z$1.union([z$1.string(),z$1.object({id:z$1.string(),props:z$1.record(z$1.unknown()).optional()}),z$1.object({props:z$1.record(z$1.unknown())}),z$1.object({template:z$1.string(),capabilities:z$1.object({semanticContinuity:z$1.boolean().optional(),continuity:z$1.boolean().optional(),continuitySlot:z$1.string().optional(),slot:z$1.string().optional()}).optional()})]).optional()}).catchall(z$1.unknown()),ze=z$1.object({include:z$1.array(z$1.string()).optional()}).optional(),je=z$1.object({id:z$1.string(),name:z$1.string().optional(),role:z$1.string().optional(),team:z$1.string().optional(),provider:z$1.union([z$1.string(),z$1.array(z$1.string())]),working_directory:z$1.string().optional(),description:z$1.string().optional(),tags:z$1.array(z$1.string()).optional(),inline:Be.optional(),skills:ze}).catchall(z$1.unknown());z$1.object({id:z$1.string(),name:z$1.string(),workflow_id:z$1.string(),description:z$1.string().optional(),goal_id:z$1.string().optional()});var We=z$1.number().finite().int().min(re).max(oe),Ve=z$1.object({inputBudgetPercent:We.optional()}).catchall(z$1.unknown()),$e=z$1.object({continuity:Ve.optional()}).catchall(z$1.unknown()),Ke=z$1.object({bin_resolution:z$1.enum(["global_first","local_first"]).optional(),dreaming:$e.optional(),wi:z$1.object({boards:z$1.array(z$1.unknown()).optional().catch(()=>{})}).catchall(z$1.unknown()).optional().catch(()=>{})}).catchall(z$1.unknown()),ie=z$1.object({agents:z$1.array(je).optional(),hooks:z$1.array(z$1.unknown()).optional(),settings:Ke.optional(),skills:z$1.unknown().optional(),layouts:z$1.record(z$1.unknown()).optional(),documents:z$1.record(z$1.unknown()).optional()}).catchall(z$1.unknown());var v=class extends Error{constructor(n,o){super(n);this.cause=o;this.name="ConfigLoadError";}cause};function Xe(t){if(!t||typeof t!="string"||!t.trim())throw new v("YAML content must be a non-empty string");let e;try{e=load(t);}catch(r){throw new v(`YAML parse error: ${r.message}`,r)}let n=Ye(e),o=ie.safeParse(n);if(!o.success)throw new v(`Config validation error: ${o.error.message}`);return o.data}function Ye(t){if(!t||typeof t!="object")return {agents:[]};let e=t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let n=e.agents,o=Object.entries(n).map(([r,i])=>({id:r,...i&&typeof i=="object"?i:{}}));return {...e,agents:o}}return e.agents?e:{...e,agents:[]}}var Qe={auto:"default"};function Ze(t){return Qe[t]??t}var Je="crewx:fs:",F=class{prefix;store;constructor(e){this.prefix=e?.prefix??Je,this.store=e?.storage??new Map;}async readFile(e){let n=this.toKey(e),o=this.store.get(n);if(o===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return o}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let n=e.map(d=>d.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),o=n.split("/"),r=[];for(let d of o)d==="."||d===""||(d===".."?r.pop():r.push(d));let i=r.join("/");return n.startsWith("/")?`/${i}`:i}isAbsolute(e){return e.startsWith("/")}setItem(e,n){this.store.set(this.toKey(e),n);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let n=e.replace(/\\/g,"/").replace(/\/$/,""),o=this.toKey(n+"/"),r=[];for(let i of this.store.keys())if(i.startsWith(o)){let a=i.slice(o.length).split("/")[0];a&&!r.includes(a)&&r.push(a);}return r}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};var H=["codex","claude","grok","opencode","antigravity","copilot"];function et(t){let e=t.indexOf("/");return e===-1?t:t.slice(e+1)}function G(t){let e=et(t),n=H.indexOf(e);return n===-1?H.length:n}function tt(t,e){return G(t)-G(e)}var nt=new Set(["claude","copilot","codex","grok","opencode"]);function rt(t){if(!t)return "";if(t.startsWith("acp/")){let e=t.slice(4);if(nt.has(e))return `cli/${e}`}return t}var ae=["urgent","high","medium","low"],de=["investigating","in-progress","in-review","on-hold","done"],k="custom:";var ot=new Set(ae),it=new Set(de),st={urgent:"U \uAE34\uAE09 Urgent",high:"P0 \uAE09\uD568 High",medium:"P1 \uC911\uC694 Medium",low:"P2 \uBCF4\uD1B5 Low"},B={investigating:"\uC870\uC0AC\uC911 Looking into","in-progress":"\uC9C4\uD589\uC911 In progress","in-review":"\uAC80\uD1A0\uC911 In review","on-hold":"\uBCF4\uB958 On hold",done:"\uC644\uB8CC Done"};function se(t,e){return !e||e.includes(t)?e??t:`${t} ${e}`}function z(t){return typeof t=="string"&&ot.has(t)}function j(t){if(typeof t!="string")return false;if(it.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(k))return false;let e=t.slice(k.length);return e.length>=1&&e.length<=20}function ce(t){if(t.startsWith(k))return t.slice(k.length)}function W(t){if(!t)return null;try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?null:e}catch{return null}}function at(t){let e=W(t);return !!e&&Object.prototype.hasOwnProperty.call(e,"threadTitle")}function ue(t){let e=W(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let o=n,r={};return z(o.priority)&&(r.priority=o.priority),j(o.state)&&(r.state=o.state),r}function dt(t,e){let n=W(t)??{},o={...ue(t)};return e.priority===null?delete o.priority:e.priority!==void 0&&(o.priority=e.priority),e.state===null?delete o.state:e.state!==void 0&&(o.state=e.state),o.priority===void 0&&o.state===void 0?delete n.threadTitle:n.threadTitle=o,Object.keys(n).length===0?null:JSON.stringify(n)}function ct(t,e=new Map){let n=[];return t.priority&&n.push(se(st[t.priority],e.get(t.priority))),t.state&&(t.state.startsWith(k)?n.push(ce(t.state)??""):B[t.state]?n.push(se(B[t.state],e.get(t.state))):e.has(t.state)?n.push(t.state,e.get(t.state)??""):t.state.startsWith("c_")?n.push(t.state):n.push(B[t.state]??"")),n.filter(Boolean).join(" ")}function le(t,e){if(!t||t.trim().length===0)return;let n=new Set,o=false,r=false;for(let i of t.split(",")){let d=i.trim();if(d){if(d==="none"){o=true,r=true;continue}e(d)&&(n.add(d),r=true);}}if(r)return {values:n,includeNone:o}}function ut(t){return le(t,z)}function lt(t){return le(t,j)}function pt(t,e){return e?t?e.values.has(t):e.includeNone:true}export{te as ANTIGRAVITY_MODEL_COMPATIBILITY,de as BUILTIN_THREAD_STATES,F as BrowserFsAdapter,J as CLAUDE_MODEL_COMPATIBILITY_PAIRS,Le as CLAUDE_OPUS_4_8_BASE_MODEL_ID,Ue as CLAUDE_OPUS_4_8_LEGACY_MODEL_ID,v as ConfigLoadError,w as Crewx,we as EFFORT_LEVELS,Re as PROVIDER_ARGV_EFFORTS,H as PROVIDER_ORDER,g as ProviderError,ae as THREAD_PRIORITIES,Ce as classifyTaskError,tt as compareProviders,P as createProvider,ce as customStateLabel,at as hasThreadTitleKey,z as isThreadPriority,j as isThreadState,pt as matchesThreadTitleFilter,dt as mergeThreadTitleMeta,Ze as normalizeClaudeMode,rt as normalizeProviderId,ut as parseThreadPriorityFilter,lt as parseThreadStateFilter,Xe as parseYamlContent,G as providerRank,ue as readThreadTitleMeta,R as redactTechnicalMessage,M as registerProviderFactory,ne as resolveAntigravityModel,ee as resolveCatalogModelId,N as resolveProviderCatalogModel,ct as threadTitleSearchHaystack};
|
|
6
|
+
`,i):t.length;n+=t.slice(r,o.index),n+=`[HTTP BODY ${g}]`,r=s;}return n+t.slice(r)}function ye(t,e){let n=t[e];if(n==='"'||n==="'")return Ee(t,e,n);if(n!=="{"&&n!=="[")return -1;let r=[],o,i=false;for(let d=e;d<t.length;d+=1){let s=t[d];if(o){i?i=false:s==="\\"?i=true:s===o&&(o=void 0);continue}if(s==='"'||s==="'"){o=s;continue}if(s==="{"||s==="["){r.push(s);continue}if(s!=="}"&&s!=="]")continue;let c=r.pop();if(s==="}"&&c!=="{"||s==="]"&&c!=="[")return -1;if(r.length===0)return d+1}return -1}function Ee(t,e,n){let r=false;for(let o=e+1;o<t.length;o+=1){let i=t[o];if(r)r=false;else if(i==="\\")r=true;else if(i===n)return o+1}return -1}var ve=new Set(["USAGE_LIMITED","CONTEXT_WINDOW_EXCEEDED","INPUT_TOO_LARGE","MODEL_NOT_SUPPORTED","MODEL_AT_CAPACITY","AUTH_REQUIRED","CLI_NOT_AVAILABLE","CLI_UPDATE_REQUIRED","AGENT_NOT_FOUND","PERMISSION_OR_TRUST","TIMEOUT_OR_STUCK","NETWORK_OR_PROVIDER_TRANSIENT","PROVIDER_CONFIGURATION","AGENT_MODE_RESTRICTED","PROCESS_FAILED"]),xe=new Set(["plan","plan-auto","read-only"]),Ce={QUOTA_EXHAUSTED:"USAGE_LIMITED",RATE_LIMITED:"USAGE_LIMITED",AUTH_REQUIRED:"AUTH_REQUIRED",TIMEOUT_IDLE:"TIMEOUT_OR_STUCK",TIMEOUT_TOTAL:"TIMEOUT_OR_STUCK",PROVIDER_NOT_FOUND:"PROVIDER_CONFIGURATION",INVALID_PROVIDER_FORMAT:"PROVIDER_CONFIGURATION",PROVIDER_CRASHED:"PROCESS_FAILED",EMPTY_OUTPUT:"PROCESS_FAILED"},_e=[{code:"USAGE_LIMITED",pattern:/(?:rate[ _-]?limit|quota|usage[ /_-]?limit|usage exhausted|too many requests|429\b)/i},{code:"CONTEXT_WINDOW_EXCEEDED",pattern:/context (?:window|length)|maximum context|context[_ -]?window[_ -]?exceeded|too many tokens/i},{code:"INPUT_TOO_LARGE",pattern:/input[_ -]?(?:is[_ -]?)?too[_ -]?large|prompt (?:is )?too (?:large|long)|request[_ -]?(?:is[_ -]?)?too[_ -]?large|payload[_ -]?(?:is[_ -]?)?too[_ -]?large|maximum input/i},{code:"MODEL_AT_CAPACITY",pattern:/(?:model|service|provider).*(?:at capacity|overloaded|temporarily busy)|at capacity|overloaded/i},{code:"MODEL_NOT_SUPPORTED",pattern:/(?:model|invalid_request_error).*(?:not[ _-]?supported|unsupported|does[ _-]?not[ _-]?exist|not[ _-]?found|invalid)|model[_-]?not[_-]?(?:found|supported)/i},{code:"AUTH_REQUIRED",pattern:/(?:401\b|unauthori[sz]ed|not logged in|login required|sign[ -]?in required|api key (?:is )?(?:missing|invalid|required)|authentication required)/i},{code:"CLI_UPDATE_REQUIRED",pattern:/(?:requires? a newer version|update (?:your )?cli|cli version.*(?:old|outdated|unsupported)|version mismatch)/i},{code:"CLI_NOT_AVAILABLE",pattern:/(?:ENOENT|command not found|executable.*not found|cli.*(?:not installed|unavailable)|is .* installed\?)/i},{code:"AGENT_NOT_FOUND",pattern:/agent[_ -]?not[_ -]?found|unknown agent/i},{code:"PERMISSION_OR_TRUST",pattern:/(?:permission denied|operation not permitted|workspace trust|not trusted|access denied|EACCES|EPERM)/i},{code:"TIMEOUT_OR_STUCK",pattern:/(?:timeout|timed out|took too long|stuck|idle timeout|ETIMEDOUT)/i},{code:"NETWORK_OR_PROVIDER_TRANSIENT",pattern:/(?:network (?:unreachable|error)|connection (?:reset|refused|closed)|ECONN(?:RESET|REFUSED|ABORTED)|service unavailable|upstream.*(?:5\d\d|error)|provider.*(?:5\d\d|unavailable|down)|\b5\d\d\b)/i},{code:"PROVIDER_CONFIGURATION",pattern:/(?:invalid provider|unsupported provider|provider namespace|provider configuration|provider config|missing provider)/i}];function ke(t){try{if(!y(t)||t.status!=="failed")return D();let e=Ie(t.error);if(N(e.message))return D();let n=m(t.providerId)??e.provider??null,r=Ae(t.logs),o=Z(e.code);if(o)return _(o,n,e.message,e);let i=A(e.providerCode)??A(e.code),d=i?U(i,e.message,{exitCode:Se(t.exitCode),mode:e.mode,fromProviderCodeField:!!e.providerCode}):void 0;if(d)return _(d,n,e.message,e,i);let s=Oe(r);if(!Pe(e)&&s&&(s.type==="user_stop"||N(s.message)))return D();if(s){let l=be(s.code,s.providerCode,s.message);if(l)return _(l,n,s.message??e.message,e,s.providerCode??s.code,s,s.structuredFailure?"terminal":"envelope")}let c=we(e.message,r);return c?_(c.code,n,c.message,e,c.terminal?.providerCode??c.terminal?.code,c.terminal,c.terminal?.structuredFailure?"terminal":"envelope"):_("PROCESS_FAILED",n,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function D(){return {errorCode:null,errorProvider:null}}function _(t,e,n,r,o,i,d="envelope"){let s={};if(i?.resetAt!==void 0&&(s.resetAt=i.resetAt),r?.model&&(s.model=r.model),r?.mode&&(s.mode=r.mode),i?.type&&(s.upstreamType=i.type),o&&(s.upstreamCode=o),t==="CLI_NOT_AVAILABLE"||t==="CLI_UPDATE_REQUIRED"){let h=e?.startsWith("cli/")?e.slice(4):void 0;h&&(s.cliName=h);}let c=d==="terminal"?n:r?.message,l=d==="terminal"?i?.structuredFailure?c:void 0:r?.isEnvelope?c:void 0,u=S(l);return u&&(s.technicalMessage=u),Object.keys(s).length>0?{errorCode:t,errorProvider:e,errorMeta:s}:{errorCode:t,errorProvider:e}}function Ie(t){let e=typeof t=="string"?x(t):t;return y(e)?{isEnvelope:true,code:m(e.code),providerCode:m(e.providerCode),message:m(e.message)??m(e.error),provider:m(e.provider)??m(e.errorProvider),model:m(e.model),mode:m(e.mode)}:{isEnvelope:false,...typeof t=="string"&&t.trim()?{message:t.trim()}:{}}}function x(t){try{return JSON.parse(t)}catch{return}}function Pe(t){return !!(t.code||t.providerCode||t.message)}function Ae(t){let e=[];if(typeof t=="string"){let n=x(t);if(Array.isArray(n))e.push(...n);else for(let r of t.split(/\r?\n/)){let o=x(r.trim());o!==void 0&&e.push(o);}}else Array.isArray(t)?e.push(...t):y(t)&&e.push(t);return e.flatMap(v)}function v(t){if(!y(t))return [];let e=m(t.type),n=m(t.message);if(n&&!e){let o=x(n);if(Array.isArray(o))return o.flatMap(v);if(y(o))return v(o);let i=n.split(/\r?\n/).map(d=>x(d.trim())).filter(d=>y(d));return i.length>0?i.flatMap(v):t.level==="stderr"?[{type:"stderr",message:n,rank:1,structuredFailure:false}]:v({type:"info",content:n})}if(e==="rate_limit_event"){let o=X(t.rate_limit_info);return m(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:k(o?.message,t.message),resetAt:Re(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=X(t.error),i=k(o?.message,o?.detail,t.message,t.errorMessage,t.content),d=k(o?.code,t.code,t.errorCode);return [{type:e,code:d,providerCode:k(o?.providerCode,t.providerCode),message:i,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof t.content=="string"){let o=x(t.content);if(y(o))return v(o)}let r=k(t.errorMessage,t.content);return r&&N(r)?[{type:"user_stop",message:r,rank:1,structuredFailure:false}]:r&&/(?:turn\.failed|type:error)/i.test(r)?[{type:r.match(/turn\.failed/i)?"turn.failed":"error",message:r,rank:3,structuredFailure:false}]:[]}function Oe(t){return [...t].sort((e,n)=>n.rank-e.rank)[0]}function be(t,e,n){let r=Z(t);if(r)return r;if(t){let o=U(t,n);if(o)return o}if(e){let o=U(e,n);if(o)return o}return L(n)}function we(t,e){let n=L(t);if(n)return {code:n,message:t};for(let r of [...e].sort((o,i)=>i.rank-o.rank)){let o=L(r.message);if(o)return {code:o,message:r.message,terminal:r}}}function L(t){if(!(typeof t!="string"||!t.trim()))return _e.find(e=>e.pattern.test(t))?.code}function U(t,e,n){let r=A(t)??t;if(r==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(r==="EMPTY_OUTPUT"&&n?.fromProviderCodeField===true&&n.exitCode===0&&Me(n.mode))return "AGENT_MODE_RESTRICTED";if(r!=="UNKNOWN")return Ce[r]}function Z(t){let e=A(t);return e&&ve.has(e)?e:void 0}function A(t){return typeof t=="string"&&t.trim()?t.trim().toUpperCase():void 0}function Me(t){return typeof t=="string"&&xe.has(t.trim().toLowerCase())}function N(t){return t?/\b(?:stopped|killed|aborted|cancelled|canceled)\s+by\s+user\b/i.test(t)||/사용자에 의해 중지됨/.test(t)||/\b(?:SIGTERM\s+143|143\s+SIGTERM)\b/i.test(t):false}function y(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function X(t){return y(t)?t:void 0}function m(t){return typeof t=="string"&&t.trim()?t.trim():void 0}function Re(t){return typeof t=="string"||typeof t=="number"&&Number.isFinite(t)?t:void 0}function Se(t){return typeof t=="number"&&Number.isInteger(t)?t:void 0}function k(...t){return t.map(m).find(e=>!!e)}var De=["none","minimal","low","medium","high","xhigh","max","ultra"],Le={claude:["low","medium","high","xhigh","max"],codex:["minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]};var J={claude:{models:[{id:"claude-fable-5-1",name:"Claude Fable 5.1",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5-1":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-6-astra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}};Object.fromEntries(Object.entries(J).map(([t,e])=>[t,e.models]));var Fe="claude-opus-4-8",Be="claude-opus-4-8[1m]",ee=[{baseModelId:"claude-opus-4-8",catalogModelId:"claude-opus-4-8[1m]"},{baseModelId:"claude-opus-4-7",catalogModelId:"claude-opus-4-7[1m]"},{baseModelId:"claude-opus-4-6",catalogModelId:"claude-opus-4-6[1m]"},{baseModelId:"claude-sonnet-4-6",catalogModelId:"claude-sonnet-4-6[1m]"}];var Ge=new Map(ee.map(({baseModelId:t,catalogModelId:e})=>[t,e]));function te(t){return Ge.get(t)??t}var ne=[{legacyId:"Gemini 3.7 Flash (High)",model:"gemini-3.7-flash",effort:"high"},{legacyId:"Gemini 3.7 Flash (Medium)",model:"gemini-3.7-flash",effort:"medium"},{legacyId:"Gemini 3.7 Flash (Low)",model:"gemini-3.7-flash",effort:"low"},{legacyId:"Gemini 3.6 Flash (High)",model:"gemini-3.6-flash",effort:"high"},{legacyId:"Gemini 3.6 Flash (Medium)",model:"gemini-3.6-flash",effort:"medium"},{legacyId:"Gemini 3.6 Flash (Low)",model:"gemini-3.6-flash",effort:"low"},{legacyId:"Gemini 3.5 Flash (Medium)",model:"gemini-3.5-flash",effort:"medium"},{legacyId:"Gemini 3.5 Flash (High)",model:"gemini-3.5-flash",effort:"high"},{legacyId:"Gemini 3.5 Flash (Low)",model:"gemini-3.5-flash",effort:"low"},{legacyId:"Gemini 3.1 Pro (Low)",model:"gemini-3.1-pro",effort:"low"},{legacyId:"Gemini 3.1 Pro (High)",model:"gemini-3.1-pro",effort:"high"},{legacyId:"Claude Sonnet 4.6 (Thinking)",model:"claude-sonnet-4-6"},{legacyId:"Claude Opus 4.6 (Thinking)",model:"claude-opus-4-6-thinking"},{legacyId:"GPT-OSS 120B (Medium)",model:"gpt-oss-120b",effort:"medium"},{legacyId:"gemini-3.7-flash-high",model:"gemini-3.7-flash",effort:"high"},{legacyId:"gemini-3.7-flash-medium",model:"gemini-3.7-flash",effort:"medium"},{legacyId:"gemini-3.7-flash-low",model:"gemini-3.7-flash",effort:"low"},{legacyId:"gemini-3.6-flash-high",model:"gemini-3.6-flash",effort:"high"},{legacyId:"gemini-3.6-flash-medium",model:"gemini-3.6-flash",effort:"medium"},{legacyId:"gemini-3.6-flash-low",model:"gemini-3.6-flash",effort:"low"},{legacyId:"gemini-3.5-flash-high",model:"gemini-3.5-flash",effort:"high"},{legacyId:"gemini-3.5-flash-medium",model:"gemini-3.5-flash",effort:"medium"},{legacyId:"gemini-3.5-flash-low",model:"gemini-3.5-flash",effort:"low"},{legacyId:"gemini-3.1-pro-high",model:"gemini-3.1-pro",effort:"high"},{legacyId:"gemini-3.1-pro-low",model:"gemini-3.1-pro",effort:"low"},{legacyId:"gpt-oss-120b-medium",model:"gpt-oss-120b",effort:"medium"}],He=new Map(ne.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));function re(t){if(!t)return {};let e=He.get(t);return e?{...e}:{model:t}}function F(t,e){return t==="antigravity"||t==="cli/antigravity"?re(e):e===void 0?{}:{model:te(e)}}var oe=30,ie=80;Object.keys(ze.special_tokens);var We=z$1.object({model:z$1.string().optional(),system_prompt:z$1.string().optional(),prompt:z$1.string().optional(),layout:z$1.union([z$1.string(),z$1.object({id:z$1.string(),props:z$1.record(z$1.unknown()).optional()}),z$1.object({props:z$1.record(z$1.unknown())}),z$1.object({template:z$1.string(),capabilities:z$1.object({semanticContinuity:z$1.boolean().optional(),continuity:z$1.boolean().optional(),continuitySlot:z$1.string().optional(),slot:z$1.string().optional()}).optional()})]).optional()}).catchall(z$1.unknown()),$e=z$1.object({include:z$1.array(z$1.string()).optional()}).optional(),Ve=z$1.object({id:z$1.string(),name:z$1.string().optional(),role:z$1.string().optional(),team:z$1.string().optional(),provider:z$1.union([z$1.string(),z$1.array(z$1.string())]),working_directory:z$1.string().optional(),description:z$1.string().optional(),tags:z$1.array(z$1.string()).optional(),inline:We.optional(),skills:$e}).catchall(z$1.unknown());z$1.object({id:z$1.string(),name:z$1.string(),workflow_id:z$1.string(),description:z$1.string().optional(),goal_id:z$1.string().optional()});var Ke=z$1.number().finite().int().min(oe).max(ie),qe=z$1.object({inputBudgetPercent:Ke.optional()}).catchall(z$1.unknown()),Qe=z$1.object({continuity:qe.optional()}).catchall(z$1.unknown()),Ye=z$1.object({bin_resolution:z$1.enum(["global_first","local_first"]).optional(),dreaming:Qe.optional(),wi:z$1.object({boards:z$1.array(z$1.unknown()).optional().catch(()=>{})}).catchall(z$1.unknown()).optional().catch(()=>{})}).catchall(z$1.unknown()),se=z$1.object({agents:z$1.array(Ve).optional(),hooks:z$1.array(z$1.unknown()).optional(),settings:Ye.optional(),skills:z$1.unknown().optional(),layouts:z$1.record(z$1.unknown()).optional(),documents:z$1.record(z$1.unknown()).optional()}).catchall(z$1.unknown());var C=class extends Error{constructor(n,r){super(n);this.cause=r;this.name="ConfigLoadError";}cause};function Ze(t){if(!t||typeof t!="string"||!t.trim())throw new C("YAML content must be a non-empty string");let e;try{e=load(t);}catch(o){throw new C(`YAML parse error: ${o.message}`,o)}let n=Je(e),r=se.safeParse(n);if(!r.success)throw new C(`Config validation error: ${r.error.message}`);return r.data}function Je(t){if(!t||typeof t!="object")return {agents:[]};let e=t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let n=e.agents,r=Object.entries(n).map(([o,i])=>({id:o,...i&&typeof i=="object"?i:{}}));return {...e,agents:r}}return e.agents?e:{...e,agents:[]}}var et={auto:"default"};function tt(t){return et[t]??t}var nt="crewx:fs:",B=class{prefix;store;constructor(e){this.prefix=e?.prefix??nt,this.store=e?.storage??new Map;}async readFile(e){let n=this.toKey(e),r=this.store.get(n);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let n=e.map(d=>d.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=n.split("/"),o=[];for(let d of r)d==="."||d===""||(d===".."?o.pop():o.push(d));let i=o.join("/");return n.startsWith("/")?`/${i}`:i}isAbsolute(e){return e.startsWith("/")}setItem(e,n){this.store.set(this.toKey(e),n);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let n=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(n+"/"),o=[];for(let i of this.store.keys())if(i.startsWith(r)){let s=i.slice(r.length).split("/")[0];s&&!o.includes(s)&&o.push(s);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};var G=["codex","claude","grok","opencode","antigravity","copilot"];function rt(t){let e=t.indexOf("/");return e===-1?t:t.slice(e+1)}function H(t){let e=rt(t),n=G.indexOf(e);return n===-1?G.length:n}function ot(t,e){return H(t)-H(e)}var it=new Set(["claude","copilot","codex","grok","opencode"]);function st(t){if(!t)return "";if(t.startsWith("acp/")){let e=t.slice(4);if(it.has(e))return `cli/${e}`}return t}var de=["urgent","high","medium","low"],ce=["investigating","in-progress","in-review","on-hold","done"],I="custom:";var at=new Set(de),dt=new Set(ce),ct={urgent:"U \uAE34\uAE09 Urgent",high:"P0 \uAE09\uD568 High",medium:"P1 \uC911\uC694 Medium",low:"P2 \uBCF4\uD1B5 Low"},j={investigating:"\uC870\uC0AC\uC911 Looking into","in-progress":"\uC9C4\uD589\uC911 In progress","in-review":"\uAC80\uD1A0\uC911 In review","on-hold":"\uBCF4\uB958 On hold",done:"\uC644\uB8CC Done"};function ae(t,e){return !e||e.includes(t)?e??t:`${t} ${e}`}function z(t){return typeof t=="string"&&at.has(t)}function W(t){if(typeof t!="string")return false;if(dt.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(I))return false;let e=t.slice(I.length);return e.length>=1&&e.length<=20}function ue(t){if(t.startsWith(I))return t.slice(I.length)}function $(t){if(!t)return null;try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?null:e}catch{return null}}function ut(t){let e=$(t);return !!e&&Object.prototype.hasOwnProperty.call(e,"threadTitle")}function le(t){let e=$(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,o={};return z(r.priority)&&(o.priority=r.priority),W(r.state)&&(o.state=r.state),o}function lt(t,e){let n=$(t)??{},r={...le(t)};return e.priority===null?delete r.priority:e.priority!==void 0&&(r.priority=e.priority),e.state===null?delete r.state:e.state!==void 0&&(r.state=e.state),r.priority===void 0&&r.state===void 0?delete n.threadTitle:n.threadTitle=r,Object.keys(n).length===0?null:JSON.stringify(n)}function pt(t,e=new Map){let n=[];return t.priority&&n.push(ae(ct[t.priority],e.get(t.priority))),t.state&&(t.state.startsWith(I)?n.push(ue(t.state)??""):j[t.state]?n.push(ae(j[t.state],e.get(t.state))):e.has(t.state)?n.push(t.state,e.get(t.state)??""):t.state.startsWith("c_")?n.push(t.state):n.push(j[t.state]??"")),n.filter(Boolean).join(" ")}function pe(t,e){if(!t||t.trim().length===0)return;let n=new Set,r=false,o=false;for(let i of t.split(",")){let d=i.trim();if(d){if(d==="none"){r=true,o=true;continue}e(d)&&(n.add(d),o=true);}}if(o)return {values:n,includeNone:r}}function gt(t){return pe(t,z)}function ft(t){return pe(t,W)}function mt(t,e){return e?t?e.values.has(t):e.includeNone:true}export{ne as ANTIGRAVITY_MODEL_COMPATIBILITY,ce as BUILTIN_THREAD_STATES,B as BrowserFsAdapter,ee as CLAUDE_MODEL_COMPATIBILITY_PAIRS,Fe as CLAUDE_OPUS_4_8_BASE_MODEL_ID,Be as CLAUDE_OPUS_4_8_LEGACY_MODEL_ID,C as ConfigLoadError,R as Crewx,De as EFFORT_LEVELS,Le as PROVIDER_ARGV_EFFORTS,G as PROVIDER_ORDER,f as ProviderError,de as THREAD_PRIORITIES,ke as classifyTaskError,ot as compareProviders,P as createProvider,ue as customStateLabel,ut as hasThreadTitleKey,z as isThreadPriority,W as isThreadState,mt as matchesThreadTitleFilter,lt as mergeThreadTitleMeta,tt as normalizeClaudeMode,st as normalizeProviderId,gt as parseThreadPriorityFilter,ft as parseThreadStateFilter,Ze as parseYamlContent,H as providerRank,le as readThreadTitleMeta,S as redactTechnicalMessage,M as registerProviderFactory,re as resolveAntigravityModel,te as resolveCatalogModelId,F as resolveProviderCatalogModel,pt as threadTitleSearchHaystack};
|
package/dist/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export type { LayoutDefinition, LayoutCapabilities, CustomLayoutDefinition, Inli
|
|
|
18
18
|
export { LayoutLoadError, PropsValidationError } from './layout/types';
|
|
19
19
|
export { TemplateEngine } from './template/engine';
|
|
20
20
|
export type { ExecPolicy, TemplateContext, TemplateEngineOptions } from './template/types';
|
|
21
|
+
export { PROMPT_TAGS, LEGACY_PROMPT_TAGS } from './prompt/tag-names';
|
|
21
22
|
export { DocumentLoader } from './template/loader/DocumentLoader';
|
|
22
23
|
export type { IFsAdapter } from './platform/IFsAdapter';
|
|
23
24
|
export { NodeFsAdapter, defaultFsAdapter } from './platform/NodeFsAdapter';
|