@crewx/sdk 0.9.0-rc.163 → 0.9.0-rc.164

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.
@@ -1,11 +1,11 @@
1
- import*as ue from'path';import ue__default,{join,dirname,resolve}from'path';import {fileURLToPath}from'url';import {existsSync,mkdirSync,writeFileSync,appendFileSync,lstatSync,readFileSync,statSync,realpathSync}from'fs';import Ho,{homedir}from'os';import {createHash,randomBytes,randomUUID}from'crypto';import {sqliteTable,text,integer,index,check,primaryKey,real,uniqueIndex,unique}from'drizzle-orm/sqlite-core';import {sql,and,eq,inArray,or,isNull,ne as ne$1,desc,lt as lt$1,notLike,asc,like,gte,isNotNull,getTableColumns}from'drizzle-orm';import {spawn}from'child_process';var ou=Object.defineProperty;var Dt=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var x=(t,e)=>()=>(t&&(e=t(t=0)),e);var iu=(t,e)=>{for(var n in e)ou(t,n,{get:e[n],enumerable:true});};var uu,cu,S,h=x(()=>{uu=()=>fileURLToPath(import.meta.url),cu=()=>ue__default.dirname(uu()),S=cu();});var f,it=x(()=>{h();f=class extends Error{code;cause;constructor(e,n,r){super(n),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};});function Mo(t){if(t===":memory:")return t;let e=resolve(t),n=e,r=[];for(;!existsSync(n);){let o=dirname(n);if(o===n)return e;r.unshift(n.slice(o.length+1)),n=o;}let s=realpathSync(n);for(let o of r)s=join(s,o);return resolve(s)}function yu(t,e){let n=Mo(t),r=Mo(e);return process.platform==="win32"?n.toLowerCase()===r.toLowerCase():n===r}function _t(t){if((process.env.NODE_ENV==="test"||process.env.VITEST!==void 0)&&Eu.some(e=>yu(t,join(Ho.homedir(),".crewx",e))))throw new Error(`${wu}: ${t}. Set CREWX_DB to an isolated temporary path or :memory:.`);return t}var wu,Eu,he,at=x(()=>{h();wu="[crewx] Refusing to open the real CrewX database from a test process";Eu=["crewx.db","logs.db"];he=class{resolveDbPath(){if(process.env.CREWX_TRACES_DB!==void 0)throw new Error(`CREWX_TRACES_DB is removed. Use CREWX_DB instead. (got: ${process.env.CREWX_TRACES_DB})`);let e=process.env.CREWX_DB||join(Ho.homedir(),".crewx","crewx.db");return _t(e)}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return existsSync(e??this.resolveDbPath())}};});function U(t,e={}){let n=_t(t),r=Dt("better-sqlite3"),{drizzle:s}=Dt("drizzle-orm/better-sqlite3"),o=e.readOnly?new r(n,{readonly:true,fileMustExist:true}):new r(n);return e.readOnly||(o.exec("PRAGMA journal_mode = WAL"),o.exec(`PRAGMA journal_size_limit = ${Su}`),o.exec("PRAGMA busy_timeout = 5000"),o.exec("PRAGMA foreign_keys = ON"),o.exec("PRAGMA analysis_limit = 400")),{db:s(o),runRaw:(i,u=[])=>o.prepare(i).run(...u),close:()=>o.close()}}var Su,mt=x(()=>{h();at();Su=32*1024*1024;});function Lt(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Au(t,e){if(e>0||!Lt(t,"tasks"))return;let n=t.all("PRAGMA table_info(tasks)"),r=new Set(n.map(s=>s.name));for(let[s,o]of Object.entries(Iu))r.has(s)||t.run(`ALTER TABLE tasks ADD COLUMN ${s} ${o}`);}function bu(t,e,n){if(!Lt(t,"__drizzle_migrations")||!Lt(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),s=new Set(r.map(i=>i.hash)),o=JSON.parse(readFileSync(ue__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of o.entries){let u=Ou[i.tag];if(!u)continue;let d=ue__default.join(e,`${i.tag}.sql`);if(!existsSync(d))continue;let c=readFileSync(d,"utf-8"),l=createHash("sha256").update(c).digest("hex");if(s.has(l))continue;let p=t.all("PRAGMA table_info(tasks)"),g=new Set(p.map(_=>_.name));for(let[_,m]of Object.entries(u))g.has(_)||(t.run(`ALTER TABLE tasks ADD COLUMN ${_} ${m}`),g.add(_));}}function qo(t){let e=t.trim().replace(/;+\s*$/,"").trim(),n=e.match(/^ALTER\s+TABLE\s+[`"]?([A-Za-z_][\w$]*)[`"]?\s+ADD\s+(?:COLUMN\s+)?[`"]?([A-Za-z_][\w$]*)[`"]?/i);if(n)return {kind:"add-column",table:n[1],column:n[2]};let r=e.match(/^CREATE\s+(?:UNIQUE\s+)?INDEX(?:\s+IF\s+NOT\s+EXISTS)?\s+[`"]?([A-Za-z_][\w$]*)[`"]?\s+ON\s+/i);if(r)return {kind:"create-index",name:r[1]};let s=e.match(/^DROP\s+INDEX\s+IF\s+EXISTS\s+[`"]?([A-Za-z_][\w$]*)[`"]?/i);if(s)return {kind:"drop-index",name:s[1]}}function Bo(t){return t.split(/-->\s*statement-breakpoint/).map(e=>e.trim()).filter(Boolean)}function vu(t,e,n){return t.all(`PRAGMA table_info("${e}")`).some(o=>o.name===n)}function Nu(t,e){return t.all(`SELECT name FROM sqlite_master WHERE type = 'index' AND name = '${e}'`).length>0}function Xn(t,e){return e.kind==="add-column"?vu(t,e.table,e.column):Nu(t,e.name)}function Wo(t,e,n){let r=t;for(let s of Bo(e)){let o=qo(s);o?.kind==="add-column"&&Xn(r,o)||o?.kind==="create-index"&&Xn(r,o)||o?.kind==="drop-index"&&!Xn(r,o)||r.run(n.raw(s));}}function xu(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),s=new Set(r.map(i=>i.hash)),o=JSON.parse(readFileSync(ue__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of o.entries){let u=ue__default.join(e,`${i.tag}.sql`);if(!existsSync(u))continue;let d=readFileSync(u,"utf-8"),c=createHash("sha256").update(d).digest("hex");if(s.has(c))continue;let p=Bo(d).map(qo);if(p.some(_=>!_))continue;let g=p;g.some(_=>_.kind==="add-column")&&g.some(_=>Xn(t,_))&&(t.transaction(_=>{Wo(_,d,n),_.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${i.when})`);},{behavior:"immediate"}),s.add(c),console.error(`[crewx] Reconciled additive migration ${i.tag} from existing schema objects.`));}}function Cu(t,e){let{sql:n}=Dt("drizzle-orm"),r=JSON.parse(readFileSync(ue__default.join(e,"meta/_journal.json"),"utf-8")),o=["0025_task_heartbeat","0025_thread_app_instance_ledger","0026_mcp_action_source","0027_ui_instance_active_unique"].map(i=>{let u=r.entries.find(c=>c.tag===i);if(!u)throw new Error(`Missing release/App compatibility migration: ${i}`);let d=readFileSync(ue__default.join(e,`${i}.sql`),"utf-8");return {entry:u,content:d,hash:createHash("sha256").update(d).digest("hex")}});t.transaction(i=>{let u=new Set(i.all(n`SELECT hash FROM __drizzle_migrations`).map(d=>d.hash));if(u.has(o[0].hash))for(let d of o.slice(1))u.has(d.hash)||(Wo(i,d.content,n),i.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${d.hash}, ${d.entry.when})`),u.add(d.hash),console.error(`[crewx] Replayed release/App migration ${d.entry.tag} safely.`));},{behavior:"immediate"});}function Mu(t,e,n,r){let o=JSON.parse(readFileSync(ue__default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===Du);if(!o)return;let i=ue__default.join(e,`${o.tag}.sql`);if(!existsSync(i))return;let u=createHash("sha256").update(readFileSync(i,"utf-8")).digest("hex");if(r&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u))return;if(!Lt(t,"tasks"))return {hash:u,affectedRows:0};let d=t.all("PRAGMA table_info(tasks)"),c=new Set(d.map(p=>p.name));if(!c.has("stop_requested_at")||!c.has("stop_requested_epoch"))return {hash:u,affectedRows:0};let l=t.get(n`
1
+ import*as le from'path';import le__default,{join,dirname,resolve}from'path';import {fileURLToPath}from'url';import {existsSync,mkdirSync,writeFileSync,appendFileSync,lstatSync,readFileSync,statSync,realpathSync}from'fs';import Go,{homedir}from'os';import {createHash,randomBytes,randomUUID}from'crypto';import {sqliteTable,text,integer,index,check,primaryKey,real,uniqueIndex,unique}from'drizzle-orm/sqlite-core';import {sql,and,eq,inArray,or,isNull,ne as ne$1,desc,lt as lt$1,notLike,asc,like,gte,isNotNull,getTableColumns}from'drizzle-orm';import {spawn}from'child_process';var gu=Object.defineProperty;var Lt=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var x=(t,e)=>()=>(t&&(e=t(t=0)),e);var hu=(t,e)=>{for(var n in e)gu(t,n,{get:e[n],enumerable:true});};var ku,Tu,S,h=x(()=>{ku=()=>fileURLToPath(import.meta.url),Tu=()=>le__default.dirname(ku()),S=Tu();});var f,at=x(()=>{h();f=class extends Error{code;cause;constructor(e,n,r){super(n),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};});function Wo(t){if(t===":memory:")return t;let e=resolve(t),n=e,r=[];for(;!existsSync(n);){let o=dirname(n);if(o===n)return e;r.unshift(n.slice(o.length+1)),n=o;}let s=realpathSync(n);for(let o of r)s=join(s,o);return resolve(s)}function vu(t,e){let n=Wo(t),r=Wo(e);return process.platform==="win32"?n.toLowerCase()===r.toLowerCase():n===r}function mt(t){if((process.env.NODE_ENV==="test"||process.env.VITEST!==void 0)&&xu.some(e=>vu(t,join(Go.homedir(),".crewx",e))))throw new Error(`${Nu}: ${t}. Set CREWX_DB to an isolated temporary path or :memory:.`);return t}var Nu,xu,me,dt=x(()=>{h();Nu="[crewx] Refusing to open the real CrewX database from a test process";xu=["crewx.db","logs.db"];me=class{resolveDbPath(){if(process.env.CREWX_TRACES_DB!==void 0)throw new Error(`CREWX_TRACES_DB is removed. Use CREWX_DB instead. (got: ${process.env.CREWX_TRACES_DB})`);let e=process.env.CREWX_DB||join(Go.homedir(),".crewx","crewx.db");return mt(e)}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return existsSync(e??this.resolveDbPath())}};});function H(t,e={}){let n=mt(t),r=Lt("better-sqlite3"),{drizzle:s}=Lt("drizzle-orm/better-sqlite3"),o=e.readOnly?new r(n,{readonly:true,fileMustExist:true}):new r(n);return e.readOnly||(o.exec("PRAGMA journal_mode = WAL"),o.exec(`PRAGMA journal_size_limit = ${Du}`),o.exec("PRAGMA busy_timeout = 5000"),o.exec("PRAGMA foreign_keys = ON"),o.exec("PRAGMA analysis_limit = 400")),{db:s(o),runRaw:(i,u=[])=>o.prepare(i).run(...u),close:()=>o.close()}}var Du,kt=x(()=>{h();dt();Du=32*1024*1024;});function $t(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Lu(t,e){if(e>0||!$t(t,"tasks"))return;let n=t.all("PRAGMA table_info(tasks)"),r=new Set(n.map(s=>s.name));for(let[s,o]of Object.entries(Pu))r.has(s)||t.run(`ALTER TABLE tasks ADD COLUMN ${s} ${o}`);}function $u(t,e,n){if(!$t(t,"__drizzle_migrations")||!$t(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),s=new Set(r.map(i=>i.hash)),o=JSON.parse(readFileSync(le__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of o.entries){let u=Mu[i.tag];if(!u)continue;let d=le__default.join(e,`${i.tag}.sql`);if(!existsSync(d))continue;let c=readFileSync(d,"utf-8"),l=createHash("sha256").update(c).digest("hex");if(s.has(l))continue;let p=t.all("PRAGMA table_info(tasks)"),g=new Set(p.map(_=>_.name));for(let[_,m]of Object.entries(u))g.has(_)||(t.run(`ALTER TABLE tasks ADD COLUMN ${_} ${m}`),g.add(_));}}function Vo(t){let e=t.trim().replace(/;+\s*$/,"").trim(),n=e.match(/^ALTER\s+TABLE\s+[`"]?([A-Za-z_][\w$]*)[`"]?\s+ADD\s+(?:COLUMN\s+)?[`"]?([A-Za-z_][\w$]*)[`"]?/i);if(n)return {kind:"add-column",table:n[1],column:n[2]};let r=e.match(/^CREATE\s+(?:UNIQUE\s+)?INDEX(?:\s+IF\s+NOT\s+EXISTS)?\s+[`"]?([A-Za-z_][\w$]*)[`"]?\s+ON\s+/i);if(r)return {kind:"create-index",name:r[1]};let s=e.match(/^DROP\s+INDEX\s+IF\s+EXISTS\s+[`"]?([A-Za-z_][\w$]*)[`"]?/i);if(s)return {kind:"drop-index",name:s[1]}}function Jo(t){return t.split(/-->\s*statement-breakpoint/).map(e=>e.trim()).filter(Boolean)}function Hu(t,e,n){return t.all(`PRAGMA table_info("${e}")`).some(o=>o.name===n)}function Uu(t,e){return t.all(`SELECT name FROM sqlite_master WHERE type = 'index' AND name = '${e}'`).length>0}function tr(t,e){return e.kind==="add-column"?Hu(t,e.table,e.column):Uu(t,e.name)}function Xo(t,e,n){let r=t;for(let s of Jo(e)){let o=Vo(s);o?.kind==="add-column"&&tr(r,o)||o?.kind==="create-index"&&tr(r,o)||o?.kind==="drop-index"&&!tr(r,o)||r.run(n.raw(s));}}function Fu(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),s=new Set(r.map(i=>i.hash)),o=JSON.parse(readFileSync(le__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of o.entries){let u=le__default.join(e,`${i.tag}.sql`);if(!existsSync(u))continue;let d=readFileSync(u,"utf-8"),c=createHash("sha256").update(d).digest("hex");if(s.has(c))continue;let p=Jo(d).map(Vo);if(p.some(_=>!_))continue;let g=p;g.some(_=>_.kind==="add-column")&&g.some(_=>tr(t,_))&&(t.transaction(_=>{Xo(_,d,n),_.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${i.when})`);},{behavior:"immediate"}),s.add(c),console.error(`[crewx] Reconciled additive migration ${i.tag} from existing schema objects.`));}}function qu(t,e){let{sql:n}=Lt("drizzle-orm"),r=JSON.parse(readFileSync(le__default.join(e,"meta/_journal.json"),"utf-8")),o=["0025_task_heartbeat","0025_thread_app_instance_ledger","0026_mcp_action_source","0027_ui_instance_active_unique"].map(i=>{let u=r.entries.find(c=>c.tag===i);if(!u)throw new Error(`Missing release/App compatibility migration: ${i}`);let d=readFileSync(le__default.join(e,`${i}.sql`),"utf-8");return {entry:u,content:d,hash:createHash("sha256").update(d).digest("hex")}});t.transaction(i=>{let u=new Set(i.all(n`SELECT hash FROM __drizzle_migrations`).map(d=>d.hash));if(u.has(o[0].hash))for(let d of o.slice(1))u.has(d.hash)||(Xo(i,d.content,n),i.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${d.hash}, ${d.entry.when})`),u.add(d.hash),console.error(`[crewx] Replayed release/App migration ${d.entry.tag} safely.`));},{behavior:"immediate"});}function Gu(t,e,n,r){let o=JSON.parse(readFileSync(le__default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===Bu);if(!o)return;let i=le__default.join(e,`${o.tag}.sql`);if(!existsSync(i))return;let u=createHash("sha256").update(readFileSync(i,"utf-8")).digest("hex");if(r&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u))return;if(!$t(t,"tasks"))return {hash:u,affectedRows:0};let d=t.all("PRAGMA table_info(tasks)"),c=new Set(d.map(p=>p.name));if(!c.has("stop_requested_at")||!c.has("stop_requested_epoch"))return {hash:u,affectedRows:0};let l=t.get(n`
2
2
  SELECT count(*) AS count
3
3
  FROM tasks
4
4
  WHERE status IN ('success', 'failed')
5
5
  AND (stop_requested_at IS NOT NULL OR stop_requested_epoch IS NOT NULL)
6
- `);return {hash:u,affectedRows:l?.count??0}}function $u(t,e,n,r){let o=JSON.parse(readFileSync(ue__default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===Pu);if(!o)return;let i=ue__default.join(e,`${o.tag}.sql`);if(!existsSync(i))return;let u=createHash("sha256").update(readFileSync(i,"utf-8")).digest("hex");if(r&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u))return;if(!Lt(t,"threads"))return {hash:u,markedPointers:0};if(!t.all("PRAGMA table_info(threads)").some(p=>p.name==="created_by_task_id"))return {hash:u,markedPointers:0};let c=Lt(t,Fo)?`AND NOT EXISTS (
6
+ `);return {hash:u,affectedRows:l?.count??0}}function zu(t,e,n,r){let o=JSON.parse(readFileSync(le__default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===Wu);if(!o)return;let i=le__default.join(e,`${o.tag}.sql`);if(!existsSync(i))return;let u=createHash("sha256").update(readFileSync(i,"utf-8")).digest("hex");if(r&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u))return;if(!$t(t,"threads"))return {hash:u,markedPointers:0};if(!t.all("PRAGMA table_info(threads)").some(p=>p.name==="created_by_task_id"))return {hash:u,markedPointers:0};let c=$t(t,Ko)?`AND NOT EXISTS (
7
7
  SELECT 1
8
- FROM ${Fo} AS marked
8
+ FROM ${Ko} AS marked
9
9
  WHERE marked.thread_id = current.id
10
10
  AND marked.created_by_task_id = current.created_by_task_id
11
11
  )`:"",l=t.get(`SELECT count(*) AS count
@@ -15,45 +15,45 @@ import*as ue from'path';import ue__default,{join,dirname,resolve}from'path';impo
15
15
  SELECT 1
16
16
  FROM sqlite_master
17
17
  WHERE type = 'trigger'
18
- AND name = '${Lu}'
18
+ AND name = '${ju}'
19
19
  )
20
- ${c}`);return {hash:u,markedPointers:l?.count??0}}function Hu(t){let{migrate:e}=Dt("drizzle-orm/better-sqlite3/migrator"),{sql:n}=Dt("drizzle-orm"),r=[ue__default.join(S,"../migrations"),ue__default.join(S,"migrations"),ue__default.join(S,"../../../../drizzle/migrations"),ue__default.join(process.cwd(),"drizzle/migrations")],s=r.find(p=>existsSync(ue__default.join(p,"meta/_journal.json")));if(!s)throw new Error(`migrations folder not found. Searched:
20
+ ${c}`);return {hash:u,markedPointers:l?.count??0}}function Ku(t){let{migrate:e}=Lt("drizzle-orm/better-sqlite3/migrator"),{sql:n}=Lt("drizzle-orm"),r=[le__default.join(S,"../migrations"),le__default.join(S,"migrations"),le__default.join(S,"../../../../drizzle/migrations"),le__default.join(process.cwd(),"drizzle/migrations")],s=r.find(p=>existsSync(le__default.join(p,"meta/_journal.json")));if(!s)throw new Error(`migrations folder not found. Searched:
21
21
  ${r.join(`
22
- `)}`);let o=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;o?.cnt&&(i=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Au(t,i),o?.cnt&&(Cu(t,s),xu(t,s,n),bu(t,s,n));let u=Mu(t,s,n,!!o?.cnt),d=$u(t,s,n,!!o?.cnt);e(t,{migrationsFolder:s});let l=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(l>0){let p=o?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${p} (${l} migration${l>1?"s":""} applied).`);}u&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u.hash)&&console.error(`[crewx] Task stop-marker cleanup (${u.affectedRows} success/failed row(s) affected).`),d&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===d.hash)&&console.error(`[crewx] Thread creator pointer migration (${d.markedPointers} pointer(s) marked unverified).`);}function Ae(t,e){Uo.has(e)||(Hu(t),Uo.add(e));}var Uo,Iu,Ou,Du,Pu,Lu,Fo,kt=x(()=>{h();Uo=new Set,Iu={agent_id:"TEXT",status:"TEXT DEFAULT 'running'",started_at:"TEXT",trace_id:"TEXT",parent_task_id:"TEXT",crewx_version:"TEXT",pid:"INTEGER",thread_id:"TEXT",workspace_id:"TEXT",workspace_ref:"TEXT",workspace_name:"TEXT",project_id:"TEXT",project_name:"TEXT",command:"TEXT"};Ou={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"},"0015_panoramic_gorilla_man":{project_id:"TEXT",workspace_id:"TEXT"},"0019_backfill_task_thread_ids":{command:"TEXT",thread_id:"TEXT"},"0024_storage_metadata":{prompt:"TEXT",rendered_prompt:"TEXT",result:"TEXT",input_tokens:"INTEGER DEFAULT 0",output_tokens:"INTEGER DEFAULT 0",cost_usd:"REAL DEFAULT 0"}};Du="0027_task_stop_scope_cleanup",Pu="0033_thread_creator_boundary_guard",Lu="trg_threads_creator_late_fill_guard",Fo="thread_creator_unverified";});var Oe,Yr=x(()=>{h();Oe=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),starred:integer("starred").notNull().default(0)});});var a,ah,Wu,te,Mt=x(()=>{h();a=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),actor_kind:text("actor_kind",{enum:["human","agent","system","unknown"]}),actor_id:text("actor_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),heartbeat_at:text("heartbeat_at"),stop_requested_at:text("stop_requested_at"),stop_requested_epoch:integer("stop_requested_epoch"),rendered_prompt:text("rendered_prompt"),security_key:text("security_key"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),log_storage:text("log_storage",{enum:["blob","events"]}).notNull().default("blob"),last_log_seq:integer("last_log_seq").notNull().default(0),log_revision:integer("log_revision").notNull().default(0),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),cwd:text("cwd"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0),run_epoch:integer("run_epoch").default(0),rating:text("rating",{enum:["up","down"]}),rated_at:text("rated_at")},t=>({log_storage_check:check("tasks_log_storage_ck",sql`${t.log_storage} IN ('blob', 'events')`),rating_check:check("tasks_rating_ck",sql`${t.rating} IN ('up', 'down')`),idx_tasks_agent_id:index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:index("idx_tasks_status").on(t.status),idx_tasks_started_at:index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(t.pid),idx_tasks_status_heartbeat:index("idx_tasks_status_heartbeat").on(t.status,t.heartbeat_at),idx_tasks_thread_id:index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_thread_creator:index("idx_tasks_thread_creator").on(t.id,t.thread_id,t.actor_kind,t.actor_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(t.workspace_id,t.started_at),idx_tasks_ws_rated:index("idx_tasks_ws_rated").on(t.workspace_id,t.rating,t.rated_at).where(sql`${t.rating} IS NOT NULL`)})),{security_key:ah,...Wu}=getTableColumns(a),te=Wu;});var tt,Ko=x(()=>{h();Mt();tt=sqliteTable("task_provider_inputs",{task_id:text("task_id").notNull().references(()=>a.id,{onDelete:"cascade"}),run_epoch:integer("run_epoch").notNull(),input:text("input").notNull(),key_wrap_skipped:integer("key_wrap_skipped").notNull().default(0),recorded_at:text("recorded_at").notNull()},t=>({pk:primaryKey({columns:[t.task_id,t.run_epoch]})}));});var ze,Jo=x(()=>{h();Mt();ze=sqliteTable("task_log_events",{id:integer("id").primaryKey(),task_id:text("task_id").notNull().references(()=>a.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),timestamp:text("timestamp").notNull(),level:text("level").notNull(),message:text("message").notNull()},t=>({taskSeqUnique:uniqueIndex("task_log_events_task_seq_uq").on(t.task_id,t.seq),timestampIdIndex:index("task_log_events_timestamp_id_idx").on(t.timestamp,t.id)}));});var Xu,Yu,T,Zn=x(()=>{h();Yr();Xu="json_extract(metadata, '$.threadTitle.state')",Yu="json_extract(metadata, '$.threadTitle.priority')",T=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>Oe.id,{onDelete:"set null"}),created_by_kind:text("created_by_kind",{enum:["human","agent","system","unknown"]}),created_by_id:text("created_by_id"),created_by_task_id:text("created_by_task_id"),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},t=>({idx_threads_updated_at:index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_workspace_created_by_kind_updated_at:index("idx_threads_workspace_created_by_kind_updated_at").on(t.workspace_id,t.created_by_kind,t.updated_at),idx_threads_title:index("idx_threads_title").on(t.title),idx_threads_workspace_thread_state:index("idx_threads_workspace_thread_state").on(t.workspace_id,sql.raw(Xu)),idx_threads_workspace_thread_priority:index("idx_threads_workspace_thread_priority").on(t.workspace_id,sql.raw(Yu))}));});var Qo=x(()=>{h();sqliteTable("thread_creator_unverified",{thread_id:text("thread_id").notNull(),created_by_task_id:text("created_by_task_id").notNull()},t=>({pk:primaryKey({columns:[t.thread_id,t.created_by_task_id]})}));});var nc,ei=x(()=>{h();Mt();nc=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>a.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>nc.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},t=>({idx_spans_task_id:index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(t.parent_span_id)}));});var ti=x(()=>{h();Mt();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>a.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},t=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(t.timestamp)}));});var ri=x(()=>{h();Zn();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:unique().on(t.thread_id,t.seq)}));});var oi=x(()=>{h();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},t=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(t.partition_key)}));});var ii=x(()=>{h();sqliteTable("request_log_daily",{day:text("day").notNull(),scope:text("scope").notNull(),ok:integer("ok").notNull(),client:integer("client").notNull(),server:integer("server").notNull(),p50_ms:integer("p50_ms"),p95_ms:integer("p95_ms"),computed_at:text("computed_at").notNull()},t=>({pk:primaryKey({columns:[t.day,t.scope]})}));});var ui=x(()=>{h();sqliteTable("usage_limit_snapshots",{id:text("id").primaryKey(),provider:text("provider").notNull(),account_ref:text("account_ref").notNull().default("default"),limit_window:text("limit_window").notNull(),bucket_start:text("bucket_start").notNull(),captured_at:text("captured_at").notNull(),used_percent:integer("used_percent").notNull(),remaining_percent:integer("remaining_percent").notNull(),resets_at:text("resets_at"),source:text("source").notNull(),metadata:text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));});var ci=x(()=>{h();sqliteTable("usage_reports",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),month:text("month").notNull(),generated_at:text("generated_at").notNull(),source_range:text("source_range").notNull(),tier:text("tier").notNull(),total_tokens:integer("total_tokens").notNull(),total_cost_usd:real("total_cost_usd").notNull(),payload:text("payload").notNull(),payload_hash:text("payload_hash"),signature:text("signature"),signed_at:text("signed_at"),issuer:text("issuer")},t=>({uniq_usage_reports_ws_month:uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));});var pi=x(()=>{h();sqliteTable("notifications",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id"),task_id:text("task_id"),thread_id:text("thread_id"),source:text("source").notNull().default("agent"),level:text("level").notNull().default("info"),title:text("title").notNull(),body:text("body"),target_user_id:text("target_user_id"),created_at:text("created_at").notNull(),metadata:text("metadata")},t=>({idx_notifications_ws_created:index("idx_notifications_ws_created").on(t.workspace_id,sql`${t.created_at} DESC`)})),sqliteTable("notification_reads",{notification_id:text("notification_id").notNull(),user_id:text("user_id").notNull(),read_at:text("read_at").notNull()},t=>({pk:primaryKey({columns:[t.notification_id,t.user_id]})}));});var gi=x(()=>{h();sqliteTable("agent_suggestions",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id").notNull(),task_id:text("task_id"),type:text("type").notNull(),status:text("status").notNull().default("pending"),payload:text("payload").notNull(),applied_commit_sha:text("applied_commit_sha"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));});var hi=x(()=>{h();sqliteTable("ui_instances",{id:text("id").primaryKey().notNull(),definition_id:text("definition_id").notNull(),definition_version:integer("definition_version").notNull(),definition_hash:text("definition_hash").notNull(),workspace_id:text("workspace_id").notNull(),thread_id:text("thread_id").notNull(),app_id:text("app_id"),anchor_task_id:text("anchor_task_id"),domain_ref_json:text("domain_ref_json").notNull(),state_json:text("state_json").notNull(),revision:integer("revision").notNull().default(0),status:text("status").notNull().default("active"),granted_capabilities_json:text("granted_capabilities_json").notNull().default("[]"),opened_by_json:text("opened_by_json"),agent_open_request_json:text("agent_open_request_json"),created_at:integer("created_at").notNull(),updated_at:integer("updated_at").notNull()},t=>({idCheck:check("ui_instances_id_ck",sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:check("ui_instances_definition_id_ck",sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:check("ui_instances_definition_version_ck",sql`${t.definition_version} >= 1`),definitionHashCheck:check("ui_instances_definition_hash_ck",sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:check("ui_instances_workspace_id_ck",sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:check("ui_instances_thread_id_ck",sql`length(${t.thread_id}) BETWEEN 1 AND 256`),appIdCheck:check("ui_instances_app_id_ck",sql`${t.app_id} IS NULL OR length(${t.app_id}) BETWEEN 1 AND 128`),domainRefJsonCheck:check("ui_instances_domain_ref_json_ck",sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:check("ui_instances_state_json_ck",sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:check("ui_instances_revision_ck",sql`${t.revision} >= 0`),statusCheck:check("ui_instances_status_ck",sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:check("ui_instances_granted_capabilities_json_ck",sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),openedByJsonCheck:check("ui_instances_opened_by_json_ck",sql`${t.opened_by_json} IS NULL OR (json_valid(${t.opened_by_json}) AND json_type(${t.opened_by_json}) = 'object')`),createdAtCheck:check("ui_instances_created_at_ck",sql`${t.created_at} >= 0`),updatedAtCheck:check("ui_instances_updated_at_ck",sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id),workspaceThreadAppUnique:uniqueIndex("ui_instances_workspace_thread_app_uq").on(t.workspace_id,t.thread_id,t.app_id).where(sql`${t.status} = 'active'`)}));});var mi=x(()=>{h();sqliteTable("ui_action_receipts",{id:text("id").primaryKey().notNull(),instance_id:text("instance_id").notNull(),definition_id:text("definition_id"),definition_version:integer("definition_version"),definition_hash:text("definition_hash"),request_id:text("request_id").notNull(),action_id:text("action_id").notNull(),actor_json:text("actor_json").notNull(),source:text("source").notNull(),expected_revision:integer("expected_revision").notNull(),before_revision:integer("before_revision").notNull(),after_revision:integer("after_revision"),status:text("status").notNull(),outcome:text("outcome"),input_json:text("input_json").notNull(),result_json:text("result_json"),error_code:text("error_code"),requested_at:integer("requested_at").notNull(),settled_at:integer("settled_at")},t=>({idCheck:check("ui_action_receipts_id_ck",sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:check("ui_action_receipts_instance_id_ck",sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:check("ui_action_receipts_request_id_ck",sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:check("ui_action_receipts_action_id_ck",sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:check("ui_action_receipts_actor_json_ck",sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:check("ui_action_receipts_source_ck",sql`${t.source} IN ('ui_host', 'cli', 'system', 'mcp')`),expectedRevisionCheck:check("ui_action_receipts_expected_revision_ck",sql`${t.expected_revision} >= 0`),beforeRevisionCheck:check("ui_action_receipts_before_revision_ck",sql`${t.before_revision} >= 0`),afterRevisionCheck:check("ui_action_receipts_after_revision_ck",sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:check("ui_action_receipts_status_ck",sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:check("ui_action_receipts_outcome_ck",sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:check("ui_action_receipts_input_json_ck",sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:check("ui_action_receipts_result_json_ck",sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:check("ui_action_receipts_requested_at_ck",sql`${t.requested_at} >= 0`),settledAtCheck:check("ui_action_receipts_settled_at_ck",sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:check("ui_action_receipts_status_transition_ck",sql`(
22
+ `)}`);let o=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;o?.cnt&&(i=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Lu(t,i),o?.cnt&&(qu(t,s),Fu(t,s,n),$u(t,s,n));let u=Gu(t,s,n,!!o?.cnt),d=zu(t,s,n,!!o?.cnt);e(t,{migrationsFolder:s});let l=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(l>0){let p=o?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${p} (${l} migration${l>1?"s":""} applied).`);}u&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u.hash)&&console.error(`[crewx] Task stop-marker cleanup (${u.affectedRows} success/failed row(s) affected).`),d&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===d.hash)&&console.error(`[crewx] Thread creator pointer migration (${d.markedPointers} pointer(s) marked unverified).`);}function be(t,e){zo.has(e)||(Ku(t),zo.add(e));}var zo,Pu,Mu,Bu,Wu,ju,Ko,Tt=x(()=>{h();zo=new Set,Pu={agent_id:"TEXT",status:"TEXT DEFAULT 'running'",started_at:"TEXT",trace_id:"TEXT",parent_task_id:"TEXT",crewx_version:"TEXT",pid:"INTEGER",thread_id:"TEXT",workspace_id:"TEXT",workspace_ref:"TEXT",workspace_name:"TEXT",project_id:"TEXT",project_name:"TEXT",command:"TEXT"};Mu={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"},"0015_panoramic_gorilla_man":{project_id:"TEXT",workspace_id:"TEXT"},"0019_backfill_task_thread_ids":{command:"TEXT",thread_id:"TEXT"},"0024_storage_metadata":{prompt:"TEXT",rendered_prompt:"TEXT",result:"TEXT",input_tokens:"INTEGER DEFAULT 0",output_tokens:"INTEGER DEFAULT 0",cost_usd:"REAL DEFAULT 0"}};Bu="0027_task_stop_scope_cleanup",Wu="0033_thread_creator_boundary_guard",ju="trg_threads_creator_late_fill_guard",Ko="thread_creator_unverified";});var te,nr=x(()=>{h();te=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),starred:integer("starred").notNull().default(0)});});var a,kh,Qu,ne,Ht=x(()=>{h();a=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),actor_kind:text("actor_kind",{enum:["human","agent","system","unknown"]}),actor_id:text("actor_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),heartbeat_at:text("heartbeat_at"),stop_requested_at:text("stop_requested_at"),stop_requested_epoch:integer("stop_requested_epoch"),rendered_prompt:text("rendered_prompt"),security_key:text("security_key"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),log_storage:text("log_storage",{enum:["blob","events"]}).notNull().default("blob"),last_log_seq:integer("last_log_seq").notNull().default(0),log_revision:integer("log_revision").notNull().default(0),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),cwd:text("cwd"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0),run_epoch:integer("run_epoch").default(0),rating:text("rating",{enum:["up","down"]}),rated_at:text("rated_at")},t=>({log_storage_check:check("tasks_log_storage_ck",sql`${t.log_storage} IN ('blob', 'events')`),rating_check:check("tasks_rating_ck",sql`${t.rating} IN ('up', 'down')`),idx_tasks_agent_id:index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:index("idx_tasks_status").on(t.status),idx_tasks_started_at:index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(t.pid),idx_tasks_status_heartbeat:index("idx_tasks_status_heartbeat").on(t.status,t.heartbeat_at),idx_tasks_thread_id:index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_thread_creator:index("idx_tasks_thread_creator").on(t.id,t.thread_id,t.actor_kind,t.actor_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(t.workspace_id,t.started_at),idx_tasks_ws_rated:index("idx_tasks_ws_rated").on(t.workspace_id,t.rating,t.rated_at).where(sql`${t.rating} IS NOT NULL`)})),{security_key:kh,...Qu}=getTableColumns(a),ne=Qu;});var nt,ei=x(()=>{h();Ht();nt=sqliteTable("task_provider_inputs",{task_id:text("task_id").notNull().references(()=>a.id,{onDelete:"cascade"}),run_epoch:integer("run_epoch").notNull(),input:text("input").notNull(),key_wrap_skipped:integer("key_wrap_skipped").notNull().default(0),recorded_at:text("recorded_at").notNull()},t=>({pk:primaryKey({columns:[t.task_id,t.run_epoch]})}));});var Ve,ni=x(()=>{h();Ht();Ve=sqliteTable("task_log_events",{id:integer("id").primaryKey(),task_id:text("task_id").notNull().references(()=>a.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),timestamp:text("timestamp").notNull(),level:text("level").notNull(),message:text("message").notNull()},t=>({taskSeqUnique:uniqueIndex("task_log_events_task_seq_uq").on(t.task_id,t.seq),timestampIdIndex:index("task_log_events_timestamp_id_idx").on(t.timestamp,t.id)}));});var oc,ic,T,mn=x(()=>{h();nr();oc="json_extract(metadata, '$.threadTitle.state')",ic="json_extract(metadata, '$.threadTitle.priority')",T=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>te.id,{onDelete:"set null"}),created_by_kind:text("created_by_kind",{enum:["human","agent","system","unknown"]}),created_by_id:text("created_by_id"),created_by_task_id:text("created_by_task_id"),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},t=>({idx_threads_updated_at:index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_workspace_created_by_kind_updated_at:index("idx_threads_workspace_created_by_kind_updated_at").on(t.workspace_id,t.created_by_kind,t.updated_at),idx_threads_title:index("idx_threads_title").on(t.title),idx_threads_workspace_thread_state:index("idx_threads_workspace_thread_state").on(t.workspace_id,sql.raw(oc)),idx_threads_workspace_thread_priority:index("idx_threads_workspace_thread_priority").on(t.workspace_id,sql.raw(ic))}));});var oi=x(()=>{h();sqliteTable("thread_creator_unverified",{thread_id:text("thread_id").notNull(),created_by_task_id:text("created_by_task_id").notNull()},t=>({pk:primaryKey({columns:[t.thread_id,t.created_by_task_id]})}));});var lc,ai=x(()=>{h();Ht();lc=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>a.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>lc.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},t=>({idx_spans_task_id:index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(t.parent_span_id)}));});var di=x(()=>{h();Ht();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>a.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},t=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(t.timestamp)}));});var ci=x(()=>{h();mn();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:unique().on(t.thread_id,t.seq)}));});var pi=x(()=>{h();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},t=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(t.partition_key)}));});var fi=x(()=>{h();sqliteTable("request_log_daily",{day:text("day").notNull(),scope:text("scope").notNull(),ok:integer("ok").notNull(),client:integer("client").notNull(),server:integer("server").notNull(),p50_ms:integer("p50_ms"),p95_ms:integer("p95_ms"),computed_at:text("computed_at").notNull()},t=>({pk:primaryKey({columns:[t.day,t.scope]})}));});var _i=x(()=>{h();sqliteTable("usage_limit_snapshots",{id:text("id").primaryKey(),provider:text("provider").notNull(),account_ref:text("account_ref").notNull().default("default"),limit_window:text("limit_window").notNull(),bucket_start:text("bucket_start").notNull(),captured_at:text("captured_at").notNull(),used_percent:integer("used_percent").notNull(),remaining_percent:integer("remaining_percent").notNull(),resets_at:text("resets_at"),source:text("source").notNull(),metadata:text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));});var mi=x(()=>{h();sqliteTable("usage_reports",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),month:text("month").notNull(),generated_at:text("generated_at").notNull(),source_range:text("source_range").notNull(),tier:text("tier").notNull(),total_tokens:integer("total_tokens").notNull(),total_cost_usd:real("total_cost_usd").notNull(),payload:text("payload").notNull(),payload_hash:text("payload_hash"),signature:text("signature"),signed_at:text("signed_at"),issuer:text("issuer")},t=>({uniq_usage_reports_ws_month:uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));});var Ti=x(()=>{h();sqliteTable("notifications",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id"),task_id:text("task_id"),thread_id:text("thread_id"),source:text("source").notNull().default("agent"),level:text("level").notNull().default("info"),title:text("title").notNull(),body:text("body"),target_user_id:text("target_user_id"),created_at:text("created_at").notNull(),metadata:text("metadata")},t=>({idx_notifications_ws_created:index("idx_notifications_ws_created").on(t.workspace_id,sql`${t.created_at} DESC`)})),sqliteTable("notification_reads",{notification_id:text("notification_id").notNull(),user_id:text("user_id").notNull(),read_at:text("read_at").notNull()},t=>({pk:primaryKey({columns:[t.notification_id,t.user_id]})}));});var yi=x(()=>{h();sqliteTable("agent_suggestions",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id").notNull(),task_id:text("task_id"),type:text("type").notNull(),status:text("status").notNull().default("pending"),payload:text("payload").notNull(),applied_commit_sha:text("applied_commit_sha"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));});var Ei=x(()=>{h();sqliteTable("ui_instances",{id:text("id").primaryKey().notNull(),definition_id:text("definition_id").notNull(),definition_version:integer("definition_version").notNull(),definition_hash:text("definition_hash").notNull(),workspace_id:text("workspace_id").notNull(),thread_id:text("thread_id").notNull(),app_id:text("app_id"),anchor_task_id:text("anchor_task_id"),domain_ref_json:text("domain_ref_json").notNull(),state_json:text("state_json").notNull(),revision:integer("revision").notNull().default(0),status:text("status").notNull().default("active"),granted_capabilities_json:text("granted_capabilities_json").notNull().default("[]"),opened_by_json:text("opened_by_json"),agent_open_request_json:text("agent_open_request_json"),created_at:integer("created_at").notNull(),updated_at:integer("updated_at").notNull()},t=>({idCheck:check("ui_instances_id_ck",sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:check("ui_instances_definition_id_ck",sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:check("ui_instances_definition_version_ck",sql`${t.definition_version} >= 1`),definitionHashCheck:check("ui_instances_definition_hash_ck",sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:check("ui_instances_workspace_id_ck",sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:check("ui_instances_thread_id_ck",sql`length(${t.thread_id}) BETWEEN 1 AND 256`),appIdCheck:check("ui_instances_app_id_ck",sql`${t.app_id} IS NULL OR length(${t.app_id}) BETWEEN 1 AND 128`),domainRefJsonCheck:check("ui_instances_domain_ref_json_ck",sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:check("ui_instances_state_json_ck",sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:check("ui_instances_revision_ck",sql`${t.revision} >= 0`),statusCheck:check("ui_instances_status_ck",sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:check("ui_instances_granted_capabilities_json_ck",sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),openedByJsonCheck:check("ui_instances_opened_by_json_ck",sql`${t.opened_by_json} IS NULL OR (json_valid(${t.opened_by_json}) AND json_type(${t.opened_by_json}) = 'object')`),createdAtCheck:check("ui_instances_created_at_ck",sql`${t.created_at} >= 0`),updatedAtCheck:check("ui_instances_updated_at_ck",sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id),workspaceThreadAppUnique:uniqueIndex("ui_instances_workspace_thread_app_uq").on(t.workspace_id,t.thread_id,t.app_id).where(sql`${t.status} = 'active'`)}));});var Si=x(()=>{h();sqliteTable("ui_action_receipts",{id:text("id").primaryKey().notNull(),instance_id:text("instance_id").notNull(),definition_id:text("definition_id"),definition_version:integer("definition_version"),definition_hash:text("definition_hash"),request_id:text("request_id").notNull(),action_id:text("action_id").notNull(),actor_json:text("actor_json").notNull(),source:text("source").notNull(),expected_revision:integer("expected_revision").notNull(),before_revision:integer("before_revision").notNull(),after_revision:integer("after_revision"),status:text("status").notNull(),outcome:text("outcome"),input_json:text("input_json").notNull(),result_json:text("result_json"),error_code:text("error_code"),requested_at:integer("requested_at").notNull(),settled_at:integer("settled_at")},t=>({idCheck:check("ui_action_receipts_id_ck",sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:check("ui_action_receipts_instance_id_ck",sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:check("ui_action_receipts_request_id_ck",sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:check("ui_action_receipts_action_id_ck",sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:check("ui_action_receipts_actor_json_ck",sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:check("ui_action_receipts_source_ck",sql`${t.source} IN ('ui_host', 'cli', 'system', 'mcp')`),expectedRevisionCheck:check("ui_action_receipts_expected_revision_ck",sql`${t.expected_revision} >= 0`),beforeRevisionCheck:check("ui_action_receipts_before_revision_ck",sql`${t.before_revision} >= 0`),afterRevisionCheck:check("ui_action_receipts_after_revision_ck",sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:check("ui_action_receipts_status_ck",sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:check("ui_action_receipts_outcome_ck",sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:check("ui_action_receipts_input_json_ck",sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:check("ui_action_receipts_result_json_ck",sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:check("ui_action_receipts_requested_at_ck",sql`${t.requested_at} >= 0`),settledAtCheck:check("ui_action_receipts_settled_at_ck",sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:check("ui_action_receipts_status_transition_ck",sql`(
23
23
  (${t.status} = 'requested' AND ${t.after_revision} IS NULL AND ${t.outcome} IS NULL AND ${t.settled_at} IS NULL)
24
24
  OR
25
25
  (${t.status} = 'settled' AND ${t.after_revision} IS NOT NULL AND ${t.outcome} IS NOT NULL AND ${t.settled_at} IS NOT NULL)
26
- )`),instanceRequestUnique:uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));});var ki=x(()=>{h();sqliteTable("ui_instance_repins",{instance_id:text("instance_id").notNull(),from_version:integer("from_version").notNull(),from_hash:text("from_hash").notNull(),to_version:integer("to_version").notNull(),to_hash:text("to_hash").notNull(),from_revision:integer("from_revision").notNull(),to_revision:integer("to_revision"),status:text("status").notNull(),code:text("code"),attempts:integer("attempts").notNull().default(1),first_at:integer("first_at").notNull(),last_at:integer("last_at").notNull()},t=>({pk:primaryKey({columns:[t.instance_id,t.to_hash],name:"ui_instance_repins_pk"}),instanceIdCheck:check("ui_instance_repins_instance_id_ck",sql`length(${t.instance_id}) BETWEEN 5 AND 128 AND ${t.instance_id} GLOB 'uic_*'`),fromVersionCheck:check("ui_instance_repins_from_version_ck",sql`${t.from_version} >= 1`),toVersionCheck:check("ui_instance_repins_to_version_ck",sql`${t.to_version} >= 1`),fromHashCheck:check("ui_instance_repins_from_hash_ck",sql`length(${t.from_hash}) = 64 AND ${t.from_hash} NOT GLOB '*[^0-9a-f]*'`),toHashCheck:check("ui_instance_repins_to_hash_ck",sql`length(${t.to_hash}) = 64 AND ${t.to_hash} NOT GLOB '*[^0-9a-f]*'`),fromRevisionCheck:check("ui_instance_repins_from_revision_ck",sql`${t.from_revision} >= 0`),toRevisionCheck:check("ui_instance_repins_to_revision_ck",sql`${t.to_revision} IS NULL OR ${t.to_revision} >= 0`),statusCheck:check("ui_instance_repins_status_ck",sql`${t.status} IN ('applied', 'deferred', 'failed')`),attemptsCheck:check("ui_instance_repins_attempts_ck",sql`${t.attempts} >= 1`),datesCheck:check("ui_instance_repins_dates_ck",sql`${t.first_at} >= 0 AND ${t.last_at} >= ${t.first_at}`),resultCheck:check("ui_instance_repins_result_ck",sql`(
26
+ )`),instanceRequestUnique:uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));});var Ii=x(()=>{h();sqliteTable("ui_instance_repins",{instance_id:text("instance_id").notNull(),from_version:integer("from_version").notNull(),from_hash:text("from_hash").notNull(),to_version:integer("to_version").notNull(),to_hash:text("to_hash").notNull(),from_revision:integer("from_revision").notNull(),to_revision:integer("to_revision"),status:text("status").notNull(),code:text("code"),attempts:integer("attempts").notNull().default(1),first_at:integer("first_at").notNull(),last_at:integer("last_at").notNull()},t=>({pk:primaryKey({columns:[t.instance_id,t.to_hash],name:"ui_instance_repins_pk"}),instanceIdCheck:check("ui_instance_repins_instance_id_ck",sql`length(${t.instance_id}) BETWEEN 5 AND 128 AND ${t.instance_id} GLOB 'uic_*'`),fromVersionCheck:check("ui_instance_repins_from_version_ck",sql`${t.from_version} >= 1`),toVersionCheck:check("ui_instance_repins_to_version_ck",sql`${t.to_version} >= 1`),fromHashCheck:check("ui_instance_repins_from_hash_ck",sql`length(${t.from_hash}) = 64 AND ${t.from_hash} NOT GLOB '*[^0-9a-f]*'`),toHashCheck:check("ui_instance_repins_to_hash_ck",sql`length(${t.to_hash}) = 64 AND ${t.to_hash} NOT GLOB '*[^0-9a-f]*'`),fromRevisionCheck:check("ui_instance_repins_from_revision_ck",sql`${t.from_revision} >= 0`),toRevisionCheck:check("ui_instance_repins_to_revision_ck",sql`${t.to_revision} IS NULL OR ${t.to_revision} >= 0`),statusCheck:check("ui_instance_repins_status_ck",sql`${t.status} IN ('applied', 'deferred', 'failed')`),attemptsCheck:check("ui_instance_repins_attempts_ck",sql`${t.attempts} >= 1`),datesCheck:check("ui_instance_repins_dates_ck",sql`${t.first_at} >= 0 AND ${t.last_at} >= ${t.first_at}`),resultCheck:check("ui_instance_repins_result_ck",sql`(
27
27
  (${t.status} = 'applied' AND ${t.code} IS NULL
28
28
  AND ${t.to_revision} = ${t.from_revision} + 1)
29
29
  OR
30
30
  (${t.status} IN ('deferred', 'failed') AND ${t.code} IS NOT NULL
31
31
  AND ${t.to_revision} IS NULL)
32
- )`)}));});var wi=x(()=>{h();sqliteTable("ui_definition_archive",{definition_hash:text("definition_hash").primaryKey().notNull(),definition_json:text("definition_json").notNull(),created_at:integer("created_at").notNull()},t=>({definitionHashCheck:check("ui_definition_archive_definition_hash_ck",sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),definitionJsonCheck:check("ui_definition_archive_definition_json_ck",sql`json_valid(${t.definition_json}) AND json_type(${t.definition_json}) = 'object'`),createdAtCheck:check("ui_definition_archive_created_at_ck",sql`${t.created_at} >= 0`)}));});var Ei,Ri=x(()=>{h();Ei=sqliteTable("projects",{id:text("id").primaryKey().notNull(),workspace_id:text("workspace_id").notNull(),name:text("name").notNull(),outcome:text("outcome").notNull(),due_date:text("due_date"),scene:text("scene").notNull().default("planning"),stages_json:text("stages_json").notNull(),stage_index:integer("stage_index").notNull(),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),accepted_at:text("accepted_at"),archived_at:text("archived_at")},t=>({idCheck:check("projects_id_ck",sql`${t.id} GLOB 'prj_*'`),sceneCheck:check("projects_scene_ck",sql`${t.scene} IN ('planning', 'plan_review', 'running', 'human_wait', 'limit_wait', 'failed_stop', 'analyzing_feedback', 'replanned', 'awaiting_review', 'accepted')`),stagesJsonCheck:check("projects_stages_json_ck",sql`json_valid(${t.stages_json}) AND json_type(${t.stages_json}) = 'array'`),stageIndexCheck:check("projects_stage_index_ck",sql`${t.stage_index} >= 1`)})),sqliteTable("project_criteria",{id:text("id").primaryKey().notNull(),project_id:text("project_id").notNull().references(()=>Ei.id,{onDelete:"cascade"}),position:integer("position").notNull(),statement:text("statement").notNull(),verify_status:text("verify_status").notNull().default("pending"),verified_at:text("verified_at"),evidence_json:text("evidence_json").notNull().default("[]"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({idCheck:check("project_criteria_id_ck",sql`${t.id} GLOB 'pjc_*'`),verifyStatusCheck:check("project_criteria_verify_status_ck",sql`${t.verify_status} IN ('pending', 'verifying', 'passed', 'failed')`),evidenceJsonCheck:check("project_criteria_evidence_json_ck",sql`json_valid(${t.evidence_json}) AND json_type(${t.evidence_json}) = 'array'`),projectPositionUnique:uniqueIndex("project_criteria_project_position_uq").on(t.project_id,t.position)})),sqliteTable("project_events",{id:text("id").primaryKey().notNull(),project_id:text("project_id").notNull().references(()=>Ei.id,{onDelete:"restrict"}),seq:integer("seq").notNull(),actor_type:text("actor_type").notNull(),actor_id:text("actor_id"),type:text("type").notNull(),title:text("title").notNull(),summary:text("summary"),payload_json:text("payload_json").notNull().default("{}"),created_at:text("created_at").notNull()},t=>({idCheck:check("project_events_id_ck",sql`${t.id} GLOB 'pje_*'`),actorTypeCheck:check("project_events_actor_type_ck",sql`${t.actor_type} IN ('user', 'project_manager', 'system')`),payloadJsonCheck:check("project_events_payload_json_ck",sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),projectSeqUnique:uniqueIndex("project_events_project_seq_uq").on(t.project_id,t.seq)}));});var us,cs,C,ls=x(()=>{h();us=["THREAD_STATE","THREAD_PRIORITY"],cs=["gray","blue","violet","green","amber","orange","red","pink"],C=sqliteTable("common_codes",{code_group:text("code_group").notNull(),code:text("code").notNull(),code_name:text("code_name"),color:text("color").notNull().default("gray"),sort_order:integer("sort_order").notNull(),workspace_id:text("workspace_id"),is_builtin:integer("is_builtin").notNull().default(0),is_archived:integer("is_archived").notNull().default(0),metadata:text("metadata"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({pk:primaryKey({columns:[t.code_group,t.code]}),metadataCheck:check("common_codes_metadata_ck",sql`${t.metadata} IS NULL OR (json_valid(${t.metadata}) AND json_type(${t.metadata}) = 'object')`),builtinCheck:check("common_codes_builtin_ck",sql`${t.is_builtin} IN (0, 1)`),archivedCheck:check("common_codes_archived_ck",sql`${t.is_archived} IN (0, 1)`),idxCommonCodesSelection:index("idx_common_codes_group_archived_order").on(t.code_group,t.is_archived,t.sort_order)}));});var Si,Ii,Ai,Oi,bi,W,F,H,vi=x(()=>{h();Zn();Si=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],Ii=["user","agent","system"],Ai=["auto","manual"],Oi=["decision","judgment","issue","result","pivot"],bi=["queued","running","completed","failed"],W=sqliteTable("thread_events",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),type:text("type").notNull(),actor_type:text("actor_type").notNull(),payload_json:text("payload_json").notNull(),created_at:text("created_at").notNull(),actor_id:text("actor_id"),task_id:text("task_id"),highlight_id:text("highlight_id")},t=>({typeCheck:check("thread_events_type_ck",sql`${t.type} IN ('thread.snapshot.imported', 'thread.title.changed', 'thread.priority.changed', 'thread.state.changed', 'thread.highlight.created', 'thread.highlight.updated', 'thread.highlight.deleted', 'thread.highlights.regenerated')`),actorTypeCheck:check("thread_events_actor_type_ck",sql`${t.actor_type} IN ('user', 'agent', 'system')`),payloadJsonCheck:check("thread_events_payload_json_ck",sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),threadSeqIndex:index("idx_thread_events_thread_seq").on(t.thread_id,t.seq),threadCreatedIndex:index("idx_thread_events_thread_created").on(t.thread_id,t.created_at),threadSeqUnique:uniqueIndex("thread_events_thread_seq_uq").on(t.thread_id,t.seq)})),F=sqliteTable("thread_highlight_runs",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),request_id:text("request_id").notNull(),status:text("status").notNull(),detector_version:text("detector_version").notNull(),requested_at:text("requested_at").notNull(),started_at:text("started_at"),completed_at:text("completed_at"),error_code:text("error_code"),previous_auto_count:integer("previous_auto_count"),new_auto_count:integer("new_auto_count")},t=>({statusCheck:check("thread_highlight_runs_status_ck",sql`${t.status} IN ('queued', 'running', 'completed', 'failed')`),countCheck:check("thread_highlight_runs_counts_ck",sql`(${t.previous_auto_count} IS NULL OR ${t.previous_auto_count} >= 0) AND (${t.new_auto_count} IS NULL OR ${t.new_auto_count} >= 0)`),threadRequestUnique:uniqueIndex("thread_highlight_runs_thread_request_uq").on(t.thread_id,t.request_id),inProgressThreadUnique:uniqueIndex("thread_highlight_runs_in_progress_thread_uq").on(t.thread_id).where(sql`${t.status} IN ('queued', 'running')`),threadStatusRequestedIndex:index("idx_thread_highlight_runs_thread_status_requested").on(t.thread_id,t.status,t.requested_at)})),H=sqliteTable("thread_highlights",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),source:text("source").notNull(),kind:text("kind").notNull(),status:text("status").notNull().default("active"),text:text("text"),covers_from_task_id:text("covers_from_task_id").notNull(),covers_to_task_id:text("covers_to_task_id").notNull(),revision:integer("revision").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),agent_id:text("agent_id"),source_task_id:text("source_task_id"),detector_version:text("detector_version"),content_fingerprint:text("content_fingerprint"),dismissed_at:text("dismissed_at")},t=>({sourceCheck:check("thread_highlights_source_ck",sql`${t.source} IN ('auto', 'manual')`),kindCheck:check("thread_highlights_kind_ck",sql`${t.kind} IN ('decision', 'judgment', 'issue', 'result', 'pivot')`),statusCheck:check("thread_highlights_status_ck",sql`${t.status} IN ('active', 'dismissed')`),activeTextCheck:check("thread_highlights_active_text_ck",sql`${t.status} = 'dismissed' OR (${t.text} IS NOT NULL AND length(${t.text}) > 0)`),coversCheck:check("thread_highlights_covers_ck",sql`length(${t.covers_from_task_id}) > 0 AND length(${t.covers_to_task_id}) > 0`),autoKeyCheck:check("thread_highlights_auto_key_ck",sql`${t.source} = 'manual' OR (${t.source} = 'auto' AND ${t.source_task_id} IS NOT NULL AND ${t.detector_version} IS NOT NULL AND ${t.content_fingerprint} IS NOT NULL AND length(${t.source_task_id}) > 0 AND length(${t.detector_version}) > 0 AND length(${t.content_fingerprint}) > 0)`),threadStatusCreatedIndex:index("idx_thread_highlights_thread_status_created").on(t.thread_id,t.status,t.created_at),threadCoversIndex:index("idx_thread_highlights_thread_covers").on(t.thread_id,t.covers_from_task_id,t.covers_to_task_id),autoIdempotencyUnique:uniqueIndex("thread_highlights_auto_idempotency_uq").on(t.thread_id,t.source_task_id,t.detector_version,t.content_fingerprint).where(sql`${t.source} = 'auto'`)}));});var xi=x(()=>{h();sqliteTable("storage_metadata",{source_kind:text("source_kind").notNull(),source_id:text("source_id").notNull(),utc_ts:text("utc_ts"),bytes:integer("bytes").notNull()},t=>({pk:primaryKey({columns:[t.source_kind,t.source_id]}),kindTimestampBytesIndex:index("idx_storage_metadata_kind_ts_bytes").on(t.source_kind,t.utc_ts,t.bytes)})),sqliteTable("storage_metadata_state",{unit:text("unit").primaryKey().notNull(),cursor_rowid:integer("cursor_rowid").notNull().default(0),end_rowid:integer("end_rowid"),complete:integer("complete").notNull().default(0),updated_at:text("updated_at").notNull()});});var ye,Ci=x(()=>{h();ye=sqliteTable("agent_send_history",{workspace_id:text("workspace_id").notNull(),actor_id:text("actor_id").notNull(),agent_id:text("agent_id").notNull(),last_accepted_at:text("last_accepted_at").notNull()},t=>({pk:primaryKey({columns:[t.workspace_id,t.actor_id,t.agent_id]}),recentIndex:index("idx_agent_send_history_recent").on(t.workspace_id,t.actor_id,t.last_accepted_at,t.agent_id)}));});var Rt=x(()=>{h();Yr();Mt();Ko();Jo();Zn();Qo();ei();ti();ri();oi();ii();ui();ci();pi();gi();hi();mi();ki();wi();Ri();ls();vi();xi();Ci();});var Ht,fs,Di,gs=x(()=>{h();Ht={"claude-fable-5-1":{input:10,cachedInput:.25,output:50},"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5-5":{input:4,cachedInput:.2,output:20},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5-5":{input:2,cachedInput:.1,output:10},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-5-5":{input:.1,cachedInput:.01,output:.5},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-6-astra":{input:10,cachedInput:1,output:50},"gpt-6.1-sol":{input:2,cachedInput:.1,output:10},"gpt-6-sol":{input:2,cachedInput:.2,output:10},"gpt-6-luna":{input:.1,cachedInput:.01,output:.5},"gpt-5.6-sol":{input:4,cachedInput:.4,output:20},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.7":{input:2,cachedInput:.5,output:6},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},fs=new Set(["gpt-5.3-codex-spark"]),Di=new Set(["auto","claude-fable-5","claude-fable-5-1","claude-haiku-4-5","claude-haiku-5-5","claude-opus-4-6","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7","claude-opus-4-7[1m]","claude-opus-4-8","claude-opus-4-8[1m]","claude-opus-5","claude-opus-5-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","claude-sonnet-5-5","gemini-3.1-pro","gemini-3.6-flash","gemini-3.7-flash","glm-5.1","glm-5.2","gpt-4.1","gpt-4o","gpt-5-mini","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-6.1-sol","gpt-oss-120b","grok-4.5","grok-4.6","grok-4.7"]);});function hs(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function Uc(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),Tn;let e=hs(t),n=Hc[e];if(n)return ar[n]??Ht[n]??Tn;if(ar[e])return ar[e];if(Ht[e])return Ht[e];if(fs.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),Tn;if(Di.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),Tn;let r={...Ht,...ar};for(let s of Object.keys(r))if(e.includes(s))return r[s];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),Tn}function Fc(t,e,n,r=0,s){let o=Uc(n),i=Math.min(r,t),d=(t-i)*o.input/1e6,c=i*o.cachedInput/1e6,l=e*o.output/1e6;return d+c+l}function Pi(t,e,n,r,s,o){return t&&t>0?t:!e&&!n?0:Fc(e??0,n??0,s,r??0)}var Hc,Tn,ar,dr=x(()=>{h();gs();gs();Hc={opus:"claude-opus-4-8",sonnet:"claude-sonnet-4-6",haiku:"claude-haiku-4-5","codex-mini":"gpt-5.3-codex",codex:"gpt-5.3-codex"},Tn={input:0,cachedInput:0,output:0},ar={};});function Hi(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function Mi(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function Ui(t){return Number.isSafeInteger(t)&&t>0}function Gc(t,e){return new Promise(n=>{let r;try{r=spawn(t,e,{windowsHide:!0});}catch(c){n({status:null,stdout:"",stderr:"",error:Hi(c)});return}let s="",o="",i=false,u,d=setTimeout(()=>{try{r.kill();}catch{}u({status:null,stdout:s,stderr:o,error:new Error(`Command timed out after ${Li}ms`)});},Li);u=c=>{i||(i=true,clearTimeout(d),n(c));},r.stdout?.setEncoding("utf8"),r.stderr?.setEncoding("utf8"),r.stdout?.on("data",c=>{s+=String(c);}),r.stderr?.on("data",c=>{o+=String(c);}),r.once("error",c=>{u({status:null,stdout:s,stderr:o,error:c});}),r.once("close",c=>{u({status:c,stdout:s,stderr:o});});})}async function Fi(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):Gc(t,e)}function zc(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function Kc(){return new Promise(t=>{setImmediate(t);})}function St(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return Mi(n)==="ESRCH"?"not_found":Mi(n)==="EPERM"?"alive":"unknown"}}function Vc(t,e){let n=St(-t,e),r=St(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function qi(t,e,n,r){let s=Math.max(0,n),o=Math.max(1,r.pollIntervalMs??Wc),i=Date.now()+s,u,d=s===0,c=r.sleep?Promise.resolve().then(()=>r.sleep(s)).then(()=>{},()=>{}):new Promise(l=>{u=setTimeout(l,s);});c.then(()=>{d=true;});try{for(await Kc();;){let l=Vc(t,e);if(l==="not_found")return l;let p=i-Date.now();if(d||p<=0)return l;await Promise.race([c,zc(Math.min(o,p))]);}}finally{u!==void 0&&clearTimeout(u);}}async function $i(t,e,n,r,s){let o=await qi(t,e,s.hardConfirmMs??jc,{...s,sleep:void 0});return o==="not_found"?n?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r}:o==="alive"?{status:"failed",pid:t,method:r,error:"Process is still running after termination attempt"}:{status:"failed",pid:t,method:r,error:"Unable to verify process termination"}}async function ur(t,e,n={}){if(!Ui(t))return "unknown";let r=n.platform??process.platform,s=r==="win32"?"powershell.exe":"ps",o=r==="win32"?["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-Command",`$p = Get-CimInstance -ClassName Win32_Process -Filter 'ProcessId = ${t}' -ErrorAction Stop; if ($null -ne $p) { [Console]::Write([string]$p.CommandLine) }`]:["-p",String(t),"-o","command="],i;try{i=await Fi(s,o,n);}catch{return "unknown"}if(i.error||i.status!==0)return "unknown";let u=i.stdout.trim();if(!u)return "not_found";let d=r==="win32"?u.toLowerCase():u;return e.filter(l=>l.trim().length>0).some(l=>{let p=r==="win32"?l.toLowerCase():l;return d.includes(p)})?"owned":"not_owned"}async function Ft(t,e={}){let n=e.platform??process.platform,r=n==="win32"?"taskkill":"process-group",s=g=>({status:"failed",pid:t,method:r,error:g});if(!Ui(t))return s("Invalid process ID");let o=e.kill??process.kill,i=St(t,o);if(i==="not_found")return {status:"not_found",pid:t,method:r};if(i!=="alive")return s("Unable to determine whether the process is alive");if(n==="win32"){let g;try{g=await Fi("taskkill",["/PID",String(t),"/T","/F"],e);}catch(m){g={status:null,stdout:"",stderr:"",error:Hi(m)};}let _=St(t,o);return _==="not_found"?g.status===0&&!g.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:s(_==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let u,d=e.signal??"SIGKILL";try{o(-t,d);}catch(g){u=g;}if(d==="SIGKILL")return $i(t,o,u,r,e);if(await qi(t,o,e.graceMs??Bc,e)==="not_found")return u?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r};let l;try{o(-t,"SIGKILL");}catch(g){l=g;}let p=await $i(t,o,l,r,e);return p.status==="terminated"?p:p.status==="not_found"?u?p:{status:"terminated",pid:t,method:r}:s(p.error??"Process termination failed")}var Li,Ut,Bc,Wc,jc,cr=x(()=>{h();Li=3e3,Ut="SIGINT",Bc=2e3,Wc=25,jc=100;});function zi(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new f("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new f("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function ji(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new f("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,s)=>zi(r,s))}catch(r){throw r instanceof f?new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function Ki(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new f("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new f("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new f("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function Gi(t){return {taskId:t.id,source:Ki(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function el(t){if(!Number.isInteger(t)||t<0)throw new f("VALIDATION","Task log tail limit must be a non-negative integer")}var lr,Vi=x(()=>{h();at();mt();kt();it();Rt();lr=class extends he{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?_t(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{Ae(r.db,n);}catch(s){throw r.close(),s}return r}findStateRow(e,n){return e.db.select({id:a.id,log_storage:a.log_storage,last_log_seq:a.last_log_seq,log_revision:a.log_revision,logs:a.logs}).from(a).where(eq(a.id,n)).limit(1).get()}findStateRowInTransaction(e,n){return e.select({id:a.id,log_storage:a.log_storage,last_log_seq:a.last_log_seq,log_revision:a.log_revision,logs:a.logs}).from(a).where(eq(a.id,n)).limit(1).get()}requireStateRowInTransaction(e,n){let r=this.findStateRowInTransaction(e,n);if(!r)throw new f("NOT_FOUND",`Task not found: ${n}`);return r}appendLog(e,n){return this.appendLogs(e,[n])}appendLogs(e,n){let r=n.map((o,i)=>zi(o,i));if(r.length===0){let o=this.getLogState(e);if(!o)throw new f("NOT_FOUND",`Task not found: ${e}`);return o}let s=this.openHandle(true);try{return s.db.transaction(i=>{let u=this.requireStateRowInTransaction(i,e),d=Ki(u);if(d==="blob"){let g=ji(e,u.logs);if(i.update(a).set({logs:JSON.stringify([...g,...r]),log_revision:sql`${a.log_revision} + 1`}).where(eq(a.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:d,revision:u.log_revision+1,lastSeq:u.last_log_seq}}let c=u.last_log_seq+1,l=u.last_log_seq+r.length;if(i.insert(ze).values(r.map((g,_)=>({task_id:e,seq:c+_,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),i.update(a).set({last_log_seq:l,log_revision:sql`${a.log_revision} + 1`}).where(eq(a.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:d,revision:u.log_revision+1,lastSeq:l}},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to append task log",o)}finally{s.close();}}getLogState(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=this.findStateRow(n,e);return r?Gi(r):void 0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return el(n),this.readLogsInternal(e,n)}readTail(e,n){return this.readLogsTail(e,n)}readLogsInternal(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.transaction(s=>{let o=this.findStateRowInTransaction(s,e);if(!o)return;let i=Gi(o);if(i.source==="blob"){let l=ji(e,o.logs);return {...i,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let u=s.select({seq:ze.seq,timestamp:ze.timestamp,level:ze.level,message:ze.message}).from(ze).where(eq(ze.task_id,e)).orderBy(n===void 0?asc(ze.seq):desc(ze.seq)),c=(n===void 0?u.all():u.limit(n).all()).map(({timestamp:l,level:p,message:g})=>({timestamp:l,level:p,message:g}));return n!==void 0&&c.reverse(),{...i,entries:c}},{behavior:"deferred"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read task logs",s)}finally{r.close();}}};});var ol,pr,Xi=x(()=>{h();at();mt();kt();it();Rt();ol=50,pr=class extends he{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=`${e.dbRoot}/.crewx/crewx.db`);}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(){let e=this.resolveDbPath(),n=U(e);try{return Ae(n.db,e),n}catch(r){throw n.close(),r}}recordAccepted(e){if(e.actorKind!=="human"||!e.workspaceId||!e.actorId||!e.agentId)return false;let n;try{n=this.openHandle();let r=e.acceptedAt??new Date().toISOString();return n.db.insert(ye).values({workspace_id:e.workspaceId,actor_id:e.actorId,agent_id:e.agentId,last_accepted_at:r}).onConflictDoUpdate({target:[ye.workspace_id,ye.actor_id,ye.agent_id],set:{last_accepted_at:sql`MAX(${ye.last_accepted_at}, excluded.last_accepted_at)`}}).run(),!0}catch(r){return console.error("[AgentSendHistoryRepository] Failed to record accepted agent send",r),false}finally{n?.close();}}findRecentAgents(e,n){let r;try{return r=this.openHandle(),r.db.select({agentId:ye.agent_id,lastAcceptedAt:ye.last_accepted_at}).from(ye).where(and(eq(ye.workspace_id,e),eq(ye.actor_id,n))).orderBy(desc(ye.last_accepted_at),asc(ye.agent_id)).limit(ol).all()}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to find recent agent sends",s)}finally{r?.close();}}};});var Yi=x(()=>{h();});var Q,It=x(()=>{h();Q=class extends Error{constructor(n,r,s){super(n);this.providerStr=r;this.name="ProviderError",this.code=s?.code??"UNKNOWN",this.kind=s?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=s?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout};});var At,_s=x(()=>{h();It();At=class extends Q{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function ks(t){if(!fr(t)||t.type!=="item.started"||!Zi(t)||!Qi(t))return false;let e=t.item;return !fr(e)||!Zi(e)||!Qi(e)||!ms(e.id)?false:e.type==="web_search"?e.query===""&&fr(e.action)&&e.action.type==="other":e.type==="file_change"?e.status!=="in_progress"||!Array.isArray(e.changes)||e.changes.length===0?false:e.changes.every(n=>fr(n)&&ms(n.path)&&ms(n.kind)):false}function fr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ea(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function ms(t){return typeof t=="string"&&t.trim().length>0}function Qi(t){return !ea(t,"status")||t.status==="in_progress"}function Zi(t){for(let e of ["error","errors","isError","is_error"])if(ea(t,e))return false;return true}var Ts=x(()=>{h();});function il(t,e){let n=t.trimStart();if(!n.startsWith("{"))return false;let r;try{r=JSON.parse(n);}catch{return false}let s=r.type;if(typeof s!="string")return false;let o=e?gl[e]:void 0;return o?o(r,s):Object.values(na).some(i=>i(r,s))}function Xe(t,e){let n=t.split(`
33
- `).filter(r=>r.trim());return n.length===0?false:n.every(r=>il(r,e))}function Ee(t){return typeof t=="object"&&t!==null}function ta(t,e){if(e==="assistant"||e==="user"){let n=t.message;return Ee(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||Ee(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?Ee(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function al(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:ta(t,e)}function dl(t,e){if(e==="error")return typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||Ee(t.error);if(e==="item.updated"||e.startsWith("thread.")||e.startsWith("turn."))return true;if(e==="item.started"||e==="item.completed"){let n=t.item;return Ee(n)&&typeof n.type=="string"}return false}function ul(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||Ee(t.part):e==="text"||e==="tool_use"?Ee(t.part):e==="result"?typeof t.result=="string":false}function cl(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||Ee(t.part)||e==="result"&&typeof t.result=="string")}function ll(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?Ee(t.data):e==="result"?typeof t.result=="string":false}function pl(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 fl(t,e){return e==="available_commands"?Ee(t.tools)||Ee(t.commands):e==="usage"?Ee(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||Ee(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var na,gl,qt=x(()=>{h();Ts();na={claude:ta,codex:dl,opencode:ul,copilot:ll,gemini:pl},gl={...na,claude:al,opencode:cl,grok:fl,antigravity:()=>false};});function Ye(t){return /crewx\s+(q|query|x|execute)\s/.test(t)}function Qe(t,e,n){let r=e.match(/@(\S+)/);return {timestamp:t,type:"agent_call",targetAgent:r?.[1]?.replace(/["']/g,""),toolInput:e,...typeof n=="string"&&n.length>0?{toolUseId:n}:{}}}var Bt=x(()=>{h();});function ml(t){let e=kl(t),n=e.map((o,i)=>({line:o,index:i})).filter(({line:o})=>wl(o.value)),r=Tl(e);return {result:n.length===1&&n[0].index===r?yl(n[0].line.value):null,resultPreview:Sl(e,n),hasReservedLine:n.length>0}}function Pe(t,e){let n=ml(t);return {resultPreview:n.resultPreview,isError:e||n.result?.isError===true,...n.hasReservedLine?{delegationResult:n.result}:{}}}function kl(t){let e=[],n=0;for(let r=0;r<t.length;r++){let s=t[r];if(s!==`
32
+ )`)}));});var Oi=x(()=>{h();sqliteTable("ui_definition_archive",{definition_hash:text("definition_hash").primaryKey().notNull(),definition_json:text("definition_json").notNull(),created_at:integer("created_at").notNull()},t=>({definitionHashCheck:check("ui_definition_archive_definition_hash_ck",sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),definitionJsonCheck:check("ui_definition_archive_definition_json_ck",sql`json_valid(${t.definition_json}) AND json_type(${t.definition_json}) = 'object'`),createdAtCheck:check("ui_definition_archive_created_at_ck",sql`${t.created_at} >= 0`)}));});var Ni,vi=x(()=>{h();Ni=sqliteTable("projects",{id:text("id").primaryKey().notNull(),workspace_id:text("workspace_id").notNull(),name:text("name").notNull(),outcome:text("outcome").notNull(),due_date:text("due_date"),scene:text("scene").notNull().default("planning"),stages_json:text("stages_json").notNull(),stage_index:integer("stage_index").notNull(),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),accepted_at:text("accepted_at"),archived_at:text("archived_at")},t=>({idCheck:check("projects_id_ck",sql`${t.id} GLOB 'prj_*'`),sceneCheck:check("projects_scene_ck",sql`${t.scene} IN ('planning', 'plan_review', 'running', 'human_wait', 'limit_wait', 'failed_stop', 'analyzing_feedback', 'replanned', 'awaiting_review', 'accepted')`),stagesJsonCheck:check("projects_stages_json_ck",sql`json_valid(${t.stages_json}) AND json_type(${t.stages_json}) = 'array'`),stageIndexCheck:check("projects_stage_index_ck",sql`${t.stage_index} >= 1`)})),sqliteTable("project_criteria",{id:text("id").primaryKey().notNull(),project_id:text("project_id").notNull().references(()=>Ni.id,{onDelete:"cascade"}),position:integer("position").notNull(),statement:text("statement").notNull(),verify_status:text("verify_status").notNull().default("pending"),verified_at:text("verified_at"),evidence_json:text("evidence_json").notNull().default("[]"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({idCheck:check("project_criteria_id_ck",sql`${t.id} GLOB 'pjc_*'`),verifyStatusCheck:check("project_criteria_verify_status_ck",sql`${t.verify_status} IN ('pending', 'verifying', 'passed', 'failed')`),evidenceJsonCheck:check("project_criteria_evidence_json_ck",sql`json_valid(${t.evidence_json}) AND json_type(${t.evidence_json}) = 'array'`),projectPositionUnique:uniqueIndex("project_criteria_project_position_uq").on(t.project_id,t.position)})),sqliteTable("project_events",{id:text("id").primaryKey().notNull(),project_id:text("project_id").notNull().references(()=>Ni.id,{onDelete:"restrict"}),seq:integer("seq").notNull(),actor_type:text("actor_type").notNull(),actor_id:text("actor_id"),type:text("type").notNull(),title:text("title").notNull(),summary:text("summary"),payload_json:text("payload_json").notNull().default("{}"),created_at:text("created_at").notNull()},t=>({idCheck:check("project_events_id_ck",sql`${t.id} GLOB 'pje_*'`),actorTypeCheck:check("project_events_actor_type_ck",sql`${t.actor_type} IN ('user', 'project_manager', 'system')`),payloadJsonCheck:check("project_events_payload_json_ck",sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),projectSeqUnique:uniqueIndex("project_events_project_seq_uq").on(t.project_id,t.seq)}));});var ps,fs,C,gs=x(()=>{h();ps=["THREAD_STATE","THREAD_PRIORITY"],fs=["gray","blue","violet","green","amber","orange","red","pink"],C=sqliteTable("common_codes",{code_group:text("code_group").notNull(),code:text("code").notNull(),code_name:text("code_name"),color:text("color").notNull().default("gray"),sort_order:integer("sort_order").notNull(),workspace_id:text("workspace_id"),is_builtin:integer("is_builtin").notNull().default(0),is_archived:integer("is_archived").notNull().default(0),metadata:text("metadata"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({pk:primaryKey({columns:[t.code_group,t.code]}),metadataCheck:check("common_codes_metadata_ck",sql`${t.metadata} IS NULL OR (json_valid(${t.metadata}) AND json_type(${t.metadata}) = 'object')`),builtinCheck:check("common_codes_builtin_ck",sql`${t.is_builtin} IN (0, 1)`),archivedCheck:check("common_codes_archived_ck",sql`${t.is_archived} IN (0, 1)`),idxCommonCodesSelection:index("idx_common_codes_group_archived_order").on(t.code_group,t.is_archived,t.sort_order)}));});var xi,Ci,Di,Pi,Li,W,F,U,Mi=x(()=>{h();mn();xi=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],Ci=["user","agent","system"],Di=["auto","manual"],Pi=["decision","judgment","issue","result","pivot"],Li=["queued","running","completed","failed"],W=sqliteTable("thread_events",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),type:text("type").notNull(),actor_type:text("actor_type").notNull(),payload_json:text("payload_json").notNull(),created_at:text("created_at").notNull(),actor_id:text("actor_id"),task_id:text("task_id"),highlight_id:text("highlight_id")},t=>({typeCheck:check("thread_events_type_ck",sql`${t.type} IN ('thread.snapshot.imported', 'thread.title.changed', 'thread.priority.changed', 'thread.state.changed', 'thread.highlight.created', 'thread.highlight.updated', 'thread.highlight.deleted', 'thread.highlights.regenerated')`),actorTypeCheck:check("thread_events_actor_type_ck",sql`${t.actor_type} IN ('user', 'agent', 'system')`),payloadJsonCheck:check("thread_events_payload_json_ck",sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),threadSeqIndex:index("idx_thread_events_thread_seq").on(t.thread_id,t.seq),threadCreatedIndex:index("idx_thread_events_thread_created").on(t.thread_id,t.created_at),threadSeqUnique:uniqueIndex("thread_events_thread_seq_uq").on(t.thread_id,t.seq)})),F=sqliteTable("thread_highlight_runs",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),request_id:text("request_id").notNull(),status:text("status").notNull(),detector_version:text("detector_version").notNull(),requested_at:text("requested_at").notNull(),started_at:text("started_at"),completed_at:text("completed_at"),error_code:text("error_code"),previous_auto_count:integer("previous_auto_count"),new_auto_count:integer("new_auto_count")},t=>({statusCheck:check("thread_highlight_runs_status_ck",sql`${t.status} IN ('queued', 'running', 'completed', 'failed')`),countCheck:check("thread_highlight_runs_counts_ck",sql`(${t.previous_auto_count} IS NULL OR ${t.previous_auto_count} >= 0) AND (${t.new_auto_count} IS NULL OR ${t.new_auto_count} >= 0)`),threadRequestUnique:uniqueIndex("thread_highlight_runs_thread_request_uq").on(t.thread_id,t.request_id),inProgressThreadUnique:uniqueIndex("thread_highlight_runs_in_progress_thread_uq").on(t.thread_id).where(sql`${t.status} IN ('queued', 'running')`),threadStatusRequestedIndex:index("idx_thread_highlight_runs_thread_status_requested").on(t.thread_id,t.status,t.requested_at)})),U=sqliteTable("thread_highlights",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),source:text("source").notNull(),kind:text("kind").notNull(),status:text("status").notNull().default("active"),text:text("text"),covers_from_task_id:text("covers_from_task_id").notNull(),covers_to_task_id:text("covers_to_task_id").notNull(),revision:integer("revision").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),agent_id:text("agent_id"),source_task_id:text("source_task_id"),detector_version:text("detector_version"),content_fingerprint:text("content_fingerprint"),dismissed_at:text("dismissed_at")},t=>({sourceCheck:check("thread_highlights_source_ck",sql`${t.source} IN ('auto', 'manual')`),kindCheck:check("thread_highlights_kind_ck",sql`${t.kind} IN ('decision', 'judgment', 'issue', 'result', 'pivot')`),statusCheck:check("thread_highlights_status_ck",sql`${t.status} IN ('active', 'dismissed')`),activeTextCheck:check("thread_highlights_active_text_ck",sql`${t.status} = 'dismissed' OR (${t.text} IS NOT NULL AND length(${t.text}) > 0)`),coversCheck:check("thread_highlights_covers_ck",sql`length(${t.covers_from_task_id}) > 0 AND length(${t.covers_to_task_id}) > 0`),autoKeyCheck:check("thread_highlights_auto_key_ck",sql`${t.source} = 'manual' OR (${t.source} = 'auto' AND ${t.source_task_id} IS NOT NULL AND ${t.detector_version} IS NOT NULL AND ${t.content_fingerprint} IS NOT NULL AND length(${t.source_task_id}) > 0 AND length(${t.detector_version}) > 0 AND length(${t.content_fingerprint}) > 0)`),threadStatusCreatedIndex:index("idx_thread_highlights_thread_status_created").on(t.thread_id,t.status,t.created_at),threadCoversIndex:index("idx_thread_highlights_thread_covers").on(t.thread_id,t.covers_from_task_id,t.covers_to_task_id),autoIdempotencyUnique:uniqueIndex("thread_highlights_auto_idempotency_uq").on(t.thread_id,t.source_task_id,t.detector_version,t.content_fingerprint).where(sql`${t.source} = 'auto'`)}));});var Hi=x(()=>{h();sqliteTable("storage_metadata",{source_kind:text("source_kind").notNull(),source_id:text("source_id").notNull(),utc_ts:text("utc_ts"),bytes:integer("bytes").notNull()},t=>({pk:primaryKey({columns:[t.source_kind,t.source_id]}),kindTimestampBytesIndex:index("idx_storage_metadata_kind_ts_bytes").on(t.source_kind,t.utc_ts,t.bytes)})),sqliteTable("storage_metadata_state",{unit:text("unit").primaryKey().notNull(),cursor_rowid:integer("cursor_rowid").notNull().default(0),end_rowid:integer("end_rowid"),complete:integer("complete").notNull().default(0),updated_at:text("updated_at").notNull()});});var Re,Ui=x(()=>{h();Re=sqliteTable("agent_send_history",{workspace_id:text("workspace_id").notNull(),actor_id:text("actor_id").notNull(),agent_id:text("agent_id").notNull(),last_accepted_at:text("last_accepted_at").notNull()},t=>({pk:primaryKey({columns:[t.workspace_id,t.actor_id,t.agent_id]}),recentIndex:index("idx_agent_send_history_recent").on(t.workspace_id,t.actor_id,t.last_accepted_at,t.agent_id)}));});var Bi,Wi=x(()=>{h();mn();nr();sqliteTable("sidebar_states",{workspace_id:text("workspace_id").primaryKey().references(()=>te.id,{onDelete:"cascade"}),revision:integer("revision").notNull().default(0),rail_collapsed:integer("rail_collapsed").notNull().default(0),seeded_at:text("seeded_at").notNull()},t=>({railCollapsedCheck:check("sidebar_states_rail_collapsed_ck",sql`${t.rail_collapsed} IN (0, 1)`)})),Bi=sqliteTable("sidebar_groups",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull().references(()=>te.id,{onDelete:"cascade"}),name:text("name").notNull(),color:text("color").notNull(),collapsed:integer("collapsed").notNull().default(0),position:integer("position").notNull()},t=>({colorCheck:check("sidebar_groups_color_ck",sql`${t.color} IN ('cyan', 'orange', 'purple', 'blue')`),collapsedCheck:check("sidebar_groups_collapsed_ck",sql`${t.collapsed} IN (0, 1)`),idxSidebarGroupsWorkspacePosition:index("idx_sidebar_groups_workspace_position").on(t.workspace_id,t.position)})),sqliteTable("sidebar_tabs",{workspace_id:text("workspace_id").notNull().references(()=>te.id,{onDelete:"cascade"}),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),group_id:text("group_id").references(()=>Bi.id,{onDelete:"set null"}),position:integer("position").notNull()},t=>({pk:primaryKey({columns:[t.workspace_id,t.thread_id]})})),sqliteTable("sidebar_closed_tabs",{id:integer("id").primaryKey({autoIncrement:true}),workspace_id:text("workspace_id").notNull().references(()=>te.id,{onDelete:"cascade"}),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),group_id:text("group_id").references(()=>Bi.id,{onDelete:"set null"}),position:integer("position").notNull(),closed_at:text("closed_at").notNull()},t=>({idxSidebarClosedTabsWorkspaceId:index("idx_sidebar_closed_tabs_workspace_id").on(t.workspace_id,t.id)})),sqliteTable("thread_reads",{workspace_id:text("workspace_id").notNull().references(()=>te.id,{onDelete:"cascade"}),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),read_through_at:text("read_through_at").notNull()},t=>({pk:primaryKey({columns:[t.workspace_id,t.thread_id]})}));});var It=x(()=>{h();nr();Ht();ei();ni();mn();oi();ai();di();ci();pi();fi();_i();mi();Ti();yi();Ei();Si();Ii();Oi();vi();gs();Mi();Hi();Ui();Wi();});var Ft,ks,ji,Ts=x(()=>{h();Ft={"claude-fable-5-1":{input:10,cachedInput:.25,output:50},"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5-5":{input:4,cachedInput:.2,output:20},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5-5":{input:2,cachedInput:.1,output:10},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-5-5":{input:.1,cachedInput:.01,output:.5},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-6-astra":{input:10,cachedInput:1,output:50},"gpt-6.1-sol":{input:2,cachedInput:.1,output:10},"gpt-6-sol":{input:2,cachedInput:.2,output:10},"gpt-6-luna":{input:.1,cachedInput:.01,output:.5},"gpt-5.6-sol":{input:4,cachedInput:.4,output:20},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.7":{input:2,cachedInput:.5,output:6},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},ks=new Set(["gpt-5.3-codex-spark"]),ji=new Set(["auto","claude-fable-5","claude-fable-5-1","claude-haiku-4-5","claude-haiku-5-5","claude-opus-4-6","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7","claude-opus-4-7[1m]","claude-opus-4-8","claude-opus-4-8[1m]","claude-opus-5","claude-opus-5-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","claude-sonnet-5-5","gemini-3.1-pro","gemini-3.6-flash","gemini-3.7-flash","glm-5.1","glm-5.2","gpt-4.1","gpt-4o","gpt-5-mini","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-6.1-sol","gpt-oss-120b","grok-4.5","grok-4.6","grok-4.7"]);});function ws(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function Vc(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),Rn;let e=ws(t),n=Kc[e];if(n)return pr[n]??Ft[n]??Rn;if(pr[e])return pr[e];if(Ft[e])return Ft[e];if(ks.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),Rn;if(ji.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),Rn;let r={...Ft,...pr};for(let s of Object.keys(r))if(e.includes(s))return r[s];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),Rn}function Jc(t,e,n,r=0,s){let o=Vc(n),i=Math.min(r,t),d=(t-i)*o.input/1e6,c=i*o.cachedInput/1e6,l=e*o.output/1e6;return d+c+l}function Gi(t,e,n,r,s,o){return t&&t>0?t:!e&&!n?0:Jc(e??0,n??0,s,r??0)}var Kc,Rn,pr,fr=x(()=>{h();Ts();Ts();Kc={opus:"claude-opus-4-8",sonnet:"claude-sonnet-4-6",haiku:"claude-haiku-4-5","codex-mini":"gpt-5.3-codex",codex:"gpt-5.3-codex"},Rn={input:0,cachedInput:0,output:0},pr={};});function Ji(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function Ki(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function Xi(t){return Number.isSafeInteger(t)&&t>0}function el(t,e){return new Promise(n=>{let r;try{r=spawn(t,e,{windowsHide:!0});}catch(c){n({status:null,stdout:"",stderr:"",error:Ji(c)});return}let s="",o="",i=false,u,d=setTimeout(()=>{try{r.kill();}catch{}u({status:null,stdout:s,stderr:o,error:new Error(`Command timed out after ${zi}ms`)});},zi);u=c=>{i||(i=true,clearTimeout(d),n(c));},r.stdout?.setEncoding("utf8"),r.stderr?.setEncoding("utf8"),r.stdout?.on("data",c=>{s+=String(c);}),r.stderr?.on("data",c=>{o+=String(c);}),r.once("error",c=>{u({status:null,stdout:s,stderr:o,error:c});}),r.once("close",c=>{u({status:c,stdout:s,stderr:o});});})}async function Yi(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):el(t,e)}function tl(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function nl(){return new Promise(t=>{setImmediate(t);})}function At(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return Ki(n)==="ESRCH"?"not_found":Ki(n)==="EPERM"?"alive":"unknown"}}function rl(t,e){let n=At(-t,e),r=At(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function Qi(t,e,n,r){let s=Math.max(0,n),o=Math.max(1,r.pollIntervalMs??Qc),i=Date.now()+s,u,d=s===0,c=r.sleep?Promise.resolve().then(()=>r.sleep(s)).then(()=>{},()=>{}):new Promise(l=>{u=setTimeout(l,s);});c.then(()=>{d=true;});try{for(await nl();;){let l=rl(t,e);if(l==="not_found")return l;let p=i-Date.now();if(d||p<=0)return l;await Promise.race([c,tl(Math.min(o,p))]);}}finally{u!==void 0&&clearTimeout(u);}}async function Vi(t,e,n,r,s){let o=await Qi(t,e,s.hardConfirmMs??Zc,{...s,sleep:void 0});return o==="not_found"?n?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r}:o==="alive"?{status:"failed",pid:t,method:r,error:"Process is still running after termination attempt"}:{status:"failed",pid:t,method:r,error:"Unable to verify process termination"}}async function gr(t,e,n={}){if(!Xi(t))return "unknown";let r=n.platform??process.platform,s=r==="win32"?"powershell.exe":"ps",o=r==="win32"?["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-Command",`$p = Get-CimInstance -ClassName Win32_Process -Filter 'ProcessId = ${t}' -ErrorAction Stop; if ($null -ne $p) { [Console]::Write([string]$p.CommandLine) }`]:["-p",String(t),"-o","command="],i;try{i=await Yi(s,o,n);}catch{return "unknown"}if(i.error||i.status!==0)return "unknown";let u=i.stdout.trim();if(!u)return "not_found";let d=r==="win32"?u.toLowerCase():u;return e.filter(l=>l.trim().length>0).some(l=>{let p=r==="win32"?l.toLowerCase():l;return d.includes(p)})?"owned":"not_owned"}async function Bt(t,e={}){let n=e.platform??process.platform,r=n==="win32"?"taskkill":"process-group",s=g=>({status:"failed",pid:t,method:r,error:g});if(!Xi(t))return s("Invalid process ID");let o=e.kill??process.kill,i=At(t,o);if(i==="not_found")return {status:"not_found",pid:t,method:r};if(i!=="alive")return s("Unable to determine whether the process is alive");if(n==="win32"){let g;try{g=await Yi("taskkill",["/PID",String(t),"/T","/F"],e);}catch(m){g={status:null,stdout:"",stderr:"",error:Ji(m)};}let _=At(t,o);return _==="not_found"?g.status===0&&!g.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:s(_==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let u,d=e.signal??"SIGKILL";try{o(-t,d);}catch(g){u=g;}if(d==="SIGKILL")return Vi(t,o,u,r,e);if(await Qi(t,o,e.graceMs??Yc,e)==="not_found")return u?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r};let l;try{o(-t,"SIGKILL");}catch(g){l=g;}let p=await Vi(t,o,l,r,e);return p.status==="terminated"?p:p.status==="not_found"?u?p:{status:"terminated",pid:t,method:r}:s(p.error??"Process termination failed")}var zi,qt,Yc,Qc,Zc,hr=x(()=>{h();zi=3e3,qt="SIGINT",Yc=2e3,Qc=25,Zc=100;});function ra(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new f("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new f("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function ta(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new f("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,s)=>ra(r,s))}catch(r){throw r instanceof f?new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function sa(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new f("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new f("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new f("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function na(t){return {taskId:t.id,source:sa(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function ul(t){if(!Number.isInteger(t)||t<0)throw new f("VALIDATION","Task log tail limit must be a non-negative integer")}var _r,oa=x(()=>{h();dt();kt();Tt();at();It();_r=class extends me{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?mt(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=H(n);if(e)try{be(r.db,n);}catch(s){throw r.close(),s}return r}findStateRow(e,n){return e.db.select({id:a.id,log_storage:a.log_storage,last_log_seq:a.last_log_seq,log_revision:a.log_revision,logs:a.logs}).from(a).where(eq(a.id,n)).limit(1).get()}findStateRowInTransaction(e,n){return e.select({id:a.id,log_storage:a.log_storage,last_log_seq:a.last_log_seq,log_revision:a.log_revision,logs:a.logs}).from(a).where(eq(a.id,n)).limit(1).get()}requireStateRowInTransaction(e,n){let r=this.findStateRowInTransaction(e,n);if(!r)throw new f("NOT_FOUND",`Task not found: ${n}`);return r}appendLog(e,n){return this.appendLogs(e,[n])}appendLogs(e,n){let r=n.map((o,i)=>ra(o,i));if(r.length===0){let o=this.getLogState(e);if(!o)throw new f("NOT_FOUND",`Task not found: ${e}`);return o}let s=this.openHandle(true);try{return s.db.transaction(i=>{let u=this.requireStateRowInTransaction(i,e),d=sa(u);if(d==="blob"){let g=ta(e,u.logs);if(i.update(a).set({logs:JSON.stringify([...g,...r]),log_revision:sql`${a.log_revision} + 1`}).where(eq(a.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:d,revision:u.log_revision+1,lastSeq:u.last_log_seq}}let c=u.last_log_seq+1,l=u.last_log_seq+r.length;if(i.insert(Ve).values(r.map((g,_)=>({task_id:e,seq:c+_,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),i.update(a).set({last_log_seq:l,log_revision:sql`${a.log_revision} + 1`}).where(eq(a.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:d,revision:u.log_revision+1,lastSeq:l}},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to append task log",o)}finally{s.close();}}getLogState(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=this.findStateRow(n,e);return r?na(r):void 0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return ul(n),this.readLogsInternal(e,n)}readTail(e,n){return this.readLogsTail(e,n)}readLogsInternal(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.transaction(s=>{let o=this.findStateRowInTransaction(s,e);if(!o)return;let i=na(o);if(i.source==="blob"){let l=ta(e,o.logs);return {...i,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let u=s.select({seq:Ve.seq,timestamp:Ve.timestamp,level:Ve.level,message:Ve.message}).from(Ve).where(eq(Ve.task_id,e)).orderBy(n===void 0?asc(Ve.seq):desc(Ve.seq)),c=(n===void 0?u.all():u.limit(n).all()).map(({timestamp:l,level:p,message:g})=>({timestamp:l,level:p,message:g}));return n!==void 0&&c.reverse(),{...i,entries:c}},{behavior:"deferred"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read task logs",s)}finally{r.close();}}};});var gl,mr,aa=x(()=>{h();dt();kt();Tt();at();It();gl=50,mr=class extends me{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=`${e.dbRoot}/.crewx/crewx.db`);}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(){let e=this.resolveDbPath(),n=H(e);try{return be(n.db,e),n}catch(r){throw n.close(),r}}recordAccepted(e){if(e.actorKind!=="human"||!e.workspaceId||!e.actorId||!e.agentId)return false;let n;try{n=this.openHandle();let r=e.acceptedAt??new Date().toISOString();return n.db.insert(Re).values({workspace_id:e.workspaceId,actor_id:e.actorId,agent_id:e.agentId,last_accepted_at:r}).onConflictDoUpdate({target:[Re.workspace_id,Re.actor_id,Re.agent_id],set:{last_accepted_at:sql`MAX(${Re.last_accepted_at}, excluded.last_accepted_at)`}}).run(),!0}catch(r){return console.error("[AgentSendHistoryRepository] Failed to record accepted agent send",r),false}finally{n?.close();}}findRecentAgents(e,n){let r;try{return r=this.openHandle(),r.db.select({agentId:Re.agent_id,lastAcceptedAt:Re.last_accepted_at}).from(Re).where(and(eq(Re.workspace_id,e),eq(Re.actor_id,n))).orderBy(desc(Re.last_accepted_at),asc(Re.agent_id)).limit(gl).all()}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to find recent agent sends",s)}finally{r?.close();}}};});var da=x(()=>{h();});var Q,Ot=x(()=>{h();Q=class extends Error{constructor(n,r,s){super(n);this.providerStr=r;this.name="ProviderError",this.code=s?.code??"UNKNOWN",this.kind=s?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=s?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout};});var bt,ys=x(()=>{h();Ot();bt=class extends Q{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Rs(t){if(!kr(t)||t.type!=="item.started"||!ca(t)||!ua(t))return false;let e=t.item;return !kr(e)||!ca(e)||!ua(e)||!Es(e.id)?false:e.type==="web_search"?e.query===""&&kr(e.action)&&e.action.type==="other":e.type==="file_change"?e.status!=="in_progress"||!Array.isArray(e.changes)||e.changes.length===0?false:e.changes.every(n=>kr(n)&&Es(n.path)&&Es(n.kind)):false}function kr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function la(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Es(t){return typeof t=="string"&&t.trim().length>0}function ua(t){return !la(t,"status")||t.status==="in_progress"}function ca(t){for(let e of ["error","errors","isError","is_error"])if(la(t,e))return false;return true}var Ss=x(()=>{h();});function hl(t,e){let n=t.trimStart();if(!n.startsWith("{"))return false;let r;try{r=JSON.parse(n);}catch{return false}let s=r.type;if(typeof s!="string")return false;let o=e?Rl[e]:void 0;return o?o(r,s):Object.values(fa).some(i=>i(r,s))}function Qe(t,e){let n=t.split(`
33
+ `).filter(r=>r.trim());return n.length===0?false:n.every(r=>hl(r,e))}function Se(t){return typeof t=="object"&&t!==null}function pa(t,e){if(e==="assistant"||e==="user"){let n=t.message;return Se(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||Se(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?Se(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function _l(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:pa(t,e)}function ml(t,e){if(e==="error")return typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||Se(t.error);if(e==="item.updated"||e.startsWith("thread.")||e.startsWith("turn."))return true;if(e==="item.started"||e==="item.completed"){let n=t.item;return Se(n)&&typeof n.type=="string"}return false}function kl(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||Se(t.part):e==="text"||e==="tool_use"?Se(t.part):e==="result"?typeof t.result=="string":false}function Tl(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||Se(t.part)||e==="result"&&typeof t.result=="string")}function wl(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?Se(t.data):e==="result"?typeof t.result=="string":false}function yl(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 El(t,e){return e==="available_commands"?Se(t.tools)||Se(t.commands):e==="usage"?Se(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||Se(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var fa,Rl,Wt=x(()=>{h();Ss();fa={claude:pa,codex:ml,opencode:kl,copilot:wl,gemini:yl},Rl={...fa,claude:_l,opencode:Tl,grok:El,antigravity:()=>false};});function Ze(t){return /crewx\s+(q|query|x|execute)\s/.test(t)}function et(t,e,n){let r=e.match(/@(\S+)/);return {timestamp:t,type:"agent_call",targetAgent:r?.[1]?.replace(/["']/g,""),toolInput:e,...typeof n=="string"&&n.length>0?{toolUseId:n}:{}}}var jt=x(()=>{h();});function Al(t){let e=Ol(t),n=e.map((o,i)=>({line:o,index:i})).filter(({line:o})=>Nl(o.value)),r=bl(e);return {result:n.length===1&&n[0].index===r?vl(n[0].line.value):null,resultPreview:Dl(e,n),hasReservedLine:n.length>0}}function Me(t,e){let n=Al(t);return {resultPreview:n.resultPreview,isError:e||n.result?.isError===true,...n.hasReservedLine?{delegationResult:n.result}:{}}}function Ol(t){let e=[],n=0;for(let r=0;r<t.length;r++){let s=t[r];if(s!==`
34
34
  `&&s!=="\r")continue;let o=s==="\r"&&t[r+1]===`
35
35
  `?`\r
36
- `:s;e.push({value:t.slice(n,r),separator:o}),r+=o.length-1,n=r+1;}return e.push({value:t.slice(n),separator:""}),e}function Tl(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function wl(t){return t.trimStart().startsWith(hl)}function yl(t){let e=t.trim();if(!e.startsWith(ra)||!e.endsWith("]]"))return null;let n=e.slice(ra.length,-2);if(!n)return null;try{return El(JSON.parse(n))}catch{return null}}function El(t){return Rl(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function Rl(t){if(!Il(t)||Object.keys(t).some(r=>!_l.has(r))||t.schema!==1||typeof t.isError!="boolean")return false;let e=Object.prototype.hasOwnProperty.call(t,"taskId"),n=Object.prototype.hasOwnProperty.call(t,"agentId");return e!==n?false:e?sa(t.taskId)&&sa(t.agentId):t.isError===true}function Sl(t,e){if(e.length===0)return t.map(r=>r.value+r.separator).join("");let n=new Set(e.map(({index:r})=>r));return t.map((r,s)=>n.has(s)?"":r.value+r.separator).join("")}function sa(t){return typeof t=="string"&&t.trim().length>0}function Il(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var ra,hl,_l,Wt=x(()=>{h();ra="[[crewx:delegation-result ",hl="[[crewx:delegation-result",_l=new Set(["schema","taskId","agentId","isError"]);});function Le(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return JSON.stringify(t??{});let e=t;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var jt=x(()=>{h();});var oa,gr,ws,hr=x(()=>{h();oa=["none","minimal","low","medium","high","xhigh","max","ultra"],gr={claude:["low","medium","high","xhigh","max"],codex:["none","minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]},ws={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-5",name:"Claude Opus 5.5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-5-5",name:"Claude Sonnet 5.5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{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-5-5",name:"Claude Haiku 5.5",contextWindowTokens:1e6,tier:"speed"},{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-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"medium"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5-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-5-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"medium"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-6.1-sol",name:"GPT-6.1 Sol",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-6-sol",name:"GPT-6 Sol",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-6-luna",name:"GPT-6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,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"],defaultEffort:"xhigh"},"gpt-6.1-sol":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"max"},"gpt-6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"medium"},"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"}],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.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.7",name:"Grok 4.7",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship"},{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.7":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"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(ws).map(([t,e])=>[t,e.models]));});function ys(t){return Ol[t]??t}function vl(t){return bl.get(t)??t}function Es(t){if(!t)return {};let e=xl.get(t);return e?{...e}:{model:t}}function Rs(t,e){return t==="antigravity"||t==="cli/antigravity"?Es(e):e===void 0?{}:{model:vl(e)}}var Al,Ol,bl,Nl,xl,yn=x(()=>{h();Al=[{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]"}],Ol={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};bl=new Map(Al.map(({baseModelId:t,catalogModelId:e})=>[t,e]));Nl=[{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"}],xl=new Map(Nl.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function Dl(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function ct(t){return _r(t).models}function _r(t){return Cl[t]??ws[t]??Dl()}function En(t,e){let n=_r(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=Rs(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function ia(t){return _r(t).modelOverrides}function aa(){return ct("claude")}function da(){return ct("codex")}function ua(){return ct("copilot")}function ca(){return ct("antigravity")}var Cl,Ot=x(()=>{h();hr();dr();yn();Cl={};});function la(t){return Pl[t]??t}var Pl,pa=x(()=>{h();Ot();yn();Pl={auto:"default"};});function mr(t,e){return (gr[t]??[]).includes(e)}function lt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return Ll.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function fa(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function ga(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["-c","sandbox_mode=read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function ha(t){return !t||!mr("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function _a(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=la(t);return e.has(n)?["--permission-mode",n]:[]}function ma(t){return t?mr("claude",t)?["--effort",t]:[]:[]}function ka(t){return t==="default"?[]:t&&Ml.has(t)?["--permission-mode",t]:[]}function Ta(t){return t===true?["--always-approve"]:[]}function wa(t,e=n=>console.warn(n)){return t===void 0?[]:t==="workspace"||t==="read-only"||t==="off"?["--sandbox",t]:(e(`[grok] Invalid sandbox value ${JSON.stringify(t)}; using workspace.`),["--sandbox","workspace"])}function ya(t){return t?mr("grok",t)?["--effort",t]:[]:[]}function Ea(t){if(!t)return [];switch(ys(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function Ra(t){return t?mr("antigravity",t)?["--effort",t]:[]:[]}var Ll,Ml,Rn=x(()=>{h();pa();yn();hr();Ll=new Set(oa);Ml=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function $l(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),s="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,o="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,i=s!==void 0?s:o??0;return {inputTokens:s!==void 0?e+s:e,outputTokens:n,cachedInputTokens:i}}function Hl(t){let e=t.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(!("input_tokens"in n))return null;let r=Number(n.input_tokens??0),s=Number(n.output_tokens??0),i="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,u="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,d=i!==void 0?i:u??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:s,cachedInputTokens:d}}function Ul(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),s=Number(n.output??0),o=n.cache,i=o?Number(o.read??0):0;return {inputTokens:r+i,outputTokens:s,cachedInputTokens:i}}function Sa(t){let e=new Map,n;for(let o of t.split(`
37
- `))if(o.trim())try{let i=JSON.parse(o);if(i.type!=="assistant")continue;let u=i.message,d=u?.id,c=u?.usage;if(typeof d!="string"||!c)continue;let l=Number(c.input_tokens??0),p=Number(c.cache_read_input_tokens??0);e.set(d,{inputTokens:l+p,cachedInputTokens:p});let g=u?.model;typeof g=="string"&&g&&(n=g);}catch{}if(e.size===0)return;let r=0,s=0;for(let o of e.values())r+=o.inputTokens,s+=o.cachedInputTokens;return {inputTokens:r,cachedInputTokens:s,model:n}}function Gt(t){if(!t||!t.trim())return;let e=null,n=null;for(let r of t.split(`
38
- `))if(r.trim())try{let s=JSON.parse(r),o=Ul(s);if(o){n||(n={inputTokens:0,outputTokens:0,cachedInputTokens:0}),n.inputTokens+=o.inputTokens,n.outputTokens+=o.outputTokens,n.cachedInputTokens+=o.cachedInputTokens;continue}let i=$l(s)??Hl(s);i&&(e=i);}catch{}return n||(e??void 0)}var Sn=x(()=>{h();});function Me(t,e){if(typeof t!="object"||t===null||Array.isArray(t))return e;let n=t.timestamp;return typeof n!="string"||!Number.isFinite(Date.parse(n))?e:new Date(n).toISOString()}var bt=x(()=>{h();});function Ia(t){let e=t.split(`
39
- `).filter(s=>s.trim()),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="assistant"&&Array.isArray(o.message?.content))for(let i of o.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&n.push(i.text.trim());o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function Bl(t){let e=t.split(`
40
- `).filter(n=>n.trim());for(let n of e.reverse())try{let r=JSON.parse(n);if(typeof r=="object"&&r!==null&&r.type==="result")return r}catch{}}function zt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function va(t){let e=zt(t.rate_limit_info);if(t.type==="rate_limit_event"&&e?.status==="rejected")return `Claude rate limit: ${typeof e.rateLimitType=="string"?e.rateLimitType:"unknown"} (status: rejected)`;if(t.error==="rate_limit"){let n=zl(t);return n?`Claude rate limit: ${n}`:"Claude rate limit"}if(t.type==="result"&&t.is_error===true){let n=typeof t.result=="string"?t.result:"";if(Kl(n))return `Claude rate limit: ${n}`}}function Wl(t){for(let e of t.split(`
41
- `)){let n=e.trim();if(n){if(n.startsWith("Not logged in"))return n;try{let r=zt(JSON.parse(n));if(r?.type==="result"&&r.is_error===!0&&typeof r.result=="string"&&r.result.startsWith("Not logged in"))return r.result}catch{}}}}function jl(t){let e=zt(t);if(e?.type!=="rate_limit_event")return;let n=zt(zt(e.rate_limit_info)?.unifiedWindows);if(!n)return;let r=Aa(n.five_hour),s=Aa(n.seven_day);if(!(!r&&!s))return {...r?{five_hour:r}:{},...s?{seven_day:s}:{}}}function Aa(t){let e=zt(t);if(!(typeof e?.utilization!="number"||typeof e.resetsAt!="number"))return {utilization:e.utilization,resetsAt:e.resetsAt}}function Gl(t){let e=va(t);if(e)return e;if(t.type!=="result"||t.is_error!==true)return;let n=typeof t.result=="string"?t.result:"";if(n.trim())return n;let r=typeof t.subtype=="string"?t.subtype:"unknown",s=typeof t.terminal_reason=="string"?t.terminal_reason:"unknown";return `Claude ended without an answer (subtype=${r}, terminal_reason=${s})`}function zl(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
36
+ `:s;e.push({value:t.slice(n,r),separator:o}),r+=o.length-1,n=r+1;}return e.push({value:t.slice(n),separator:""}),e}function bl(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function Nl(t){return t.trimStart().startsWith(Sl)}function vl(t){let e=t.trim();if(!e.startsWith(ga)||!e.endsWith("]]"))return null;let n=e.slice(ga.length,-2);if(!n)return null;try{return xl(JSON.parse(n))}catch{return null}}function xl(t){return Cl(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function Cl(t){if(!Pl(t)||Object.keys(t).some(r=>!Il.has(r))||t.schema!==1||typeof t.isError!="boolean")return false;let e=Object.prototype.hasOwnProperty.call(t,"taskId"),n=Object.prototype.hasOwnProperty.call(t,"agentId");return e!==n?false:e?ha(t.taskId)&&ha(t.agentId):t.isError===true}function Dl(t,e){if(e.length===0)return t.map(r=>r.value+r.separator).join("");let n=new Set(e.map(({index:r})=>r));return t.map((r,s)=>n.has(s)?"":r.value+r.separator).join("")}function ha(t){return typeof t=="string"&&t.trim().length>0}function Pl(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var ga,Sl,Il,Gt=x(()=>{h();ga="[[crewx:delegation-result ",Sl="[[crewx:delegation-result",Il=new Set(["schema","taskId","agentId","isError"]);});function $e(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return JSON.stringify(t??{});let e=t;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var zt=x(()=>{h();});var _a,Tr,Is,wr=x(()=>{h();_a=["none","minimal","low","medium","high","xhigh","max","ultra"],Tr={claude:["low","medium","high","xhigh","max"],codex:["none","minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]},Is={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-5",name:"Claude Opus 5.5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-5-5",name:"Claude Sonnet 5.5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{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-5-5",name:"Claude Haiku 5.5",contextWindowTokens:1e6,tier:"speed"},{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-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"medium"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5-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-5-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"medium"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-6.1-sol",name:"GPT-6.1 Sol",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-6-sol",name:"GPT-6 Sol",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-6-luna",name:"GPT-6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,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"],defaultEffort:"xhigh"},"gpt-6.1-sol":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"max"},"gpt-6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"medium"},"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"}],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.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.7",name:"Grok 4.7",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship"},{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.7":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"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(Is).map(([t,e])=>[t,e.models]));});function As(t){return Ml[t]??t}function Hl(t){return $l.get(t)??t}function Os(t){if(!t)return {};let e=Fl.get(t);return e?{...e}:{model:t}}function bs(t,e){return t==="antigravity"||t==="cli/antigravity"?Os(e):e===void 0?{}:{model:Hl(e)}}var Ll,Ml,$l,Ul,Fl,In=x(()=>{h();Ll=[{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]"}],Ml={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};$l=new Map(Ll.map(({baseModelId:t,catalogModelId:e})=>[t,e]));Ul=[{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"}],Fl=new Map(Ul.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function Bl(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function lt(t){return yr(t).models}function yr(t){return ql[t]??Is[t]??Bl()}function An(t,e){let n=yr(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=bs(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function ma(t){return yr(t).modelOverrides}function ka(){return lt("claude")}function Ta(){return lt("codex")}function wa(){return lt("copilot")}function ya(){return lt("antigravity")}var ql,Nt=x(()=>{h();wr();fr();In();ql={};});function Ea(t){return Wl[t]??t}var Wl,Ra=x(()=>{h();Nt();In();Wl={auto:"default"};});function Er(t,e){return (Tr[t]??[]).includes(e)}function pt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return jl.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function Sa(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function Ia(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["-c","sandbox_mode=read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function Aa(t){return !t||!Er("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function Oa(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=Ea(t);return e.has(n)?["--permission-mode",n]:[]}function ba(t){return t?Er("claude",t)?["--effort",t]:[]:[]}function Na(t){return t==="default"?[]:t&&Gl.has(t)?["--permission-mode",t]:[]}function va(t){return t===true?["--always-approve"]:[]}function xa(t,e=n=>console.warn(n)){return t===void 0?[]:t==="workspace"||t==="read-only"||t==="off"?["--sandbox",t]:(e(`[grok] Invalid sandbox value ${JSON.stringify(t)}; using workspace.`),["--sandbox","workspace"])}function Ca(t){return t?Er("grok",t)?["--effort",t]:[]:[]}function Da(t){if(!t)return [];switch(As(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function Pa(t){return t?Er("antigravity",t)?["--effort",t]:[]:[]}var jl,Gl,On=x(()=>{h();Ra();In();wr();jl=new Set(_a);Gl=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function zl(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),s="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,o="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,i=s!==void 0?s:o??0;return {inputTokens:s!==void 0?e+s:e,outputTokens:n,cachedInputTokens:i}}function Kl(t){let e=t.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(!("input_tokens"in n))return null;let r=Number(n.input_tokens??0),s=Number(n.output_tokens??0),i="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,u="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,d=i!==void 0?i:u??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:s,cachedInputTokens:d}}function Vl(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),s=Number(n.output??0),o=n.cache,i=o?Number(o.read??0):0;return {inputTokens:r+i,outputTokens:s,cachedInputTokens:i}}function La(t){let e=new Map,n;for(let o of t.split(`
37
+ `))if(o.trim())try{let i=JSON.parse(o);if(i.type!=="assistant")continue;let u=i.message,d=u?.id,c=u?.usage;if(typeof d!="string"||!c)continue;let l=Number(c.input_tokens??0),p=Number(c.cache_read_input_tokens??0);e.set(d,{inputTokens:l+p,cachedInputTokens:p});let g=u?.model;typeof g=="string"&&g&&(n=g);}catch{}if(e.size===0)return;let r=0,s=0;for(let o of e.values())r+=o.inputTokens,s+=o.cachedInputTokens;return {inputTokens:r,cachedInputTokens:s,model:n}}function Kt(t){if(!t||!t.trim())return;let e=null,n=null;for(let r of t.split(`
38
+ `))if(r.trim())try{let s=JSON.parse(r),o=Vl(s);if(o){n||(n={inputTokens:0,outputTokens:0,cachedInputTokens:0}),n.inputTokens+=o.inputTokens,n.outputTokens+=o.outputTokens,n.cachedInputTokens+=o.cachedInputTokens;continue}let i=zl(s)??Kl(s);i&&(e=i);}catch{}return n||(e??void 0)}var bn=x(()=>{h();});function He(t,e){if(typeof t!="object"||t===null||Array.isArray(t))return e;let n=t.timestamp;return typeof n!="string"||!Number.isFinite(Date.parse(n))?e:new Date(n).toISOString()}var vt=x(()=>{h();});function Ma(t){let e=t.split(`
39
+ `).filter(s=>s.trim()),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="assistant"&&Array.isArray(o.message?.content))for(let i of o.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&n.push(i.text.trim());o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function Yl(t){let e=t.split(`
40
+ `).filter(n=>n.trim());for(let n of e.reverse())try{let r=JSON.parse(n);if(typeof r=="object"&&r!==null&&r.type==="result")return r}catch{}}function Vt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Fa(t){let e=Vt(t.rate_limit_info);if(t.type==="rate_limit_event"&&e?.status==="rejected")return `Claude rate limit: ${typeof e.rateLimitType=="string"?e.rateLimitType:"unknown"} (status: rejected)`;if(t.error==="rate_limit"){let n=tp(t);return n?`Claude rate limit: ${n}`:"Claude rate limit"}if(t.type==="result"&&t.is_error===true){let n=typeof t.result=="string"?t.result:"";if(np(n))return `Claude rate limit: ${n}`}}function Ql(t){for(let e of t.split(`
41
+ `)){let n=e.trim();if(n){if(n.startsWith("Not logged in"))return n;try{let r=Vt(JSON.parse(n));if(r?.type==="result"&&r.is_error===!0&&typeof r.result=="string"&&r.result.startsWith("Not logged in"))return r.result}catch{}}}}function Zl(t){let e=Vt(t);if(e?.type!=="rate_limit_event")return;let n=Vt(Vt(e.rate_limit_info)?.unifiedWindows);if(!n)return;let r=$a(n.five_hour),s=$a(n.seven_day);if(!(!r&&!s))return {...r?{five_hour:r}:{},...s?{seven_day:s}:{}}}function $a(t){let e=Vt(t);if(!(typeof e?.utilization!="number"||typeof e.resetsAt!="number"))return {utilization:e.utilization,resetsAt:e.resetsAt}}function ep(t){let e=Fa(t);if(e)return e;if(t.type!=="result"||t.is_error!==true)return;let n=typeof t.result=="string"?t.result:"";if(n.trim())return n;let r=typeof t.subtype=="string"?t.subtype:"unknown",s=typeof t.terminal_reason=="string"?t.terminal_reason:"unknown";return `Claude ended without an answer (subtype=${r}, terminal_reason=${s})`}function tp(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
42
42
 
43
- `):""}function Kl(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function ba(t){return t.replace(/\s+/g," ").trim()}function Vl(t,e){let n=t?.description;if(typeof n!="string")return;let r=ba(n);if(!r||r===ba(e))return;if(r.length<=Oa)return r;let s=r.slice(0,Oa-1);return /[\uD800-\uDBFF]$/.test(s)&&(s=s.slice(0,-1)),`${s}\u2026`}function Jl(t,e){let n=e.type;if(n==="text"){let r=String(e.text||"");return r?{timestamp:t,type:"text",content:r}:null}if(n==="thinking"){let r=typeof e.thinking=="string"?e.thinking.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="tool_use"){let r=String(e.name||""),s=e.id,o=e.input,i=Le(o);if(r==="Bash"&&Ye(i))return Qe(t,i,s);let u=Vl(o,i);return {timestamp:t,type:"tool_use",toolUseId:s,toolName:r,toolInput:i,...u?{toolTitle:u}:{}}}if(n==="tool_result"){let r=!!e.is_error,s=e.tool_use_id,o=e.output??e.content??"",i;return typeof o=="string"?i=o:Array.isArray(o)?i=o.filter(u=>u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
44
- `):i=JSON.stringify(o),{timestamp:t,type:"tool_result",toolUseId:s,...Pe(i,r)}}return null}var Fl,ql,kr,Oa,Ss=x(()=>{h();_s();It();qt();Bt();Wt();jt();Rn();Ot();Sn();bt();Fl=new Set(["tool_progress"]),ql="cli/claude";kr={command:"claude",meta:{displayName:"Claude",models:aa(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:s}=lt(e.model),o=e.effort??s,i=_a(e.mode),u=ma(o),d=r?["--model",r]:[],c=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let p=[...e.additionalArgs];return p.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...c,...i,...u,...d,...p],stdinMessage:t}:{args:["--output-format","stream-json","--verbose",...c,...i,...u,...d,...p],stdinMessage:t}}return {args:["-p","--output-format","stream-json","--verbose",...c,...i,...u,...d],stdinMessage:t}},extractText(t){let e=Bl(t);if(e?.is_error===true){let s=kr.extractFailure(JSON.stringify(e));if(s)throw s;let o=typeof e.subtype=="string"?e.subtype:"unknown",i=typeof e.terminal_reason=="string"?e.terminal_reason:"unknown";throw new Q(`Claude ended without an answer (subtype=${o}, terminal_reason=${i})`,ql,{code:"EMPTY_OUTPUT",kind:"permanent"})}let n=Ia(t);if(n)return n;let r=t.trim();return Xe(r,"claude")?"":r},extractPartialText(t){return Ia(t)},extractFailure(t){try{let e=JSON.parse(t),n=va(e);if(n)return new At(n)}catch{}return null},interpretExit(t,e,n){let r=Wl(n??"");return r?new Q(`Claude is not logged in (exit ${t}): ${r}. Sign in to this account with the official "claude auth login".`,"cli/claude",{code:"AUTH_REQUIRED",kind:"config"}):null},observeRateLimit(t){try{let e=JSON.parse(t);return jl(e)}catch{return}},parseResultMeta(t){let e=t.split(`
45
- `);for(let r of e)if(r.trim())try{let s=JSON.parse(r);if(s.type==="result"){let o=s.usage,i=o?{inputTokens:Number(o.input_tokens??0)+Number(o.cache_read_input_tokens??0),outputTokens:Number(o.output_tokens??0),cachedInputTokens:Number(o.cache_read_input_tokens??0),costUsd:Number(s.total_cost_usd??0)}:null,u=s.modelUsage,d=u?Object.keys(u)[0]??null:null;return {usage:i,model:d}}}catch{}let n=Sa(t);return n?{usage:{inputTokens:n.inputTokens,outputTokens:0,cachedInputTokens:n.cachedInputTokens,costUsd:0},model:n.model??null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];let s=Me(n,e??new Date().toISOString()),o=Gl(n);if(o)return [{timestamp:s,type:"error",content:o,errorMessage:o}];let i=n.output_file,u=n.summary;if(r==="system"&&n.subtype==="task_notification"&&n.status==="completed"&&typeof i=="string"&&i.trim().length>0&&typeof u=="string"&&u.trim().length>0)return [{timestamp:s,type:"text",content:u}];if(r!=="assistant"&&r!=="user")return [];let c=n.message?.content;if(!Array.isArray(c))return [];let l=[];for(let p of c){let g=Jl(s,p);g&&l.push(g);}return l},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Fl.has(r):!1}catch{return false}}};Oa=200;});function Na(t){let e=t.split(`
46
- `).filter(s=>s.trim()),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="assistant.message"&&typeof o.data?.content=="string"){let i=o.data.content;i.trim()&&n.push(i.trim());}o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}var Xl,Is,As=x(()=>{h();qt();Sn();Bt();jt();Wt();Ot();hr();bt();Xl=new Set(["interactive","plan","autopilot"]);Is={command:"copilot",meta:{displayName:"Copilot",models:ua()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&Xl.has(e.mode)&&r.push("--mode",e.mode),e.effort&&(gr.copilot??[]).includes(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=Na(t);if(e)return e;let n=t.trim();return Xe(n,"copilot")?"":n},extractPartialText(t){return Na(t)},parseResultMeta(t){let e=Gt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let s=n.data;if(!s)return [];let o=Me(n,e??new Date().toISOString()),i=s.toolCallId;if(r==="tool.execution_start"){let u=String(s.toolName||""),d=s.arguments,c=Le(d);return (u==="bash"||u==="Bash")&&Ye(c)?[Qe(o,c,i)]:[{timestamp:o,type:"tool_use",toolName:u,toolInput:c,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let u=s.error;if(u)return [{timestamp:o,type:"tool_result",...i&&{toolUseId:i},...Pe(String(u.message||""),true)}];let d=s.result,c=String(d?.content||"");return [{timestamp:o,type:"tool_result",...i&&{toolUseId:i},...Pe(c,false)}]}if(r==="assistant.message"){let u=String(s.content||"");return u?[{timestamp:o,type:"text",content:u}]:[]}return []}};});function Zl(t){let e=[],n=0,r=false,s=false,o=0;for(let u=0;u<t.length;u++){let d=t[u];if(s){s=false;continue}if(d==="\\"&&r){s=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(o,u+1).trim();c&&e.push(c),o=u+1;}}}let i=t.slice(o).trim();return i&&e.push(i),e}function ep(t){return t[0]==="exec"?t.slice(1):t}function xa(t){let e=t.split(`
47
- `).map(s=>s.trim()).filter(Boolean),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="item.completed"&&(o.item?.type==="message"||o.item?.type==="agent_message")&&typeof o.item?.text=="string"){let i=o.item.text;i.trim()&&n.push(i.trim());}o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function pt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Da(t){return t.type==="turn.failed"?true:t.type!=="error"?false:typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||pt(t.error)}function Pa(t){let e=pt(t.error)?t.error:void 0,n=[t.message,t.errorMessage,e?.message,e?.detail,typeof t.error=="string"?t.error:void 0];for(let r of n)if(typeof r=="string"&&r.trim())return r;return t.type==="turn.failed"?"Codex turn failed.":"Codex CLI reported an error."}function tp(t){for(let e of t.split(/\r?\n/)){if(!e.trim())continue;let n;try{n=JSON.parse(e);}catch{continue}if(pt(n)&&Da(n))return Pa(n)}}function Ca(t,e,n,r){if(!n||t.type!=="command_execution"&&t.type!=="mcp_tool_call"||typeof t.id!="string"||!t.id.trim()||t.type==="mcp_tool_call"&&e==="item.started"&&(typeof t.server!="string"||typeof t.tool!="string"))return;let s=n.state.get("codex.pending");s||(s=new Map,n.state.set("codex.pending",s));let o=JSON.stringify([t.type,t.id]);if(e==="item.started"){let d=`codex:${JSON.stringify(t.id)}#${n.rowIndex}:${r}`,c=s.get(o)??[];return c.push(d),s.set(o,c),d}let i=s.get(o),u=i?.pop();return i?.length||s.delete(o),u}function np(t,e,n){let r=e.type;if(r==="command_execution"){let s=String(e.command||"");return Ye(s)?[Qe(t,s,n)]:[{timestamp:t,type:"tool_use",toolName:"Bash",toolInput:s,...n?{toolUseId:n}:{}}]}return r==="mcp_tool_call"?typeof e.server!="string"||typeof e.tool!="string"?[]:[{timestamp:t,type:"tool_use",toolName:`${e.server}/${e.tool}`,toolInput:Le(e.arguments),...n?{toolUseId:n}:{}}]:[]}function rp(t,e,n){let r=e.type;if(r==="message"||r==="text"){let s=e.content;if(Array.isArray(s))for(let o of s){let i=sp(t,o);if(i)return i}if(typeof e.text=="string")return {timestamp:t,type:"text",content:e.text}}if(r==="agent_message"&&typeof e.text=="string")return {timestamp:t,type:"text",content:e.text};if(r==="reasoning"){let s=typeof e.text=="string"?e.text.trim():"";return s?{timestamp:t,type:"thinking",content:s}:null}if(r==="command_execution"){let s=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:t,type:"tool_result",...Pe(s,o),...n?{toolUseId:n}:{}}}if(r==="mcp_tool_call"){let s=pt(e.result)?e.result:void 0,i=(Array.isArray(s?.content)?s.content:[]).filter(d=>pt(d)&&d.type==="text"&&typeof d.text=="string").map(d=>d.text).join(`
48
- `),u=typeof e.error=="string"?e.error:pt(e.error)&&typeof e.error.message=="string"?e.error.message:"";return {timestamp:t,type:"tool_result",resultPreview:i||u,isError:e.status==="failed"||e.status==="error"||e.is_error===true||e.error!=null,...n?{toolUseId:n}:{}}}if(r==="tool_use"){let s=String(e.name||e.tool_name||""),o=e.input,i=Le(o);return s==="Bash"&&Ye(i)?Qe(t,i):{timestamp:t,type:"tool_use",toolName:s,toolInput:i}}if(r==="tool_result"){let s=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",...Pe(o,s)}}if(r==="web_search"){let s=e.action,o;if(s?.type==="search"){let i=s.queries;o=String(s.query||"")||(i?.length?i.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return !o&&!(pt(s)&&s.type==="other"&&e.query==="")?null:{timestamp:t,type:"tool_use",toolName:"WebSearch",toolInput:o}}if(r==="file_change"){let s=e.changes;if(!Array.isArray(s)||s.length===0)return null;let o=s.map(u=>String(u.path||"")).filter(Boolean);if(o.length===0)return null;let i=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:t,type:"tool_use",toolName:"Edit",toolInput:i}}return null}function sp(t,e){let n=e.type;if(n==="text")return {timestamp:t,type:"text",content:String(e.text||"")};if(n==="tool_use"){let r=String(e.name||""),s=e.input,o=Le(s);return r==="Bash"&&Ye(o)?Qe(t,o):{timestamp:t,type:"tool_use",toolName:r,toolInput:o}}return null}var Yl,Ql,Os,bs=x(()=>{h();It();qt();Sn();Bt();jt();Ts();Wt();Rn();Ot();bt();Yl=new Set(["turn.started","turn.completed","item.updated"]),Ql="cli/codex";Os={command:"codex",meta:{displayName:"Codex",models:da(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:s}=lt(e.model),o=e.effort??s,i=e.resumeSessionId?ga(e.mode):fa(e.mode),u=ha(o),d=r?["-m",r]:[],c=ep(e.additionalArgs??[]),p=c.includes("--json")||c.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...p,...i,...u,...d,...c,e.resumeSessionId,"-"],stdinMessage:t}:{args:["exec",...p,...i,...u,...d,...c],stdinMessage:t}},extractText(t){let e=tp(t);if(e)throw new Q(e,Ql);let n=xa(t);if(n)return n;let r=t.trim();return Xe(r,"codex")?"":r},extractPartialText(t){return xa(t)},parseResultMeta(t){let e=Gt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e,n){let r=e??new Date().toISOString(),s=[],o;try{JSON.parse(t),o=[t];}catch{o=Zl(t),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let[i,u]of o.entries()){let d;try{d=JSON.parse(u);}catch{continue}if(!pt(d))continue;let c=d.type;if(!c)continue;let l=Me(d,r);if(Da(d)){let g=Pa(d);s.push({timestamp:l,type:"error",content:g,errorMessage:g});continue}if(!c.startsWith("item.")&&!c.startsWith("turn.")&&!c.startsWith("thread.")||ks(d))continue;c==="thread.started"&&n&&n.state.delete("codex.pending");let p=d.item;if(p){if(c==="item.started"){s.push(...np(l,p,Ca(p,c,n,i)));continue}if(c==="item.completed"){let g=rp(l,p,Ca(p,c,n,i));g&&s.push(g);continue}}}return s},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Yl.has(r):!1}catch{return false}}};});function ap(t){return t?ip[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Tr(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Ua(t){let e=[],n=0,r=false,s=false,o=0;for(let u=0;u<t.length;u++){let d=t[u];if(s){s=false;continue}if(d==="\\"&&r){s=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(o,u+1).trim();c&&e.push(c),o=u+1;}}}let i=t.slice(o).trim();return i&&e.push(i),e}function Vt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function dp(t){let e=[],n=false;for(let r of t.split(/\r?\n/)){let s=r.trim();if(!s)continue;try{let i=JSON.parse(s);Vt(i)?e.push(i):n=!0;continue}catch{}let o=Ua(s);o.length>1&&console.warn("[opencode] extractText: falling back to concatenated-JSON split for a malformed line");for(let i of o)try{let u=JSON.parse(i);Vt(u)?e.push(u):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function vt(t){if(typeof t!="string")return;let e=t.split(/\r?\n/).map(n=>n.trim()).find(n=>n&&!/^at\s+/.test(n));if(e)return e.replace(/\u001b\[[0-?]*[ -/]*[@-~]/g,"").replace(/(?:[A-Za-z]:[\\/]|\/)(?:[^\s"'`()\[\]{}]+[\\/])*[^\s"'`()\[\]{}]+/g,"[path]").slice(0,Ha).trim()}function Fa(t){let e=Vt(t.error)?t.error:void 0,n=e&&Vt(e.data)?e.data:void 0,r=vt(e?.name),s=vt(n?.message)??vt(e?.message)??vt(t.message)??vt(t.errorMessage)??vt(t.error),o=vt(t.ref),i=r&&s&&r!==s?`${r}: ${s}`:r??s??$a;return (o?`${i} (ref: ${o})`:i).slice(0,Ha)}function La(t){let e=dp(t),n=[],r=null,s=0,o=[],i,u=false;for(let d of e.events){let c=typeof d.type=="string"?d.type:void 0;if(c){if(c==="text"){let l=Vt(d.part)?d.part:void 0,p=typeof l?.text=="string"?l.text:void 0;p?.trim()&&n.push(p.trim());continue}if(c==="result"){typeof d.result=="string"&&(r=d.result);continue}if(c==="tool_use"){s++;continue}if(c==="error"){o.push(Fa(d));continue}if(c==="step_finish"){u=true;let l=Vt(d.part)?d.part:void 0;i=typeof l?.reason=="string"?l.reason:void 0;}}}return {...e,texts:n,resultText:r,toolUseCount:s,errorMessages:o,terminalReason:i,hasTerminal:u}}function qa(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function wr(){return new Q("OpenCode returned no assistant output.",Kt,{code:"EMPTY_OUTPUT",kind:"transient"})}function up(){return new Q("OpenCode emitted malformed JSON output.",Kt,{code:"PROVIDER_CRASHED",kind:"transient"})}function Ma(t,e){switch(qa(t)){case "length":return new Q("OpenCode stopped because the context window was exceeded.",Kt,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new Q("OpenCode stopped because the content filter blocked the response.",Kt,{code:"UNKNOWN",kind:"permanent"});case "error":return new Q(e?`OpenCode error: ${e}`:`${$a} while generating a response.`,Kt,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var op,Kt,$a,Ha,ip,vs,Ns=x(()=>{h();It();Sn();jt();bt();op=new Set(["step_start","step_finish"]),Kt="cli/opencode",$a="OpenCode provider error",Ha=240,ip={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};vs={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,s=r!==void 0?[...r]:["run"];Tr(s,"--format")||s.push("--format","json"),e.resumeSessionId&&!s.includes("-s")&&!s.includes("--session")&&s.push("-s",e.resumeSessionId);let{agent:o,autoApprove:i}=ap(e.mode);Tr(s,"--agent")||o!==void 0&&s.push("--agent",o),i&&!Tr(s,"--auto")&&s.push("--auto"),e.effort!==void 0&&!Tr(s,"--variant")&&s.push("--variant",e.effort),e.model&&s.push("--model",e.model);let u;return !n&&!i&&!e.env?.OPENCODE_PERMISSION&&(u={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:s,stdinMessage:t,env:u}},extractText(t){let e=La(t),n=e.errorMessages[0];if(n){let i=Ma("error",n);if(i)throw i}let r=Ma(e.terminalReason??"",void 0);if(r)throw r;let s=e.texts.length>0?e.texts[e.texts.length-1]:void 0;if(s!==void 0){if(!e.hasTerminal)throw wr();return s}if(e.resultText?.trim()){if(!e.hasTerminal)throw wr();return e.resultText}if(e.malformed)throw up();if(!e.hasTerminal)throw wr();let o=qa(e.terminalReason);if((o==="stop"||o==="tool-calls")&&e.toolUseCount>0)return "";throw wr()},interpretExit(t,e,n=""){if(t===0)return null;let s=La(n).errorMessages[0];return s?new Q(`OpenCode error: ${s}`,Kt,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=Gt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],s;try{JSON.parse(t),s=[t];}catch{s=Ua(t),s.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let o of s){let i;try{i=JSON.parse(o);}catch{continue}let u=Me(i,n),d=i.type;if(d){if(d==="text"){let l=i.part?.text;l&&r.push({timestamp:u,type:"text",content:l});continue}if(d==="tool_use"){let c=i.part;if(!c)continue;let l=String(c.tool||""),p=String(c.callID||""),g=c.state,_=String(g?.status||""),m=g?.input,y=Le(m);if(r.push({timestamp:u,type:"tool_use",toolName:l,toolUseId:p,toolInput:y}),_==="completed"&&g?.output!==void 0){let k=g.output,N=typeof k=="string"?k:JSON.stringify(k);r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:N,isError:false});}else _==="error"&&r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}if(d==="error"){let c=Fa(i);r.push({timestamp:u,type:"error",content:c,errorMessage:c});continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?op.has(r):!1}catch{return false}}};});function In(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function cp(t,e){if(!(t?ct(xs).some(o=>o.id===t):false)||!t)return e;let r=En(xs,t),s=ia(xs)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:s&&r.includes(s)?s:void 0:s}var xs,Cs,Ds=x(()=>{h();It();yn();Ot();Rn();xs="antigravity";Cs={command:"agy",meta:{displayName:"Antigravity",models:ca(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:s}=lt(e.model),o=Es(r),i=o.model,u=e.effort??s??o.effort,d=cp(i,u),c=e.additionalArgs??[],l=i&&!In(c,"--model")?["--model",i]:[],p=In(c,"--effort")?[]:Ra(d),g=In(c,"--mode")||In(c,"--dangerously-skip-permissions")?[]:Ea(e.mode),_=In(c,"--print")?[]:["--print",t];return {args:[...l,...p,...g,...c,..._]}},extractText(t){let e=t.trim();if(!e)throw new Q("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(t){return {usage:null,model:null}},parseEvent(t,e){return []}};});var Ba=x(()=>{h();Bt();jt();Wt();bt();});function Jt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Xt(t){return Jt(t)?t:void 0}function me(t){return typeof t=="string"?t:void 0}function xt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function hp(t){let e=[],n=-1,r=0,s=false,o=false;for(let i=0;i<t.length;i+=1){let u=t[i];if(n===-1){(u==="{"||u==="[")&&(n=i,r=1);continue}if(o){o=false;continue}if(u==="\\"&&s){o=true;continue}if(u==='"'){s=!s;continue}s||(u==="{"||u==="["?r+=1:(u==="}"||u==="]")&&(r-=1,r===0&&(e.push(t.slice(n,i+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function An(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return Jt(n)?[n]:[]}catch{return hp(e).flatMap(n=>{try{let r=JSON.parse(n);return Jt(r)?[r]:[]}catch{return []}})}}function Ka(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function Nt(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(Nt).filter(n=>n!==void 0);return e.length>0?e.join(`
49
- `):void 0}if(Jt(t)){if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error;if(t.type==="text"&&typeof t.data=="string")return t.data;for(let e of ["content","FileContent","rawOutput"]){let n=Nt(t[e]);if(n!==void 0)return n}}}function _p(t){let e=i=>Array.isArray(i)&&i.every(u=>Number.isInteger(u)&&u>=0&&u<=255),n=i=>typeof i=="string"&&i.trim().length>0?i:void 0,r=i=>new TextDecoder("utf-8",{fatal:false}).decode(Uint8Array.from(i)),s=i=>{let u=JSON.stringify(i,(d,c)=>e(c)?`<bytes:${c.length}>`:c);return u===void 0?String(i):u},o=t.rawOutput;if(o!=null){let i=Xt(o);if(!i)return n(Nt(o))??s(o);let u;if(e(i.output)&&i.output.length>0&&(u=n(r(i.output))),!u&&e(i.stdout)&&i.stdout.length>0&&(u=n(r(i.stdout))),!u){let l=Xt(i.Result);u=n(i.output)??n(l?.output)??n(Nt(o));}let d=e(i.stderr)&&i.stderr.length>0?r(i.stderr):void 0;if(d!==void 0)if(u){let l=u.endsWith(`
43
+ `):""}function np(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function Ua(t){return t.replace(/\s+/g," ").trim()}function rp(t,e){let n=t?.description;if(typeof n!="string")return;let r=Ua(n);if(!r||r===Ua(e))return;if(r.length<=Ha)return r;let s=r.slice(0,Ha-1);return /[\uD800-\uDBFF]$/.test(s)&&(s=s.slice(0,-1)),`${s}\u2026`}function sp(t,e){let n=e.type;if(n==="text"){let r=String(e.text||"");return r?{timestamp:t,type:"text",content:r}:null}if(n==="thinking"){let r=typeof e.thinking=="string"?e.thinking.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="tool_use"){let r=String(e.name||""),s=e.id,o=e.input,i=$e(o);if(r==="Bash"&&Ze(i))return et(t,i,s);let u=rp(o,i);return {timestamp:t,type:"tool_use",toolUseId:s,toolName:r,toolInput:i,...u?{toolTitle:u}:{}}}if(n==="tool_result"){let r=!!e.is_error,s=e.tool_use_id,o=e.output??e.content??"",i;return typeof o=="string"?i=o:Array.isArray(o)?i=o.filter(u=>u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
44
+ `):i=JSON.stringify(o),{timestamp:t,type:"tool_result",toolUseId:s,...Me(i,r)}}return null}var Jl,Xl,Rr,Ha,Ns=x(()=>{h();ys();Ot();Wt();jt();Gt();zt();On();Nt();bn();vt();Jl=new Set(["tool_progress"]),Xl="cli/claude";Rr={command:"claude",meta:{displayName:"Claude",models:ka(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:s}=pt(e.model),o=e.effort??s,i=Oa(e.mode),u=ba(o),d=r?["--model",r]:[],c=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let p=[...e.additionalArgs];return p.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...c,...i,...u,...d,...p],stdinMessage:t}:{args:["--output-format","stream-json","--verbose",...c,...i,...u,...d,...p],stdinMessage:t}}return {args:["-p","--output-format","stream-json","--verbose",...c,...i,...u,...d],stdinMessage:t}},extractText(t){let e=Yl(t);if(e?.is_error===true){let s=Rr.extractFailure(JSON.stringify(e));if(s)throw s;let o=typeof e.subtype=="string"?e.subtype:"unknown",i=typeof e.terminal_reason=="string"?e.terminal_reason:"unknown";throw new Q(`Claude ended without an answer (subtype=${o}, terminal_reason=${i})`,Xl,{code:"EMPTY_OUTPUT",kind:"permanent"})}let n=Ma(t);if(n)return n;let r=t.trim();return Qe(r,"claude")?"":r},extractPartialText(t){return Ma(t)},extractFailure(t){try{let e=JSON.parse(t),n=Fa(e);if(n)return new bt(n)}catch{}return null},interpretExit(t,e,n){let r=Ql(n??"");return r?new Q(`Claude is not logged in (exit ${t}): ${r}. Sign in to this account with the official "claude auth login".`,"cli/claude",{code:"AUTH_REQUIRED",kind:"config"}):null},observeRateLimit(t){try{let e=JSON.parse(t);return Zl(e)}catch{return}},parseResultMeta(t){let e=t.split(`
45
+ `);for(let r of e)if(r.trim())try{let s=JSON.parse(r);if(s.type==="result"){let o=s.usage,i=o?{inputTokens:Number(o.input_tokens??0)+Number(o.cache_read_input_tokens??0),outputTokens:Number(o.output_tokens??0),cachedInputTokens:Number(o.cache_read_input_tokens??0),costUsd:Number(s.total_cost_usd??0)}:null,u=s.modelUsage,d=u?Object.keys(u)[0]??null:null;return {usage:i,model:d}}}catch{}let n=La(t);return n?{usage:{inputTokens:n.inputTokens,outputTokens:0,cachedInputTokens:n.cachedInputTokens,costUsd:0},model:n.model??null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];let s=He(n,e??new Date().toISOString()),o=ep(n);if(o)return [{timestamp:s,type:"error",content:o,errorMessage:o}];let i=n.output_file,u=n.summary;if(r==="system"&&n.subtype==="task_notification"&&n.status==="completed"&&typeof i=="string"&&i.trim().length>0&&typeof u=="string"&&u.trim().length>0)return [{timestamp:s,type:"text",content:u}];if(r!=="assistant"&&r!=="user")return [];let c=n.message?.content;if(!Array.isArray(c))return [];let l=[];for(let p of c){let g=sp(s,p);g&&l.push(g);}return l},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Jl.has(r):!1}catch{return false}}};Ha=200;});function qa(t){let e=t.split(`
46
+ `).filter(s=>s.trim()),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="assistant.message"&&typeof o.data?.content=="string"){let i=o.data.content;i.trim()&&n.push(i.trim());}o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}var op,vs,xs=x(()=>{h();Wt();bn();jt();zt();Gt();Nt();wr();vt();op=new Set(["interactive","plan","autopilot"]);vs={command:"copilot",meta:{displayName:"Copilot",models:wa()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&op.has(e.mode)&&r.push("--mode",e.mode),e.effort&&(Tr.copilot??[]).includes(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=qa(t);if(e)return e;let n=t.trim();return Qe(n,"copilot")?"":n},extractPartialText(t){return qa(t)},parseResultMeta(t){let e=Kt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let s=n.data;if(!s)return [];let o=He(n,e??new Date().toISOString()),i=s.toolCallId;if(r==="tool.execution_start"){let u=String(s.toolName||""),d=s.arguments,c=$e(d);return (u==="bash"||u==="Bash")&&Ze(c)?[et(o,c,i)]:[{timestamp:o,type:"tool_use",toolName:u,toolInput:c,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let u=s.error;if(u)return [{timestamp:o,type:"tool_result",...i&&{toolUseId:i},...Me(String(u.message||""),true)}];let d=s.result,c=String(d?.content||"");return [{timestamp:o,type:"tool_result",...i&&{toolUseId:i},...Me(c,false)}]}if(r==="assistant.message"){let u=String(s.content||"");return u?[{timestamp:o,type:"text",content:u}]:[]}return []}};});function dp(t){let e=[],n=0,r=false,s=false,o=0;for(let u=0;u<t.length;u++){let d=t[u];if(s){s=false;continue}if(d==="\\"&&r){s=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(o,u+1).trim();c&&e.push(c),o=u+1;}}}let i=t.slice(o).trim();return i&&e.push(i),e}function up(t){return t[0]==="exec"?t.slice(1):t}function Ba(t){let e=t.split(`
47
+ `).map(s=>s.trim()).filter(Boolean),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="item.completed"&&(o.item?.type==="message"||o.item?.type==="agent_message")&&typeof o.item?.text=="string"){let i=o.item.text;i.trim()&&n.push(i.trim());}o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function ft(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ja(t){return t.type==="turn.failed"?true:t.type!=="error"?false:typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||ft(t.error)}function Ga(t){let e=ft(t.error)?t.error:void 0,n=[t.message,t.errorMessage,e?.message,e?.detail,typeof t.error=="string"?t.error:void 0];for(let r of n)if(typeof r=="string"&&r.trim())return r;return t.type==="turn.failed"?"Codex turn failed.":"Codex CLI reported an error."}function cp(t){for(let e of t.split(/\r?\n/)){if(!e.trim())continue;let n;try{n=JSON.parse(e);}catch{continue}if(ft(n)&&ja(n))return Ga(n)}}function Wa(t,e,n,r){if(!n||t.type!=="command_execution"&&t.type!=="mcp_tool_call"||typeof t.id!="string"||!t.id.trim()||t.type==="mcp_tool_call"&&e==="item.started"&&(typeof t.server!="string"||typeof t.tool!="string"))return;let s=n.state.get("codex.pending");s||(s=new Map,n.state.set("codex.pending",s));let o=JSON.stringify([t.type,t.id]);if(e==="item.started"){let d=`codex:${JSON.stringify(t.id)}#${n.rowIndex}:${r}`,c=s.get(o)??[];return c.push(d),s.set(o,c),d}let i=s.get(o),u=i?.pop();return i?.length||s.delete(o),u}function lp(t,e,n){let r=e.type;if(r==="command_execution"){let s=String(e.command||"");return Ze(s)?[et(t,s,n)]:[{timestamp:t,type:"tool_use",toolName:"Bash",toolInput:s,...n?{toolUseId:n}:{}}]}return r==="mcp_tool_call"?typeof e.server!="string"||typeof e.tool!="string"?[]:[{timestamp:t,type:"tool_use",toolName:`${e.server}/${e.tool}`,toolInput:$e(e.arguments),...n?{toolUseId:n}:{}}]:[]}function pp(t,e,n){let r=e.type;if(r==="message"||r==="text"){let s=e.content;if(Array.isArray(s))for(let o of s){let i=fp(t,o);if(i)return i}if(typeof e.text=="string")return {timestamp:t,type:"text",content:e.text}}if(r==="agent_message"&&typeof e.text=="string")return {timestamp:t,type:"text",content:e.text};if(r==="reasoning"){let s=typeof e.text=="string"?e.text.trim():"";return s?{timestamp:t,type:"thinking",content:s}:null}if(r==="command_execution"){let s=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:t,type:"tool_result",...Me(s,o),...n?{toolUseId:n}:{}}}if(r==="mcp_tool_call"){let s=ft(e.result)?e.result:void 0,i=(Array.isArray(s?.content)?s.content:[]).filter(d=>ft(d)&&d.type==="text"&&typeof d.text=="string").map(d=>d.text).join(`
48
+ `),u=typeof e.error=="string"?e.error:ft(e.error)&&typeof e.error.message=="string"?e.error.message:"";return {timestamp:t,type:"tool_result",resultPreview:i||u,isError:e.status==="failed"||e.status==="error"||e.is_error===true||e.error!=null,...n?{toolUseId:n}:{}}}if(r==="tool_use"){let s=String(e.name||e.tool_name||""),o=e.input,i=$e(o);return s==="Bash"&&Ze(i)?et(t,i):{timestamp:t,type:"tool_use",toolName:s,toolInput:i}}if(r==="tool_result"){let s=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",...Me(o,s)}}if(r==="web_search"){let s=e.action,o;if(s?.type==="search"){let i=s.queries;o=String(s.query||"")||(i?.length?i.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return !o&&!(ft(s)&&s.type==="other"&&e.query==="")?null:{timestamp:t,type:"tool_use",toolName:"WebSearch",toolInput:o}}if(r==="file_change"){let s=e.changes;if(!Array.isArray(s)||s.length===0)return null;let o=s.map(u=>String(u.path||"")).filter(Boolean);if(o.length===0)return null;let i=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:t,type:"tool_use",toolName:"Edit",toolInput:i}}return null}function fp(t,e){let n=e.type;if(n==="text")return {timestamp:t,type:"text",content:String(e.text||"")};if(n==="tool_use"){let r=String(e.name||""),s=e.input,o=$e(s);return r==="Bash"&&Ze(o)?et(t,o):{timestamp:t,type:"tool_use",toolName:r,toolInput:o}}return null}var ip,ap,Cs,Ds=x(()=>{h();Ot();Wt();bn();jt();zt();Ss();Gt();On();Nt();vt();ip=new Set(["turn.started","turn.completed","item.updated"]),ap="cli/codex";Cs={command:"codex",meta:{displayName:"Codex",models:Ta(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:s}=pt(e.model),o=e.effort??s,i=e.resumeSessionId?Ia(e.mode):Sa(e.mode),u=Aa(o),d=r?["-m",r]:[],c=up(e.additionalArgs??[]),p=c.includes("--json")||c.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...p,...i,...u,...d,...c,e.resumeSessionId,"-"],stdinMessage:t}:{args:["exec",...p,...i,...u,...d,...c],stdinMessage:t}},extractText(t){let e=cp(t);if(e)throw new Q(e,ap);let n=Ba(t);if(n)return n;let r=t.trim();return Qe(r,"codex")?"":r},extractPartialText(t){return Ba(t)},parseResultMeta(t){let e=Kt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e,n){let r=e??new Date().toISOString(),s=[],o;try{JSON.parse(t),o=[t];}catch{o=dp(t),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let[i,u]of o.entries()){let d;try{d=JSON.parse(u);}catch{continue}if(!ft(d))continue;let c=d.type;if(!c)continue;let l=He(d,r);if(ja(d)){let g=Ga(d);s.push({timestamp:l,type:"error",content:g,errorMessage:g});continue}if(!c.startsWith("item.")&&!c.startsWith("turn.")&&!c.startsWith("thread.")||Rs(d))continue;c==="thread.started"&&n&&n.state.delete("codex.pending");let p=d.item;if(p){if(c==="item.started"){s.push(...lp(l,p,Wa(p,c,n,i)));continue}if(c==="item.completed"){let g=pp(l,p,Wa(p,c,n,i));g&&s.push(g);continue}}}return s},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?ip.has(r):!1}catch{return false}}};});function _p(t){return t?hp[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Sr(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Xa(t){let e=[],n=0,r=false,s=false,o=0;for(let u=0;u<t.length;u++){let d=t[u];if(s){s=false;continue}if(d==="\\"&&r){s=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(o,u+1).trim();c&&e.push(c),o=u+1;}}}let i=t.slice(o).trim();return i&&e.push(i),e}function Xt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function mp(t){let e=[],n=false;for(let r of t.split(/\r?\n/)){let s=r.trim();if(!s)continue;try{let i=JSON.parse(s);Xt(i)?e.push(i):n=!0;continue}catch{}let o=Xa(s);o.length>1&&console.warn("[opencode] extractText: falling back to concatenated-JSON split for a malformed line");for(let i of o)try{let u=JSON.parse(i);Xt(u)?e.push(u):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function xt(t){if(typeof t!="string")return;let e=t.split(/\r?\n/).map(n=>n.trim()).find(n=>n&&!/^at\s+/.test(n));if(e)return e.replace(/\u001b\[[0-?]*[ -/]*[@-~]/g,"").replace(/(?:[A-Za-z]:[\\/]|\/)(?:[^\s"'`()\[\]{}]+[\\/])*[^\s"'`()\[\]{}]+/g,"[path]").slice(0,Ja).trim()}function Ya(t){let e=Xt(t.error)?t.error:void 0,n=e&&Xt(e.data)?e.data:void 0,r=xt(e?.name),s=xt(n?.message)??xt(e?.message)??xt(t.message)??xt(t.errorMessage)??xt(t.error),o=xt(t.ref),i=r&&s&&r!==s?`${r}: ${s}`:r??s??Va;return (o?`${i} (ref: ${o})`:i).slice(0,Ja)}function za(t){let e=mp(t),n=[],r=null,s=0,o=[],i,u=false;for(let d of e.events){let c=typeof d.type=="string"?d.type:void 0;if(c){if(c==="text"){let l=Xt(d.part)?d.part:void 0,p=typeof l?.text=="string"?l.text:void 0;p?.trim()&&n.push(p.trim());continue}if(c==="result"){typeof d.result=="string"&&(r=d.result);continue}if(c==="tool_use"){s++;continue}if(c==="error"){o.push(Ya(d));continue}if(c==="step_finish"){u=true;let l=Xt(d.part)?d.part:void 0;i=typeof l?.reason=="string"?l.reason:void 0;}}}return {...e,texts:n,resultText:r,toolUseCount:s,errorMessages:o,terminalReason:i,hasTerminal:u}}function Qa(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function Ir(){return new Q("OpenCode returned no assistant output.",Jt,{code:"EMPTY_OUTPUT",kind:"transient"})}function kp(){return new Q("OpenCode emitted malformed JSON output.",Jt,{code:"PROVIDER_CRASHED",kind:"transient"})}function Ka(t,e){switch(Qa(t)){case "length":return new Q("OpenCode stopped because the context window was exceeded.",Jt,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new Q("OpenCode stopped because the content filter blocked the response.",Jt,{code:"UNKNOWN",kind:"permanent"});case "error":return new Q(e?`OpenCode error: ${e}`:`${Va} while generating a response.`,Jt,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var gp,Jt,Va,Ja,hp,Ps,Ls=x(()=>{h();Ot();bn();zt();vt();gp=new Set(["step_start","step_finish"]),Jt="cli/opencode",Va="OpenCode provider error",Ja=240,hp={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};Ps={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,s=r!==void 0?[...r]:["run"];Sr(s,"--format")||s.push("--format","json"),e.resumeSessionId&&!s.includes("-s")&&!s.includes("--session")&&s.push("-s",e.resumeSessionId);let{agent:o,autoApprove:i}=_p(e.mode);Sr(s,"--agent")||o!==void 0&&s.push("--agent",o),i&&!Sr(s,"--auto")&&s.push("--auto"),e.effort!==void 0&&!Sr(s,"--variant")&&s.push("--variant",e.effort),e.model&&s.push("--model",e.model);let u;return !n&&!i&&!e.env?.OPENCODE_PERMISSION&&(u={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:s,stdinMessage:t,env:u}},extractText(t){let e=za(t),n=e.errorMessages[0];if(n){let i=Ka("error",n);if(i)throw i}let r=Ka(e.terminalReason??"",void 0);if(r)throw r;let s=e.texts.length>0?e.texts[e.texts.length-1]:void 0;if(s!==void 0){if(!e.hasTerminal)throw Ir();return s}if(e.resultText?.trim()){if(!e.hasTerminal)throw Ir();return e.resultText}if(e.malformed)throw kp();if(!e.hasTerminal)throw Ir();let o=Qa(e.terminalReason);if((o==="stop"||o==="tool-calls")&&e.toolUseCount>0)return "";throw Ir()},interpretExit(t,e,n=""){if(t===0)return null;let s=za(n).errorMessages[0];return s?new Q(`OpenCode error: ${s}`,Jt,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=Kt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],s;try{JSON.parse(t),s=[t];}catch{s=Xa(t),s.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let o of s){let i;try{i=JSON.parse(o);}catch{continue}let u=He(i,n),d=i.type;if(d){if(d==="text"){let l=i.part?.text;l&&r.push({timestamp:u,type:"text",content:l});continue}if(d==="tool_use"){let c=i.part;if(!c)continue;let l=String(c.tool||""),p=String(c.callID||""),g=c.state,_=String(g?.status||""),m=g?.input,y=$e(m);if(r.push({timestamp:u,type:"tool_use",toolName:l,toolUseId:p,toolInput:y}),_==="completed"&&g?.output!==void 0){let k=g.output,v=typeof k=="string"?k:JSON.stringify(k);r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:v,isError:false});}else _==="error"&&r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}if(d==="error"){let c=Ya(i);r.push({timestamp:u,type:"error",content:c,errorMessage:c});continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?gp.has(r):!1}catch{return false}}};});function Nn(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Tp(t,e){if(!(t?lt(Ms).some(o=>o.id===t):false)||!t)return e;let r=An(Ms,t),s=ma(Ms)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:s&&r.includes(s)?s:void 0:s}var Ms,$s,Hs=x(()=>{h();Ot();In();Nt();On();Ms="antigravity";$s={command:"agy",meta:{displayName:"Antigravity",models:ya(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:s}=pt(e.model),o=Os(r),i=o.model,u=e.effort??s??o.effort,d=Tp(i,u),c=e.additionalArgs??[],l=i&&!Nn(c,"--model")?["--model",i]:[],p=Nn(c,"--effort")?[]:Pa(d),g=Nn(c,"--mode")||Nn(c,"--dangerously-skip-permissions")?[]:Da(e.mode),_=Nn(c,"--print")?[]:["--print",t];return {args:[...l,...p,...g,...c,..._]}},extractText(t){let e=t.trim();if(!e)throw new Q("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(t){return {usage:null,model:null}},parseEvent(t,e){return []}};});var Za=x(()=>{h();jt();zt();Gt();vt();});function Yt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Qt(t){return Yt(t)?t:void 0}function Te(t){return typeof t=="string"?t:void 0}function Dt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function Sp(t){let e=[],n=-1,r=0,s=false,o=false;for(let i=0;i<t.length;i+=1){let u=t[i];if(n===-1){(u==="{"||u==="[")&&(n=i,r=1);continue}if(o){o=false;continue}if(u==="\\"&&s){o=true;continue}if(u==='"'){s=!s;continue}s||(u==="{"||u==="["?r+=1:(u==="}"||u==="]")&&(r-=1,r===0&&(e.push(t.slice(n,i+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function vn(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return Yt(n)?[n]:[]}catch{return Sp(e).flatMap(n=>{try{let r=JSON.parse(n);return Yt(r)?[r]:[]}catch{return []}})}}function sd(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function Ct(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(Ct).filter(n=>n!==void 0);return e.length>0?e.join(`
49
+ `):void 0}if(Yt(t)){if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error;if(t.type==="text"&&typeof t.data=="string")return t.data;for(let e of ["content","FileContent","rawOutput"]){let n=Ct(t[e]);if(n!==void 0)return n}}}function Ip(t){let e=i=>Array.isArray(i)&&i.every(u=>Number.isInteger(u)&&u>=0&&u<=255),n=i=>typeof i=="string"&&i.trim().length>0?i:void 0,r=i=>new TextDecoder("utf-8",{fatal:false}).decode(Uint8Array.from(i)),s=i=>{let u=JSON.stringify(i,(d,c)=>e(c)?`<bytes:${c.length}>`:c);return u===void 0?String(i):u},o=t.rawOutput;if(o!=null){let i=Qt(o);if(!i)return n(Ct(o))??s(o);let u;if(e(i.output)&&i.output.length>0&&(u=n(r(i.output))),!u&&e(i.stdout)&&i.stdout.length>0&&(u=n(r(i.stdout))),!u){let l=Qt(i.Result);u=n(i.output)??n(l?.output)??n(Ct(o));}let d=e(i.stderr)&&i.stderr.length>0?r(i.stderr):void 0;if(d!==void 0)if(u){let l=u.endsWith(`
50
50
  `)||u.endsWith("\r")?"":`
51
- `;u=`${u}${l}${d}`;}else u=n(d);if(u)return u;let c=n(i.summary)??n(Nt(t.content))??n(i.output_for_prompt);return c!==void 0?c:s(o)}if(t.content!==null&&t.content!==void 0)return Nt(t.content)??s(t.content);if(t.result!==null&&t.result!==void 0)return Nt(t.result)??s(t.result)}function Va(t){let e=Xt(t.error),n=[t.message,t.errorMessage,e?.message,e?.detail,typeof t.error=="string"?t.error:void 0].find(r=>typeof r=="string"&&r.trim().length>0);return n?Ja(n):"Grok CLI reported an error."}function Ja(t){return (t.replace(gp,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function za(t){return fp.test(t)}function mp(t){let e=Xt(t.modelUsage);return e?Object.keys(e)[0]??null:null}function kp(t){let e=Xt(t.usage);if(!e)return null;let n=xt(e.cache_read_input_tokens);return {inputTokens:xt(e.input_tokens)+n,cachedInputTokens:n,outputTokens:xt(e.output_tokens),costUsd:xt(t.total_cost_usd)}}function Tp(t){let e=0,n=0,r=0,s=false,o=new Set;for(let i of t.split(`
52
- `).flatMap(An)){if(i.type!=="usage")continue;let u=Xt(i.usage);if(!u)continue;let d=me(i.signature);if(d&&d.length>0){let l=`signature:${d}`;if(o.has(l))continue;o.add(l);}let c=xt(u.cache_read_input_tokens);e+=xt(u.input_tokens)+c,n+=c,r+=xt(u.output_tokens),s=true;}return s?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function wp(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let o of e.entries.slice(0,Wa)){if(!Jt(o))continue;let i=me(o.content)?.trim();if(!i)continue;let u=me(o.status)?.trim(),d=me(o.priority)?.trim(),c=[u?`status=${u}`:void 0,d?`priority=${d}`:void 0].filter(p=>!!p),l=c.length>0?` (${c.join(", ")})`:"";n.push(`- ${i}${l}`);}if(n.length===0)return [];e.entries.length>Wa&&n.push(Ga);let r=n.join(`
53
- `),s=r.length>ja?`${r.slice(0,ja-1)}${Ga}`:r;return [{timestamp:t,type:"info",content:s}]}function yp(t,e){let n=me(e.type);if(n==="thought"){let r=me(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=me(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return wp(t,e);if(n==="tool_call"){let r=me(e.toolCallId),s=me(e.toolName)??me(e.title),o=e.rawInput===void 0?void 0:Ka(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:s,toolInput:o}]}if(n==="tool_call_update"){let r=me(e.status);if(r!=="completed"&&r!=="failed"&&r!=="error")return [];let s=_p(e),o=r!=="completed"||e.isError===true;return [{timestamp:t,type:"tool_result",toolUseId:me(e.toolCallId),toolName:me(e.toolName)??me(e.title),...s!==void 0?Pe(s,o):{isError:o}}]}if(n==="error"){let r=Va(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var yr,pp,fp,gp,Wa,ja,Ga,Ps,Ls=x(()=>{h();It();_s();Ot();Wt();Rn();bt();yr="cli/grok",pp=new Set(["available_commands","usage","end"]),fp=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,gp=/\u001b\[[0-?]*[ -/]*[@-~]/g,Wa=20,ja=4e3,Ga="\u2026";Ps={command:"grok",createSessionId:()=>randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=lt(e.model),s=e.effort??r,o=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],i=n?["--model",n]:[],u=n?ct("grok").some(E=>E.id===n):false,d=n&&u?En("grok",n):[],c=!s||d.length===0||d.includes(s)?s:void 0,l=ya(c),p=e.additionalArgs??[],g=E=>p.some(A=>A===E||A.startsWith(`${E}=`)),_=e.providerOptions,m=_?.alwaysApprove,y=_?.sandbox,k=g("--permission-mode")?[]:ka(e.mode),N=g("--always-approve")?[]:Ta(m),I=g("--sandbox")?[]:wa(y),D=g("--verbatim")?[]:["--verbatim"];return {args:["--no-auto-update",...o,"--single",t,...D,"--output-format","streaming-json","--no-alt-screen",...i,...l,...k,...N,...I,...p]}},extractText(t){let e=[],n=false;for(let r of t.split(`
54
- `).flatMap(An))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 An(t))if(e.type==="error"){let n=Va(e);return za(Ka(e))?new At(n,yr):new Q(n,yr)}return null},interpretExit(t,e){if(t===0)return null;let n=Ja(e)||`Grok CLI exited with code ${t}.`;return za(e)?new At(n,yr):new Q(n,yr)},parseResultMeta(t){let n=t.split(`
55
- `).flatMap(An).find(r=>r.type==="end");return n?{usage:kp(n),model:mp(n)}:{usage:Tp(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return An(t).flatMap(r=>yp(Me(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return Jt(n)&&typeof n.type=="string"?pp.has(n.type):!1}catch{return false}}};});var Xa,Ya=x(()=>{h();Ss();As();bs();Ns();Ds();Ba();Ls();Ss();As();bs();Ns();Ds();Ls();Bt();Xa={codex:Os,claude:kr,opencode:vs,antigravity:Cs,copilot:Is,grok:Ps};});function Qa(t){if(t.startsWith("cli/"))return Xa[t.slice(4)]}var Za=x(()=>{h();Yi();Ya();});function Er(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function Ep(t,e){return typeof t=="string"&&t.length>0?t:typeof e=="string"&&e.length>0?e:null}function Rr(t){if(typeof t.provider!="string"||t.provider.length===0)return;let n=t.taskLogRepository.readLogs(t.taskId)?.entries.filter(g=>g.level==="stdout").map(g=>g.message).join(`
56
- `)??"";if(!n.trim())return;let r=Qa(t.provider);if(!r)return;let s;try{s=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let o=Ep(s?.model,t.model),i=s?.usage;if(!i)return {stdout:n,adapter:r};let u=Er(i.inputTokens),d=Er(i.outputTokens),c=Er(i.cachedInputTokens),l=Pi(Er(i.costUsd),u,d,c,o);return u!==0||d!==0||c!==0||l!==0?{stdout:n,adapter:r,usage:{inputTokens:u,outputTokens:d,cachedInputTokens:c,costUsd:l,model:o}}:{stdout:n,adapter:r}}var Ms=x(()=>{h();Za();dr();});function Hs(t){let e=new Set;for(let n of t)for(let r of Rp.get(n)??[n])e.add(r);return [...e]}function Us(t){if(t)try{let e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))return;let n=e.terminalReason;return typeof n=="string"&&Sp.has(n)?n:void 0}catch{return}}function Ze(t){let e=Us(t.metadata);if(e)return e;if(t.status==="runner_lost")return "runner_lost";if(t.status==="stopped")return "user_stop";if(t.status==="failed"&&typeof t.error=="string"){if($s.stopped.test(t.error))return "user_stop";if($s.runnerLost.test(t.error))return "runner_lost"}}function $e(t){switch(t.status){case "stopped":case "pending":case "running":case "paused":case "success":return t.status;case "completed":case "done":return "success";case "error":case "runner_lost":return "failed";case "failed":{let e=Us(t.metadata);return e==="user_stop"?"stopped":e?"failed":typeof t.error=="string"&&$s.stopped.test(t.error)?"stopped":"failed"}default:return t.status}}function Ip(t){if(!t)return {};try{let e=JSON.parse(t);return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{}}catch{return {}}}function bn(t){let e=$e(t);return t.status==="runner_lost"&&Us(t.metadata)===void 0?{...t,status:e,metadata:JSON.stringify({...Ip(t.metadata),terminalReason:"runner_lost"})}:{...t,status:e}}var On,Rp,$s,Sp,vn=x(()=>{h();On=["success","completed","done","failed","error","stopped","runner_lost"],Rp=new Map([["success",["success","completed","done"]],["failed",["failed","error","runner_lost"]]]);$s={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},Sp=new Set(["user_stop","runner_lost","launch_failed"]);});function Fs(t,e,n=1){let r=process.env[t];if(r===void 0||r==="")return e;let s=Number(r);return !Number.isFinite(s)||s<=0?e:Math.max(n,Math.trunc(s))}function qs(){return Fs("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function Qt(){return Fs("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function Ir(){return Fs("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function Yt(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Sr(t){let e=typeof t=="object"&&t!==null&&"code"in t?String(t.code):t instanceof Error?t.name:typeof t;console.warn(`[crewx] task heartbeat write failed (${e}); execution continues`);}function Ap(t){return t?{id:t.id,status:t.status,run_epoch:t.run_epoch,stop_requested_at:t.stop_requested_at,stop_requested_epoch:t.stop_requested_epoch,pid:t.pid,metadata:t.metadata,started_at:t.started_at,duration_ms:t.duration_ms}:null}function ed(t,e){return !!t.stop_requested_at&&Yt(t.stop_requested_epoch)===Yt(e)}function td(t,e){let n=Yt(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let s=Ap(t.getTask(e.taskId));return !s||s.status!=="running"||Yt(s.run_epoch)!==n?{accepted:false,row:s}:{accepted:true,row:s}}function od(t,e){let n=Nn.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),Nn.delete(t),true)}function xn(t,e){let n=Nn.get(t);return !n||e!==void 0&&n.runEpoch!==Yt(e)?false:od(t,n)}function id(t,e){let n=Yt(e.runEpoch);xn(e.taskId);let r=true,s=null;try{let c=td(t,{...e,runEpoch:n});r=c.accepted,s=c.row;}catch(c){Sr(c);}if(!r)return false;let o=qs(),i=Math.min(o,1e3),u=setInterval(()=>{let c=Nn.get(e.taskId);if(!(!c||c.timer!==u))try{c.heartbeatElapsedMs+=i;let l=c.heartbeatElapsedMs>=o,p=td(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:l});if(!p.accepted){od(e.taskId,c);return}l&&(c.heartbeatElapsedMs%=o,c.lastHeartbeatAt=Date.now()),p.row&&ed(p.row,n)&&!c.stopRequested&&(c.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(Sr));}catch(l){Sr(l);}},i),d={timer:u,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return Nn.set(e.taskId,d),typeof u=="object"&&u!==null&&"unref"in u&&u.unref(),s&&ed(s,n)&&e.onStopRequested&&(d.stopRequested=true,Promise.resolve(e.onStopRequested(s)).catch(Sr)),true}var nd,rd,sd,Nn,Cn=x(()=>{h();nd=1e4,rd=3e4,sd=18e5;Nn=new Map;});function Ar(t,e=Date.now(),n=Gs){let r=t?Date.parse(t):Number.NaN,s=typeof e=="number"?e:Date.parse(e),o=Vs(n,Gs,0);return Number.isFinite(r)&&Number.isFinite(s)&&s-r>o?"forced":"cooperative"}function Vs(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function ld(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function Pp(t){if(!t)return;let e=ld(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function Re(t,e){if(!t)return {status:"not_running",finalStatus:"not_running",...e?{pid:e}:{}};let n=typeof t.pid=="number"&&t.pid>0?t.pid:e;if(t.status==="stopped"){let r=Pp(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function Qs(t,e,n="Process owner could not be verified"){let r=e??(t.pid&&t.pid>0?t.pid:void 0);return {status:"ownership_unverified",finalStatus:t.status,...r?{pid:r}:{},error:n}}function V(t,e,n){let r=n??(t?.pid&&t.pid>0?t.pid:void 0);return {status:"failed",finalStatus:t?.status??null,...r?{pid:r}:{},error:e}}function js(t,e){return V(t,vp,e)}function Lp(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=Qt():false}function Mp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function $p(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=ld(t.metadata),r=n.ownership==="runner"&&typeof n.providerPid=="number"&&Number.isSafeInteger(n.providerPid)&&n.providerPid>0?n.providerPid:void 0;return [...new Set([e,r].filter(s=>s!==void 0))]}function Hp(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return Re(r,n)}async function Up(t,e,n,r){let s=Date.now()+n;for(;;){let o=Hp(t,e);if(o)return o;let i=s-Date.now();if(i<=0)return;await new Promise(u=>{setTimeout(u,Math.min(r,i));});}}async function cd(t,e,n){let r=new Date().toISOString(),s={origin:n.origin??"internal",...n.callerPid!==void 0?{callerPid:n.callerPid}:{},...n.callerTaskId!==void 0?{callerTaskId:n.callerTaskId}:{}},o=t.requestTaskStop({id:e,requestedAt:r,...s}),i=t.getTask(e);if(!o.accepted){if(o.status==="pending"){let D=t.stopPendingTask(e,void 0,void 0,{...s,at:r}),E=t.getTask(e);if(D||!E||E.status!=="running")return Re(E);if(o=t.requestTaskStop({id:e,requestedAt:r,...s}),!o.accepted&&o.status!=="running"||!o.accepted&&!o.alreadyRequestedAt)return Re(t.getTask(e))}else if(!(o.status==="running"&&o.alreadyRequestedAt))return Re(i)}let u=o.runEpoch,d=Vs(n.graceMs,Gs,0),c=Vs(n.pollMs,Op,1),l=await Up(t,e,d,c);if(l)return l;let p=t.getTask(e);if(!p||p.status!=="running")return Re(p);let g=$p(p),_=g[0];if(!_){let D=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),E=t.getTask(e);return D||E?.status!=="running"?Re(E):V(E,"Failed to finalize task stop")}let m=Mp(n),y="unknown";if(!Lp(p,Date.now())){let D=n.processControl?.checkProcessOwnershipAsync??ur;try{y=await D(_,n.ownershipMarkers??Ys,m);}catch{y="unknown";}if(y!=="owned")return Qs(p)}let k=n.processControl?.terminateProcessTree??Ft;for(let D of g){let E;try{E=await k(D,{...m,signal:Ut});}catch(A){E={status:"failed",pid:D,method:m.platform==="win32"?"taskkill":"process-group",error:A instanceof Error?A.message:String(A)};}if(E.status==="failed")return V(t.getTask(e),E.error??"Failed to terminate process tree")}let N=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),I=t.getTask(e);return N||I?.status!=="running"?Re(I,_):V(I,"Task changed before stop was finalized")}function Js(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function Xs(t){return Number.isSafeInteger(t)&&t>=0}function Dn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Fp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function qp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Bp(t,e){let n=t?.pid&&t.pid>0?t.pid:e;return {status:"stopped",method:"forced",finalStatus:t?.status??"failed",...n?{pid:n}:{}}}function Wp(t){switch(t){case "epoch_mismatch":return zs;case "workspace_mismatch":return Ks;default:return}}async function pd(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return js(n,Js(e.targetPid)?e.targetPid:void 0);if(!Xs(e.sourceRunEpoch)||!Xs(e.settleRunEpoch)||Dn(n.run_epoch)!==e.settleRunEpoch)return V(n,Bs,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return V(n,Ws,e.targetPid);let r=new Date().toISOString(),s;try{s=t.requestTaskStop({id:e.taskId,requestedAt:r,sourceRunEpoch:e.sourceRunEpoch,settleRunEpoch:e.settleRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return V(n,Np,e.targetPid)}let o=t.getTask(e.taskId);if(!o||o.status!=="running")return js(o,e.targetPid);if(s.runEpoch!==e.settleRunEpoch||Dn(o.run_epoch)!==e.settleRunEpoch)return V(o,Bs,e.targetPid);if(e.workspaceId!==void 0&&o.workspace_id!==e.workspaceId)return V(o,Ws,e.targetPid);if(!Js(e.targetPid))return V(o,bp);let i=Fp(e),u=e.processControl?.checkProcessOwnershipAsync??ur,d="unknown";try{d=await u(e.targetPid,e.ownershipMarkers??Ys,i);}catch{d="unknown";}if(d!=="owned")return Qs(o,e.targetPid);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return js(c,e.targetPid);if(Dn(c.run_epoch)!==e.settleRunEpoch)return V(c,Bs,e.targetPid);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return V(c,Ws,e.targetPid);let l=e.processControl?.terminateProcessTree??Ft,p;try{p=await l(e.targetPid,{...i,signal:Ut});}catch{return V(t.getTask(e.taskId),ad,e.targetPid)}if(p.status==="failed")return V(t.getTask(e.taskId),ad,e.targetPid);let g;try{g=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return V(t.getTask(e.taskId),dd,e.targetPid)}return g?Re(t.getTask(e.taskId),e.targetPid):V(t.getTask(e.taskId),dd,e.targetPid)}async function fd(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Re(n);if(!Xs(e.expectedRunEpoch)||Dn(n.run_epoch)!==e.expectedRunEpoch)return V(n,zs);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return V(n,Ks);let r=n.pid;if(!Js(r))return V(n,xp);let s=qp(e),o=e.processControl?.checkProcessOwnershipAsync??ur,i="unknown";try{i=await o(r,e.ownershipMarkers??Ys,s);}catch{i="unknown";}if(i!=="owned")return Qs(n,r,Cp);let u=e.processControl?.terminateProcessTree??Ft,d;try{d=await u(r,{...s,signal:Ut});}catch{return V(t.getTask(e.taskId),ud,r)}if(d.status==="failed")return V(t.getTask(e.taskId),ud,r);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return Re(c,r);if(Dn(c.run_epoch)!==e.expectedRunEpoch)return V(c,zs,r);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return V(c,Ks,r);let l;try{l=t.finalizeTaskForHostShutdown({id:e.taskId,expectedRunEpoch:e.expectedRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return V(t.getTask(e.taskId),Dp,r)}let p=Wp(l);return p?V(t.getTask(e.taskId),p,r):l!=="settled"?Re(t.getTask(e.taskId),r):Bp(t.getTask(e.taskId),r)}function gd(t,e,n={}){if(typeof t=="string"){let r=t,s=e??{};return Promise.resolve().then(()=>(eo(),hd)).then(({TaskRepository:o})=>cd(new o,r,s))}return cd(t,e,n)}var Gs,Op,Ys,bp,Bs,Ws,vp,ad,dd,Np,zs,Ks,xp,Cp,ud,Dp,Zs=x(()=>{h();cr();Cn();Gs=5e3,Op=250;Ys=["crewx","claude","codex","opencode","grok","node"],bp="INSTRUCTION_STOP_TARGET_PID_MISSING",Bs="INSTRUCTION_STOP_EPOCH_MISMATCH",Ws="INSTRUCTION_STOP_WORKSPACE_MISMATCH",vp="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",ad="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",dd="INSTRUCTION_STOP_SETTLE_CAS_FAILED",Np="INSTRUCTION_STOP_REQUEST_FAILED",zs="HOST_SHUTDOWN_EPOCH_MISMATCH",Ks="HOST_SHUTDOWN_WORKSPACE_MISMATCH",xp="HOST_SHUTDOWN_TARGET_PID_MISSING",Cp="HOST_SHUTDOWN_OWNERSHIP_UNVERIFIED",ud="HOST_SHUTDOWN_PROCESS_TERMINATION_FAILED",Dp="HOST_SHUTDOWN_SETTLE_CAS_FAILED";});var hd={};iu(hd,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>Ed,HOST_SHUTDOWN_TERMINAL_ERROR:()=>Td,PENDING_ADOPT_GRACE_MS:()=>yd,PID_NULL_REAP_GRACE_MS:()=>lo,RATED_TASK_EXCERPT_MAX_CHARS:()=>po,RATED_TASK_LIST_MAX_LIMIT:()=>Sd,TASK_HEARTBEAT_HARD_STALE_MS:()=>sd,TASK_HEARTBEAT_INTERVAL_MS:()=>nd,TASK_HEARTBEAT_STALE_MS:()=>rd,TASK_RATINGS:()=>Rd,TaskRatingError:()=>Un,TaskRepository:()=>Hn,buildRatedTasksCountQuery:()=>Ad,buildRatedTasksQuery:()=>Id,countRatedTasks:()=>df,hasRecordedUsage:()=>co,listRatedTasks:()=>af,mergeTerminalReason:()=>uo,resolveTaskHeartbeatHardStaleMs:()=>Ir,resolveTaskHeartbeatIntervalMs:()=>qs,resolveTaskHeartbeatStaleMs:()=>Qt,setTaskRating:()=>of});function Ue(t){return bn(t)}function no(t){return bn(t)}function so(t=a.model,e=a.metadata){let n=sql`
51
+ `;u=`${u}${l}${d}`;}else u=n(d);if(u)return u;let c=n(i.summary)??n(Ct(t.content))??n(i.output_for_prompt);return c!==void 0?c:s(o)}if(t.content!==null&&t.content!==void 0)return Ct(t.content)??s(t.content);if(t.result!==null&&t.result!==void 0)return Ct(t.result)??s(t.result)}function od(t){let e=Qt(t.error),n=[t.message,t.errorMessage,e?.message,e?.detail,typeof t.error=="string"?t.error:void 0].find(r=>typeof r=="string"&&r.trim().length>0);return n?id(n):"Grok CLI reported an error."}function id(t){return (t.replace(Rp,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function rd(t){return Ep.test(t)}function Ap(t){let e=Qt(t.modelUsage);return e?Object.keys(e)[0]??null:null}function Op(t){let e=Qt(t.usage);if(!e)return null;let n=Dt(e.cache_read_input_tokens);return {inputTokens:Dt(e.input_tokens)+n,cachedInputTokens:n,outputTokens:Dt(e.output_tokens),costUsd:Dt(t.total_cost_usd)}}function bp(t){let e=0,n=0,r=0,s=false,o=new Set;for(let i of t.split(`
52
+ `).flatMap(vn)){if(i.type!=="usage")continue;let u=Qt(i.usage);if(!u)continue;let d=Te(i.signature);if(d&&d.length>0){let l=`signature:${d}`;if(o.has(l))continue;o.add(l);}let c=Dt(u.cache_read_input_tokens);e+=Dt(u.input_tokens)+c,n+=c,r+=Dt(u.output_tokens),s=true;}return s?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function Np(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let o of e.entries.slice(0,ed)){if(!Yt(o))continue;let i=Te(o.content)?.trim();if(!i)continue;let u=Te(o.status)?.trim(),d=Te(o.priority)?.trim(),c=[u?`status=${u}`:void 0,d?`priority=${d}`:void 0].filter(p=>!!p),l=c.length>0?` (${c.join(", ")})`:"";n.push(`- ${i}${l}`);}if(n.length===0)return [];e.entries.length>ed&&n.push(nd);let r=n.join(`
53
+ `),s=r.length>td?`${r.slice(0,td-1)}${nd}`:r;return [{timestamp:t,type:"info",content:s}]}function vp(t,e){let n=Te(e.type);if(n==="thought"){let r=Te(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=Te(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return Np(t,e);if(n==="tool_call"){let r=Te(e.toolCallId),s=Te(e.toolName)??Te(e.title),o=e.rawInput===void 0?void 0:sd(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:s,toolInput:o}]}if(n==="tool_call_update"){let r=Te(e.status);if(r!=="completed"&&r!=="failed"&&r!=="error")return [];let s=Ip(e),o=r!=="completed"||e.isError===true;return [{timestamp:t,type:"tool_result",toolUseId:Te(e.toolCallId),toolName:Te(e.toolName)??Te(e.title),...s!==void 0?Me(s,o):{isError:o}}]}if(n==="error"){let r=od(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var Ar,yp,Ep,Rp,ed,td,nd,Us,Fs=x(()=>{h();Ot();ys();Nt();Gt();On();vt();Ar="cli/grok",yp=new Set(["available_commands","usage","end"]),Ep=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,Rp=/\u001b\[[0-?]*[ -/]*[@-~]/g,ed=20,td=4e3,nd="\u2026";Us={command:"grok",createSessionId:()=>randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=pt(e.model),s=e.effort??r,o=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],i=n?["--model",n]:[],u=n?lt("grok").some(E=>E.id===n):false,d=n&&u?An("grok",n):[],c=!s||d.length===0||d.includes(s)?s:void 0,l=Ca(c),p=e.additionalArgs??[],g=E=>p.some(A=>A===E||A.startsWith(`${E}=`)),_=e.providerOptions,m=_?.alwaysApprove,y=_?.sandbox,k=g("--permission-mode")?[]:Na(e.mode),v=g("--always-approve")?[]:va(m),I=g("--sandbox")?[]:xa(y),D=g("--verbatim")?[]:["--verbatim"];return {args:["--no-auto-update",...o,"--single",t,...D,"--output-format","streaming-json","--no-alt-screen",...i,...l,...k,...v,...I,...p]}},extractText(t){let e=[],n=false;for(let r of t.split(`
54
+ `).flatMap(vn))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 vn(t))if(e.type==="error"){let n=od(e);return rd(sd(e))?new bt(n,Ar):new Q(n,Ar)}return null},interpretExit(t,e){if(t===0)return null;let n=id(e)||`Grok CLI exited with code ${t}.`;return rd(e)?new bt(n,Ar):new Q(n,Ar)},parseResultMeta(t){let n=t.split(`
55
+ `).flatMap(vn).find(r=>r.type==="end");return n?{usage:Op(n),model:Ap(n)}:{usage:bp(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return vn(t).flatMap(r=>vp(He(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return Yt(n)&&typeof n.type=="string"?yp.has(n.type):!1}catch{return false}}};});var ad,dd=x(()=>{h();Ns();xs();Ds();Ls();Hs();Za();Fs();Ns();xs();Ds();Ls();Hs();Fs();jt();ad={codex:Cs,claude:Rr,opencode:Ps,antigravity:$s,copilot:vs,grok:Us};});function ud(t){if(t.startsWith("cli/"))return ad[t.slice(4)]}var cd=x(()=>{h();da();dd();});function Or(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function xp(t,e){return typeof t=="string"&&t.length>0?t:typeof e=="string"&&e.length>0?e:null}function br(t){if(typeof t.provider!="string"||t.provider.length===0)return;let n=t.taskLogRepository.readLogs(t.taskId)?.entries.filter(g=>g.level==="stdout").map(g=>g.message).join(`
56
+ `)??"";if(!n.trim())return;let r=ud(t.provider);if(!r)return;let s;try{s=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let o=xp(s?.model,t.model),i=s?.usage;if(!i)return {stdout:n,adapter:r};let u=Or(i.inputTokens),d=Or(i.outputTokens),c=Or(i.cachedInputTokens),l=Gi(Or(i.costUsd),u,d,c,o);return u!==0||d!==0||c!==0||l!==0?{stdout:n,adapter:r,usage:{inputTokens:u,outputTokens:d,cachedInputTokens:c,costUsd:l,model:o}}:{stdout:n,adapter:r}}var qs=x(()=>{h();cd();fr();});function Ws(t){let e=new Set;for(let n of t)for(let r of Cp.get(n)??[n])e.add(r);return [...e]}function js(t){if(t)try{let e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))return;let n=e.terminalReason;return typeof n=="string"&&Dp.has(n)?n:void 0}catch{return}}function Ue(t){let e=js(t.metadata);if(e)return e;if(t.status==="runner_lost")return "runner_lost";if(t.status==="stopped")return "user_stop";if(t.status==="failed"&&typeof t.error=="string"){if(Bs.stopped.test(t.error))return "user_stop";if(Bs.runnerLost.test(t.error))return "runner_lost"}}function xe(t){switch(t.status){case "stopped":case "pending":case "running":case "paused":case "success":return t.status;case "completed":case "done":return "success";case "error":case "runner_lost":return "failed";case "failed":{let e=js(t.metadata);return e==="user_stop"?"stopped":e?"failed":typeof t.error=="string"&&Bs.stopped.test(t.error)?"stopped":"failed"}default:return t.status}}function Pp(t){if(!t)return {};try{let e=JSON.parse(t);return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{}}catch{return {}}}function Cn(t){let e=xe(t);return t.status==="runner_lost"&&js(t.metadata)===void 0?{...t,status:e,metadata:JSON.stringify({...Pp(t.metadata),terminalReason:"runner_lost"})}:{...t,status:e}}var xn,Cp,Bs,Dp,Dn=x(()=>{h();xn=["success","completed","done","failed","error","stopped","runner_lost"],Cp=new Map([["success",["success","completed","done"]],["failed",["failed","error","runner_lost"]]]);Bs={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},Dp=new Set(["user_stop","runner_lost","launch_failed"]);});function Gs(t,e,n=1){let r=process.env[t];if(r===void 0||r==="")return e;let s=Number(r);return !Number.isFinite(s)||s<=0?e:Math.max(n,Math.trunc(s))}function zs(){return Gs("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function en(){return Gs("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function vr(){return Gs("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function Zt(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Nr(t){let e=typeof t=="object"&&t!==null&&"code"in t?String(t.code):t instanceof Error?t.name:typeof t;console.warn(`[crewx] task heartbeat write failed (${e}); execution continues`);}function Lp(t){return t?{id:t.id,status:t.status,run_epoch:t.run_epoch,stop_requested_at:t.stop_requested_at,stop_requested_epoch:t.stop_requested_epoch,pid:t.pid,metadata:t.metadata,started_at:t.started_at,duration_ms:t.duration_ms}:null}function ld(t,e){return !!t.stop_requested_at&&Zt(t.stop_requested_epoch)===Zt(e)}function pd(t,e){let n=Zt(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let s=Lp(t.getTask(e.taskId));return !s||s.status!=="running"||Zt(s.run_epoch)!==n?{accepted:false,row:s}:{accepted:true,row:s}}function _d(t,e){let n=Pn.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),Pn.delete(t),true)}function Ln(t,e){let n=Pn.get(t);return !n||e!==void 0&&n.runEpoch!==Zt(e)?false:_d(t,n)}function md(t,e){let n=Zt(e.runEpoch);Ln(e.taskId);let r=true,s=null;try{let c=pd(t,{...e,runEpoch:n});r=c.accepted,s=c.row;}catch(c){Nr(c);}if(!r)return false;let o=zs(),i=Math.min(o,1e3),u=setInterval(()=>{let c=Pn.get(e.taskId);if(!(!c||c.timer!==u))try{c.heartbeatElapsedMs+=i;let l=c.heartbeatElapsedMs>=o,p=pd(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:l});if(!p.accepted){_d(e.taskId,c);return}l&&(c.heartbeatElapsedMs%=o,c.lastHeartbeatAt=Date.now()),p.row&&ld(p.row,n)&&!c.stopRequested&&(c.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(Nr));}catch(l){Nr(l);}},i),d={timer:u,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return Pn.set(e.taskId,d),typeof u=="object"&&u!==null&&"unref"in u&&u.unref(),s&&ld(s,n)&&e.onStopRequested&&(d.stopRequested=true,Promise.resolve(e.onStopRequested(s)).catch(Nr)),true}var fd,gd,hd,Pn,Mn=x(()=>{h();fd=1e4,gd=3e4,hd=18e5;Pn=new Map;});function xr(t,e=Date.now(),n=Xs){let r=t?Date.parse(t):Number.NaN,s=typeof e=="number"?e:Date.parse(e),o=Zs(n,Xs,0);return Number.isFinite(r)&&Number.isFinite(s)&&s-r>o?"forced":"cooperative"}function Zs(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function Ed(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function Wp(t){if(!t)return;let e=Ed(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function Ie(t,e){if(!t)return {status:"not_running",finalStatus:"not_running",...e?{pid:e}:{}};let n=typeof t.pid=="number"&&t.pid>0?t.pid:e;if(t.status==="stopped"){let r=Wp(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function ro(t,e,n="Process owner could not be verified"){let r=e??(t.pid&&t.pid>0?t.pid:void 0);return {status:"ownership_unverified",finalStatus:t.status,...r?{pid:r}:{},error:n}}function V(t,e,n){let r=n??(t?.pid&&t.pid>0?t.pid:void 0);return {status:"failed",finalStatus:t?.status??null,...r?{pid:r}:{},error:e}}function Js(t,e){return V(t,Hp,e)}function jp(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=en():false}function Gp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function zp(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=Ed(t.metadata),r=n.ownership==="runner"&&typeof n.providerPid=="number"&&Number.isSafeInteger(n.providerPid)&&n.providerPid>0?n.providerPid:void 0;return [...new Set([e,r].filter(s=>s!==void 0))]}function Kp(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return Ie(r,n)}async function Vp(t,e,n,r){let s=Date.now()+n;for(;;){let o=Kp(t,e);if(o)return o;let i=s-Date.now();if(i<=0)return;await new Promise(u=>{setTimeout(u,Math.min(r,i));});}}async function yd(t,e,n){let r=new Date().toISOString(),s={origin:n.origin??"internal",...n.callerPid!==void 0?{callerPid:n.callerPid}:{},...n.callerTaskId!==void 0?{callerTaskId:n.callerTaskId}:{}},o=t.requestTaskStop({id:e,requestedAt:r,...s}),i=t.getTask(e);if(!o.accepted){if(o.status==="pending"){let D=t.stopPendingTask(e,void 0,void 0,{...s,at:r}),E=t.getTask(e);if(D||!E||E.status!=="running")return Ie(E);if(o=t.requestTaskStop({id:e,requestedAt:r,...s}),!o.accepted&&o.status!=="running"||!o.accepted&&!o.alreadyRequestedAt)return Ie(t.getTask(e))}else if(!(o.status==="running"&&o.alreadyRequestedAt))return Ie(i)}let u=o.runEpoch,d=Zs(n.graceMs,Xs,0),c=Zs(n.pollMs,Mp,1),l=await Vp(t,e,d,c);if(l)return l;let p=t.getTask(e);if(!p||p.status!=="running")return Ie(p);let g=zp(p),_=g[0];if(!_){let D=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),E=t.getTask(e);return D||E?.status!=="running"?Ie(E):V(E,"Failed to finalize task stop")}let m=Gp(n),y="unknown";if(!jp(p,Date.now())){let D=n.processControl?.checkProcessOwnershipAsync??gr;try{y=await D(_,n.ownershipMarkers??no,m);}catch{y="unknown";}if(y!=="owned")return ro(p)}let k=n.processControl?.terminateProcessTree??Bt;for(let D of g){let E;try{E=await k(D,{...m,signal:qt});}catch(A){E={status:"failed",pid:D,method:m.platform==="win32"?"taskkill":"process-group",error:A instanceof Error?A.message:String(A)};}if(E.status==="failed")return V(t.getTask(e),E.error??"Failed to terminate process tree")}let v=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),I=t.getTask(e);return v||I?.status!=="running"?Ie(I,_):V(I,"Task changed before stop was finalized")}function eo(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function to(t){return Number.isSafeInteger(t)&&t>=0}function $n(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Jp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Xp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Yp(t,e){let n=t?.pid&&t.pid>0?t.pid:e;return {status:"stopped",method:"forced",finalStatus:t?.status??"failed",...n?{pid:n}:{}}}function Qp(t){switch(t){case "epoch_mismatch":return Ys;case "workspace_mismatch":return Qs;default:return}}async function Rd(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Js(n,eo(e.targetPid)?e.targetPid:void 0);if(!to(e.sourceRunEpoch)||!to(e.settleRunEpoch)||$n(n.run_epoch)!==e.settleRunEpoch)return V(n,Ks,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return V(n,Vs,e.targetPid);let r=new Date().toISOString(),s;try{s=t.requestTaskStop({id:e.taskId,requestedAt:r,sourceRunEpoch:e.sourceRunEpoch,settleRunEpoch:e.settleRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return V(n,Up,e.targetPid)}let o=t.getTask(e.taskId);if(!o||o.status!=="running")return Js(o,e.targetPid);if(s.runEpoch!==e.settleRunEpoch||$n(o.run_epoch)!==e.settleRunEpoch)return V(o,Ks,e.targetPid);if(e.workspaceId!==void 0&&o.workspace_id!==e.workspaceId)return V(o,Vs,e.targetPid);if(!eo(e.targetPid))return V(o,$p);let i=Jp(e),u=e.processControl?.checkProcessOwnershipAsync??gr,d="unknown";try{d=await u(e.targetPid,e.ownershipMarkers??no,i);}catch{d="unknown";}if(d!=="owned")return ro(o,e.targetPid);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return Js(c,e.targetPid);if($n(c.run_epoch)!==e.settleRunEpoch)return V(c,Ks,e.targetPid);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return V(c,Vs,e.targetPid);let l=e.processControl?.terminateProcessTree??Bt,p;try{p=await l(e.targetPid,{...i,signal:qt});}catch{return V(t.getTask(e.taskId),kd,e.targetPid)}if(p.status==="failed")return V(t.getTask(e.taskId),kd,e.targetPid);let g;try{g=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return V(t.getTask(e.taskId),Td,e.targetPid)}return g?Ie(t.getTask(e.taskId),e.targetPid):V(t.getTask(e.taskId),Td,e.targetPid)}async function Sd(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Ie(n);if(!to(e.expectedRunEpoch)||$n(n.run_epoch)!==e.expectedRunEpoch)return V(n,Ys);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return V(n,Qs);let r=n.pid;if(!eo(r))return V(n,Fp);let s=Xp(e),o=e.processControl?.checkProcessOwnershipAsync??gr,i="unknown";try{i=await o(r,e.ownershipMarkers??no,s);}catch{i="unknown";}if(i!=="owned")return ro(n,r,qp);let u=e.processControl?.terminateProcessTree??Bt,d;try{d=await u(r,{...s,signal:qt});}catch{return V(t.getTask(e.taskId),wd,r)}if(d.status==="failed")return V(t.getTask(e.taskId),wd,r);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return Ie(c,r);if($n(c.run_epoch)!==e.expectedRunEpoch)return V(c,Ys,r);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return V(c,Qs,r);let l;try{l=t.finalizeTaskForHostShutdown({id:e.taskId,expectedRunEpoch:e.expectedRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return V(t.getTask(e.taskId),Bp,r)}let p=Qp(l);return p?V(t.getTask(e.taskId),p,r):l!=="settled"?Ie(t.getTask(e.taskId),r):Yp(t.getTask(e.taskId),r)}function Id(t,e,n={}){if(typeof t=="string"){let r=t,s=e??{};return Promise.resolve().then(()=>(oo(),Ad)).then(({TaskRepository:o})=>yd(new o,r,s))}return yd(t,e,n)}var Xs,Mp,no,$p,Ks,Vs,Hp,kd,Td,Up,Ys,Qs,Fp,qp,wd,Bp,so=x(()=>{h();hr();Mn();Xs=5e3,Mp=250;no=["crewx","claude","codex","opencode","grok","node"],$p="INSTRUCTION_STOP_TARGET_PID_MISSING",Ks="INSTRUCTION_STOP_EPOCH_MISMATCH",Vs="INSTRUCTION_STOP_WORKSPACE_MISMATCH",Hp="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",kd="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",Td="INSTRUCTION_STOP_SETTLE_CAS_FAILED",Up="INSTRUCTION_STOP_REQUEST_FAILED",Ys="HOST_SHUTDOWN_EPOCH_MISMATCH",Qs="HOST_SHUTDOWN_WORKSPACE_MISMATCH",Fp="HOST_SHUTDOWN_TARGET_PID_MISSING",qp="HOST_SHUTDOWN_OWNERSHIP_UNVERIFIED",wd="HOST_SHUTDOWN_PROCESS_TERMINATION_FAILED",Bp="HOST_SHUTDOWN_SETTLE_CAS_FAILED";});var Ad={};hu(Ad,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>Dd,HOST_SHUTDOWN_TERMINAL_ERROR:()=>vd,PENDING_ADOPT_GRACE_MS:()=>Cd,PID_NULL_REAP_GRACE_MS:()=>_o,RATED_TASK_EXCERPT_MAX_CHARS:()=>mo,RATED_TASK_LIST_MAX_LIMIT:()=>Ld,TASK_HEARTBEAT_HARD_STALE_MS:()=>hd,TASK_HEARTBEAT_INTERVAL_MS:()=>fd,TASK_HEARTBEAT_STALE_MS:()=>gd,TASK_RATINGS:()=>Pd,TaskRatingError:()=>Wn,TaskRepository:()=>Bn,buildRatedTasksCountQuery:()=>$d,buildRatedTasksQuery:()=>Md,countRatedTasks:()=>mf,hasRecordedUsage:()=>ho,listRatedTasks:()=>_f,mergeTerminalReason:()=>go,resolveTaskHeartbeatHardStaleMs:()=>vr,resolveTaskHeartbeatIntervalMs:()=>zs,resolveTaskHeartbeatStaleMs:()=>en,setTaskRating:()=>hf});function qe(t){return Cn(t)}function ao(t){return Cn(t)}function co(t=a.model,e=a.metadata){let n=sql`
57
57
  CASE
58
58
  WHEN ${t} LIKE 'claude-%' OR ${t} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
59
59
  WHEN ${t} LIKE 'gpt-%' OR ${t} LIKE 'codex-%' THEN 'codex'
@@ -82,7 +82,7 @@ ${r.join(`
82
82
  WHEN trim(${i}) = '' THEN 'unknown'
83
83
  ELSE ${i}
84
84
  END
85
- `}function Yp(t){let e={status:t.status,metadata:t.metadata},n=$e(e);return n==="stopped"||n==="failed"&&Ze(e)==="runner_lost"}function $n(t){return sql`${t} NOT IN (${sql.join(Qp.map(e=>sql`${e}`),sql`, `)})`}function Or(t){let e=sql`
85
+ `}function af(t){let e={status:t.status,metadata:t.metadata},n=xe(e);return n==="stopped"||n==="failed"&&Ue(e)==="runner_lost"}function qn(t){return sql`${t} NOT IN (${sql.join(df.map(e=>sql`${e}`),sql`, `)})`}function Cr(t){let e=sql`
86
86
  CASE
87
87
  WHEN json_valid(${t}) = 1
88
88
  THEN json_extract(${t}, '$.usageAccounting')
@@ -92,7 +92,7 @@ ${r.join(`
92
92
  COALESCE(SUM(
93
93
  CASE WHEN ${e} = 'unavailable' THEN 1 ELSE 0 END
94
94
  ), 0)
95
- `}function nn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ne(t){if(!t)return {};try{let e=JSON.parse(t);return nn(e)?{...e}:{}}catch{return {}}}function xr(t){return t==null||t===""}function br(t,e){return xr(t)&&!xr(e)?e:t}function Zp(t,e){let n=ne(t);if(!e)return n;for(let[r,s]of Object.entries(e))xr(n[r])&&!xr(s)&&(n[r]=s);return n}function vr(t,e){let n=t.origin&&wd.has(t.origin)?t.origin:"internal",r=t.callerPid!==void 0&&Number.isInteger(t.callerPid)&&t.callerPid>0?t.callerPid:process.pid;return {origin:n,at:t.at??e,callerPid:r,...t.callerTaskId?{callerTaskId:t.callerTaskId}:{}}}function ef(t){let e=ne(t).stopRequest;if(nn(e)&&!(typeof e.origin!="string"||!wd.has(e.origin)||typeof e.at!="string"||typeof e.callerPid!="number"))return {...e}}function md(){return or(isNull(a.stop_requested_at),ne$1(sql`COALESCE(${a.stop_requested_epoch}, 0)`,sql`COALESCE(${a.run_epoch}, 0)`))}function uo(t,e){let n=ne(t??null);return n.terminalReason=e,JSON.stringify(n)}function io(t,e){let n={...t,terminalReason:"user_stop"},r=e?.trim();return r&&r!==_d&&(n[Xp]=e),{error:_d,metadata:n}}function ie(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function co(t){return ie(t.input_tokens)!==0||ie(t.output_tokens)!==0||ie(t.cached_input_tokens)!==0||ie(t.cost_usd)!==0}function j(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function kd(t){return {inputTokens:ie(t.inputTokens??0),outputTokens:ie(t.outputTokens??0),cachedInputTokens:ie(t.cachedInputTokens??0),costUsd:ie(t.costUsd??0)}}function tf(t){if(nn(t))return {inputTokens:ie(t.inputTokens),outputTokens:ie(t.outputTokens),cachedInputTokens:ie(t.cachedInputTokens),costUsd:ie(t.costUsd)}}function nf(t){let e={inputTokens:0,outputTokens:0,cachedInputTokens:0,costUsd:0};for(let n of Object.values(t)){let r=tf(n);r&&(e.inputTokens+=r.inputTokens,e.outputTokens+=r.outputTokens,e.cachedInputTokens+=r.cachedInputTokens,e.costUsd+=r.costUsd);}return e}function Nr(t,e,n){let r=Date.parse(t),s=Date.parse(e);return Number.isFinite(r)&&Number.isFinite(s)?s-r:n??null}function rn(t,e){if(typeof t!="string"||t.length===0)throw new f("VALIDATION",`${e} is required`);return t}function fo(t,e){let n=Date.parse(t);if(!Number.isFinite(n))throw new f("VALIDATION",`${e} is not a valid ISO time: ${t}`);return new Date(n).toISOString()}function of(t,e){let n=rn(e.workspaceId,"workspaceId"),r=rn(e.taskId,"taskId"),s=e.rating;if(s!==null&&!Rd.includes(s))throw new f("VALIDATION","rating must be 'up', 'down' or null");let o=e.now===void 0?new Date().toISOString():fo(e.now,"now");try{return t.transaction(i=>{let u=and(eq(a.id,r),eq(a.workspace_id,n),inArray(a.status,[...On])),d=i.update(a).set({rating:s,rated_at:s===null?null:o}).where(and(u,sql`${a.rating} IS NOT ${s}`)).returning({rating:a.rating,ratedAt:a.rated_at}).all();if(d.length>0)return {taskId:r,rating:d[0].rating,ratedAt:d[0].ratedAt,changed:!0};let c=i.select({status:a.status,rating:a.rating,rated_at:a.rated_at}).from(a).where(and(eq(a.id,r),eq(a.workspace_id,n))).limit(1).get();if(!c)throw new Un("TASK_NOT_FOUND",r);if(!sf.has(c.status))throw new Un("TASK_RATING_NOT_TERMINAL",r);return {taskId:r,rating:c.rating,ratedAt:c.rated_at,changed:!1}},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to set task rating",i)}}function Id(t){let e=sql`
95
+ `}function sn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function re(t){if(!t)return {};try{let e=JSON.parse(t);return sn(e)?{...e}:{}}catch{return {}}}function Mr(t){return t==null||t===""}function Dr(t,e){return Mr(t)&&!Mr(e)?e:t}function uf(t,e){let n=re(t);if(!e)return n;for(let[r,s]of Object.entries(e))Mr(n[r])&&!Mr(s)&&(n[r]=s);return n}function Pr(t,e){let n=t.origin&&xd.has(t.origin)?t.origin:"internal",r=t.callerPid!==void 0&&Number.isInteger(t.callerPid)&&t.callerPid>0?t.callerPid:process.pid;return {origin:n,at:t.at??e,callerPid:r,...t.callerTaskId?{callerTaskId:t.callerTaskId}:{}}}function cf(t){let e=re(t).stopRequest;if(sn(e)&&!(typeof e.origin!="string"||!xd.has(e.origin)||typeof e.at!="string"||typeof e.callerPid!="number"))return {...e}}function bd(){return or(isNull(a.stop_requested_at),ne$1(sql`COALESCE(${a.stop_requested_epoch}, 0)`,sql`COALESCE(${a.run_epoch}, 0)`))}function go(t,e){let n=re(t??null);return n.terminalReason=e,JSON.stringify(n)}function po(t,e){let n={...t,terminalReason:"user_stop"},r=e?.trim();return r&&r!==Od&&(n[of]=e),{error:Od,metadata:n}}function de(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function ho(t){return de(t.input_tokens)!==0||de(t.output_tokens)!==0||de(t.cached_input_tokens)!==0||de(t.cost_usd)!==0}function j(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Nd(t){return {inputTokens:de(t.inputTokens??0),outputTokens:de(t.outputTokens??0),cachedInputTokens:de(t.cachedInputTokens??0),costUsd:de(t.costUsd??0)}}function lf(t){if(sn(t))return {inputTokens:de(t.inputTokens),outputTokens:de(t.outputTokens),cachedInputTokens:de(t.cachedInputTokens),costUsd:de(t.costUsd)}}function pf(t){let e={inputTokens:0,outputTokens:0,cachedInputTokens:0,costUsd:0};for(let n of Object.values(t)){let r=lf(n);r&&(e.inputTokens+=r.inputTokens,e.outputTokens+=r.outputTokens,e.cachedInputTokens+=r.cachedInputTokens,e.costUsd+=r.costUsd);}return e}function Lr(t,e,n){let r=Date.parse(t),s=Date.parse(e);return Number.isFinite(r)&&Number.isFinite(s)?s-r:n??null}function on(t,e){if(typeof t!="string"||t.length===0)throw new f("VALIDATION",`${e} is required`);return t}function ko(t,e){let n=Date.parse(t);if(!Number.isFinite(n))throw new f("VALIDATION",`${e} is not a valid ISO time: ${t}`);return new Date(n).toISOString()}function hf(t,e){let n=on(e.workspaceId,"workspaceId"),r=on(e.taskId,"taskId"),s=e.rating;if(s!==null&&!Pd.includes(s))throw new f("VALIDATION","rating must be 'up', 'down' or null");let o=e.now===void 0?new Date().toISOString():ko(e.now,"now");try{return t.transaction(i=>{let u=and(eq(a.id,r),eq(a.workspace_id,n),inArray(a.status,[...xn])),d=i.update(a).set({rating:s,rated_at:s===null?null:o}).where(and(u,sql`${a.rating} IS NOT ${s}`)).returning({rating:a.rating,ratedAt:a.rated_at}).all();if(d.length>0)return {taskId:r,rating:d[0].rating,ratedAt:d[0].ratedAt,changed:!0};let c=i.select({status:a.status,rating:a.rating,rated_at:a.rated_at}).from(a).where(and(eq(a.id,r),eq(a.workspace_id,n))).limit(1).get();if(!c)throw new Wn("TASK_NOT_FOUND",r);if(!gf.has(c.status))throw new Wn("TASK_RATING_NOT_TERMINAL",r);return {taskId:r,rating:c.rating,ratedAt:c.rated_at,changed:!1}},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to set task rating",i)}}function Md(t){let e=sql`
96
96
  SELECT id, rated_at FROM tasks
97
97
  WHERE workspace_id = ${t.workspaceId}
98
98
  AND rating IS NOT NULL
@@ -102,41 +102,41 @@ ${r.join(`
102
102
  LIMIT ${t.limit}
103
103
  `;return sql`
104
104
  SELECT t.id AS taskId, t.agent_id AS agentId, t.thread_id AS threadId, t.status AS status,
105
- substr(t.error, 1, ${rf}) AS errorHead,
105
+ substr(t.error, 1, ${ff}) AS errorHead,
106
106
  CASE WHEN json_valid(t.metadata) THEN json_extract(t.metadata, '$.terminalReason') END AS terminalReason,
107
107
  t.rating AS rating, t.rated_at AS ratedAt,
108
- NULLIF(substr(t.prompt, 1, ${po}), '') AS promptExcerpt,
109
- NULLIF(substr(t.result, 1, ${po}), '') AS resultExcerpt
108
+ NULLIF(substr(t.prompt, 1, ${mo}), '') AS promptExcerpt,
109
+ NULLIF(substr(t.result, 1, ${mo}), '') AS resultExcerpt
110
110
  FROM (${e}) AS page
111
111
  JOIN tasks t ON t.id = page.id
112
112
  ORDER BY page.rated_at DESC, page.id DESC
113
- `}function af(t,e){let n=rn(e.workspaceId,"workspaceId");if(e.agentId!==void 0&&rn(e.agentId,"agentId"),!Number.isFinite(e.limit)||Math.trunc(e.limit)<1)throw new f("VALIDATION","limit must be a positive integer");let r=Math.min(Math.trunc(e.limit),Sd),s=e.sinceIso===void 0?void 0:fo(e.sinceIso,"sinceIso");try{return t.all(Id({workspaceId:n,agentId:e.agentId,sinceIso:s,limit:r})).map(i=>({taskId:i.taskId,agentId:i.agentId,threadId:i.threadId,status:$e({status:i.status,error:i.errorHead,metadata:i.terminalReason===null?null:JSON.stringify({terminalReason:i.terminalReason})}),rating:i.rating,ratedAt:i.ratedAt,promptExcerpt:i.promptExcerpt,resultExcerpt:i.resultExcerpt}))}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to list rated tasks",o)}}function Ad(t){return sql`
113
+ `}function _f(t,e){let n=on(e.workspaceId,"workspaceId");if(e.agentId!==void 0&&on(e.agentId,"agentId"),!Number.isFinite(e.limit)||Math.trunc(e.limit)<1)throw new f("VALIDATION","limit must be a positive integer");let r=Math.min(Math.trunc(e.limit),Ld),s=e.sinceIso===void 0?void 0:ko(e.sinceIso,"sinceIso");try{return t.all(Md({workspaceId:n,agentId:e.agentId,sinceIso:s,limit:r})).map(i=>({taskId:i.taskId,agentId:i.agentId,threadId:i.threadId,status:xe({status:i.status,error:i.errorHead,metadata:i.terminalReason===null?null:JSON.stringify({terminalReason:i.terminalReason})}),rating:i.rating,ratedAt:i.ratedAt,promptExcerpt:i.promptExcerpt,resultExcerpt:i.resultExcerpt}))}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to list rated tasks",o)}}function $d(t){return sql`
114
114
  SELECT COUNT(*) AS total FROM tasks
115
115
  WHERE workspace_id = ${t.workspaceId}
116
116
  AND rating IS NOT NULL
117
117
  ${t.agentId!==void 0?sql`AND agent_id = ${t.agentId}`:sql``}
118
118
  ${t.sinceIso!==void 0?sql`AND rated_at >= ${t.sinceIso}`:sql``}
119
- `}function df(t,e){let n=rn(e.workspaceId,"workspaceId");e.agentId!==void 0&&rn(e.agentId,"agentId");let r=e.sinceIso===void 0?void 0:fo(e.sinceIso,"sinceIso");try{return t.all(Ad({workspaceId:n,agentId:e.agentId,sinceIso:r}))[0]?.total??0}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to count rated tasks",s)}}var ro,Zt,Vp,en,tn,Jp,oo,Mn,Fe,_d,Td,Xp,Qp,wd,lo,yd,Ed,Hn,Rd,po,Sd,rf,Un,sf,eo=x(()=>{h();at();mt();kt();it();Rt();dr();cr();Vi();Xi();Ms();vn();Cn();Zs();Cn();ro=40,Zt="2026-05-09",Vp="0.8.9-rc.13",en=10,tn=parseInt(Vp.split("rc.")[1]);Jp=new Set(["workflow","mcp"]),oo="usageByEpoch",Mn="lateUsage",Fe="usageAccounting",_d="Stopped by user",Td="Stopped by app shutdown",Xp="terminalErrorOriginal";Qp=["pending","running"];wd=new Set(["http","cli","instruction","workflow","internal"]);lo=600*1e3,yd=600*1e3,Ed=300*1e3,Hn=class extends he{dbPath;clock;taskLogRepository;lastReaperTickAt;pidNullObservedSince=new Map;constructor(e={}){super(),this.clock=e.clock??(()=>Date.now()),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db")),this.taskLogRepository=new lr({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?_t(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{Ae(r.db,n);}catch(s){throw r.close(),s}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=j(e.runEpoch),s=r===0?or(eq(a.run_epoch,0),isNull(a.run_epoch)):eq(a.run_epoch,r);return n.db.update(a).set({heartbeat_at:new Date(this.clock()).toISOString()}).where(and(eq(a.id,e.id),s,eq(a.status,"running"))).run().changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to heartbeat task",r)}finally{n.close();}}requestTaskStop(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(s=>{let o=s.select({id:a.id,status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!o)return;let i=j(o.run_epoch);if(o.status!=="running"){r={accepted:!1,status:o.status,runEpoch:i};return}let u=o.stop_requested_at!==null&&j(o.stop_requested_epoch)===i,d=u?o.stop_requested_at:e.requestedAt,c=ne(o.metadata),l=u?ef(o.metadata)??vr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d):vr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d);if(s.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:sql`${a.run_epoch}`,metadata:JSON.stringify({...c,stopRequest:l})}).where(and(eq(a.id,e.id),eq(a.status,"running"),md())).run().changes===0){let m=s.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:j(m?.run_epoch)};return}r={accepted:!1,status:m.status,runEpoch:j(m.run_epoch),...m.stop_requested_at&&j(m.stop_requested_epoch)===j(m.run_epoch)?{alreadyRequestedAt:m.stop_requested_at}:{}};}else r={accepted:!0,status:o.status,runEpoch:i};let g=new Set([e.id]),_=(m,y)=>{if(y>=8)return;let k=s.select({id:a.id,status:a.status,metadata:a.metadata}).from(a).where(and(eq(a.parent_task_id,m),eq(a.status,"running"))).all();for(let N of k)g.has(N.id)||(g.add(N.id),s.update(a).set({stop_requested_at:d,stop_requested_epoch:sql`${a.run_epoch}`,metadata:JSON.stringify({...ne(N.metadata),stopRequest:l})}).where(and(eq(a.id,N.id),eq(a.status,"running"),md())).run(),_(N.id,y+1));};_(e.id,0);},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request task stop",r)}finally{n.close();}}requestTaskStopForInstruction(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(s=>{let o=s.select({id:a.id,status:a.status,run_epoch:a.run_epoch,workspace_id:a.workspace_id,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!o)return;let i=j(o.run_epoch),u=j(e.sourceRunEpoch),d=j(e.settleRunEpoch);if(o.status!=="running"||i!==d||e.workspaceId!==void 0&&o.workspace_id!==e.workspaceId){r={accepted:!1,status:o.status,runEpoch:i};return}let c=d===0?or(eq(a.run_epoch,0),isNull(a.run_epoch)):eq(a.run_epoch,d),l=or(isNull(a.stop_requested_at),isNull(a.stop_requested_epoch),ne$1(a.stop_requested_epoch,u)),p=vr({origin:"instruction",at:e.requestedAt,callerPid:e.callerPid,callerTaskId:e.callerTaskId},e.requestedAt),g=k=>s.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:u,metadata:JSON.stringify({...ne(o.metadata),stopRequest:p})}).where(and(eq(a.id,e.id),eq(a.status,"running"),c,k,l)).run();if((e.workspaceId===void 0?g():e.workspaceId===null?g(isNull(a.workspace_id)):g(eq(a.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:o.status,runEpoch:d};return}let m=s.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:j(m?.run_epoch)};return}let y=j(m.run_epoch);r={accepted:!1,status:m.status,runEpoch:y,...m.stop_requested_at&&j(m.stop_requested_epoch)===u?{alreadyRequestedAt:m.stop_requested_at}:{}};},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request instruction task stop",r)}finally{n.close();}}finalizeTaskStop(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=e.completedAt??new Date(this.clock()).toISOString(),s=!1;return n.db.transaction(o=>{let i=o.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,started_at:a.started_at,duration_ms:a.duration_ms,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!i||i.status!=="running"||j(i.run_epoch)!==j(e.runEpoch))return;let u=i.stop_requested_at!==null&&j(i.stop_requested_epoch)===j(e.runEpoch),d=ne(i.metadata),c=u?io(d,e.error):{error:e.error??null,metadata:e.terminalReason===void 0?{...d}:{...d,terminalReason:e.terminalReason}},l={...c.metadata,stopMethod:e.method},p=i.duration_ms??e.durationMs??Nr(i.started_at,r,void 0),g=i.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,i.run_epoch);s=o.update(a).set({status:"stopped",error:c.error,completed_at:r,duration_ms:p,metadata:JSON.stringify(l)}).where(and(eq(a.id,e.id),eq(a.status,"running"),g)).run().changes>0;},{behavior:"immediate"}),s}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to finalize task stop",r)}finally{n.close();}}finalizeTaskForHostShutdown(e){if(!this.dbExists())return "not_running";let n=this.openHandle(true);try{let r=e.completedAt??new Date(this.clock()).toISOString(),s=j(e.expectedRunEpoch),o="not_running";return n.db.transaction(i=>{let u=i.select({status:a.status,run_epoch:a.run_epoch,workspace_id:a.workspace_id,started_at:a.started_at,duration_ms:a.duration_ms,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!u||u.status!=="running"){o="not_running";return}if(j(u.run_epoch)!==s){o="epoch_mismatch";return}if(e.workspaceId!==void 0&&u.workspace_id!==e.workspaceId){o="workspace_mismatch";return}let c=u.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,u.run_epoch),l=e.workspaceId===void 0?void 0:e.workspaceId===null?isNull(a.workspace_id):eq(a.workspace_id,e.workspaceId),p={...ne(u.metadata),terminalReason:"runner_lost"},g=u.duration_ms??Nr(u.started_at,r,void 0);o=i.update(a).set({status:"failed",error:Td,completed_at:r,duration_ms:g,metadata:JSON.stringify(p)}).where(and(eq(a.id,e.id),eq(a.status,"running"),c,l)).run().changes>0?"settled":"not_running";},{behavior:"immediate"}),o}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to finalize task for host shutdown",r)}finally{n.close();}}async stopTask(e,n={}){return gd(this,e,n)}async stopTaskGenerationForInstruction(e){return pd({requestTaskStop:n=>this.requestTaskStopForInstruction(n),getTask:n=>this.getTask(n),finalizeTaskStop:n=>this.finalizeTaskStop(n)},e)}startTask(e){let n=this.openHandle(true);try{let r=e.actorKind==="human"&&typeof e.workspaceId=="string"&&e.workspaceId.length>0&&typeof e.actorId=="string"&&e.actorId.length>0,s=r?n.db.select({id:a.id}).from(a).where(eq(a.id,e.id)).get()!==void 0:!0,o={id:e.id,agent_id:e.agentId,actor_kind:e.actorKind??null,actor_id:e.actorId??null,user_id:e.userId??null,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,cwd:e.cwd??null,project_id:e.projectId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,security_key:e.securityKey??null,coding_agent_command:e.codingAgentCommand??null,log_storage:"events"},i=u=>{n.db.insert(a).values(u).onConflictDoUpdate({target:a.id,set:{status:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN 'running' ELSE ${a.status} END`,pid:sql`COALESCE(excluded.pid, ${a.pid})`,actor_kind:sql`CASE WHEN ${a.status} IN ('pending', 'running') AND ${a.pid} IS NULL AND ${a.actor_kind} IS NULL AND COALESCE(${a.run_epoch}, 0) = 0 THEN excluded.actor_kind ELSE ${a.actor_kind} END`,actor_id:sql`CASE WHEN ${a.status} IN ('pending', 'running') AND ${a.pid} IS NULL AND ${a.actor_kind} IS NULL AND COALESCE(${a.run_epoch}, 0) = 0 THEN excluded.actor_id ELSE ${a.actor_id} END`,command:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.command ELSE ${a.command} END`,metadata:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.metadata ELSE ${a.metadata} END`,workspace_id:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.workspace_id}, excluded.workspace_id) ELSE ${a.workspace_id} END`,cwd:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.cwd}, excluded.cwd) ELSE ${a.cwd} END`,project_id:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.project_id}, excluded.project_id) ELSE ${a.project_id} END`,crewx_version:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.crewx_version ELSE ${a.crewx_version} END`,model:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.model ELSE ${a.model} END`,rendered_prompt:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.rendered_prompt ELSE ${a.rendered_prompt} END`,security_key:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.security_key ELSE ${a.security_key} END`,coding_agent_command:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.coding_agent_command ELSE ${a.coding_agent_command} END`},setWhere:or(eq(a.status,"running"),and(eq(a.status,"pending"),isNull(a.pid)))}).run();};try{i(o);}catch(u){let d=u instanceof Error?u.message:typeof u=="object"&&u!==null&&"message"in u?String(u.message):String(u);if(!/log_storage|heartbeat_at|stop_requested_at|stop_requested_epoch|cwd|actor_kind|actor_id/i.test(d)||!/no such column|no column named/i.test(d))throw u;let c=new Set(n.db.all("PRAGMA table_info(tasks)").map(su=>su.name)),l=c.has("cwd"),p=c.has("user_id"),g=c.has("actor_kind"),_=c.has("actor_id"),m=c.has("log_storage"),y=l?", cwd":"",k=l?", ?":"",N=l?", cwd = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.cwd, excluded.cwd) ELSE tasks.cwd END":"",I=m?", log_storage":"",D=m?", ?":"",E=p?", user_id":"",A=p?", ?":"",v=g?", actor_kind":"",Z=g?", ?":"",ge=_?", actor_id":"",Kr=_?", ?":"",ru=m?`,
119
+ `}function mf(t,e){let n=on(e.workspaceId,"workspaceId");e.agentId!==void 0&&on(e.agentId,"agentId");let r=e.sinceIso===void 0?void 0:ko(e.sinceIso,"sinceIso");try{return t.all($d({workspaceId:n,agentId:e.agentId,sinceIso:r}))[0]?.total??0}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to count rated tasks",s)}}var uo,tn,rf,nn,rn,sf,lo,Fn,Be,Od,vd,of,df,xd,_o,Cd,Dd,Bn,Pd,mo,Ld,ff,Wn,gf,oo=x(()=>{h();dt();kt();Tt();at();It();fr();hr();oa();aa();qs();Dn();Mn();so();Mn();uo=40,tn="2026-05-09",rf="0.8.9-rc.13",nn=10,rn=parseInt(rf.split("rc.")[1]);sf=new Set(["workflow","mcp"]),lo="usageByEpoch",Fn="lateUsage",Be="usageAccounting",Od="Stopped by user",vd="Stopped by app shutdown",of="terminalErrorOriginal";df=["pending","running"];xd=new Set(["http","cli","instruction","workflow","internal"]);_o=600*1e3,Cd=600*1e3,Dd=300*1e3,Bn=class extends me{dbPath;clock;taskLogRepository;lastReaperTickAt;pidNullObservedSince=new Map;constructor(e={}){super(),this.clock=e.clock??(()=>Date.now()),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db")),this.taskLogRepository=new _r({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?mt(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=H(n);if(e)try{be(r.db,n);}catch(s){throw r.close(),s}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=j(e.runEpoch),s=r===0?or(eq(a.run_epoch,0),isNull(a.run_epoch)):eq(a.run_epoch,r);return n.db.update(a).set({heartbeat_at:new Date(this.clock()).toISOString()}).where(and(eq(a.id,e.id),s,eq(a.status,"running"))).run().changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to heartbeat task",r)}finally{n.close();}}requestTaskStop(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(s=>{let o=s.select({id:a.id,status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!o)return;let i=j(o.run_epoch);if(o.status!=="running"){r={accepted:!1,status:o.status,runEpoch:i};return}let u=o.stop_requested_at!==null&&j(o.stop_requested_epoch)===i,d=u?o.stop_requested_at:e.requestedAt,c=re(o.metadata),l=u?cf(o.metadata)??Pr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d):Pr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d);if(s.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:sql`${a.run_epoch}`,metadata:JSON.stringify({...c,stopRequest:l})}).where(and(eq(a.id,e.id),eq(a.status,"running"),bd())).run().changes===0){let m=s.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:j(m?.run_epoch)};return}r={accepted:!1,status:m.status,runEpoch:j(m.run_epoch),...m.stop_requested_at&&j(m.stop_requested_epoch)===j(m.run_epoch)?{alreadyRequestedAt:m.stop_requested_at}:{}};}else r={accepted:!0,status:o.status,runEpoch:i};let g=new Set([e.id]),_=(m,y)=>{if(y>=8)return;let k=s.select({id:a.id,status:a.status,metadata:a.metadata}).from(a).where(and(eq(a.parent_task_id,m),eq(a.status,"running"))).all();for(let v of k)g.has(v.id)||(g.add(v.id),s.update(a).set({stop_requested_at:d,stop_requested_epoch:sql`${a.run_epoch}`,metadata:JSON.stringify({...re(v.metadata),stopRequest:l})}).where(and(eq(a.id,v.id),eq(a.status,"running"),bd())).run(),_(v.id,y+1));};_(e.id,0);},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request task stop",r)}finally{n.close();}}requestTaskStopForInstruction(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(s=>{let o=s.select({id:a.id,status:a.status,run_epoch:a.run_epoch,workspace_id:a.workspace_id,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!o)return;let i=j(o.run_epoch),u=j(e.sourceRunEpoch),d=j(e.settleRunEpoch);if(o.status!=="running"||i!==d||e.workspaceId!==void 0&&o.workspace_id!==e.workspaceId){r={accepted:!1,status:o.status,runEpoch:i};return}let c=d===0?or(eq(a.run_epoch,0),isNull(a.run_epoch)):eq(a.run_epoch,d),l=or(isNull(a.stop_requested_at),isNull(a.stop_requested_epoch),ne$1(a.stop_requested_epoch,u)),p=Pr({origin:"instruction",at:e.requestedAt,callerPid:e.callerPid,callerTaskId:e.callerTaskId},e.requestedAt),g=k=>s.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:u,metadata:JSON.stringify({...re(o.metadata),stopRequest:p})}).where(and(eq(a.id,e.id),eq(a.status,"running"),c,k,l)).run();if((e.workspaceId===void 0?g():e.workspaceId===null?g(isNull(a.workspace_id)):g(eq(a.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:o.status,runEpoch:d};return}let m=s.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:j(m?.run_epoch)};return}let y=j(m.run_epoch);r={accepted:!1,status:m.status,runEpoch:y,...m.stop_requested_at&&j(m.stop_requested_epoch)===u?{alreadyRequestedAt:m.stop_requested_at}:{}};},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request instruction task stop",r)}finally{n.close();}}finalizeTaskStop(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=e.completedAt??new Date(this.clock()).toISOString(),s=!1;return n.db.transaction(o=>{let i=o.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,started_at:a.started_at,duration_ms:a.duration_ms,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!i||i.status!=="running"||j(i.run_epoch)!==j(e.runEpoch))return;let u=i.stop_requested_at!==null&&j(i.stop_requested_epoch)===j(e.runEpoch),d=re(i.metadata),c=u?po(d,e.error):{error:e.error??null,metadata:e.terminalReason===void 0?{...d}:{...d,terminalReason:e.terminalReason}},l={...c.metadata,stopMethod:e.method},p=i.duration_ms??e.durationMs??Lr(i.started_at,r,void 0),g=i.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,i.run_epoch);s=o.update(a).set({status:"stopped",error:c.error,completed_at:r,duration_ms:p,metadata:JSON.stringify(l)}).where(and(eq(a.id,e.id),eq(a.status,"running"),g)).run().changes>0;},{behavior:"immediate"}),s}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to finalize task stop",r)}finally{n.close();}}finalizeTaskForHostShutdown(e){if(!this.dbExists())return "not_running";let n=this.openHandle(true);try{let r=e.completedAt??new Date(this.clock()).toISOString(),s=j(e.expectedRunEpoch),o="not_running";return n.db.transaction(i=>{let u=i.select({status:a.status,run_epoch:a.run_epoch,workspace_id:a.workspace_id,started_at:a.started_at,duration_ms:a.duration_ms,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!u||u.status!=="running"){o="not_running";return}if(j(u.run_epoch)!==s){o="epoch_mismatch";return}if(e.workspaceId!==void 0&&u.workspace_id!==e.workspaceId){o="workspace_mismatch";return}let c=u.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,u.run_epoch),l=e.workspaceId===void 0?void 0:e.workspaceId===null?isNull(a.workspace_id):eq(a.workspace_id,e.workspaceId),p={...re(u.metadata),terminalReason:"runner_lost"},g=u.duration_ms??Lr(u.started_at,r,void 0);o=i.update(a).set({status:"failed",error:vd,completed_at:r,duration_ms:g,metadata:JSON.stringify(p)}).where(and(eq(a.id,e.id),eq(a.status,"running"),c,l)).run().changes>0?"settled":"not_running";},{behavior:"immediate"}),o}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to finalize task for host shutdown",r)}finally{n.close();}}async stopTask(e,n={}){return Id(this,e,n)}async stopTaskGenerationForInstruction(e){return Rd({requestTaskStop:n=>this.requestTaskStopForInstruction(n),getTask:n=>this.getTask(n),finalizeTaskStop:n=>this.finalizeTaskStop(n)},e)}startTask(e){let n=this.openHandle(true);try{let r=e.actorKind==="human"&&typeof e.workspaceId=="string"&&e.workspaceId.length>0&&typeof e.actorId=="string"&&e.actorId.length>0,s=r?n.db.select({id:a.id}).from(a).where(eq(a.id,e.id)).get()!==void 0:!0,o={id:e.id,agent_id:e.agentId,actor_kind:e.actorKind??null,actor_id:e.actorId??null,user_id:e.userId??null,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,cwd:e.cwd??null,project_id:e.projectId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,security_key:e.securityKey??null,coding_agent_command:e.codingAgentCommand??null,log_storage:"events"},i=u=>{n.db.insert(a).values(u).onConflictDoUpdate({target:a.id,set:{status:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN 'running' ELSE ${a.status} END`,pid:sql`COALESCE(excluded.pid, ${a.pid})`,actor_kind:sql`CASE WHEN ${a.status} IN ('pending', 'running') AND ${a.pid} IS NULL AND ${a.actor_kind} IS NULL AND COALESCE(${a.run_epoch}, 0) = 0 THEN excluded.actor_kind ELSE ${a.actor_kind} END`,actor_id:sql`CASE WHEN ${a.status} IN ('pending', 'running') AND ${a.pid} IS NULL AND ${a.actor_kind} IS NULL AND COALESCE(${a.run_epoch}, 0) = 0 THEN excluded.actor_id ELSE ${a.actor_id} END`,command:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.command ELSE ${a.command} END`,metadata:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.metadata ELSE ${a.metadata} END`,workspace_id:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.workspace_id}, excluded.workspace_id) ELSE ${a.workspace_id} END`,cwd:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.cwd}, excluded.cwd) ELSE ${a.cwd} END`,project_id:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.project_id}, excluded.project_id) ELSE ${a.project_id} END`,crewx_version:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.crewx_version ELSE ${a.crewx_version} END`,model:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.model ELSE ${a.model} END`,rendered_prompt:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.rendered_prompt ELSE ${a.rendered_prompt} END`,security_key:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.security_key ELSE ${a.security_key} END`,coding_agent_command:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.coding_agent_command ELSE ${a.coding_agent_command} END`},setWhere:or(eq(a.status,"running"),and(eq(a.status,"pending"),isNull(a.pid)))}).run();};try{i(o);}catch(u){let d=u instanceof Error?u.message:typeof u=="object"&&u!==null&&"message"in u?String(u.message):String(u);if(!/log_storage|heartbeat_at|stop_requested_at|stop_requested_epoch|cwd|actor_kind|actor_id/i.test(d)||!/no such column|no column named/i.test(d))throw u;let c=new Set(n.db.all("PRAGMA table_info(tasks)").map(fu=>fu.name)),l=c.has("cwd"),p=c.has("user_id"),g=c.has("actor_kind"),_=c.has("actor_id"),m=c.has("log_storage"),y=l?", cwd":"",k=l?", ?":"",v=l?", cwd = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.cwd, excluded.cwd) ELSE tasks.cwd END":"",I=m?", log_storage":"",D=m?", ?":"",E=p?", user_id":"",A=p?", ?":"",N=g?", actor_kind":"",Z=g?", ?":"",_e=_?", actor_id":"",Yr=_?", ?":"",pu=m?`,
120
120
  log_storage = CASE WHEN tasks.status = 'pending' THEN excluded.log_storage ELSE tasks.log_storage END`:"";n.runRaw(`INSERT INTO tasks (
121
121
  id, agent_id, prompt, mode, status, started_at, pid,
122
122
  parent_task_id, caller_agent_id, trace_id, command, metadata,
123
123
  workspace_id${y}, project_id, platform, crewx_version, thread_id,
124
- model, rendered_prompt, coding_agent_command${E}${v}${ge}${I}
125
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?${k}${A}${Z}${Kr}${D})
124
+ model, rendered_prompt, coding_agent_command${E}${N}${_e}${I}
125
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?${k}${A}${Z}${Yr}${D})
126
126
  ON CONFLICT(id) DO UPDATE SET
127
127
  status = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN 'running' ELSE tasks.status END,
128
128
  pid = COALESCE(excluded.pid, tasks.pid),
129
129
  command = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.command ELSE tasks.command END,
130
130
  metadata = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.metadata ELSE tasks.metadata END,
131
- workspace_id = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.workspace_id, excluded.workspace_id) ELSE tasks.workspace_id END${N},
131
+ workspace_id = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.workspace_id, excluded.workspace_id) ELSE tasks.workspace_id END${v},
132
132
  project_id = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.project_id, excluded.project_id) ELSE tasks.project_id END,
133
133
  crewx_version = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.crewx_version ELSE tasks.crewx_version END,
134
134
  model = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.model ELSE tasks.model END,
135
135
  rendered_prompt = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.rendered_prompt ELSE tasks.rendered_prompt END,
136
- coding_agent_command = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.coding_agent_command ELSE tasks.coding_agent_command END${ru}
137
- WHERE tasks.status = 'running' OR (tasks.status = 'pending' AND tasks.pid IS NULL)`,[o.id,o.agent_id,o.prompt,o.mode,o.status,o.started_at,o.pid,o.parent_task_id,o.caller_agent_id,o.trace_id,o.command,o.metadata,o.workspace_id,...l?[o.cwd]:[],o.project_id,o.platform,o.crewx_version,o.thread_id,o.model,o.rendered_prompt,o.coding_agent_command,...p?[o.user_id]:[],...g?[o.actor_kind]:[],..._?[o.actor_id]:[],...m?[o.log_storage]:[]]);}r&&!s&&new pr({dbPath:this.resolveDbPath()}).recordAccepted({workspaceId:e.workspaceId,actorId:e.actorId,actorKind:e.actorKind,agentId:e.agentId});}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to start task",r)}finally{n.close();}}recordTaskPid(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=n.db.select({status:a.status,run_epoch:a.run_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!r||r.status!=="running"||j(r.run_epoch)!==j(e.runEpoch))return !1;let s=r.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,r.run_epoch);return n.db.update(a).set({pid:e.pid}).where(and(eq(a.id,e.id),eq(a.status,"running"),s)).run().changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to record task pid",r)}finally{n.close();}}updateTaskOwnership(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=n.db.select({status:a.status,run_epoch:a.run_epoch,metadata:a.metadata,model:a.model,rendered_prompt:a.rendered_prompt,security_key:a.security_key,coding_agent_command:a.coding_agent_command}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!r||r.status!=="running"||j(r.run_epoch)!==j(e.runEpoch))return !1;let s=Zp(r.metadata,e.runtime?.metadata);s.ownership=e.ownership,e.ownership==="runner"&&e.providerPid!==void 0&&(s.providerPid=e.providerPid);let o=r.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,r.run_epoch),i=n.db.update(a).set({metadata:JSON.stringify(s),model:br(r.model,e.runtime?.model),rendered_prompt:br(r.rendered_prompt,e.runtime?.renderedPrompt),security_key:br(r.security_key,e.runtime?.securityKey),coding_agent_command:br(r.coding_agent_command,e.runtime?.codingAgentCommand)}).where(and(eq(a.id,e.id),eq(a.status,"running"),o)).run();return i.changes>0&&j(e.runEpoch)>0&&n.db.update(a).set({stop_requested_at:null,stop_requested_epoch:null}).where(and(eq(a.id,e.id),eq(a.status,"running"),o,sql`${a.stop_requested_at} IS NOT NULL
138
- AND COALESCE(${a.stop_requested_epoch}, 0) <> COALESCE(${a.run_epoch}, 0)`)).run(),i.changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to update task ownership",r)}finally{n.close();}}adoptPendingTask(e){let n=this.openHandle(true);try{return n.db.update(a).set({status:"running"}).where(and(eq(a.id,e),eq(a.status,"pending"),isNull(a.pid))).run().changes===1}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to adopt pending task",r)}finally{n.close();}}failPendingTask(e,n,r=new Date().toISOString()){let s=this.openHandle(true);try{return s.db.update(a).set({status:"failed",error:n,completed_at:r}).where(and(eq(a.id,e),eq(a.status,"pending"))).run().changes>0}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to fail pending task",o)}finally{s.close();}}stopPendingTask(e,n,r=new Date().toISOString(),s={}){let o=this.openHandle(true);try{let i=!1;return o.db.transaction(u=>{let d=u.select({metadata:a.metadata}).from(a).where(and(eq(a.id,e),eq(a.status,"pending"))).limit(1).get();if(!d)return;let c=io(ne(d.metadata),n),l={...c.metadata,stopMethod:"cooperative",stopRequest:vr(s,r)};i=u.update(a).set({status:"stopped",error:c.error,completed_at:r,metadata:JSON.stringify(l)}).where(and(eq(a.id,e),eq(a.status,"pending"))).run().changes===1;},{behavior:"immediate"}),i}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to stop pending task",i)}finally{o.close();}}listTasksByProjectId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select(te).from(a).where(eq(a.project_id,e)).orderBy(desc(a.started_at)).all().map(Ue)}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to list tasks by project",r)}finally{n.close();}}finishTask(e){let n=this.openHandle(true),r,s;try{n.db.transaction(o=>{let i=o.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,started_at:a.started_at,duration_ms:a.duration_ms,result:a.result,exit_code:a.exit_code,error:a.error,metadata:a.metadata,model:a.model,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cached_input_tokens:a.cached_input_tokens,cost_usd:a.cost_usd}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!i)return;let u=j(i.run_epoch),d=j(e.runEpoch),c=i.status==="running"&&u===d,l=i.stop_requested_at!==null&&j(i.stop_requested_epoch)===u,p=c&&l,g=i.status==="stopped"&&u===d&&l,_=ne(i.metadata),m=nn(_[Mn])?_[Mn]:{},y=String(d),k=Yp(i),N=k&&u===d&&!co(i)&&!Object.prototype.hasOwnProperty.call(m,y),I=k&&u===d&&!Object.prototype.hasOwnProperty.call(m,y),D=u>0||d>0||e.runEpoch!==void 0&&e.runEpoch!==null||u!==d,E={},A;if(i.status!=="running"&&(r=i.status,s=e.result?.trim()||e.error?.trim()||`task:end status=${e.status}`),D&&(i.status==="running"||I)){A=ne(i.metadata);let v=nn(A[oo])?{...A[oo]}:{};v[String(d)]=kd(e),A[oo]=v;let Z=nf(v),ge=Z.inputTokens!==0||Z.outputTokens!==0||Z.cachedInputTokens!==0||Z.costUsd!==0;ge&&_[Fe]==="unavailable"?A[Fe]="recorded":i.status!=="running"&&!ge&&_[Fe]===void 0&&(A[Fe]="unavailable"),E.metadata=JSON.stringify(A),E.input_tokens=Z.inputTokens,E.output_tokens=Z.outputTokens,E.cached_input_tokens=Z.cachedInputTokens,E.cost_usd=Z.costUsd;}else if(c||N)if(c)E.input_tokens=ie(e.inputTokens??0),E.output_tokens=ie(e.outputTokens??0),E.cached_input_tokens=ie(e.cachedInputTokens??0),E.cost_usd=ie(e.costUsd??0);else {let v=kd(e),Z=v.inputTokens!==0||v.outputTokens!==0||v.cachedInputTokens!==0||v.costUsd!==0;Z&&(E.input_tokens=v.inputTokens,E.output_tokens=v.outputTokens,E.cached_input_tokens=v.cachedInputTokens,E.cost_usd=v.costUsd),A={..._};let ge=nn(_[Mn])?{..._[Mn]}:{};ge[y]={at:e.completedAt},A[Mn]=ge,A[Fe]===void 0?A[Fe]=Z?"recorded":"unavailable":Z&&A[Fe]==="unavailable"&&(A[Fe]="recorded"),E.metadata=JSON.stringify(A);}if((c||N)&&e.model!==void 0&&e.model!==null&&(!N||i.model===null)&&(E.model=e.model),p){A??=ne(i.metadata);let v=io(A,e.error);A={...v.metadata,...e.partialResultRecovered===!0?{partialResultRecovered:!0}:{},stopMethod:Ar(i.stop_requested_at,e.completedAt)},E.status="stopped",E.result=e.result??i.result,E.error=v.error,E.completed_at=e.completedAt,E.duration_ms=i.duration_ms??e.durationMs??Nr(i.started_at,e.completedAt,void 0),E.exit_code=e.exitCode??i.exit_code,E.metadata=JSON.stringify(A);}else if(c)e.partialResultRecovered===!0&&(A??=ne(i.metadata),A.partialResultRecovered=!0,E.metadata=JSON.stringify(A)),E.status=e.status,E.result=e.result??null,E.error=e.error??null,E.completed_at=e.completedAt,E.duration_ms=u>0?Nr(i.started_at,e.completedAt,e.durationMs):e.durationMs??null,E.exit_code=e.exitCode??null;else if(g){let v=!1;i.result===null&&e.result!==void 0&&e.result!==null&&(E.result=e.result,v=!0),i.exit_code===null&&e.exitCode!==void 0&&e.exitCode!==null&&(E.exit_code=e.exitCode),e.partialResultRecovered===!0&&(A??=ne(i.metadata),A.partialResultRecovered=!0,E.metadata=JSON.stringify(A)),v&&(r=void 0,s=void 0);}Object.keys(E).length>0&&o.update(a).set(E).where(eq(a.id,e.id)).run();},{behavior:"immediate"});}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to finish task",o)}finally{n.close();}if(r!==void 0){try{this.taskLogRepository.appendLog(e.id,{timestamp:e.completedAt,level:"late-result",message:s??`task:end status=${e.status}`});}catch(o){console.error(`[crewx] failed to preserve late task result for ${e.id}: ${o instanceof Error?o.message:String(o)}`);}process.stderr.write(`Task ${e.id} was already finalized (${r}); late result kept in task log
139
- `);}}updateTaskLifecycle(e){let n=this.openHandle(true);try{let r=and(eq(a.id,e.id),eq(a.workspace_id,e.workspaceId)),s={status:e.status,error:e.error,completed_at:e.completedAt,duration_ms:e.durationMs};if(e.terminalReason){let o=n.db.select({metadata:a.metadata}).from(a).where(r).limit(1).get(),i=ne(o?.metadata??null);i.terminalReason=e.terminalReason,s.metadata=JSON.stringify(i);}n.db.update(a).set(s).where(r).run();}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to update task lifecycle",r)}finally{n.close();}}appendLog(e,n){this.taskLogRepository.appendLog(e,n);}appendLogs(e,n){this.taskLogRepository.appendLogs(e,n);}readLogs(e){return this.taskLogRepository.readLogs(e)}readLogsTail(e,n){return this.taskLogRepository.readLogsTail(e,n)}getLogState(e){return this.taskLogRepository.getLogState(e)}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select(te).from(a).where(eq(a.status,"running")).orderBy(desc(a.started_at)).all().map(Ue)}catch(n){throw new f("DB_ERROR","Failed to get running tasks",n)}finally{e.close();}}getActiveTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select(te).from(a).where(inArray(a.status,["pending","running"])).orderBy(desc(a.started_at)).all().map(Ue)}catch(n){throw new f("DB_ERROR","Failed to get active tasks",n)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select(te).from(a).orderBy(desc(a.started_at)).limit(100).all().map(Ue)}catch(n){throw new f("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}readTaskSecurityKey(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.db.select({security_key:a.security_key}).from(a).where(eq(a.id,e)).limit(1).get()?.security_key??null}catch(r){throw new f("DB_ERROR","Failed to read task security key",r)}finally{n.close();}}recordProviderInput(e){if(!this.dbExists())return false;let n=j(e.runEpoch);if(n===0&&e.interceptedRequest!==true)return false;let r=e.recordedAt??new Date(this.clock()).toISOString(),s=this.openHandle(true);try{let o=!1;return s.db.transaction(i=>{let u=i.select({run_epoch:a.run_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!u||j(u.run_epoch)!==n)return;o=i.insert(tt).values({task_id:e.id,run_epoch:n,input:e.input,key_wrap_skipped:e.keyWrapSkipped?1:0,recorded_at:r}).onConflictDoNothing().run().changes>0;}),o}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to record provider input",o)}finally{s.close();}}listProviderInputEpochs(e,n={}){if(!this.dbExists())return [];let r=this.openHandle(false);try{let s=r.db.select({run_epoch:a.run_epoch}).from(a).where(eq(a.id,e)).limit(1).get();if(!s)return [];let o=j(s.run_epoch),i=r.db.select({run_epoch:tt.run_epoch,key_wrap_skipped:tt.key_wrap_skipped}).from(tt).where(eq(tt.task_id,e)).all(),u=new Map(i.map(c=>[c.run_epoch,c])),d=[];for(let c=1;c<=o;c++){let l=u.get(c);l?d.push({runEpoch:c,available:!0,...l.key_wrap_skipped===1?{keyWrapSkipped:!0}:{}}):d.push({runEpoch:c,available:!1,reason:n.archivedRunEpochs?.has(c)?"pruned":"absent"});}return d}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to list provider inputs",s)}finally{r.close();}}readProviderInput(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let s=r.db.select().from(tt).where(and(eq(tt.task_id,e),eq(tt.run_epoch,j(n)))).limit(1).get();return s?{runEpoch:s.run_epoch,input:s.input,keyWrapSkipped:s.key_wrap_skipped===1,recordedAt:s.recorded_at}:void 0}catch(s){throw new f("DB_ERROR","Failed to read provider input",s)}finally{r.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=n.db.select(te).from(a).where(eq(a.id,e)).limit(1).get();return r?Ue(r):void 0}catch(r){throw new f("DB_ERROR","Failed to get task",r)}finally{n.close();}}async killTask(e){let n=await this.stopTask(e);return n.status==="stopped"?{status:"terminated",killed:n.method==="forced"||n.method==="cooperative",...n.pid?{pid:n.pid}:{}}:n.status==="not_running"?{status:"not_running",killed:false,...n.pid?{pid:n.pid}:{},...n.error?{error:n.error}:{}}:{status:"failed",killed:false,...n.pid?{pid:n.pid}:{},...n.error?{error:n.error}:{}}}reapOrphanedTasks(e={}){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=n.db.select({id:a.id,status:a.status,pid:a.pid,platform:a.platform,run_epoch:a.run_epoch,heartbeat_at:a.heartbeat_at,started_at:a.started_at,metadata:a.metadata,model:a.model,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cached_input_tokens:a.cached_input_tokens,cost_usd:a.cost_usd}).from(a).where(or(eq(a.status,"running"),eq(a.status,"pending"))).all(),s=this.clock(),o=Math.max(1,Math.trunc(e.tickIntervalMs??Ed)),i=this.lastReaperTickAt,u=i===void 0?Number.POSITIVE_INFINITY:s-i,d=i!==void 0&&u>=0&&u<=o*2;this.lastReaperTickAt=s;let c=Qt(),l=Ir(),p=new Date(s-yd).toISOString(),g=new Date(s).toISOString(),_=new Set,m=0,y=(k,N)=>{let I=ne(uo(k.metadata,"runner_lost")),D=typeof I.provider=="string"?I.provider:void 0,E;try{E=Rr({taskLogRepository:this.taskLogRepository,taskId:k.id,provider:D,model:k.model})?.usage;}catch{}let A={status:"failed",error:N,completed_at:g};E?(A.input_tokens=E.inputTokens,A.output_tokens=E.outputTokens,A.cached_input_tokens=E.cachedInputTokens,A.cost_usd=E.costUsd,k.model===null&&E.model!==null&&(A.model=E.model),I[Fe]="recorded"):!co(k)&&I[Fe]!=="recorded"&&(I[Fe]="unavailable"),A.metadata=JSON.stringify(I);let v=k.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,k.run_epoch),Z=k.heartbeat_at===null?isNull(a.heartbeat_at):eq(a.heartbeat_at,k.heartbeat_at),ge=n.db.update(a).set(A).where(and(eq(a.id,k.id),eq(a.status,"running"),v,Z)).run();return ge.changes>0&&m++,ge.changes>0};for(let k of r){if(k.status==="pending"){if(k.pid!==null||k.started_at>=p)continue;let E=uo(k.metadata,"launch_failed");n.db.update(a).set({status:"failed",error:"Reaped: runner never adopted task (pending timeout)",completed_at:g,metadata:E}).where(and(eq(a.id,k.id),eq(a.status,"pending"),isNull(a.pid),lt$1(a.started_at,p))).run().changes>0&&m++;continue}if(Jp.has(k.platform??"cli"))continue;if(k.pid===null){let E=`${k.id}:${k.run_epoch??0}`;_.add(E);let A=this.pidNullObservedSince.get(E);if(A===void 0){this.pidNullObservedSince.set(E,s);continue}s-A>=lo&&y(k,"Reaped: pid never recorded after resume (stale running_instruction)")&&this.pidNullObservedSince.delete(E);continue}if(k.heartbeat_at===null){St(k.pid)==="not_found"&&y(k,"Reaped: process not found (orphaned task)");continue}let N=Date.parse(k.heartbeat_at),I=Number.isFinite(N)?s-N:Number.POSITIVE_INFINITY;if(I<=c)continue;St(k.pid)==="not_found"?y(k,"Reaped: process not found (orphaned task)"):I>l&&d&&y(k,"Reaped: heartbeat stale beyond hard limit (orphaned task)");}for(let k of Array.from(this.pidNullObservedSince.keys()))_.has(k)||this.pidNullObservedSince.delete(k);return m}finally{n.close();}}reapRunningWorkflowTasks(e=lo){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString(),s=and(eq(a.status,"running"),eq(a.platform,"workflow"),isNull(a.pid),lt$1(a.started_at,r),or(isNull(a.metadata),and(notLike(a.metadata,'%"kind":"workflow_card"%'),notLike(a.metadata,'%"kind":"workflow_ui_instance"%')))),o=n.db.select({id:a.id,metadata:a.metadata}).from(a).where(s).all(),i=new Date().toISOString(),u=0;for(let d of o){let c=ne(d.metadata);c.terminalReason="runner_lost";let l=n.db.update(a).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:i,metadata:JSON.stringify(c)}).where(and(eq(a.id,d.id),eq(a.status,"running"))).run();u+=l.changes??0;}return u}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=U(s);try{let i=n?eq(a.workspace_id,n):void 0,u=i?and(eq(a.id,e),i):eq(a.id,e),d=o.db.select(te).from(a).where(u).limit(1).get()??void 0;if(!d){let c=i?and(eq(a.thread_id,e),i):eq(a.thread_id,e);d=o.db.select(te).from(a).where(c).orderBy(desc(a.started_at)).limit(1).get()??void 0;}if(d)return Ue(d)}catch(i){throw new f("DB_ERROR","Failed to find task status",i)}finally{o.close();}}}findChildTasks(e,n){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=U(i);try{let d=n?and(eq(a.parent_task_id,e),eq(a.workspace_id,n)):eq(a.parent_task_id,e),c=u.db.select(te).from(a).where(d).orderBy(asc(a.started_at)).all();for(let l of c)s.has(l.id)||(s.add(l.id),o.push(Ue(l)));}catch(d){throw new f("DB_ERROR","Failed to find child tasks",d)}finally{u.close();}}return o}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?sql`
136
+ coding_agent_command = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.coding_agent_command ELSE tasks.coding_agent_command END${pu}
137
+ WHERE tasks.status = 'running' OR (tasks.status = 'pending' AND tasks.pid IS NULL)`,[o.id,o.agent_id,o.prompt,o.mode,o.status,o.started_at,o.pid,o.parent_task_id,o.caller_agent_id,o.trace_id,o.command,o.metadata,o.workspace_id,...l?[o.cwd]:[],o.project_id,o.platform,o.crewx_version,o.thread_id,o.model,o.rendered_prompt,o.coding_agent_command,...p?[o.user_id]:[],...g?[o.actor_kind]:[],..._?[o.actor_id]:[],...m?[o.log_storage]:[]]);}r&&!s&&new mr({dbPath:this.resolveDbPath()}).recordAccepted({workspaceId:e.workspaceId,actorId:e.actorId,actorKind:e.actorKind,agentId:e.agentId});}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to start task",r)}finally{n.close();}}recordTaskPid(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=n.db.select({status:a.status,run_epoch:a.run_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!r||r.status!=="running"||j(r.run_epoch)!==j(e.runEpoch))return !1;let s=r.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,r.run_epoch);return n.db.update(a).set({pid:e.pid}).where(and(eq(a.id,e.id),eq(a.status,"running"),s)).run().changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to record task pid",r)}finally{n.close();}}updateTaskOwnership(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=n.db.select({status:a.status,run_epoch:a.run_epoch,metadata:a.metadata,model:a.model,rendered_prompt:a.rendered_prompt,security_key:a.security_key,coding_agent_command:a.coding_agent_command}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!r||r.status!=="running"||j(r.run_epoch)!==j(e.runEpoch))return !1;let s=uf(r.metadata,e.runtime?.metadata);s.ownership=e.ownership,e.ownership==="runner"&&e.providerPid!==void 0&&(s.providerPid=e.providerPid);let o=r.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,r.run_epoch),i=n.db.update(a).set({metadata:JSON.stringify(s),model:Dr(r.model,e.runtime?.model),rendered_prompt:Dr(r.rendered_prompt,e.runtime?.renderedPrompt),security_key:Dr(r.security_key,e.runtime?.securityKey),coding_agent_command:Dr(r.coding_agent_command,e.runtime?.codingAgentCommand)}).where(and(eq(a.id,e.id),eq(a.status,"running"),o)).run();return i.changes>0&&j(e.runEpoch)>0&&n.db.update(a).set({stop_requested_at:null,stop_requested_epoch:null}).where(and(eq(a.id,e.id),eq(a.status,"running"),o,sql`${a.stop_requested_at} IS NOT NULL
138
+ AND COALESCE(${a.stop_requested_epoch}, 0) <> COALESCE(${a.run_epoch}, 0)`)).run(),i.changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to update task ownership",r)}finally{n.close();}}adoptPendingTask(e){let n=this.openHandle(true);try{return n.db.update(a).set({status:"running"}).where(and(eq(a.id,e),eq(a.status,"pending"),isNull(a.pid))).run().changes===1}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to adopt pending task",r)}finally{n.close();}}failPendingTask(e,n,r=new Date().toISOString()){let s=this.openHandle(true);try{return s.db.update(a).set({status:"failed",error:n,completed_at:r}).where(and(eq(a.id,e),eq(a.status,"pending"))).run().changes>0}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to fail pending task",o)}finally{s.close();}}stopPendingTask(e,n,r=new Date().toISOString(),s={}){let o=this.openHandle(true);try{let i=!1;return o.db.transaction(u=>{let d=u.select({metadata:a.metadata}).from(a).where(and(eq(a.id,e),eq(a.status,"pending"))).limit(1).get();if(!d)return;let c=po(re(d.metadata),n),l={...c.metadata,stopMethod:"cooperative",stopRequest:Pr(s,r)};i=u.update(a).set({status:"stopped",error:c.error,completed_at:r,metadata:JSON.stringify(l)}).where(and(eq(a.id,e),eq(a.status,"pending"))).run().changes===1;},{behavior:"immediate"}),i}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to stop pending task",i)}finally{o.close();}}listTasksByProjectId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select(ne).from(a).where(eq(a.project_id,e)).orderBy(desc(a.started_at)).all().map(qe)}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to list tasks by project",r)}finally{n.close();}}finishTask(e){let n=this.openHandle(true),r,s;try{n.db.transaction(o=>{let i=o.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,started_at:a.started_at,duration_ms:a.duration_ms,result:a.result,exit_code:a.exit_code,error:a.error,metadata:a.metadata,model:a.model,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cached_input_tokens:a.cached_input_tokens,cost_usd:a.cost_usd}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!i)return;let u=j(i.run_epoch),d=j(e.runEpoch),c=i.status==="running"&&u===d,l=i.stop_requested_at!==null&&j(i.stop_requested_epoch)===u,p=c&&l,g=i.status==="stopped"&&u===d&&l,_=re(i.metadata),m=sn(_[Fn])?_[Fn]:{},y=String(d),k=af(i),v=k&&u===d&&!ho(i)&&!Object.prototype.hasOwnProperty.call(m,y),I=k&&u===d&&!Object.prototype.hasOwnProperty.call(m,y),D=u>0||d>0||e.runEpoch!==void 0&&e.runEpoch!==null||u!==d,E={},A;if(i.status!=="running"&&(r=i.status,s=e.result?.trim()||e.error?.trim()||`task:end status=${e.status}`),D&&(i.status==="running"||I)){A=re(i.metadata);let N=sn(A[lo])?{...A[lo]}:{};N[String(d)]=Nd(e),A[lo]=N;let Z=pf(N),_e=Z.inputTokens!==0||Z.outputTokens!==0||Z.cachedInputTokens!==0||Z.costUsd!==0;_e&&_[Be]==="unavailable"?A[Be]="recorded":i.status!=="running"&&!_e&&_[Be]===void 0&&(A[Be]="unavailable"),E.metadata=JSON.stringify(A),E.input_tokens=Z.inputTokens,E.output_tokens=Z.outputTokens,E.cached_input_tokens=Z.cachedInputTokens,E.cost_usd=Z.costUsd;}else if(c||v)if(c)E.input_tokens=de(e.inputTokens??0),E.output_tokens=de(e.outputTokens??0),E.cached_input_tokens=de(e.cachedInputTokens??0),E.cost_usd=de(e.costUsd??0);else {let N=Nd(e),Z=N.inputTokens!==0||N.outputTokens!==0||N.cachedInputTokens!==0||N.costUsd!==0;Z&&(E.input_tokens=N.inputTokens,E.output_tokens=N.outputTokens,E.cached_input_tokens=N.cachedInputTokens,E.cost_usd=N.costUsd),A={..._};let _e=sn(_[Fn])?{..._[Fn]}:{};_e[y]={at:e.completedAt},A[Fn]=_e,A[Be]===void 0?A[Be]=Z?"recorded":"unavailable":Z&&A[Be]==="unavailable"&&(A[Be]="recorded"),E.metadata=JSON.stringify(A);}if((c||v)&&e.model!==void 0&&e.model!==null&&(!v||i.model===null)&&(E.model=e.model),p){A??=re(i.metadata);let N=po(A,e.error);A={...N.metadata,...e.partialResultRecovered===!0?{partialResultRecovered:!0}:{},stopMethod:xr(i.stop_requested_at,e.completedAt)},E.status="stopped",E.result=e.result??i.result,E.error=N.error,E.completed_at=e.completedAt,E.duration_ms=i.duration_ms??e.durationMs??Lr(i.started_at,e.completedAt,void 0),E.exit_code=e.exitCode??i.exit_code,E.metadata=JSON.stringify(A);}else if(c)e.partialResultRecovered===!0&&(A??=re(i.metadata),A.partialResultRecovered=!0,E.metadata=JSON.stringify(A)),E.status=e.status,E.result=e.result??null,E.error=e.error??null,E.completed_at=e.completedAt,E.duration_ms=u>0?Lr(i.started_at,e.completedAt,e.durationMs):e.durationMs??null,E.exit_code=e.exitCode??null;else if(g){let N=!1;i.result===null&&e.result!==void 0&&e.result!==null&&(E.result=e.result,N=!0),i.exit_code===null&&e.exitCode!==void 0&&e.exitCode!==null&&(E.exit_code=e.exitCode),e.partialResultRecovered===!0&&(A??=re(i.metadata),A.partialResultRecovered=!0,E.metadata=JSON.stringify(A)),N&&(r=void 0,s=void 0);}Object.keys(E).length>0&&o.update(a).set(E).where(eq(a.id,e.id)).run();},{behavior:"immediate"});}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to finish task",o)}finally{n.close();}if(r!==void 0){try{this.taskLogRepository.appendLog(e.id,{timestamp:e.completedAt,level:"late-result",message:s??`task:end status=${e.status}`});}catch(o){console.error(`[crewx] failed to preserve late task result for ${e.id}: ${o instanceof Error?o.message:String(o)}`);}process.stderr.write(`Task ${e.id} was already finalized (${r}); late result kept in task log
139
+ `);}}updateTaskLifecycle(e){let n=this.openHandle(true);try{let r=and(eq(a.id,e.id),eq(a.workspace_id,e.workspaceId)),s={status:e.status,error:e.error,completed_at:e.completedAt,duration_ms:e.durationMs};if(e.terminalReason){let o=n.db.select({metadata:a.metadata}).from(a).where(r).limit(1).get(),i=re(o?.metadata??null);i.terminalReason=e.terminalReason,s.metadata=JSON.stringify(i);}n.db.update(a).set(s).where(r).run();}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to update task lifecycle",r)}finally{n.close();}}appendLog(e,n){this.taskLogRepository.appendLog(e,n);}appendLogs(e,n){this.taskLogRepository.appendLogs(e,n);}readLogs(e){return this.taskLogRepository.readLogs(e)}readLogsTail(e,n){return this.taskLogRepository.readLogsTail(e,n)}getLogState(e){return this.taskLogRepository.getLogState(e)}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select(ne).from(a).where(eq(a.status,"running")).orderBy(desc(a.started_at)).all().map(qe)}catch(n){throw new f("DB_ERROR","Failed to get running tasks",n)}finally{e.close();}}getActiveTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select(ne).from(a).where(inArray(a.status,["pending","running"])).orderBy(desc(a.started_at)).all().map(qe)}catch(n){throw new f("DB_ERROR","Failed to get active tasks",n)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select(ne).from(a).orderBy(desc(a.started_at)).limit(100).all().map(qe)}catch(n){throw new f("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}readTaskSecurityKey(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.db.select({security_key:a.security_key}).from(a).where(eq(a.id,e)).limit(1).get()?.security_key??null}catch(r){throw new f("DB_ERROR","Failed to read task security key",r)}finally{n.close();}}recordProviderInput(e){if(!this.dbExists())return false;let n=j(e.runEpoch);if(n===0&&e.interceptedRequest!==true)return false;let r=e.recordedAt??new Date(this.clock()).toISOString(),s=this.openHandle(true);try{let o=!1;return s.db.transaction(i=>{let u=i.select({run_epoch:a.run_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!u||j(u.run_epoch)!==n)return;o=i.insert(nt).values({task_id:e.id,run_epoch:n,input:e.input,key_wrap_skipped:e.keyWrapSkipped?1:0,recorded_at:r}).onConflictDoNothing().run().changes>0;}),o}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to record provider input",o)}finally{s.close();}}listProviderInputEpochs(e,n={}){if(!this.dbExists())return [];let r=this.openHandle(false);try{let s=r.db.select({run_epoch:a.run_epoch}).from(a).where(eq(a.id,e)).limit(1).get();if(!s)return [];let o=j(s.run_epoch),i=r.db.select({run_epoch:nt.run_epoch,key_wrap_skipped:nt.key_wrap_skipped}).from(nt).where(eq(nt.task_id,e)).all(),u=new Map(i.map(c=>[c.run_epoch,c])),d=[];for(let c=1;c<=o;c++){let l=u.get(c);l?d.push({runEpoch:c,available:!0,...l.key_wrap_skipped===1?{keyWrapSkipped:!0}:{}}):d.push({runEpoch:c,available:!1,reason:n.archivedRunEpochs?.has(c)?"pruned":"absent"});}return d}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to list provider inputs",s)}finally{r.close();}}readProviderInput(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let s=r.db.select().from(nt).where(and(eq(nt.task_id,e),eq(nt.run_epoch,j(n)))).limit(1).get();return s?{runEpoch:s.run_epoch,input:s.input,keyWrapSkipped:s.key_wrap_skipped===1,recordedAt:s.recorded_at}:void 0}catch(s){throw new f("DB_ERROR","Failed to read provider input",s)}finally{r.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=n.db.select(ne).from(a).where(eq(a.id,e)).limit(1).get();return r?qe(r):void 0}catch(r){throw new f("DB_ERROR","Failed to get task",r)}finally{n.close();}}async killTask(e){let n=await this.stopTask(e);return n.status==="stopped"?{status:"terminated",killed:n.method==="forced"||n.method==="cooperative",...n.pid?{pid:n.pid}:{}}:n.status==="not_running"?{status:"not_running",killed:false,...n.pid?{pid:n.pid}:{},...n.error?{error:n.error}:{}}:{status:"failed",killed:false,...n.pid?{pid:n.pid}:{},...n.error?{error:n.error}:{}}}reapOrphanedTasks(e={}){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=n.db.select({id:a.id,status:a.status,pid:a.pid,platform:a.platform,run_epoch:a.run_epoch,heartbeat_at:a.heartbeat_at,started_at:a.started_at,metadata:a.metadata,model:a.model,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cached_input_tokens:a.cached_input_tokens,cost_usd:a.cost_usd}).from(a).where(or(eq(a.status,"running"),eq(a.status,"pending"))).all(),s=this.clock(),o=Math.max(1,Math.trunc(e.tickIntervalMs??Dd)),i=this.lastReaperTickAt,u=i===void 0?Number.POSITIVE_INFINITY:s-i,d=i!==void 0&&u>=0&&u<=o*2;this.lastReaperTickAt=s;let c=en(),l=vr(),p=new Date(s-Cd).toISOString(),g=new Date(s).toISOString(),_=new Set,m=0,y=(k,v)=>{let I=re(go(k.metadata,"runner_lost")),D=typeof I.provider=="string"?I.provider:void 0,E;try{E=br({taskLogRepository:this.taskLogRepository,taskId:k.id,provider:D,model:k.model})?.usage;}catch{}let A={status:"failed",error:v,completed_at:g};E?(A.input_tokens=E.inputTokens,A.output_tokens=E.outputTokens,A.cached_input_tokens=E.cachedInputTokens,A.cost_usd=E.costUsd,k.model===null&&E.model!==null&&(A.model=E.model),I[Be]="recorded"):!ho(k)&&I[Be]!=="recorded"&&(I[Be]="unavailable"),A.metadata=JSON.stringify(I);let N=k.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,k.run_epoch),Z=k.heartbeat_at===null?isNull(a.heartbeat_at):eq(a.heartbeat_at,k.heartbeat_at),_e=n.db.update(a).set(A).where(and(eq(a.id,k.id),eq(a.status,"running"),N,Z)).run();return _e.changes>0&&m++,_e.changes>0};for(let k of r){if(k.status==="pending"){if(k.pid!==null||k.started_at>=p)continue;let E=go(k.metadata,"launch_failed");n.db.update(a).set({status:"failed",error:"Reaped: runner never adopted task (pending timeout)",completed_at:g,metadata:E}).where(and(eq(a.id,k.id),eq(a.status,"pending"),isNull(a.pid),lt$1(a.started_at,p))).run().changes>0&&m++;continue}if(sf.has(k.platform??"cli"))continue;if(k.pid===null){let E=`${k.id}:${k.run_epoch??0}`;_.add(E);let A=this.pidNullObservedSince.get(E);if(A===void 0){this.pidNullObservedSince.set(E,s);continue}s-A>=_o&&y(k,"Reaped: pid never recorded after resume (stale running_instruction)")&&this.pidNullObservedSince.delete(E);continue}if(k.heartbeat_at===null){At(k.pid)==="not_found"&&y(k,"Reaped: process not found (orphaned task)");continue}let v=Date.parse(k.heartbeat_at),I=Number.isFinite(v)?s-v:Number.POSITIVE_INFINITY;if(I<=c)continue;At(k.pid)==="not_found"?y(k,"Reaped: process not found (orphaned task)"):I>l&&d&&y(k,"Reaped: heartbeat stale beyond hard limit (orphaned task)");}for(let k of Array.from(this.pidNullObservedSince.keys()))_.has(k)||this.pidNullObservedSince.delete(k);return m}finally{n.close();}}reapRunningWorkflowTasks(e=_o){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString(),s=and(eq(a.status,"running"),eq(a.platform,"workflow"),isNull(a.pid),lt$1(a.started_at,r),or(isNull(a.metadata),and(notLike(a.metadata,'%"kind":"workflow_card"%'),notLike(a.metadata,'%"kind":"workflow_ui_instance"%')))),o=n.db.select({id:a.id,metadata:a.metadata}).from(a).where(s).all(),i=new Date().toISOString(),u=0;for(let d of o){let c=re(d.metadata);c.terminalReason="runner_lost";let l=n.db.update(a).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:i,metadata:JSON.stringify(c)}).where(and(eq(a.id,d.id),eq(a.status,"running"))).run();u+=l.changes??0;}return u}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{let i=n?eq(a.workspace_id,n):void 0,u=i?and(eq(a.id,e),i):eq(a.id,e),d=o.db.select(ne).from(a).where(u).limit(1).get()??void 0;if(!d){let c=i?and(eq(a.thread_id,e),i):eq(a.thread_id,e);d=o.db.select(ne).from(a).where(c).orderBy(desc(a.started_at)).limit(1).get()??void 0;}if(d)return qe(d)}catch(i){throw new f("DB_ERROR","Failed to find task status",i)}finally{o.close();}}}findChildTasks(e,n){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=n?and(eq(a.parent_task_id,e),eq(a.workspace_id,n)):eq(a.parent_task_id,e),c=u.db.select(ne).from(a).where(d).orderBy(asc(a.started_at)).all();for(let l of c)s.has(l.id)||(s.add(l.id),o.push(qe(l)));}catch(d){throw new f("DB_ERROR","Failed to find child tasks",d)}finally{u.close();}}return o}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?sql`
140
140
  SELECT
141
141
  COALESCE(workspace_id, 'unknown') AS workspace_id,
142
142
  COALESCE(SUM(input_tokens), 0) AS input_tokens,
@@ -157,14 +157,14 @@ ${r.join(`
157
157
  FROM tasks
158
158
  GROUP BY workspace_id
159
159
  ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
160
- `)}catch(r){throw new f("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),s=new Set,o=0,i=0,u=0;for(let d of r){if(!existsSync(d))continue;let c=U(d);try{let l=eq(a.thread_id,e),p=n?and(l,eq(a.workspace_id,n)):l,g=c.db.select({id:a.id,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cost_usd:a.cost_usd}).from(a).where(p).all();for(let _ of g)s.has(_.id)||(s.add(_.id),o+=_.input_tokens??0,i+=_.output_tokens??0,u+=_.cost_usd??0);}catch(l){throw new f("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:o,outputTokens:i,costUsd:u}}findTasksByThread(e,n,r){let s=this.resolveDbPaths(),o=new Set,i=[],u=r?.projection==="activity-log";for(let d of s){if(!existsSync(d))continue;let c=U(d);try{let l=eq(a.thread_id,e),p=n?and(l,eq(a.workspace_id,n)):l,g=u?c.db.select({id:a.id,thread_id:a.thread_id,agent_id:a.agent_id,parent_task_id:a.parent_task_id,started_at:a.started_at,completed_at:a.completed_at}).from(a).where(p).orderBy(asc(a.started_at)).all():c.db.select(te).from(a).where(p).orderBy(asc(a.started_at)).all().map(Ue);for(let _ of g)o.has(_.id)||(o.add(_.id),i.push(_));}catch(l){throw new f("DB_ERROR","Failed to find tasks by thread",l)}finally{c.close();}}return i}parseWorkflowCardMetadata(e){if(!e)return {};try{let n=JSON.parse(e);return {kind:typeof n.kind=="string"?n.kind:void 0,workflowRunId:typeof n.workflowRunId=="string"?n.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}findRunningWorkflowParentTasks(){if(!this.dbExists())return [];let e=[];for(let n of this.resolveDbPaths()){if(!existsSync(n))continue;let r=U(n);try{e.push(...r.db.select({id:a.id,agent_id:a.agent_id,thread_id:a.thread_id,workspace_id:a.workspace_id,platform:a.platform,status:a.status,error:a.error,completed_at:a.completed_at,duration_ms:a.duration_ms,started_at:a.started_at,metadata:a.metadata}).from(a).where(and(eq(a.platform,"workflow"),inArray(a.status,["running","pending"]),or(like(a.metadata,'%"kind":"workflow_card"%'),like(a.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(desc(a.started_at)).all().map(no));}catch(s){throw new f("DB_ERROR","Failed to find workflow parent tasks",s)}finally{r.close();}}return e}findWorkflowParentTasksByWorkspace(e){let n=[],r=new Map;for(let s of this.resolveDbPaths()){if(!existsSync(s))continue;let o=U(s);try{let i=o.db.select({id:a.id,agent_id:a.agent_id,thread_id:a.thread_id,workspace_id:a.workspace_id,platform:a.platform,status:a.status,error:a.error,completed_at:a.completed_at,duration_ms:a.duration_ms,started_at:a.started_at,metadata:a.metadata}).from(a).where(and(eq(a.platform,"workflow"),eq(a.workspace_id,e))).orderBy(desc(a.started_at),desc(a.id)).all();for(let u of i){let d=this.parseWorkflowCardMetadata(u.metadata);if(d.kind!=="workflow_card"&&d.kind!=="workflow_ui_instance"||typeof d.workflowRunId!="string")continue;let c=d.kind,l=r.get(c)??new Set;l.has(d.workflowRunId)||(l.add(d.workflowRunId),r.set(c,l),n.push(no(u)));}}catch(i){throw new f("DB_ERROR","Failed to find workflow parent tasks by workspace",i)}finally{o.close();}}return n}findWorkflowParentTask(e){if(this.dbExists())for(let n of this.resolveDbPaths()){if(!existsSync(n))continue;let r=U(n);try{let s=r.db.select({id:a.id,agent_id:a.agent_id,thread_id:a.thread_id,workspace_id:a.workspace_id,platform:a.platform,status:a.status,error:a.error,completed_at:a.completed_at,duration_ms:a.duration_ms,started_at:a.started_at,metadata:a.metadata}).from(a).where(and(eq(a.platform,"workflow"),eq(a.workspace_id,e.workspaceId))).orderBy(desc(a.started_at),desc(a.id)).all();for(let o of s){let i=this.parseWorkflowCardMetadata(o.metadata);if(i.kind===e.kind&&i.workflowRunId===e.workflowRunId)return no(o)}}catch(s){throw new f("DB_ERROR","Failed to find workflow parent task",s)}finally{r.close();}}}batchFetchWorkflowCards(e,n){let r=new Map;if(e.length===0)return r;let s=new Set(e),o=new Map,i=n?eq(a.workspace_id,n):void 0,u=(d,c)=>{if(!d)return;let l=o.get(d);if(l&&c.started_at<=l)return;let p=this.parseWorkflowCardMetadata(c.metadata);p.kind!=="workflow_card"&&p.kind!=="workflow_ui_instance"||(o.set(d,c.started_at),r.set(d,{taskId:c.id,workflowRunId:p.workflowRunId,raw:c.result??void 0}));};for(let d of this.resolveDbPaths()){if(!existsSync(d))continue;let c=U(d);try{let l=and(inArray(a.thread_id,e),or(like(a.metadata,'%"kind":"workflow_card"%'),like(a.metadata,'%"kind":"workflow_ui_instance"%'))),p=c.db.select({id:a.id,thread_id:a.thread_id,metadata:a.metadata,result:a.result,started_at:a.started_at}).from(a).where(i?and(l,i):l).all();for(let m of p)u(m.thread_id,m);let g=and(isNull(a.thread_id),or(like(a.metadata,'%"kind":"workflow_card"%'),like(a.metadata,'%"kind":"workflow_ui_instance"%'))),_=c.db.select({id:a.id,command:a.command,metadata:a.metadata,result:a.result,started_at:a.started_at}).from(a).where(i?and(g,i):g).all();for(let m of _){let y=this.extractThreadIdFromCommand(m.command);!y||!s.has(y)||u(y,m);}}catch(l){throw new f("DB_ERROR","Failed to batch fetch workflow cards",l)}finally{c.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(a.workspace_id,e.workspaceId));let s=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;s&&r.push(inArray(a.agent_id,s));let o=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;o&&r.push(inArray(a.status,Hs(o)));let i=e.q??e.search;i&&r.push(like(a.prompt,`%${i}%`)),e.from&&r.push(gte(a.started_at,e.from)),e.to&&r.push(lt$1(a.started_at,e.to));let u=r.length>0?and(...r):void 0,d=n.db.select({count:sql`count(*)`}).from(a).where(u).get(),c=(e.sortDir??"DESC")==="ASC"?asc(a.started_at):desc(a.started_at);return {rows:n.db.select(te).from(a).where(u).orderBy(c).limit(e.limit).offset(e.offset).all().map(Ue),total:d?.count??0}}catch(r){throw new f("DB_ERROR","Failed to find all tasks",r)}finally{n.close();}}getAgentUsage(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=so(sql.raw("t.model"),sql.raw("t.metadata")),i=$n(sql.raw("t.status")),u=Or(sql.raw("t.metadata")),d=sql`
160
+ `)}catch(r){throw new f("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),s=new Set,o=0,i=0,u=0;for(let d of r){if(!existsSync(d))continue;let c=H(d);try{let l=eq(a.thread_id,e),p=n?and(l,eq(a.workspace_id,n)):l,g=c.db.select({id:a.id,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cost_usd:a.cost_usd}).from(a).where(p).all();for(let _ of g)s.has(_.id)||(s.add(_.id),o+=_.input_tokens??0,i+=_.output_tokens??0,u+=_.cost_usd??0);}catch(l){throw new f("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:o,outputTokens:i,costUsd:u}}findTasksByThread(e,n,r){let s=this.resolveDbPaths(),o=new Set,i=[],u=r?.projection==="activity-log";for(let d of s){if(!existsSync(d))continue;let c=H(d);try{let l=eq(a.thread_id,e),p=n?and(l,eq(a.workspace_id,n)):l,g=u?c.db.select({id:a.id,thread_id:a.thread_id,agent_id:a.agent_id,parent_task_id:a.parent_task_id,started_at:a.started_at,completed_at:a.completed_at}).from(a).where(p).orderBy(asc(a.started_at)).all():c.db.select(ne).from(a).where(p).orderBy(asc(a.started_at)).all().map(qe);for(let _ of g)o.has(_.id)||(o.add(_.id),i.push(_));}catch(l){throw new f("DB_ERROR","Failed to find tasks by thread",l)}finally{c.close();}}return i}parseWorkflowCardMetadata(e){if(!e)return {};try{let n=JSON.parse(e);return {kind:typeof n.kind=="string"?n.kind:void 0,workflowRunId:typeof n.workflowRunId=="string"?n.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}findRunningWorkflowParentTasks(){if(!this.dbExists())return [];let e=[];for(let n of this.resolveDbPaths()){if(!existsSync(n))continue;let r=H(n);try{e.push(...r.db.select({id:a.id,agent_id:a.agent_id,thread_id:a.thread_id,workspace_id:a.workspace_id,platform:a.platform,status:a.status,error:a.error,completed_at:a.completed_at,duration_ms:a.duration_ms,started_at:a.started_at,metadata:a.metadata}).from(a).where(and(eq(a.platform,"workflow"),inArray(a.status,["running","pending"]),or(like(a.metadata,'%"kind":"workflow_card"%'),like(a.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(desc(a.started_at)).all().map(ao));}catch(s){throw new f("DB_ERROR","Failed to find workflow parent tasks",s)}finally{r.close();}}return e}findWorkflowParentTasksByWorkspace(e){let n=[],r=new Map;for(let s of this.resolveDbPaths()){if(!existsSync(s))continue;let o=H(s);try{let i=o.db.select({id:a.id,agent_id:a.agent_id,thread_id:a.thread_id,workspace_id:a.workspace_id,platform:a.platform,status:a.status,error:a.error,completed_at:a.completed_at,duration_ms:a.duration_ms,started_at:a.started_at,metadata:a.metadata}).from(a).where(and(eq(a.platform,"workflow"),eq(a.workspace_id,e))).orderBy(desc(a.started_at),desc(a.id)).all();for(let u of i){let d=this.parseWorkflowCardMetadata(u.metadata);if(d.kind!=="workflow_card"&&d.kind!=="workflow_ui_instance"||typeof d.workflowRunId!="string")continue;let c=d.kind,l=r.get(c)??new Set;l.has(d.workflowRunId)||(l.add(d.workflowRunId),r.set(c,l),n.push(ao(u)));}}catch(i){throw new f("DB_ERROR","Failed to find workflow parent tasks by workspace",i)}finally{o.close();}}return n}findWorkflowParentTask(e){if(this.dbExists())for(let n of this.resolveDbPaths()){if(!existsSync(n))continue;let r=H(n);try{let s=r.db.select({id:a.id,agent_id:a.agent_id,thread_id:a.thread_id,workspace_id:a.workspace_id,platform:a.platform,status:a.status,error:a.error,completed_at:a.completed_at,duration_ms:a.duration_ms,started_at:a.started_at,metadata:a.metadata}).from(a).where(and(eq(a.platform,"workflow"),eq(a.workspace_id,e.workspaceId))).orderBy(desc(a.started_at),desc(a.id)).all();for(let o of s){let i=this.parseWorkflowCardMetadata(o.metadata);if(i.kind===e.kind&&i.workflowRunId===e.workflowRunId)return ao(o)}}catch(s){throw new f("DB_ERROR","Failed to find workflow parent task",s)}finally{r.close();}}}batchFetchWorkflowCards(e,n){let r=new Map;if(e.length===0)return r;let s=new Set(e),o=new Map,i=n?eq(a.workspace_id,n):void 0,u=(d,c)=>{if(!d)return;let l=o.get(d);if(l&&c.started_at<=l)return;let p=this.parseWorkflowCardMetadata(c.metadata);p.kind!=="workflow_card"&&p.kind!=="workflow_ui_instance"||(o.set(d,c.started_at),r.set(d,{taskId:c.id,workflowRunId:p.workflowRunId,raw:c.result??void 0}));};for(let d of this.resolveDbPaths()){if(!existsSync(d))continue;let c=H(d);try{let l=and(inArray(a.thread_id,e),or(like(a.metadata,'%"kind":"workflow_card"%'),like(a.metadata,'%"kind":"workflow_ui_instance"%'))),p=c.db.select({id:a.id,thread_id:a.thread_id,metadata:a.metadata,result:a.result,started_at:a.started_at}).from(a).where(i?and(l,i):l).all();for(let m of p)u(m.thread_id,m);let g=and(isNull(a.thread_id),or(like(a.metadata,'%"kind":"workflow_card"%'),like(a.metadata,'%"kind":"workflow_ui_instance"%'))),_=c.db.select({id:a.id,command:a.command,metadata:a.metadata,result:a.result,started_at:a.started_at}).from(a).where(i?and(g,i):g).all();for(let m of _){let y=this.extractThreadIdFromCommand(m.command);!y||!s.has(y)||u(y,m);}}catch(l){throw new f("DB_ERROR","Failed to batch fetch workflow cards",l)}finally{c.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(a.workspace_id,e.workspaceId));let s=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;s&&r.push(inArray(a.agent_id,s));let o=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;o&&r.push(inArray(a.status,Ws(o)));let i=e.q??e.search;i&&r.push(like(a.prompt,`%${i}%`)),e.from&&r.push(gte(a.started_at,e.from)),e.to&&r.push(lt$1(a.started_at,e.to));let u=r.length>0?and(...r):void 0,d=n.db.select({count:sql`count(*)`}).from(a).where(u).get(),c=(e.sortDir??"DESC")==="ASC"?asc(a.started_at):desc(a.started_at);return {rows:n.db.select(ne).from(a).where(u).orderBy(c).limit(e.limit).offset(e.offset).all().map(qe),total:d?.count??0}}catch(r){throw new f("DB_ERROR","Failed to find all tasks",r)}finally{n.close();}}getAgentUsage(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=co(sql.raw("t.model"),sql.raw("t.metadata")),i=qn(sql.raw("t.status")),u=Cr(sql.raw("t.metadata")),d=sql`
161
161
  COALESCE(t.input_tokens, 0)
162
162
  + CASE
163
- WHEN t.started_at >= ${Zt}
163
+ WHEN t.started_at >= ${tn}
164
164
  AND (
165
165
  t.crewx_version IS NULL
166
166
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
167
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${en}) AS INTEGER) < ${tn})
167
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${nn}) AS INTEGER) < ${rn})
168
168
  )
169
169
  THEN COALESCE(t.cached_input_tokens, 0)
170
170
  ELSE 0
@@ -183,7 +183,7 @@ ${r.join(`
183
183
  FROM tasks t
184
184
  ${c}
185
185
  GROUP BY t.agent_id, t.workspace_id, ${o}
186
- `),p=new Map;for(let m of l){let y=typeof m.provider=="string"&&m.provider.trim()!==""?m.provider:"unknown",k={provider:y,inputTokens:m.input_tokens,outputTokens:m.output_tokens,cachedInputTokens:m.cached_input_tokens,totalTokens:m.input_tokens+m.output_tokens,costUsd:m.cost_usd,totalTasks:m.total_tasks,unavailableTaskCount:m.unavailable_task_count},N=m.workspace_id??null,I=JSON.stringify([m.agent_id,N]),D=p.get(I);if(!D){p.set(I,{agentId:m.agent_id,workspaceId:N,totalTasks:m.total_tasks,unavailableTaskCount:m.unavailable_task_count,inputTokens:m.input_tokens,outputTokens:m.output_tokens,cachedInputTokens:m.cached_input_tokens,costUsd:m.cost_usd,totalTokens:m.input_tokens+m.output_tokens,providers:[k]});continue}D.totalTasks+=m.total_tasks,D.unavailableTaskCount=(D.unavailableTaskCount??0)+m.unavailable_task_count,D.inputTokens+=m.input_tokens,D.outputTokens+=m.output_tokens,D.cachedInputTokens+=m.cached_input_tokens,D.costUsd+=m.cost_usd,D.totalTokens+=m.input_tokens+m.output_tokens;let E=D.providers.find(A=>A.provider===y);E?(E.inputTokens+=k.inputTokens,E.outputTokens+=k.outputTokens,E.cachedInputTokens+=k.cachedInputTokens,E.totalTokens+=k.totalTokens,E.costUsd+=k.costUsd,E.totalTasks+=k.totalTasks,E.unavailableTaskCount+=k.unavailableTaskCount):D.providers.push(k);}let g=[...p.values()];for(let m of g)m.providers.sort((y,k)=>y.provider===k.provider?0:y.provider==="unknown"?1:k.provider==="unknown"?-1:y.totalTokens!==k.totalTokens?k.totalTokens-y.totalTokens:y.provider<k.provider?-1:1);let _=(m,y)=>m===y?0:m<y?-1:1;return g.sort((m,y)=>{if(m.totalTokens!==y.totalTokens)return y.totalTokens-m.totalTokens;let k=_(m.agentId,y.agentId);return k!==0?k:m.workspaceId===y.workspaceId?0:m.workspaceId===null?1:y.workspaceId===null?-1:_(m.workspaceId,y.workspaceId)}),g}catch(o){throw new f("DB_ERROR","Failed to get agent usage",o)}finally{s.close();}}getAgentUsageTrendRaw(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=$n(sql.raw("t.status")),i=Or(sql.raw("t.metadata"));return s.db.all(r?sql`
186
+ `),p=new Map;for(let m of l){let y=typeof m.provider=="string"&&m.provider.trim()!==""?m.provider:"unknown",k={provider:y,inputTokens:m.input_tokens,outputTokens:m.output_tokens,cachedInputTokens:m.cached_input_tokens,totalTokens:m.input_tokens+m.output_tokens,costUsd:m.cost_usd,totalTasks:m.total_tasks,unavailableTaskCount:m.unavailable_task_count},v=m.workspace_id??null,I=JSON.stringify([m.agent_id,v]),D=p.get(I);if(!D){p.set(I,{agentId:m.agent_id,workspaceId:v,totalTasks:m.total_tasks,unavailableTaskCount:m.unavailable_task_count,inputTokens:m.input_tokens,outputTokens:m.output_tokens,cachedInputTokens:m.cached_input_tokens,costUsd:m.cost_usd,totalTokens:m.input_tokens+m.output_tokens,providers:[k]});continue}D.totalTasks+=m.total_tasks,D.unavailableTaskCount=(D.unavailableTaskCount??0)+m.unavailable_task_count,D.inputTokens+=m.input_tokens,D.outputTokens+=m.output_tokens,D.cachedInputTokens+=m.cached_input_tokens,D.costUsd+=m.cost_usd,D.totalTokens+=m.input_tokens+m.output_tokens;let E=D.providers.find(A=>A.provider===y);E?(E.inputTokens+=k.inputTokens,E.outputTokens+=k.outputTokens,E.cachedInputTokens+=k.cachedInputTokens,E.totalTokens+=k.totalTokens,E.costUsd+=k.costUsd,E.totalTasks+=k.totalTasks,E.unavailableTaskCount+=k.unavailableTaskCount):D.providers.push(k);}let g=[...p.values()];for(let m of g)m.providers.sort((y,k)=>y.provider===k.provider?0:y.provider==="unknown"?1:k.provider==="unknown"?-1:y.totalTokens!==k.totalTokens?k.totalTokens-y.totalTokens:y.provider<k.provider?-1:1);let _=(m,y)=>m===y?0:m<y?-1:1;return g.sort((m,y)=>{if(m.totalTokens!==y.totalTokens)return y.totalTokens-m.totalTokens;let k=_(m.agentId,y.agentId);return k!==0?k:m.workspaceId===y.workspaceId?0:m.workspaceId===null?1:y.workspaceId===null?-1:_(m.workspaceId,y.workspaceId)}),g}catch(o){throw new f("DB_ERROR","Failed to get agent usage",o)}finally{s.close();}}getAgentUsageTrendRaw(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=qn(sql.raw("t.status")),i=Cr(sql.raw("t.metadata"));return s.db.all(r?sql`
187
187
  SELECT
188
188
  date(t.started_at) AS date,
189
189
  t.agent_id,
@@ -191,11 +191,11 @@ ${r.join(`
191
191
  COALESCE(SUM(
192
192
  COALESCE(t.input_tokens, 0)
193
193
  + CASE
194
- WHEN t.started_at >= ${Zt}
194
+ WHEN t.started_at >= ${tn}
195
195
  AND (
196
196
  t.crewx_version IS NULL
197
197
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
198
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${en}) AS INTEGER) < ${tn})
198
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${nn}) AS INTEGER) < ${rn})
199
199
  )
200
200
  THEN COALESCE(t.cached_input_tokens, 0)
201
201
  ELSE 0
@@ -220,11 +220,11 @@ ${r.join(`
220
220
  COALESCE(SUM(
221
221
  COALESCE(t.input_tokens, 0)
222
222
  + CASE
223
- WHEN t.started_at >= ${Zt}
223
+ WHEN t.started_at >= ${tn}
224
224
  AND (
225
225
  t.crewx_version IS NULL
226
226
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
227
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${en}) AS INTEGER) < ${tn})
227
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${nn}) AS INTEGER) < ${rn})
228
228
  )
229
229
  THEN COALESCE(t.cached_input_tokens, 0)
230
230
  ELSE 0
@@ -240,14 +240,14 @@ ${r.join(`
240
240
  AND t.agent_id != 'workflow'
241
241
  GROUP BY date(t.started_at), t.agent_id
242
242
  ORDER BY date(t.started_at) ASC
243
- `).map(d=>({date:d.date,agentId:d.agent_id,unavailableTaskCount:d.unavailable_task_count,inputTokens:d.input_tokens,outputTokens:d.output_tokens,cachedInputTokens:d.cached_input_tokens,costUsd:d.cost_usd,totalTokens:d.input_tokens+d.output_tokens}))}catch(o){throw new f("DB_ERROR","Failed to get agent usage trend",o)}finally{s.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let s=r.db.select(te).from(a).where(and(eq(a.id,e),eq(a.workspace_id,n))).limit(1).get();return s?Ue(s):void 0}catch(s){throw new f("DB_ERROR","Failed to find task for stop",s)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.db.select({id:a.id,thread_id:a.thread_id,status:a.status,result:a.result,error:a.error,started_at:a.started_at,completed_at:a.completed_at,metadata:a.metadata}).from(a).where(and(eq(a.agent_id,e.agentId),eq(a.workspace_id,e.workspaceId),sql`${a.metadata} IS NOT NULL AND json_valid(${a.metadata}) AND json_extract(${a.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(desc(a.started_at)).limit(1).get()??null}catch(r){throw new f("DB_ERROR","Failed to find latest task by metadata",r)}finally{n.close();}}markTaskFailed(e,n,r,s="failed",o){if(!this.dbExists())return;let i=this.openHandle(true);try{let u=new Date().toISOString(),d=r?and(eq(a.id,e),eq(a.status,"running"),eq(a.workspace_id,r)):and(eq(a.id,e),eq(a.status,"running")),c=i.db.select({metadata:a.metadata}).from(a).where(d).limit(1).get();if(!c)return;let l={status:s,error:n,completed_at:u};if(o){let p=ne(c.metadata);p.terminalReason=o,l.metadata=JSON.stringify(p);}i.db.update(a).set(l).where(d).run();}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to mark task failed",u)}finally{i.close();}}findTasksByPromptHint(e,n){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=U(i);try{let d=n?and(like(a.prompt,`%${e}%`),eq(a.workspace_id,n)):like(a.prompt,`%${e}%`),c=u.db.select(te).from(a).where(d).orderBy(asc(a.started_at)).all();for(let l of c)s.has(l.id)||(s.add(l.id),o.push(Ue(l)));}catch(d){throw new f("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{u.close();}}return o}getProviderUsage(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=so(),i=$n(a.status),u=Or(a.metadata),d=sql`
243
+ `).map(d=>({date:d.date,agentId:d.agent_id,unavailableTaskCount:d.unavailable_task_count,inputTokens:d.input_tokens,outputTokens:d.output_tokens,cachedInputTokens:d.cached_input_tokens,costUsd:d.cost_usd,totalTokens:d.input_tokens+d.output_tokens}))}catch(o){throw new f("DB_ERROR","Failed to get agent usage trend",o)}finally{s.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let s=r.db.select(ne).from(a).where(and(eq(a.id,e),eq(a.workspace_id,n))).limit(1).get();return s?qe(s):void 0}catch(s){throw new f("DB_ERROR","Failed to find task for stop",s)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.db.select({id:a.id,thread_id:a.thread_id,status:a.status,result:a.result,error:a.error,started_at:a.started_at,completed_at:a.completed_at,metadata:a.metadata}).from(a).where(and(eq(a.agent_id,e.agentId),eq(a.workspace_id,e.workspaceId),sql`${a.metadata} IS NOT NULL AND json_valid(${a.metadata}) AND json_extract(${a.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(desc(a.started_at)).limit(1).get()??null}catch(r){throw new f("DB_ERROR","Failed to find latest task by metadata",r)}finally{n.close();}}markTaskFailed(e,n,r,s="failed",o){if(!this.dbExists())return;let i=this.openHandle(true);try{let u=new Date().toISOString(),d=r?and(eq(a.id,e),eq(a.status,"running"),eq(a.workspace_id,r)):and(eq(a.id,e),eq(a.status,"running")),c=i.db.select({metadata:a.metadata}).from(a).where(d).limit(1).get();if(!c)return;let l={status:s,error:n,completed_at:u};if(o){let p=re(c.metadata);p.terminalReason=o,l.metadata=JSON.stringify(p);}i.db.update(a).set(l).where(d).run();}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to mark task failed",u)}finally{i.close();}}findTasksByPromptHint(e,n){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=n?and(like(a.prompt,`%${e}%`),eq(a.workspace_id,n)):like(a.prompt,`%${e}%`),c=u.db.select(ne).from(a).where(d).orderBy(asc(a.started_at)).all();for(let l of c)s.has(l.id)||(s.add(l.id),o.push(qe(l)));}catch(d){throw new f("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{u.close();}}return o}getProviderUsage(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=co(),i=qn(a.status),u=Cr(a.metadata),d=sql`
244
244
  COALESCE(${a.input_tokens}, 0)
245
245
  + CASE
246
- WHEN ${a.started_at} >= ${Zt}
246
+ WHEN ${a.started_at} >= ${tn}
247
247
  AND (
248
248
  ${a.crewx_version} IS NULL
249
249
  OR (${a.crewx_version} LIKE '0.8.%' AND ${a.crewx_version} NOT LIKE '0.8.9%')
250
- OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${en}) AS INTEGER) < ${tn})
250
+ OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${nn}) AS INTEGER) < ${rn})
251
251
  )
252
252
  THEN COALESCE(${a.cached_input_tokens}, 0)
253
253
  ELSE 0
@@ -267,14 +267,14 @@ ${r.join(`
267
267
  ${c}
268
268
  GROUP BY ${o}
269
269
  ORDER BY (COALESCE(SUM(${d}), 0) + COALESCE(SUM(${a.output_tokens}), 0)) DESC
270
- `).map(p=>({provider:p.provider,totalTasks:p.total_tasks,unavailableTaskCount:p.unavailable_task_count,inputTokens:p.input_tokens,outputTokens:p.output_tokens,cachedInputTokens:p.cached_input_tokens,costUsd:p.cost_usd,totalTokens:p.input_tokens+p.output_tokens,activeDurationMs:p.active_duration_ms??0,lastActiveAt:p.last_active_at??null}))}catch(o){throw new f("DB_ERROR","Failed to get provider usage",o)}finally{s.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=so(),i=$n(a.status),u=Or(a.metadata),d=sql`
270
+ `).map(p=>({provider:p.provider,totalTasks:p.total_tasks,unavailableTaskCount:p.unavailable_task_count,inputTokens:p.input_tokens,outputTokens:p.output_tokens,cachedInputTokens:p.cached_input_tokens,costUsd:p.cost_usd,totalTokens:p.input_tokens+p.output_tokens,activeDurationMs:p.active_duration_ms??0,lastActiveAt:p.last_active_at??null}))}catch(o){throw new f("DB_ERROR","Failed to get provider usage",o)}finally{s.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=co(),i=qn(a.status),u=Cr(a.metadata),d=sql`
271
271
  COALESCE(${a.input_tokens}, 0)
272
272
  + CASE
273
- WHEN ${a.started_at} >= ${Zt}
273
+ WHEN ${a.started_at} >= ${tn}
274
274
  AND (
275
275
  ${a.crewx_version} IS NULL
276
276
  OR (${a.crewx_version} LIKE '0.8.%' AND ${a.crewx_version} NOT LIKE '0.8.9%')
277
- OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${en}) AS INTEGER) < ${tn})
277
+ OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${nn}) AS INTEGER) < ${rn})
278
278
  )
279
279
  THEN COALESCE(${a.cached_input_tokens}, 0)
280
280
  ELSE 0
@@ -294,7 +294,7 @@ ${r.join(`
294
294
  FROM ${a}
295
295
  ${c}
296
296
  GROUP BY ${a.model}, ${o}
297
- `),p=new Map;for(let g of l){let _=hs(g.model??""),m=JSON.stringify([g.provider,_]),y=p.get(m);y?(y.totalTasks+=g.total_tasks,y.unavailableTaskCount=(y.unavailableTaskCount??0)+g.unavailable_task_count,y.inputTokens+=g.input_tokens,y.outputTokens+=g.output_tokens,y.cachedInputTokens+=g.cached_input_tokens,y.costUsd+=g.cost_usd,y.totalTokens+=g.input_tokens+g.output_tokens,y.activeDurationMs+=g.active_duration_ms??0,g.last_active_at&&(!y.lastActiveAt||g.last_active_at>y.lastActiveAt)&&(y.lastActiveAt=g.last_active_at)):p.set(m,{model:_,provider:g.provider,totalTasks:g.total_tasks,unavailableTaskCount:g.unavailable_task_count,inputTokens:g.input_tokens,outputTokens:g.output_tokens,cachedInputTokens:g.cached_input_tokens,costUsd:g.cost_usd,totalTokens:g.input_tokens+g.output_tokens,activeDurationMs:g.active_duration_ms??0,lastActiveAt:g.last_active_at??null});}return Array.from(p.values()).sort((g,_)=>_.costUsd-g.costUsd)}catch(o){throw new f("DB_ERROR","Failed to get model usage",o)}finally{s.close();}}getTasksForReport(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=r?sql`WHERE ${a.started_at} >= ${e} AND ${a.started_at} < ${n} AND ${a.workspace_id} = ${r}`:sql`WHERE ${a.started_at} >= ${e} AND ${a.started_at} < ${n}`;return s.db.all(sql`
297
+ `),p=new Map;for(let g of l){let _=ws(g.model??""),m=JSON.stringify([g.provider,_]),y=p.get(m);y?(y.totalTasks+=g.total_tasks,y.unavailableTaskCount=(y.unavailableTaskCount??0)+g.unavailable_task_count,y.inputTokens+=g.input_tokens,y.outputTokens+=g.output_tokens,y.cachedInputTokens+=g.cached_input_tokens,y.costUsd+=g.cost_usd,y.totalTokens+=g.input_tokens+g.output_tokens,y.activeDurationMs+=g.active_duration_ms??0,g.last_active_at&&(!y.lastActiveAt||g.last_active_at>y.lastActiveAt)&&(y.lastActiveAt=g.last_active_at)):p.set(m,{model:_,provider:g.provider,totalTasks:g.total_tasks,unavailableTaskCount:g.unavailable_task_count,inputTokens:g.input_tokens,outputTokens:g.output_tokens,cachedInputTokens:g.cached_input_tokens,costUsd:g.cost_usd,totalTokens:g.input_tokens+g.output_tokens,activeDurationMs:g.active_duration_ms??0,lastActiveAt:g.last_active_at??null});}return Array.from(p.values()).sort((g,_)=>_.costUsd-g.costUsd)}catch(o){throw new f("DB_ERROR","Failed to get model usage",o)}finally{s.close();}}getTasksForReport(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=r?sql`WHERE ${a.started_at} >= ${e} AND ${a.started_at} < ${n} AND ${a.workspace_id} = ${r}`:sql`WHERE ${a.started_at} >= ${e} AND ${a.started_at} < ${n}`;return s.db.all(sql`
298
298
  SELECT
299
299
  ${a.thread_id} AS thread_id,
300
300
  ${a.agent_id} AS agent_id,
@@ -306,19 +306,19 @@ ${r.join(`
306
306
  FROM ${a}
307
307
  ${o}
308
308
  ORDER BY ${a.started_at} ASC
309
- `).map(u=>({threadId:u.thread_id,agentId:u.agent_id,startedAt:u.started_at,status:u.status,error:u.error,exitCode:u.exit_code,terminalReason:Ze({status:u.status,error:u.error,metadata:u.metadata})??null}))}catch(o){throw new f("DB_ERROR","Failed to get tasks for report",o)}finally{s.close();}}getDelegationMatrix(e,n,r){if(!this.dbExists())return {edges:[],truncated:false};let s=this.openHandle(false);try{let o=sql`
309
+ `).map(u=>({threadId:u.thread_id,agentId:u.agent_id,startedAt:u.started_at,status:u.status,error:u.error,exitCode:u.exit_code,terminalReason:Ue({status:u.status,error:u.error,metadata:u.metadata})??null}))}catch(o){throw new f("DB_ERROR","Failed to get tasks for report",o)}finally{s.close();}}getDelegationMatrix(e,n,r){if(!this.dbExists())return {edges:[],truncated:false};let s=this.openHandle(false);try{let o=sql`
310
310
  COALESCE(${a.input_tokens}, 0)
311
311
  + CASE
312
- WHEN ${a.started_at} >= ${Zt}
312
+ WHEN ${a.started_at} >= ${tn}
313
313
  AND (
314
314
  ${a.crewx_version} IS NULL
315
315
  OR (${a.crewx_version} LIKE '0.8.%' AND ${a.crewx_version} NOT LIKE '0.8.9%')
316
- OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${en}) AS INTEGER) < ${tn})
316
+ OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${nn}) AS INTEGER) < ${rn})
317
317
  )
318
318
  THEN COALESCE(${a.cached_input_tokens}, 0)
319
319
  ELSE 0
320
320
  END
321
- `,i=$n(a.status),u=r?sql`WHERE ${i} AND ${a.started_at} >= ${e} AND ${a.started_at} < ${n} AND ${a.workspace_id} = ${r}`:sql`WHERE ${i} AND ${a.started_at} >= ${e} AND ${a.started_at} < ${n}`,d=s.db.all(sql`
321
+ `,i=qn(a.status),u=r?sql`WHERE ${i} AND ${a.started_at} >= ${e} AND ${a.started_at} < ${n} AND ${a.workspace_id} = ${r}`:sql`WHERE ${i} AND ${a.started_at} >= ${e} AND ${a.started_at} < ${n}`,d=s.db.all(sql`
322
322
  SELECT
323
323
  ${a.caller_agent_id} AS caller_agent_id,
324
324
  ${a.agent_id} AS agent_id,
@@ -329,24 +329,24 @@ ${r.join(`
329
329
  ${u}
330
330
  GROUP BY ${a.caller_agent_id}, ${a.agent_id}
331
331
  ORDER BY task_count DESC, ${a.caller_agent_id} ASC, ${a.agent_id} ASC
332
- LIMIT ${ro+1}
333
- `),c=d.length>ro;return {edges:d.slice(0,ro).map(p=>({callerAgentId:p.caller_agent_id??null,agentId:p.agent_id,taskCount:p.task_count,totalTokens:p.input_tokens+p.output_tokens,outputTokens:p.output_tokens})),truncated:c}}catch(o){throw new f("DB_ERROR","Failed to get delegation matrix",o)}finally{s.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(a.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(inArray(a.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(inArray(a.status,Hs(e.statuses))),e.from&&r.push(gte(a.started_at,e.from)),e.to&&r.push(lt$1(a.started_at,e.to));let s=r.length>0?and(...r):void 0,o=(e.order??"DESC")==="ASC"?asc(a.started_at):desc(a.started_at),i={id:a.id,agent_id:a.agent_id,status:a.status,prompt:a.prompt,started_at:a.started_at,completed_at:a.completed_at,thread_id:a.thread_id,error:a.error,metadata:a.metadata};return (e.limit?n.db.select(i).from(a).where(s).orderBy(o).limit(e.limit).all():n.db.select(i).from(a).where(s).orderBy(o).all()).map(({error:d,metadata:c,...l})=>({...l,status:$e({status:l.status,error:d,metadata:c}),terminalReason:Ze({status:l.status,error:d,metadata:c})??null}))}catch(r){throw new f("DB_ERROR","Failed to find task evidence",r)}finally{n.close();}}findThreadChains(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=e.maxThreads??8,s=e.maxTurnsPerThread??4,o=[isNotNull(a.thread_id),isNull(a.parent_task_id),isNull(a.caller_agent_id),or(isNull(a.platform),ne$1(a.platform,"workflow")),or(isNull(a.metadata),and(notLike(a.metadata,'%"kind":"workflow_card"%'),notLike(a.metadata,'%"kind":"workflow_ui_instance"%'))),or(isNull(a.metadata),notLike(a.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&o.push(eq(a.workspace_id,e.workspaceId)),e.from&&o.push(gte(a.started_at,e.from)),e.to&&o.push(lt$1(a.started_at,e.to));let i=n.db.select({id:a.id,agent_id:a.agent_id,status:a.status,prompt:a.prompt,started_at:a.started_at,completed_at:a.completed_at,thread_id:a.thread_id}).from(a).where(and(...o)).orderBy(asc(a.started_at),asc(a.id)).all(),u=new Map;for(let c of i){if(!c.thread_id)continue;let l={id:c.id,agentId:c.agent_id,status:c.status,prompt:c.prompt,startedAt:c.started_at,completedAt:c.completed_at},p=u.get(c.thread_id);p?p.push(l):u.set(c.thread_id,[l]);}let d=[];for(let[c,l]of u){let p=l.filter(g=>g.agentId===e.targetAgentId).length;p<2||d.push({threadId:c,targetAgentTurnCount:p,turns:l});}return d.sort((c,l)=>{let p=c.turns[c.turns.length-1].startedAt,g=l.turns[l.turns.length-1].startedAt;return p<g?1:p>g?-1:0}),d.slice(0,r).map(c=>({threadId:c.threadId,targetAgentTurnCount:c.targetAgentTurnCount,turns:c.turns.slice(-s)}))}catch(r){throw new f("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}},Rd=["up","down"],po=1e3,Sd=200,rf=64,Un=class extends f{stableCode;taskId;constructor(e,n){super(e==="TASK_NOT_FOUND"?"NOT_FOUND":"CONFLICT",e==="TASK_NOT_FOUND"?`Task not found: ${n}`:`Task is not finished, so it cannot be rated: ${n}`),this.name="TaskRatingError",this.stableCode=e,this.taskId=n;}},sf=new Set(On);});h();h();h();var ot=class{detach(e){}};h();function Ao(t){let e=n=>String(n).padStart(2,"0");return `${t.getFullYear()}${e(t.getMonth()+1)}${e(t.getDate())}T${e(t.getHours())}${e(t.getMinutes())}${e(t.getSeconds())}`}function Vr(t){let e=t.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}var Jr=class extends ot{name="file-logger";unsubs=[];logFiles=new Map;logsDir;version;constructor(e){super(),this.logsDir=join(e?.workspaceRoot??process.cwd(),".crewx","logs"),this.version=e?.version??"unknown";}attach(e){this.unsubs.push(e.on("task:start",n=>{try{existsSync(this.logsDir)||mkdirSync(this.logsDir,{recursive:!0});let r=Ao(n.timestamp),s=join(this.logsDir,`${r}_${n.traceId}.log`);this.logFiles.set(n.traceId,s);let o=`=== TASK LOG: ${n.traceId} ===
332
+ LIMIT ${uo+1}
333
+ `),c=d.length>uo;return {edges:d.slice(0,uo).map(p=>({callerAgentId:p.caller_agent_id??null,agentId:p.agent_id,taskCount:p.task_count,totalTokens:p.input_tokens+p.output_tokens,outputTokens:p.output_tokens})),truncated:c}}catch(o){throw new f("DB_ERROR","Failed to get delegation matrix",o)}finally{s.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(a.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(inArray(a.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(inArray(a.status,Ws(e.statuses))),e.from&&r.push(gte(a.started_at,e.from)),e.to&&r.push(lt$1(a.started_at,e.to));let s=r.length>0?and(...r):void 0,o=(e.order??"DESC")==="ASC"?asc(a.started_at):desc(a.started_at),i={id:a.id,agent_id:a.agent_id,status:a.status,prompt:a.prompt,started_at:a.started_at,completed_at:a.completed_at,thread_id:a.thread_id,error:a.error,metadata:a.metadata};return (e.limit?n.db.select(i).from(a).where(s).orderBy(o).limit(e.limit).all():n.db.select(i).from(a).where(s).orderBy(o).all()).map(({error:d,metadata:c,...l})=>({...l,status:xe({status:l.status,error:d,metadata:c}),terminalReason:Ue({status:l.status,error:d,metadata:c})??null}))}catch(r){throw new f("DB_ERROR","Failed to find task evidence",r)}finally{n.close();}}findThreadChains(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=e.maxThreads??8,s=e.maxTurnsPerThread??4,o=[isNotNull(a.thread_id),isNull(a.parent_task_id),isNull(a.caller_agent_id),or(isNull(a.platform),ne$1(a.platform,"workflow")),or(isNull(a.metadata),and(notLike(a.metadata,'%"kind":"workflow_card"%'),notLike(a.metadata,'%"kind":"workflow_ui_instance"%'))),or(isNull(a.metadata),notLike(a.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&o.push(eq(a.workspace_id,e.workspaceId)),e.from&&o.push(gte(a.started_at,e.from)),e.to&&o.push(lt$1(a.started_at,e.to));let i=n.db.select({id:a.id,agent_id:a.agent_id,status:a.status,prompt:a.prompt,started_at:a.started_at,completed_at:a.completed_at,thread_id:a.thread_id}).from(a).where(and(...o)).orderBy(asc(a.started_at),asc(a.id)).all(),u=new Map;for(let c of i){if(!c.thread_id)continue;let l={id:c.id,agentId:c.agent_id,status:c.status,prompt:c.prompt,startedAt:c.started_at,completedAt:c.completed_at},p=u.get(c.thread_id);p?p.push(l):u.set(c.thread_id,[l]);}let d=[];for(let[c,l]of u){let p=l.filter(g=>g.agentId===e.targetAgentId).length;p<2||d.push({threadId:c,targetAgentTurnCount:p,turns:l});}return d.sort((c,l)=>{let p=c.turns[c.turns.length-1].startedAt,g=l.turns[l.turns.length-1].startedAt;return p<g?1:p>g?-1:0}),d.slice(0,r).map(c=>({threadId:c.threadId,targetAgentTurnCount:c.targetAgentTurnCount,turns:c.turns.slice(-s)}))}catch(r){throw new f("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}},Pd=["up","down"],mo=1e3,Ld=200,ff=64,Wn=class extends f{stableCode;taskId;constructor(e,n){super(e==="TASK_NOT_FOUND"?"NOT_FOUND":"CONFLICT",e==="TASK_NOT_FOUND"?`Task not found: ${n}`:`Task is not finished, so it cannot be rated: ${n}`),this.name="TaskRatingError",this.stableCode=e,this.taskId=n;}},gf=new Set(xn);});h();h();h();var it=class{detach(e){}};h();function Do(t){let e=n=>String(n).padStart(2,"0");return `${t.getFullYear()}${e(t.getMonth()+1)}${e(t.getDate())}T${e(t.getHours())}${e(t.getMinutes())}${e(t.getSeconds())}`}function Qr(t){let e=t.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}var Zr=class extends it{name="file-logger";unsubs=[];logFiles=new Map;logsDir;version;constructor(e){super(),this.logsDir=join(e?.workspaceRoot??process.cwd(),".crewx","logs"),this.version=e?.version??"unknown";}attach(e){this.unsubs.push(e.on("task:start",n=>{try{existsSync(this.logsDir)||mkdirSync(this.logsDir,{recursive:!0});let r=Do(n.timestamp),s=join(this.logsDir,`${r}_${n.traceId}.log`);this.logFiles.set(n.traceId,s);let o=`=== TASK LOG: ${n.traceId} ===
334
334
  CrewX Version: ${this.version}
335
335
  Mode: ${n.mode}
336
336
  Agent: ${n.agentRef}
337
- Started: ${Vr(n.timestamp)}
337
+ Started: ${Qr(n.timestamp)}
338
338
  Message: ${n.message}
339
339
 
340
340
  `;writeFileSync(s,o,{encoding:"utf8",mode:384});}catch{}}),e.on("task:output",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let s=new Date().toISOString();appendFileSync(r,`[${s}] STDOUT: ${n.output}
341
- `,"utf8");}catch{}}),e.on("task:end",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let s=Vr(new Date),o=n.error?`failed: ${n.error.message}`:"completed successfully",i=`[${s}] INFO: Task ${o} in ${n.durationMs}ms
341
+ `,"utf8");}catch{}}),e.on("task:end",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let s=Qr(new Date),o=n.error?`failed: ${n.error.message}`:"completed successfully",i=`[${s}] INFO: Task ${o} in ${n.durationMs}ms
342
342
  [${s}] INFO: Process closed with exit code: ${n.error?1:0}
343
- `;appendFileSync(r,i,"utf8"),this.logFiles.delete(n.traceId);}catch{}}));}detach(e){this.unsubs.forEach(n=>n()),this.unsubs=[],this.logFiles.clear();}};h();h();var vo=Symbol.for("crewx.interceptor.run-stops");function gu(){let t=globalThis,e=t[vo];if(e)return e;let n=new Map;return t[vo]=n,n}function No(t){let e=gu().get(t);return e?(e.abort(),true):false}h();var Pt=new Map;function Jn(t){let e=ue.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function Do(t){let e=Jn(t);return createHash("sha256").update(e).digest("hex")}function Po(t){let e=Jn(t),n=Pt.get(e);if(n!==void 0)return n;let r=e;try{let s=ue.join(e,".git");if(!lstatSync(s).isFile())return Pt.set(e,r),r;let o=/^gitdir:\s*(.+?)\s*$/i.exec(readFileSync(s,"utf8").trim());if(!o)return Pt.set(e,r),r;let i=o[1],u=ue.isAbsolute(i)?i:ue.resolve(ue.dirname(s),i),d=readFileSync(ue.join(u,"commondir"),"utf8").trim();if(!d)return Pt.set(e,r),r;let c=ue.isAbsolute(d)?d:ue.resolve(u,d);if(ue.basename(c)!==".git"||!statSync(c).isDirectory())return Pt.set(e,r),r;let l=Jn(realpathSync.native(e)),p=Jn(realpathSync.native(ue.dirname(c)));(l===p||(p.endsWith("/")?l.startsWith(p):l.startsWith(`${p}/`)))&&(r=p);}catch{}return Pt.set(e,r),r}it();eo();qt();Ms();Cn();Zs();cr();var cf=200,lf=200;function pf(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 ff(t){let e=t instanceof f?t.code:void 0,n=t instanceof f?t.cause:t,r=pf(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function bd(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function gf(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function vd(t){if(!t)return {};try{let e=JSON.parse(t);return gf(e)?e:{}}catch{return {}}}function sn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var hf=new Set(["workflow","mcp"]),go=class extends ot{name="sqlite-tracing";unsubs=[];dbPath;version;inheritWorktreeOwner;runnerIdentity;taskRepo;heartbeatTaskIds=new Set;ownedTaskRuns=new Map;ignoredDetachedTaskIds=new Set;queues=new Map;metrics={flushCount:0,flushedEntries:0,maxQueueEntries:0,maxQueueBytes:0,appendFailureCount:0,appendFailureEntries:0,appendFailureBytes:0,appendFailureByCode:{},appendFailureByCause:{}};constructor(e){super();let n=process.env.CREWX_DB;this.dbPath=e?.dbRoot!==void 0?join(e.dbRoot,".crewx","crewx.db"):n??join(homedir(),".crewx","crewx.db"),this.version=e?.version??"unknown",this.inheritWorktreeOwner=e?.inheritWorktreeOwner===true;let r=e?.runnerIdentity;this.runnerIdentity={detachedRunner:r?.detachedRunner===true,assignedTaskId:r?.detachedRunner===true&&r.assignedTaskId?.trim()||void 0};}attach(e){let n=new Hn({dbPath:this.dbPath});n.resolveDbPath(),this.taskRepo=n;let r=process.cwd(),s=existsSync(join(r,"crewx.yaml"))||existsSync(join(r,"crewx.yml")),o=this.inheritWorktreeOwner?Po(r):r,i=s?Do(o):null,u=process.argv.join(" ");this.unsubs.push(e.on("task:start",d=>{try{let c=d.callerAgentId??null,l=d.parentTaskId??null,p=d.rootTraceId??d.traceId,{detachedRunner:g,assignedTaskId:_}=this.runnerIdentity,m=_??d.traceId,y=sn(d.metadata?.runEpoch),k=g?"runner":"caller",N=d.workspaceId??i,I=g?n.getTask(m):void 0,D=d.pid??null,E={...d.metadata??{provider:d.provider??"cli/claude"},ownership:k,...g&&D!==null?{providerPid:D}:{}},A=JSON.stringify(E);if(g&&I?.status==="running"&&I.pid!==null&&y===0){this.ignoredDetachedTaskIds.add(m);return}n.startTask({id:m,agentId:d.agentRef.replace(/^@/,""),prompt:d.message,mode:d.mode,status:"running",actorKind:d.actorKind??null,actorId:d.actorId??null,pid:g?process.pid:D,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,securityKey:d.renderedPrompt==null?null:d.securityKey??null,command:u,codingAgentCommand:d.codingAgentCommand??null,workspaceId:N,projectId:d.projectId??null,callerAgentId:c,parentTaskId:l,traceId:p,metadata:A,threadId:d.threadId??null,cwd:d.cwd??null}),n.updateTaskOwnership({id:m,runEpoch:y,ownership:k,...g?{providerPid:D}:{},runtime:{model:d.model??null,renderedPrompt:d.renderedPrompt??null,codingAgentCommand:d.codingAgentCommand??null,metadata:E}})?this.recordOwnedTaskRun({taskId:m,runEpoch:y,workspaceId:N,ownership:k}):console.warn("[crewx] task execution metadata not recorded",{taskId:m,runEpoch:y,ownership:k}),hf.has(d.platform??"cli")||id(n,{taskId:m,runEpoch:y,onStopRequested:Kr=>this.handleStopRequested(n,Kr)})&&this.heartbeatTaskIds.add(m);}catch(c){console.warn("[crewx] task:start tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:output",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;this.enqueueLog(c,{timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output});}catch(c){let l={timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output};this.recordAppendFailure(c,[l],bd(l));}}),e.on("task:run-update",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;let l=sn(d.runEpoch),p=this.runnerIdentity.detachedRunner;n.updateTaskOwnership({id:c,runEpoch:l,ownership:p?"runner":"caller",...p&&d.pid!==void 0?{providerPid:d.pid}:{},runtime:{...d.model!==void 0?{model:d.model}:{},...d.renderedPrompt!==void 0?{renderedPrompt:d.renderedPrompt}:{},...d.securityKey!==void 0?{securityKey:d.securityKey}:{},...d.codingAgentCommand!==void 0?{codingAgentCommand:d.codingAgentCommand}:{},...d.metadata?{metadata:d.metadata}:{}}}),!p&&d.pid!==void 0&&n.recordTaskPid({id:c,runEpoch:l,pid:d.pid});}catch(c){console.warn("[crewx] task:run-update tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:provider-input",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;n.recordProviderInput({id:c,runEpoch:d.runEpoch,input:d.input,keyWrapSkipped:d.keyWrapSkipped,interceptedRequest:d.interceptedRequest===!0,recordedAt:d.timestamp.toISOString()});}catch(c){console.warn("[crewx] task:provider-input tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:end",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.delete(c))return;let l=typeof d.metadata?.runEpoch=="number"?d.metadata.runEpoch:null;this.removeOwnedTaskRun(c,sn(l)),xn(c,l)&&this.heartbeatTaskIds.delete(c),this.flushTaskLogs(c);let g=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,_=d.result??null,m=!1,y=d.metadata?.suppressPartialResultRecovery===!0;if(d.error&&!y&&(!_||_.trim()==="")){let k=this.recoverPartialResult(c,d,l);k&&(_=k,m=!0);}n.finishTask({id:c,status:d.error?"failed":"success",result:_,error:g,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:m});}catch{}}));}detach(e){try{this.flushAllTaskLogs();}finally{this.clearAllTimers();for(let n of this.heartbeatTaskIds)xn(n);this.heartbeatTaskIds.clear(),this.ownedTaskRuns.clear(),this.unsubs.forEach(n=>n()),this.unsubs=[],this.queues.clear(),this.ignoredDetachedTaskIds.clear(),this.taskRepo=void 0;}}listOwnedRunningTasks(){return Array.from(this.ownedTaskRuns.values(),e=>({...e}))}async stopOwnedRunningTasksForHostShutdown(){let e=this.taskRepo;if(!e)return;let n=this.listOwnedRunningTasks();for(let r of n)try{let s=await fd(e,{taskId:r.taskId,expectedRunEpoch:r.runEpoch,workspaceId:r.workspaceId});(s.status==="failed"||s.status==="ownership_unverified")&&console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,status:s.status,...s.error?{error:s.error}:{}});}catch(s){console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,cause:s instanceof Error?s.name:typeof s});}}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}}resolveTaskId(e){return this.runnerIdentity.detachedRunner?this.runnerIdentity.assignedTaskId??e:e}recordOwnedTaskRun(e){let n=this.ownedTaskRuns.get(e.taskId);n&&n.runEpoch>e.runEpoch||this.ownedTaskRuns.set(e.taskId,{...e});}removeOwnedTaskRun(e,n){let r=this.ownedTaskRuns.get(e);!r||r.runEpoch!==n||this.ownedTaskRuns.delete(e);}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+=bd(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>=cf){this.flushTaskLogs(e);return}if(!r.timer){let s=setTimeout(()=>{let o=this.queues.get(e);!o||o.timer!==s||(o.timer=void 0,this.flushTaskLogs(e));},lf);r.timer=s;}}recoverPartialResult(e,n,r){try{let s=this.taskRepo;if(!s)return;let o=s.getTask(e);if(!o||o.status!=="running"||sn(o.run_epoch)!==sn(r))return;let i=vd(o.metadata),u=typeof i.provider=="string"?i.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!u)return;let d=Rr({taskLogRepository:s,taskId:e,provider:u,model:o.model});if(!d?.adapter.extractPartialText)return;let c=d.adapter.extractPartialText(d.stdout);return !c||!c.trim()||Xe(c,u)?void 0:c}catch{return}}async handleStopRequested(e,n){let r=n.id;if(!r)return;let s=sn(n.run_epoch),o=vd(n.metadata??null),i=o.ownership==="runner"?"runner":"caller";if(i==="runner"&&n.pid!==process.pid){console.warn("[crewx] ignored stop request for task owned by another runner",{taskId:r});return}let u=typeof o.providerPid=="number"&&Number.isSafeInteger(o.providerPid)&&o.providerPid>0?o.providerPid:void 0,d=i==="runner"?u:typeof n.pid=="number"&&n.pid>0?n.pid:void 0;if(No(r),d!==void 0){let c;try{c=await Ft(d,{signal:Ut});}catch(l){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:l instanceof Error?l.name:typeof l});return}if(c.status==="failed"){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:c.error??"process termination failed"});return}}try{let c=e.finalizeTaskStop({id:r,runEpoch:s,method:Ar(n.stop_requested_at)}),l=e.getTask(r);(c||l?.status!=="running")&&xn(r,s)&&this.heartbeatTaskIds.delete(r);}catch(c){console.warn("[crewx] cooperative task stop finalization failed",{taskId:r,cause:c instanceof Error?c.name:typeof c});}}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,s=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,s);}let o=this.queues.get(e);o&&o.entries.length===0&&(o.timer&&clearTimeout(o.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 s=ff(e);this.metrics.appendFailureCount+=1,this.metrics.appendFailureEntries+=n.length,this.metrics.appendFailureBytes+=r,this.metrics.appendFailureByCode[s.code]=(this.metrics.appendFailureByCode[s.code]??0)+1,this.metrics.appendFailureByCause[s.cause]=(this.metrics.appendFailureByCause[s.cause]??0)+1,console.warn("[crewx] sqlite tracing append failed",{code:s.code,cause:s.cause,pendingEntries:n.length,pendingBytes:r});}};h();h();h();at();mt();kt();it();Rt();vn();h();function Dr(t){return t!==null&&t!==""}function _f(t){return t.schedule_id!==null&&t.schedule_id!==void 0?"system":Dr(t.parent_task_id)||Dr(t.caller_agent_id)?"agent":t.platform==="workflow"?"system":"human"}function Nd(t,e){return {origin:t==="human"?"direct":"delegated",delegatedByAgentId:t==="agent"&&Dr(e)?e:null}}function Pr(t){let e=_f(t),n=Dr(t.caller_agent_id)?t.caller_agent_id:null,r=t.parent_thread_id!==null&&t.parent_thread_id!==t.thread_id;return {origin:e==="human"?"direct":"delegated",delegatedByAgentId:e==="agent"?n??(r&&t.parent_agent_id||null):null}}function xd(t,e,n){return t.creator_task_id!==null&&t.creator_pointer_unverified===0?t.creator_actor_kind!==null?Nd(t.creator_actor_kind,t.creator_actor_id):e?Pr(e):{origin:"direct",delegatedByAgentId:null}:t.created_by_kind!==null?Nd(t.created_by_kind,t.created_by_id):n?Pr(n):void 0}function Fn(t){return bn(t)}function Ef({metadata:t,...e}){return {...e,status:$e({...e,metadata:t}),terminalReason:Ze({...e,metadata:t})??null}}var Mr=32,Dd=100,Rf=["running","failed"];function Sf(t){return t==="running"?0:t==="failed"?1:2}function Pd(t,e){return t[0]!==e[0]?t[0]-e[0]:t[1]!==e[1]?t[1]===null?1:e[1]===null||t[1]<e[1]?-1:1:t[2]<e[2]?-1:t[2]>e[2]?1:0}function If(t){return Buffer.from(JSON.stringify(t),"utf8").toString("base64url")}function Af(t){try{let e=JSON.parse(Buffer.from(t,"base64url").toString("utf8"));if(Array.isArray(e)&&e.length===3&&Number.isInteger(e[0])&&e[0]>=0&&e[0]<=2&&(e[1]===null||typeof e[1]=="string")&&typeof e[2]=="string")return [e[0],e[1],e[2]]}catch{}throw new f("VALIDATION","Invalid descendant cursor")}function Ld(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.min(n,Math.max(1,Math.trunc(t)))}function Md(t){return {total:0,running:0,pending:0,paused:0,success:0,failed:0,stopped:0,runnerLost:0,checkedAt:t}}function Of(t){switch(t){case "running":case "pending":case "paused":case "success":case "failed":case "stopped":return t;default:return}}function $d(t,e,n,r){let s=Of(e);s&&(t[s]+=r,t.total+=r,s==="failed"&&n==="runner_lost"&&(t.runnerLost+=r));}var $r=900,Hd=20;function Ud(t,e){return (t?.origin??"direct")===e}function Fd(t,e){let n=new Date(e.updated_at).getTime()-new Date(t.updated_at).getTime();return n!==0?n:t.id.localeCompare(e.id)}var an=class extends f{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function on(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function bf(t){let n=on(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}}function qd(t,e,n){return t.get(sql`
343
+ `;appendFileSync(r,i,"utf8"),this.logFiles.delete(n.traceId);}catch{}}));}detach(e){this.unsubs.forEach(n=>n()),this.unsubs=[],this.logFiles.clear();}};h();h();var Mo=Symbol.for("crewx.interceptor.run-stops");function Ru(){let t=globalThis,e=t[Mo];if(e)return e;let n=new Map;return t[Mo]=n,n}function $o(t){let e=Ru().get(t);return e?(e.abort(),true):false}h();var Mt=new Map;function er(t){let e=le.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function Fo(t){let e=er(t);return createHash("sha256").update(e).digest("hex")}function qo(t){let e=er(t),n=Mt.get(e);if(n!==void 0)return n;let r=e;try{let s=le.join(e,".git");if(!lstatSync(s).isFile())return Mt.set(e,r),r;let o=/^gitdir:\s*(.+?)\s*$/i.exec(readFileSync(s,"utf8").trim());if(!o)return Mt.set(e,r),r;let i=o[1],u=le.isAbsolute(i)?i:le.resolve(le.dirname(s),i),d=readFileSync(le.join(u,"commondir"),"utf8").trim();if(!d)return Mt.set(e,r),r;let c=le.isAbsolute(d)?d:le.resolve(u,d);if(le.basename(c)!==".git"||!statSync(c).isDirectory())return Mt.set(e,r),r;let l=er(realpathSync.native(e)),p=er(realpathSync.native(le.dirname(c)));(l===p||(p.endsWith("/")?l.startsWith(p):l.startsWith(`${p}/`)))&&(r=p);}catch{}return Mt.set(e,r),r}at();oo();Wt();qs();Mn();so();hr();var Tf=200,wf=200;function yf(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 Ef(t){let e=t instanceof f?t.code:void 0,n=t instanceof f?t.cause:t,r=yf(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function Ud(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function Rf(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Fd(t){if(!t)return {};try{let e=JSON.parse(t);return Rf(e)?e:{}}catch{return {}}}function an(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var Sf=new Set(["workflow","mcp"]),To=class extends it{name="sqlite-tracing";unsubs=[];dbPath;version;inheritWorktreeOwner;runnerIdentity;taskRepo;heartbeatTaskIds=new Set;ownedTaskRuns=new Map;ignoredDetachedTaskIds=new Set;queues=new Map;metrics={flushCount:0,flushedEntries:0,maxQueueEntries:0,maxQueueBytes:0,appendFailureCount:0,appendFailureEntries:0,appendFailureBytes:0,appendFailureByCode:{},appendFailureByCause:{}};constructor(e){super();let n=process.env.CREWX_DB;this.dbPath=e?.dbRoot!==void 0?join(e.dbRoot,".crewx","crewx.db"):n??join(homedir(),".crewx","crewx.db"),this.version=e?.version??"unknown",this.inheritWorktreeOwner=e?.inheritWorktreeOwner===true;let r=e?.runnerIdentity;this.runnerIdentity={detachedRunner:r?.detachedRunner===true,assignedTaskId:r?.detachedRunner===true&&r.assignedTaskId?.trim()||void 0};}attach(e){let n=new Bn({dbPath:this.dbPath});n.resolveDbPath(),this.taskRepo=n;let r=process.cwd(),s=existsSync(join(r,"crewx.yaml"))||existsSync(join(r,"crewx.yml")),o=this.inheritWorktreeOwner?qo(r):r,i=s?Fo(o):null,u=process.argv.join(" ");this.unsubs.push(e.on("task:start",d=>{try{let c=d.callerAgentId??null,l=d.parentTaskId??null,p=d.rootTraceId??d.traceId,{detachedRunner:g,assignedTaskId:_}=this.runnerIdentity,m=_??d.traceId,y=an(d.metadata?.runEpoch),k=g?"runner":"caller",v=d.workspaceId??i,I=g?n.getTask(m):void 0,D=d.pid??null,E={...d.metadata??{provider:d.provider??"cli/claude"},ownership:k,...g&&D!==null?{providerPid:D}:{}},A=JSON.stringify(E);if(g&&I?.status==="running"&&I.pid!==null&&y===0){this.ignoredDetachedTaskIds.add(m);return}n.startTask({id:m,agentId:d.agentRef.replace(/^@/,""),prompt:d.message,mode:d.mode,status:"running",actorKind:d.actorKind??null,actorId:d.actorId??null,pid:g?process.pid:D,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,securityKey:d.renderedPrompt==null?null:d.securityKey??null,command:u,codingAgentCommand:d.codingAgentCommand??null,workspaceId:v,projectId:d.projectId??null,callerAgentId:c,parentTaskId:l,traceId:p,metadata:A,threadId:d.threadId??null,cwd:d.cwd??null}),n.updateTaskOwnership({id:m,runEpoch:y,ownership:k,...g?{providerPid:D}:{},runtime:{model:d.model??null,renderedPrompt:d.renderedPrompt??null,codingAgentCommand:d.codingAgentCommand??null,metadata:E}})?this.recordOwnedTaskRun({taskId:m,runEpoch:y,workspaceId:v,ownership:k}):console.warn("[crewx] task execution metadata not recorded",{taskId:m,runEpoch:y,ownership:k}),Sf.has(d.platform??"cli")||md(n,{taskId:m,runEpoch:y,onStopRequested:Yr=>this.handleStopRequested(n,Yr)})&&this.heartbeatTaskIds.add(m);}catch(c){console.warn("[crewx] task:start tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:output",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;this.enqueueLog(c,{timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output});}catch(c){let l={timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output};this.recordAppendFailure(c,[l],Ud(l));}}),e.on("task:run-update",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;let l=an(d.runEpoch),p=this.runnerIdentity.detachedRunner;n.updateTaskOwnership({id:c,runEpoch:l,ownership:p?"runner":"caller",...p&&d.pid!==void 0?{providerPid:d.pid}:{},runtime:{...d.model!==void 0?{model:d.model}:{},...d.renderedPrompt!==void 0?{renderedPrompt:d.renderedPrompt}:{},...d.securityKey!==void 0?{securityKey:d.securityKey}:{},...d.codingAgentCommand!==void 0?{codingAgentCommand:d.codingAgentCommand}:{},...d.metadata?{metadata:d.metadata}:{}}}),!p&&d.pid!==void 0&&n.recordTaskPid({id:c,runEpoch:l,pid:d.pid});}catch(c){console.warn("[crewx] task:run-update tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:provider-input",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;n.recordProviderInput({id:c,runEpoch:d.runEpoch,input:d.input,keyWrapSkipped:d.keyWrapSkipped,interceptedRequest:d.interceptedRequest===!0,recordedAt:d.timestamp.toISOString()});}catch(c){console.warn("[crewx] task:provider-input tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:end",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.delete(c))return;let l=typeof d.metadata?.runEpoch=="number"?d.metadata.runEpoch:null;this.removeOwnedTaskRun(c,an(l)),Ln(c,l)&&this.heartbeatTaskIds.delete(c),this.flushTaskLogs(c);let g=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,_=d.result??null,m=!1,y=d.metadata?.suppressPartialResultRecovery===!0;if(d.error&&!y&&(!_||_.trim()==="")){let k=this.recoverPartialResult(c,d,l);k&&(_=k,m=!0);}n.finishTask({id:c,status:d.error?"failed":"success",result:_,error:g,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:m});}catch{}}));}detach(e){try{this.flushAllTaskLogs();}finally{this.clearAllTimers();for(let n of this.heartbeatTaskIds)Ln(n);this.heartbeatTaskIds.clear(),this.ownedTaskRuns.clear(),this.unsubs.forEach(n=>n()),this.unsubs=[],this.queues.clear(),this.ignoredDetachedTaskIds.clear(),this.taskRepo=void 0;}}listOwnedRunningTasks(){return Array.from(this.ownedTaskRuns.values(),e=>({...e}))}async stopOwnedRunningTasksForHostShutdown(){let e=this.taskRepo;if(!e)return;let n=this.listOwnedRunningTasks();for(let r of n)try{let s=await Sd(e,{taskId:r.taskId,expectedRunEpoch:r.runEpoch,workspaceId:r.workspaceId});(s.status==="failed"||s.status==="ownership_unverified")&&console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,status:s.status,...s.error?{error:s.error}:{}});}catch(s){console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,cause:s instanceof Error?s.name:typeof s});}}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}}resolveTaskId(e){return this.runnerIdentity.detachedRunner?this.runnerIdentity.assignedTaskId??e:e}recordOwnedTaskRun(e){let n=this.ownedTaskRuns.get(e.taskId);n&&n.runEpoch>e.runEpoch||this.ownedTaskRuns.set(e.taskId,{...e});}removeOwnedTaskRun(e,n){let r=this.ownedTaskRuns.get(e);!r||r.runEpoch!==n||this.ownedTaskRuns.delete(e);}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+=Ud(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>=Tf){this.flushTaskLogs(e);return}if(!r.timer){let s=setTimeout(()=>{let o=this.queues.get(e);!o||o.timer!==s||(o.timer=void 0,this.flushTaskLogs(e));},wf);r.timer=s;}}recoverPartialResult(e,n,r){try{let s=this.taskRepo;if(!s)return;let o=s.getTask(e);if(!o||o.status!=="running"||an(o.run_epoch)!==an(r))return;let i=Fd(o.metadata),u=typeof i.provider=="string"?i.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!u)return;let d=br({taskLogRepository:s,taskId:e,provider:u,model:o.model});if(!d?.adapter.extractPartialText)return;let c=d.adapter.extractPartialText(d.stdout);return !c||!c.trim()||Qe(c,u)?void 0:c}catch{return}}async handleStopRequested(e,n){let r=n.id;if(!r)return;let s=an(n.run_epoch),o=Fd(n.metadata??null),i=o.ownership==="runner"?"runner":"caller";if(i==="runner"&&n.pid!==process.pid){console.warn("[crewx] ignored stop request for task owned by another runner",{taskId:r});return}let u=typeof o.providerPid=="number"&&Number.isSafeInteger(o.providerPid)&&o.providerPid>0?o.providerPid:void 0,d=i==="runner"?u:typeof n.pid=="number"&&n.pid>0?n.pid:void 0;if($o(r),d!==void 0){let c;try{c=await Bt(d,{signal:qt});}catch(l){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:l instanceof Error?l.name:typeof l});return}if(c.status==="failed"){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:c.error??"process termination failed"});return}}try{let c=e.finalizeTaskStop({id:r,runEpoch:s,method:xr(n.stop_requested_at)}),l=e.getTask(r);(c||l?.status!=="running")&&Ln(r,s)&&this.heartbeatTaskIds.delete(r);}catch(c){console.warn("[crewx] cooperative task stop finalization failed",{taskId:r,cause:c instanceof Error?c.name:typeof c});}}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,s=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,s);}let o=this.queues.get(e);o&&o.entries.length===0&&(o.timer&&clearTimeout(o.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 s=Ef(e);this.metrics.appendFailureCount+=1,this.metrics.appendFailureEntries+=n.length,this.metrics.appendFailureBytes+=r,this.metrics.appendFailureByCode[s.code]=(this.metrics.appendFailureByCode[s.code]??0)+1,this.metrics.appendFailureByCause[s.cause]=(this.metrics.appendFailureByCause[s.cause]??0)+1,console.warn("[crewx] sqlite tracing append failed",{code:s.code,cause:s.cause,pendingEntries:n.length,pendingBytes:r});}};h();h();h();dt();kt();Tt();at();It();Dn();h();function Hr(t){return t!==null&&t!==""}function If(t){return t.schedule_id!==null&&t.schedule_id!==void 0?"system":Hr(t.parent_task_id)||Hr(t.caller_agent_id)?"agent":t.platform==="workflow"?"system":"human"}function qd(t,e){return {origin:t==="human"?"direct":"delegated",delegatedByAgentId:t==="agent"&&Hr(e)?e:null}}function Ur(t){let e=If(t),n=Hr(t.caller_agent_id)?t.caller_agent_id:null,r=t.parent_thread_id!==null&&t.parent_thread_id!==t.thread_id;return {origin:e==="human"?"direct":"delegated",delegatedByAgentId:e==="agent"?n??(r&&t.parent_agent_id||null):null}}function Bd(t,e,n){return t.creator_task_id!==null&&t.creator_pointer_unverified===0?t.creator_actor_kind!==null?qd(t.creator_actor_kind,t.creator_actor_id):e?Ur(e):{origin:"direct",delegatedByAgentId:null}:t.created_by_kind!==null?qd(t.created_by_kind,t.created_by_id):n?Ur(n):void 0}function jn(t){return Cn(t)}function xf({metadata:t,...e}){return {...e,status:xe({...e,metadata:t}),terminalReason:Ue({...e,metadata:t})??null}}var Gn=32,jd=100,Cf=["running","failed"];function Df(t){return t==="running"?0:t==="failed"?1:2}function Gd(t,e){return t[0]!==e[0]?t[0]-e[0]:t[1]!==e[1]?t[1]===null?1:e[1]===null||t[1]<e[1]?-1:1:t[2]<e[2]?-1:t[2]>e[2]?1:0}function Pf(t){return Buffer.from(JSON.stringify(t),"utf8").toString("base64url")}function Lf(t){try{let e=JSON.parse(Buffer.from(t,"base64url").toString("utf8"));if(Array.isArray(e)&&e.length===3&&Number.isInteger(e[0])&&e[0]>=0&&e[0]<=2&&(e[1]===null||typeof e[1]=="string")&&typeof e[2]=="string")return [e[0],e[1],e[2]]}catch{}throw new f("VALIDATION","Invalid descendant cursor")}function zd(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.min(n,Math.max(1,Math.trunc(t)))}function wo(t){return {total:0,running:0,pending:0,paused:0,success:0,failed:0,stopped:0,runnerLost:0,checkedAt:t}}function Mf(t){switch(t){case "running":case "pending":case "paused":case "success":case "failed":case "stopped":return t;default:return}}function yo(t,e,n,r){let s=Mf(e);s&&(t[s]+=r,t.total+=r,s==="failed"&&n==="runner_lost"&&(t.runnerLost+=r));}var qr=900,Kd=20;function Vd(t,e){return (t?.origin??"direct")===e}function Jd(t,e){let n=new Date(e.updated_at).getTime()-new Date(t.updated_at).getTime();return n!==0?n:t.id.localeCompare(e.id)}var dn=class extends f{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function un(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function $f(t){let n=un(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}}function Xd(t,e,n){return t.get(sql`
344
344
  SELECT id
345
345
  FROM tasks INDEXED BY idx_tasks_thread_id
346
346
  WHERE thread_id = ${e}
347
347
  AND id <> ${n}
348
348
  LIMIT 1
349
- `)!==void 0}var Hr=class extends he{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 s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{Ae(r.db,n);}catch(s){throw r.close(),s}return r}topLevelTaskPredicateSql(e="child",n){let r=n?`tasks parent INDEXED BY ${n}`:"tasks parent";return sql.raw(`NOT EXISTS (
349
+ `)!==void 0}function Hf(t,e,n){let r=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e),s=t.select({pinned:T.pinned,metadata:T.metadata}).from(T).where(r).get();if(!s)return null;let o=s.pinned?0:1,i=un(s.metadata);if(o){let u=n?and(eq(T.pinned,1),eq(T.workspace_id,n)):eq(T.pinned,1),d=t.select({metadata:T.metadata}).from(T).where(u).all(),c=null;for(let l of d){let p=un(l.metadata);typeof p.pinOrder=="number"&&(c===null||p.pinOrder<c)&&(c=p.pinOrder);}i.pinOrder=c===null?0:c-1;}else delete i.pinOrder;return t.update(T).set({pinned:o,metadata:Object.keys(i).length>0?JSON.stringify(i):null}).where(r).run(),{pinned:!!o}}function Uf(t,e,n){for(let r=0;r<e.length;r++){let s=n?and(eq(T.id,e[r]),eq(T.workspace_id,n)):eq(T.id,e[r]),o=t.select({metadata:T.metadata}).from(T).where(s).get();if(!o)continue;let i=un(o.metadata);i.pinOrder=r+1,t.update(T).set({metadata:JSON.stringify(i)}).where(s).run();}}var Br=class extends me{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 s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=H(n);if(e)try{be(r.db,n);}catch(s){throw r.close(),s}return r}topLevelTaskPredicateSql(e="child",n){let r=n?`tasks parent INDEXED BY ${n}`:"tasks parent";return sql.raw(`NOT EXISTS (
350
350
  SELECT 1 FROM ${r}
351
351
  WHERE parent.id = ${e}.parent_task_id
352
352
  AND parent.thread_id = ${e}.thread_id
@@ -389,17 +389,17 @@ Message: ${n.message}
389
389
  )
390
390
  )`}findAllThreadsQuery(e,n){let r=[];e&&r.push(sql`workspace_id = ${e}`),n&&r.push(sql`created_by_kind = ${n}`);let s=r.length>0?sql` WHERE ${sql.join(r,sql` AND `)}`:sql``;return sql`SELECT * FROM threads${s} ORDER BY updated_at DESC`}findThreadIdsQuery(e){return e?sql`SELECT id FROM threads INDEXED BY idx_threads_ws_updated
391
391
  WHERE workspace_id = ${e}
392
- ORDER BY updated_at DESC`:sql`SELECT id FROM threads`}readThreadIds(e,n="Failed to find thread ids"){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=U(i);try{let d=u.db.all(this.findThreadIdsQuery(e));for(let c of d)s.has(c.id)||(s.add(c.id),o.push(c.id));}catch(d){throw new f("DB_ERROR",n,d)}finally{u.close();}}return o}findThreadSortKeysQuery(e){return sql`SELECT id, updated_at
392
+ ORDER BY updated_at DESC`:sql`SELECT id FROM threads`}readThreadIds(e,n="Failed to find thread ids"){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=u.db.all(this.findThreadIdsQuery(e));for(let c of d)s.has(c.id)||(s.add(c.id),o.push(c.id));}catch(d){throw new f("DB_ERROR",n,d)}finally{u.close();}}return o}findThreadSortKeysQuery(e){return sql`SELECT id, updated_at
393
393
  FROM threads INDEXED BY idx_threads_ws_updated
394
- WHERE workspace_id = ${e}`}readThreadSortKeys(e){let n=this.resolveDbPaths(),r=new Set,s=[];for(let o of n){if(!existsSync(o))continue;let i=U(o);try{let u=i.db.all(this.findThreadSortKeysQuery(e));for(let d of u)r.has(d.id)||(r.add(d.id),s.push(d));}catch(u){throw new f("DB_ERROR","Failed to find recent direct threads",u)}finally{i.close();}}return s}readThreadRowsByIds(e,n,r="Failed to find threads by ids"){if(e.length===0)return [];let s=this.resolveDbPaths(),o=new Set,i=[];for(let u of s){if(!existsSync(u))continue;let d=U(u);try{for(let c=0;c<e.length;c+=$r){let l=e.slice(c,c+$r),p=inArray(T.id,l),g=n?and(p,eq(T.workspace_id,n)):p,_=d.db.select().from(T).where(g).all();for(let m of _)o.has(m.id)||(o.add(m.id),i.push(m));}}catch(c){throw new f("DB_ERROR",r,c)}finally{d.close();}}return i}readThreadRows(e,n,r="Failed to find all threads"){let s=this.resolveDbPaths(),o=new Set,i=[];for(let u of s){if(!existsSync(u))continue;let d=U(u);try{let c=d.db.all(this.findAllThreadsQuery(e,n));for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(c){throw new f("DB_ERROR",r,c)}finally{d.close();}}return i}findAllThreads(e,n){return this.readThreadRows(e,n)}explainFindAllThreadsPlan(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=U(s);try{return o.db.all(sql`EXPLAIN QUERY PLAN ${this.findAllThreadsQuery(e,n)}`).map(u=>u.detail)}finally{o.close();}}return []}findThreadsByIdsOrTitles(e,n){if(e.length===0)return [];let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=U(i);try{let d=or(inArray(T.id,e),inArray(T.title,e)),c=n?and(d,eq(T.workspace_id,n)):d,l=u.db.select().from(T).where(c).orderBy(desc(T.updated_at)).all();for(let p of l)s.has(p.id)||(s.add(p.id),o.push(p));}catch(d){throw new f("DB_ERROR","Failed to find threads by ids or titles",d)}finally{u.close();}}return o}findThreadById(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=U(s);try{let i=eq(T.id,e),u=n?and(i,eq(T.workspace_id,n)):i,d=o.db.select().from(T).where(u).limit(1).get()??void 0;if(d)return d}catch(i){throw new f("DB_ERROR","Failed to find thread by id",i)}finally{o.close();}}}createAppLaunchThread(e){let n=this.openHandle(true);try{return n.db.transaction(r=>{if(!r.select({id:Oe.id}).from(Oe).where(eq(Oe.id,e.workspaceId)).limit(1).get())throw new f("NOT_FOUND","Workspace not found");let o=r.select().from(T).where(eq(T.id,e.threadId)).limit(1).get();if(o){let l=on(o.metadata).appLaunch,p=l&&typeof l=="object"&&!Array.isArray(l)?l.appId:void 0,g=r.get(sql`
394
+ WHERE workspace_id = ${e}`}readThreadSortKeys(e){let n=this.resolveDbPaths(),r=new Set,s=[];for(let o of n){if(!existsSync(o))continue;let i=H(o);try{let u=i.db.all(this.findThreadSortKeysQuery(e));for(let d of u)r.has(d.id)||(r.add(d.id),s.push(d));}catch(u){throw new f("DB_ERROR","Failed to find recent direct threads",u)}finally{i.close();}}return s}readThreadRowsByIds(e,n,r="Failed to find threads by ids"){if(e.length===0)return [];let s=this.resolveDbPaths(),o=new Set,i=[];for(let u of s){if(!existsSync(u))continue;let d=H(u);try{for(let c=0;c<e.length;c+=qr){let l=e.slice(c,c+qr),p=inArray(T.id,l),g=n?and(p,eq(T.workspace_id,n)):p,_=d.db.select().from(T).where(g).all();for(let m of _)o.has(m.id)||(o.add(m.id),i.push(m));}}catch(c){throw new f("DB_ERROR",r,c)}finally{d.close();}}return i}readThreadRows(e,n,r="Failed to find all threads"){let s=this.resolveDbPaths(),o=new Set,i=[];for(let u of s){if(!existsSync(u))continue;let d=H(u);try{let c=d.db.all(this.findAllThreadsQuery(e,n));for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(c){throw new f("DB_ERROR",r,c)}finally{d.close();}}return i}findAllThreads(e,n){return this.readThreadRows(e,n)}explainFindAllThreadsPlan(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{return o.db.all(sql`EXPLAIN QUERY PLAN ${this.findAllThreadsQuery(e,n)}`).map(u=>u.detail)}finally{o.close();}}return []}findThreadsByIdsOrTitles(e,n){if(e.length===0)return [];let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=or(inArray(T.id,e),inArray(T.title,e)),c=n?and(d,eq(T.workspace_id,n)):d,l=u.db.select().from(T).where(c).orderBy(desc(T.updated_at)).all();for(let p of l)s.has(p.id)||(s.add(p.id),o.push(p));}catch(d){throw new f("DB_ERROR","Failed to find threads by ids or titles",d)}finally{u.close();}}return o}findThreadById(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{let i=eq(T.id,e),u=n?and(i,eq(T.workspace_id,n)):i,d=o.db.select().from(T).where(u).limit(1).get()??void 0;if(d)return d}catch(i){throw new f("DB_ERROR","Failed to find thread by id",i)}finally{o.close();}}}createAppLaunchThread(e){let n=this.openHandle(true);try{return n.db.transaction(r=>{if(!r.select({id:te.id}).from(te).where(eq(te.id,e.workspaceId)).limit(1).get())throw new f("NOT_FOUND","Workspace not found");let o=r.select().from(T).where(eq(T.id,e.threadId)).limit(1).get();if(o){let l=un(o.metadata).appLaunch,p=l&&typeof l=="object"&&!Array.isArray(l)?l.appId:void 0,g=r.get(sql`
395
395
  SELECT COUNT(*) AS count FROM tasks WHERE thread_id = ${e.threadId}
396
- `)?.count??0;return o.workspace_id===e.workspaceId&&p===e.appId&&o.message_count===0&&o.first_message===null&&o.last_message===null&&g===0?{status:"existing",thread:o}:{status:"conflict"}}let i=new Date().toISOString(),u=JSON.stringify({appLaunch:{appId:e.appId,...e.initialAgentId===void 0?{}:{initialAgentId:e.initialAgentId}}});r.insert(T).values({id:e.threadId,workspace_id:e.workspaceId,platform:e.platform,title:e.title,title_locked:1,created_by_kind:"human",created_by_id:e.createdById,created_by_task_id:null,message_count:0,first_message:null,last_message:null,metadata:u,created_at:i,updated_at:i}).run();let d=r.select().from(T).where(eq(T.id,e.threadId)).limit(1).get();if(!d)throw new f("DB_ERROR","App-launch thread could not be read after insert");return {status:"created",thread:d}},{behavior:"immediate"})}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to create App-launch thread",r)}finally{n.close();}}threadExists(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=U(s);try{let i=eq(T.id,e),u=n?and(i,eq(T.workspace_id,n)):i;if(o.db.select({id:T.id}).from(T).where(u).limit(1).get())return !0}catch(i){throw new f("DB_ERROR","Failed to check thread existence",i)}finally{o.close();}}return false}aggregateTaskStats(e,n){let r=this.resolveDbPaths(),s=0,o=0,i=0,u=0,d=0,c=0,l=0,p=0,g=0,_=0,m=new Set;for(let y of r){if(!existsSync(y))continue;let k=U(y);try{let N=k.db.get(sql`
396
+ `)?.count??0;return o.workspace_id===e.workspaceId&&p===e.appId&&o.message_count===0&&o.first_message===null&&o.last_message===null&&g===0?{status:"existing",thread:o}:{status:"conflict"}}let i=new Date().toISOString(),u=JSON.stringify({appLaunch:{appId:e.appId,...e.initialAgentId===void 0?{}:{initialAgentId:e.initialAgentId}}});r.insert(T).values({id:e.threadId,workspace_id:e.workspaceId,platform:e.platform,title:e.title,title_locked:1,created_by_kind:"human",created_by_id:e.createdById,created_by_task_id:null,message_count:0,first_message:null,last_message:null,metadata:u,created_at:i,updated_at:i}).run();let d=r.select().from(T).where(eq(T.id,e.threadId)).limit(1).get();if(!d)throw new f("DB_ERROR","App-launch thread could not be read after insert");return {status:"created",thread:d}},{behavior:"immediate"})}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to create App-launch thread",r)}finally{n.close();}}threadExists(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{let i=eq(T.id,e),u=n?and(i,eq(T.workspace_id,n)):i;if(o.db.select({id:T.id}).from(T).where(u).limit(1).get())return !0}catch(i){throw new f("DB_ERROR","Failed to check thread existence",i)}finally{o.close();}}return false}aggregateTaskStats(e,n){let r=this.resolveDbPaths(),s=0,o=0,i=0,u=0,d=0,c=0,l=0,p=0,g=0,_=0,m=new Set;for(let y of r){if(!existsSync(y))continue;let k=H(y);try{let v=k.db.get(sql`
397
397
  SELECT count(*) AS cnt
398
398
  FROM tasks child INDEXED BY idx_tasks_thread_id
399
399
  WHERE child.thread_id = ${e}
400
400
  AND ${this.topLevelTaskPredicateSql()}
401
401
  ${n?sql`AND child.workspace_id = ${n}`:sql``}
402
- `);N&&(s+=N.cnt);let I=k.db.get(sql`
402
+ `);v&&(s+=v.cnt);let I=k.db.get(sql`
403
403
  SELECT
404
404
  COALESCE(SUM(child.input_tokens), 0) AS total_input,
405
405
  COALESCE(SUM(child.output_tokens), 0) AS total_output,
@@ -423,7 +423,7 @@ Message: ${n.message}
423
423
  FROM descendants
424
424
  JOIN tasks child INDEXED BY idx_tasks_parent_task_id
425
425
  ON child.parent_task_id = descendants.task_id
426
- WHERE descendants.depth < ${Mr}
426
+ WHERE descendants.depth < ${Gn}
427
427
  ),
428
428
  delegated_ids(task_id) AS (
429
429
  SELECT DISTINCT descendants.task_id
@@ -449,13 +449,13 @@ Message: ${n.message}
449
449
  AND child.agent_id != 'workflow'
450
450
  AND ${this.topLevelTaskPredicateSql()}
451
451
  ${n?sql`AND child.workspace_id = ${n}`:sql``}
452
- `);for(let A of E)m.add(A.agent_id);}catch(N){throw new f("DB_ERROR","Failed to aggregate task stats",N)}finally{k.close();}}return {taskCount:s,inputTokens:o,outputTokens:i,cachedInputTokens:u,costUsd:d,agentIds:Array.from(m),delegated:{taskCount:c,inputTokens:l,outputTokens:p,cachedInputTokens:g,costUsd:_}}}getDescendantSummaryByTaskId(e,n){let r=this.resolveDbPaths(),s={},o=new Date().toISOString();for(let i of r){if(!existsSync(i))continue;let u=U(i);try{let d=sql`
452
+ `);for(let A of E)m.add(A.agent_id);}catch(v){throw new f("DB_ERROR","Failed to aggregate task stats",v)}finally{k.close();}}return {taskCount:s,inputTokens:o,outputTokens:i,cachedInputTokens:u,costUsd:d,agentIds:Array.from(m),delegated:{taskCount:c,inputTokens:l,outputTokens:p,cachedInputTokens:g,costUsd:_}}}getDescendantSummaryByTaskId(e,n){let r=this.resolveDbPaths(),s={},o=new Date().toISOString();for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=sql`
453
453
  SELECT own.id
454
454
  FROM tasks own INDEXED BY idx_tasks_thread_id
455
455
  WHERE own.thread_id = ${e}
456
456
  ${n?sql`AND own.workspace_id = ${n}`:sql``}
457
457
  `,c=u.db.all(sql`
458
- ${this.descendantTraversalSql(d,sql`SELECT own.task_id FROM own_tasks own`,Mr)}
458
+ ${this.descendantTraversalSql(d,sql`SELECT own.task_id FROM own_tasks own`,Gn)}
459
459
  SELECT
460
460
  descendant_ids.root_task_id AS root_task_id,
461
461
  task.status AS status,
@@ -466,7 +466,24 @@ Message: ${n.message}
466
466
  JOIN tasks task ON task.id = descendant_ids.task_id
467
467
  WHERE NOT ${this.descendantSkippedSql("task")}
468
468
  GROUP BY descendant_ids.root_task_id, task.status, task.error, task.metadata
469
- `);for(let l of c){let p=s[l.root_task_id]??=Md(o);$d(p,$e(l),Ze(l),l.task_count);}}catch(d){throw new f("DB_ERROR","Failed to aggregate task descendant summaries",d)}finally{u.close();}}return s}listDescendantsByTaskId(e,n,r={}){let s=new Set(r.states??Rf),o=Ld(r.limit,Dd,Dd),i=Ld(r.maxDepth,Mr,Mr),u=r.cursor?Af(r.cursor):void 0;for(let d of this.resolveDbPaths()){if(!existsSync(d))continue;let c=U(d);try{if(!c.db.get(sql`
469
+ `);for(let l of c){let p=s[l.root_task_id]??=wo(o);yo(p,xe(l),Ue(l),l.task_count);}}catch(d){throw new f("DB_ERROR","Failed to aggregate task descendant summaries",d)}finally{u.close();}}return s}getThreadTaskStatusBatch(e,n){let r=[...new Set(e)];if(r.length===0)return {tasksByThread:new Map,descendantSummaryByTaskId:{}};let s=this.batchFetchTasks(r,n),o={},i=new Date().toISOString(),u=sql.join(r.map(c=>sql`${c}`),sql`, `),d=sql`
470
+ SELECT own.id
471
+ FROM tasks own INDEXED BY idx_tasks_thread_id
472
+ WHERE own.thread_id IN (${u})
473
+ ${n?sql`AND own.workspace_id = ${n}`:sql``}
474
+ `;for(let c of this.resolveDbPaths()){if(!existsSync(c))continue;let l=H(c);try{let p=l.db.all(sql`
475
+ ${this.descendantTraversalSql(d,sql`SELECT own.task_id FROM own_tasks own`,Gn)}
476
+ SELECT
477
+ descendant_ids.root_task_id AS root_task_id,
478
+ task.status AS status,
479
+ task.error AS error,
480
+ task.metadata AS metadata,
481
+ count(*) AS task_count
482
+ FROM descendant_ids
483
+ JOIN tasks task ON task.id = descendant_ids.task_id
484
+ WHERE NOT ${this.descendantSkippedSql("task")}
485
+ GROUP BY descendant_ids.root_task_id, task.status, task.error, task.metadata
486
+ `);for(let g of p){let _=o[g.root_task_id]??=wo(i);yo(_,xe(g),Ue(g),g.task_count);}}catch(p){throw p instanceof f?p:new f("DB_ERROR","Failed to batch summarize thread task statuses",p)}finally{l.close();}}return {tasksByThread:s,descendantSummaryByTaskId:o}}listDescendantsByTaskId(e,n,r={}){let s=new Set(r.states??Cf),o=zd(r.limit,jd,jd),i=zd(r.maxDepth,Gn,Gn),u=r.cursor?Lf(r.cursor):void 0;for(let d of this.resolveDbPaths()){if(!existsSync(d))continue;let c=H(d);try{if(!c.db.get(sql`
470
487
  SELECT anchor.id FROM tasks anchor
471
488
  WHERE anchor.id = ${e} AND anchor.workspace_id = ${n}
472
489
  `))continue;let p=sql`
@@ -500,11 +517,11 @@ Message: ${n.message}
500
517
  FROM descendant_ids
501
518
  JOIN tasks task ON task.id = descendant_ids.task_id
502
519
  LEFT JOIN tasks parent ON parent.id = task.parent_task_id
503
- `),_=Md(new Date().toISOString()),m=!1,y=[];for(let A of g){if(A.has_deeper&&(m=!0),A.skipped)continue;let v=$e(A);$d(_,v,Ze(A),1),s.has(v)&&y.push({row:A,key:[Sf(v),A.started_at?A.started_at:null,A.task_id]});}y.sort((A,v)=>Pd(A.key,v.key));let k=u?y.filter(A=>Pd(A.key,u)>0):y,N=k.slice(0,o),I=k.length>N.length?If(N[N.length-1].key):null,D=new Map;if(N.length>0){let A=c.db.select(te).from(a).where(inArray(a.id,N.map(v=>v.row.task_id))).all();for(let v of A)D.set(v.id,Fn(v));}let E=[];for(let{row:A}of N){let v=D.get(A.task_id);!v||!A.parent_task_id||E.push({task:v,parentTaskId:A.parent_task_id,parentAgentId:A.parent_agent_id,depth:A.depth});}return {rows:E,summary:_,nextCursor:I,traversalTruncated:m}}catch(l){throw l instanceof f?l:new f("DB_ERROR","Failed to list task descendants",l)}finally{c.close();}}}findInterceptedRequests(e){let n=new Map;if(e.length===0)return n;for(let r of this.resolveDbPaths()){if(!existsSync(r))continue;let s=U(r);try{let o=s.db.all(sql`
520
+ `),_=wo(new Date().toISOString()),m=!1,y=[];for(let A of g){if(A.has_deeper&&(m=!0),A.skipped)continue;let N=xe(A);yo(_,N,Ue(A),1),s.has(N)&&y.push({row:A,key:[Df(N),A.started_at?A.started_at:null,A.task_id]});}y.sort((A,N)=>Gd(A.key,N.key));let k=u?y.filter(A=>Gd(A.key,u)>0):y,v=k.slice(0,o),I=k.length>v.length?Pf(v[v.length-1].key):null,D=new Map;if(v.length>0){let A=c.db.select(ne).from(a).where(inArray(a.id,v.map(N=>N.row.task_id))).all();for(let N of A)D.set(N.id,jn(N));}let E=[];for(let{row:A}of v){let N=D.get(A.task_id);!N||!A.parent_task_id||E.push({task:N,parentTaskId:A.parent_task_id,parentAgentId:A.parent_agent_id,depth:A.depth});}return {rows:E,summary:_,nextCursor:I,traversalTruncated:m}}catch(l){throw l instanceof f?l:new f("DB_ERROR","Failed to list task descendants",l)}finally{c.close();}}}findInterceptedRequests(e){let n=new Map;if(e.length===0)return n;for(let r of this.resolveDbPaths()){if(!existsSync(r))continue;let s=H(r);try{let o=s.db.all(sql`
504
521
  SELECT task_id, input FROM task_provider_inputs
505
522
  WHERE run_epoch = 0
506
523
  AND task_id IN (${sql.join(e.map(i=>sql`${i}`),sql`, `)})
507
- `);for(let i of o)n.set(i.task_id,i.input);}catch{}finally{s.close();}}return n}findTopLevelTasks(e,n,r,s){let o=this.resolveDbPaths(),i=s?sql`(${this.topLevelTaskPredicateSql()} OR child.agent_id = ${s})`:this.topLevelTaskPredicateSql(),u=new Set,d=[];for(let c of o){if(!existsSync(c))continue;let l=U(c);try{let p;r!==void 0?p=l.db.all(sql`
524
+ `);for(let i of o)n.set(i.task_id,i.input);}catch{}finally{s.close();}}return n}findTopLevelTasks(e,n,r,s){let o=this.resolveDbPaths(),i=s?sql`(${this.topLevelTaskPredicateSql()} OR child.agent_id = ${s})`:this.topLevelTaskPredicateSql(),u=new Set,d=[];for(let c of o){if(!existsSync(c))continue;let l=H(c);try{let p;r!==void 0?p=l.db.all(sql`
508
525
  SELECT * FROM (
509
526
  SELECT child.*,
510
527
  ROW_NUMBER() OVER (PARTITION BY child.agent_id ORDER BY child.started_at DESC) AS rn
@@ -521,7 +538,7 @@ Message: ${n.message}
521
538
  AND ${i}
522
539
  ${n?sql`AND child.workspace_id = ${n}`:sql``}
523
540
  ORDER BY child.started_at ASC
524
- `);for(let g of p)u.has(g.id)||(u.add(g.id),d.push(Fn(g)));}catch(p){throw new f("DB_ERROR","Failed to find top-level tasks",p)}finally{l.close();}}if(r!==void 0&&o.length>1){let c=new Map;for(let l of d){let p=l.agent_id??"";c.has(p)||c.set(p,[]),c.get(p).push(l);}d=[];for(let l of c.values())l.sort((p,g)=>(g.started_at??"").localeCompare(p.started_at??"")),d.push(...l.slice(0,r));d.sort((l,p)=>(l.started_at??"").localeCompare(p.started_at??""));}return d}findAllTasks(e,n){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=U(i);try{let d=eq(a.thread_id,e),c=n?and(d,eq(a.workspace_id,n)):d,l=u.db.select(te).from(a).where(c).orderBy(asc(a.started_at)).all();for(let p of l)s.has(p.id)||(s.add(p.id),o.push(Fn(p)));}catch(d){throw new f("DB_ERROR","Failed to find all tasks for thread",d)}finally{u.close();}}return o}findRespondedAgents(e,n){let r=this.resolveDbPaths(),s=new Map;for(let o of r){if(!existsSync(o))continue;let i=U(o,{readOnly:true});try{let u=[eq(a.thread_id,e),sql`${a.completed_at} IS NOT NULL`,sql`length(trim(coalesce(${a.result}, ''))) > 0`];n&&u.push(eq(a.workspace_id,n));let d=i.db.select({agentId:a.agent_id,lastRepliedAt:sql`MAX(${a.completed_at})`}).from(a).where(and(...u)).groupBy(a.agent_id).all();for(let c of d){let l=s.get(c.agentId);c.lastRepliedAt&&(!l||c.lastRepliedAt>l)&&s.set(c.agentId,c.lastRepliedAt);}}catch(u){throw new f("DB_ERROR","Failed to find responded agents for thread",u)}finally{i.close();}}return [...s.entries()].map(([o,i])=>({agentId:o,lastRepliedAt:i})).sort((o,i)=>(o.lastRepliedAt===i.lastRepliedAt?0:o.lastRepliedAt>i.lastRepliedAt?-1:1)||(o.agentId===i.agentId?0:o.agentId<i.agentId?-1:1))}findTaskById(e,n,r){let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=U(o);try{let u=and(eq(a.id,n),eq(a.thread_id,e)),d=r?and(u,eq(a.workspace_id,r)):u,c=i.db.select(te).from(a).where(d).limit(1).get();if(!c)continue;let l=i.db.select(te).from(a).where(eq(a.parent_task_id,c.id)).orderBy(asc(a.started_at)).all().map(Fn);return {task:Fn(c),children:l}}catch(u){throw new f("DB_ERROR","Failed to find task by id",u)}finally{i.close();}}}batchFetchTasksQuery(e,n){return sql`
541
+ `);for(let g of p)u.has(g.id)||(u.add(g.id),d.push(jn(g)));}catch(p){throw new f("DB_ERROR","Failed to find top-level tasks",p)}finally{l.close();}}if(r!==void 0&&o.length>1){let c=new Map;for(let l of d){let p=l.agent_id??"";c.has(p)||c.set(p,[]),c.get(p).push(l);}d=[];for(let l of c.values())l.sort((p,g)=>(g.started_at??"").localeCompare(p.started_at??"")),d.push(...l.slice(0,r));d.sort((l,p)=>(l.started_at??"").localeCompare(p.started_at??""));}return d}findAllTasks(e,n){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=eq(a.thread_id,e),c=n?and(d,eq(a.workspace_id,n)):d,l=u.db.select(ne).from(a).where(c).orderBy(asc(a.started_at)).all();for(let p of l)s.has(p.id)||(s.add(p.id),o.push(jn(p)));}catch(d){throw new f("DB_ERROR","Failed to find all tasks for thread",d)}finally{u.close();}}return o}findRespondedAgents(e,n){let r=this.resolveDbPaths(),s=new Map;for(let o of r){if(!existsSync(o))continue;let i=H(o,{readOnly:true});try{let u=[eq(a.thread_id,e),sql`${a.completed_at} IS NOT NULL`,sql`length(trim(coalesce(${a.result}, ''))) > 0`];n&&u.push(eq(a.workspace_id,n));let d=i.db.select({agentId:a.agent_id,lastRepliedAt:sql`MAX(${a.completed_at})`}).from(a).where(and(...u)).groupBy(a.agent_id).all();for(let c of d){let l=s.get(c.agentId);c.lastRepliedAt&&(!l||c.lastRepliedAt>l)&&s.set(c.agentId,c.lastRepliedAt);}}catch(u){throw new f("DB_ERROR","Failed to find responded agents for thread",u)}finally{i.close();}}return [...s.entries()].map(([o,i])=>({agentId:o,lastRepliedAt:i})).sort((o,i)=>(o.lastRepliedAt===i.lastRepliedAt?0:o.lastRepliedAt>i.lastRepliedAt?-1:1)||(o.agentId===i.agentId?0:o.agentId<i.agentId?-1:1))}findTaskById(e,n,r){let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=H(o);try{let u=and(eq(a.id,n),eq(a.thread_id,e)),d=r?and(u,eq(a.workspace_id,r)):u,c=i.db.select(ne).from(a).where(d).limit(1).get();if(!c)continue;let l=i.db.select(ne).from(a).where(eq(a.parent_task_id,c.id)).orderBy(asc(a.started_at)).all().map(jn);return {task:jn(c),children:l}}catch(u){throw new f("DB_ERROR","Failed to find task by id",u)}finally{i.close();}}}batchFetchTasksQuery(e,n){return sql`
525
542
  SELECT child.id, child.thread_id, child.agent_id, child.status,
526
543
  child.parent_task_id, child.started_at, child.completed_at,
527
544
  child.duration_ms, child.input_tokens, child.output_tokens,
@@ -531,7 +548,7 @@ Message: ${n.message}
531
548
  AND ${this.topLevelTaskPredicateSql()}
532
549
  ${n?sql`AND child.workspace_id = ${n}`:sql``}
533
550
  ORDER BY child.started_at ASC
534
- `}batchFetchTasks(e,n){let r=new Map;if(e.length===0)return r;let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=U(o);try{let u=i.db.all(this.batchFetchTasksQuery(e,n));for(let d of u){let c=d.thread_id;r.has(c)||r.set(c,[]),r.get(c).push(Ef(d));}}catch(u){throw new f("DB_ERROR","Failed to batch fetch tasks",u)}finally{i.close();}}return r}findThreadOriginsQuery(e,n){return sql`
551
+ `}batchFetchTasks(e,n){let r=new Map;if(e.length===0)return r;let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=H(o);try{let u=i.db.all(this.batchFetchTasksQuery(e,n));for(let d of u){let c=d.thread_id;r.has(c)||r.set(c,[]),r.get(c).push(xf(d));}}catch(u){throw new f("DB_ERROR","Failed to batch fetch tasks",u)}finally{i.close();}}return r}findThreadOriginsQuery(e,n){return sql`
535
552
  WITH root AS (
536
553
  SELECT child.thread_id, child.id, child.caller_agent_id, child.parent_task_id,
537
554
  CASE
@@ -583,7 +600,7 @@ Message: ${n.message}
583
600
  FROM tasks AS child
584
601
  LEFT JOIN tasks AS parent ON parent.id = child.parent_task_id
585
602
  WHERE child.id IN (${sql.join(e.map(n=>sql`${n}`),sql`, `)})
586
- `}findThreadOrigins(e,n){let r=new Map;if(e.length===0)return r;let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=U(o);try{for(let u=0;u<e.length;u+=$r){let d=e.slice(u,u+$r),l=i.db.all(this.findCreatorPointersQuery(d,n)).filter(I=>!r.has(I.thread_id)),p=l.filter(I=>I.creator_task_id!==null&&I.creator_pointer_unverified===0&&I.creator_actor_kind===null).map(I=>I.creator_task_id),g=p.length>0?i.db.all(this.findTaskOriginLineageQuery(p)):[],_=new Map(g.map(I=>[I.task_id,I])),m=new Map(l.map(I=>[I.thread_id,I])),y=d.filter(I=>{if(r.has(I))return !1;let D=m.get(I);return D?!(D.creator_task_id!==null&&D.creator_pointer_unverified===0)&&D.created_by_kind===null:!0}),k=y.length>0?i.db.all(this.findThreadOriginsQuery(y,n)):[],N=new Map(k.map(I=>[I.thread_id,I]));for(let I of l){if(r.has(I.thread_id))continue;let D=xd(I,I.created_by_task_id!==null?_.get(I.created_by_task_id):void 0,N.get(I.thread_id));D&&r.set(I.thread_id,D);}for(let I of k)r.has(I.thread_id)||m.has(I.thread_id)||r.set(I.thread_id,Pr(I));}}catch(u){throw new f("DB_ERROR","Failed to fetch thread origins",u)}finally{i.close();}}return r}findThreadsByOrigin(e,n){let r=this.readThreadIds(n,"Failed to find threads by origin"),s=this.findThreadOrigins(r,n),o=r.filter(u=>Ud(s.get(u),e));return this.readThreadRowsByIds(o,n,"Failed to find threads by origin").sort(Fd)}findRecentDirectThreads(e,n=5){if(typeof e!="string"||e.trim().length===0)throw new f("VALIDATION","workspaceId is required");if(!Number.isInteger(n)||n<=0)throw new f("VALIDATION","limit must be a positive integer");let r=this.readThreadSortKeys(e).sort(Fd),s=[],o=new Map;for(let c=0;c<r.length;c+=Hd){let l=r.slice(c,c+Hd),p=this.findThreadOrigins(l.map(g=>g.id),e);for(let[g,_]of p)o.set(g,_);for(let g of l)if(Ud(p.get(g.id),"direct")&&(s.push(g.id),s.length===n))break;if(s.length===n)break}let i=new Map;if(s.length>0){let c=this.readThreadRowsByIds(s,e,"Failed to find recent direct threads");for(let l of c)i.set(l.id,l);}let u=[],d=new Map;for(let c of s){let l=i.get(c);if(!l)continue;u.push(l);let p=o.get(c);p&&d.set(c,p);}return {threads:u,originsByThread:d}}explainBatchFetchTasksPlan(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=U(s);try{return o.db.all(sql`EXPLAIN QUERY PLAN ${this.batchFetchTasksQuery(e,n)}`).map(u=>u.detail)}finally{o.close();}}return []}explainFindThreadOriginsPlan(e,n){if(e.length===0)return [];let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=U(s);try{let i=o.db.all(sql`EXPLAIN QUERY PLAN ${this.findCreatorPointersQuery(e,n)}`),u=o.db.all(sql`EXPLAIN QUERY PLAN ${this.findTaskOriginLineageQuery(e)}`),d=o.db.all(sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery(e,n)}`);return [...i,...u,...d].map(c=>c.detail)}finally{o.close();}}return []}explainFindThreadsByOriginPlan(e,n){let r=`__thread_origin_${e}_plan__`,s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=U(o);try{let u=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findThreadIdsQuery(n)}`),d=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findCreatorPointersQuery([r],n)}`),c=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findTaskOriginLineageQuery([r])}`),l=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery([r],n)}`);return [...u,...d,...c,...l].map(p=>p.detail)}finally{i.close();}}return []}updateThreadTitle(e,n,r){if(!this.dbExists())return;let s=this.openHandle(true);try{let o=eq(T.id,e),i=r?and(o,eq(T.workspace_id,r)):o;if(!s.db.select({id:T.id}).from(T).where(i).limit(1).get())return;s.db.update(T).set({title:n,title_locked:1,updated_at:new Date().toISOString()}).where(eq(T.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread title",o)}finally{s.close();}}upsertThread(e,n){let r=this.openHandle(true);try{r.db.transaction(s=>{let i=(n.workspaceId?s.select({id:Oe.id}).from(Oe).where(eq(Oe.id,n.workspaceId)).limit(1).get():void 0)?n.workspaceId:null,u=new Date().toISOString(),d=s.select({id:T.id,message_count:T.message_count,created_by_task_id:T.created_by_task_id}).from(T).where(eq(T.id,e)).limit(1).get();if(d){let c={updated_at:u};n.title!==void 0&&(c.title=n.title),n.titleLocked!==void 0&&(c.title_locked=n.titleLocked?1:0),d.created_by_task_id===null&&n.createdByTaskId!=null&&d.message_count===0&&!qd(s,e,n.createdByTaskId)&&(c.created_by_task_id=n.createdByTaskId),s.update(T).set(c).where(eq(T.id,e)).run();}else s.insert(T).values({id:e,platform:n.platform,workspace_id:i,created_by_kind:null,created_by_id:null,created_by_task_id:n.createdByTaskId??null,title:n.title??null,title_locked:n.titleLocked?1:0,message_count:0,created_at:u,updated_at:u}).run();},{behavior:"immediate"});}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to upsert thread",s)}finally{r.close();}}ensureThread(e,n,r,s){let o=this.openHandle(true);try{o.db.transaction(i=>{let d=(r?i.select({id:Oe.id}).from(Oe).where(eq(Oe.id,r)).limit(1).get():void 0)?r:null,c=i.select({id:T.id,platform:T.platform,workspace_id:T.workspace_id,message_count:T.message_count,created_by_task_id:T.created_by_task_id}).from(T).where(eq(T.id,e)).limit(1).get();if(c){let p={};d&&!c.workspace_id&&(p.workspace_id=d),c.created_by_task_id===null&&s?.createdByTaskId!=null&&c.message_count===0&&!qd(i,e,s.createdByTaskId)&&(p.created_by_task_id=s.createdByTaskId),Object.keys(p).length>0&&i.update(T).set(p).where(eq(T.id,e)).run();return}let l=new Date().toISOString();i.insert(T).values({id:e,platform:n,workspace_id:d,created_by_kind:null,created_by_id:null,created_by_task_id:s?.createdByTaskId??null,message_count:0,created_at:l,updated_at:l}).run();},{behavior:"immediate"});}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to ensure thread",i)}finally{o.close();}}saveUserMessage(e,n,r){if(!this.dbExists())return {firstMessage:false};let s=this.openHandle(true);try{let o=new Date().toISOString();return {firstMessage:s.db.transaction(u=>{let c=u.select({message_count:T.message_count}).from(T).where(eq(T.id,e)).limit(1).get()?.message_count===0;return u.run(sql`
603
+ `}findThreadOrigins(e,n){let r=new Map;if(e.length===0)return r;let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=H(o);try{for(let u=0;u<e.length;u+=qr){let d=e.slice(u,u+qr),l=i.db.all(this.findCreatorPointersQuery(d,n)).filter(I=>!r.has(I.thread_id)),p=l.filter(I=>I.creator_task_id!==null&&I.creator_pointer_unverified===0&&I.creator_actor_kind===null).map(I=>I.creator_task_id),g=p.length>0?i.db.all(this.findTaskOriginLineageQuery(p)):[],_=new Map(g.map(I=>[I.task_id,I])),m=new Map(l.map(I=>[I.thread_id,I])),y=d.filter(I=>{if(r.has(I))return !1;let D=m.get(I);return D?!(D.creator_task_id!==null&&D.creator_pointer_unverified===0)&&D.created_by_kind===null:!0}),k=y.length>0?i.db.all(this.findThreadOriginsQuery(y,n)):[],v=new Map(k.map(I=>[I.thread_id,I]));for(let I of l){if(r.has(I.thread_id))continue;let D=Bd(I,I.created_by_task_id!==null?_.get(I.created_by_task_id):void 0,v.get(I.thread_id));D&&r.set(I.thread_id,D);}for(let I of k)r.has(I.thread_id)||m.has(I.thread_id)||r.set(I.thread_id,Ur(I));}}catch(u){throw new f("DB_ERROR","Failed to fetch thread origins",u)}finally{i.close();}}return r}findThreadsByOrigin(e,n){let r=this.readThreadIds(n,"Failed to find threads by origin"),s=this.findThreadOrigins(r,n),o=r.filter(u=>Vd(s.get(u),e));return this.readThreadRowsByIds(o,n,"Failed to find threads by origin").sort(Jd)}findRecentDirectThreads(e,n=5){if(typeof e!="string"||e.trim().length===0)throw new f("VALIDATION","workspaceId is required");if(!Number.isInteger(n)||n<=0)throw new f("VALIDATION","limit must be a positive integer");let r=this.readThreadSortKeys(e).sort(Jd),s=[],o=new Map;for(let c=0;c<r.length;c+=Kd){let l=r.slice(c,c+Kd),p=this.findThreadOrigins(l.map(g=>g.id),e);for(let[g,_]of p)o.set(g,_);for(let g of l)if(Vd(p.get(g.id),"direct")&&(s.push(g.id),s.length===n))break;if(s.length===n)break}let i=new Map;if(s.length>0){let c=this.readThreadRowsByIds(s,e,"Failed to find recent direct threads");for(let l of c)i.set(l.id,l);}let u=[],d=new Map;for(let c of s){let l=i.get(c);if(!l)continue;u.push(l);let p=o.get(c);p&&d.set(c,p);}return {threads:u,originsByThread:d}}explainBatchFetchTasksPlan(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{return o.db.all(sql`EXPLAIN QUERY PLAN ${this.batchFetchTasksQuery(e,n)}`).map(u=>u.detail)}finally{o.close();}}return []}explainFindThreadOriginsPlan(e,n){if(e.length===0)return [];let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{let i=o.db.all(sql`EXPLAIN QUERY PLAN ${this.findCreatorPointersQuery(e,n)}`),u=o.db.all(sql`EXPLAIN QUERY PLAN ${this.findTaskOriginLineageQuery(e)}`),d=o.db.all(sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery(e,n)}`);return [...i,...u,...d].map(c=>c.detail)}finally{o.close();}}return []}explainFindThreadsByOriginPlan(e,n){let r=`__thread_origin_${e}_plan__`,s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=H(o);try{let u=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findThreadIdsQuery(n)}`),d=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findCreatorPointersQuery([r],n)}`),c=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findTaskOriginLineageQuery([r])}`),l=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery([r],n)}`);return [...u,...d,...c,...l].map(p=>p.detail)}finally{i.close();}}return []}updateThreadTitle(e,n,r){if(!this.dbExists())return;let s=this.openHandle(true);try{let o=eq(T.id,e),i=r?and(o,eq(T.workspace_id,r)):o;if(!s.db.select({id:T.id}).from(T).where(i).limit(1).get())return;s.db.update(T).set({title:n,title_locked:1,updated_at:new Date().toISOString()}).where(eq(T.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread title",o)}finally{s.close();}}upsertThread(e,n){let r=this.openHandle(true);try{r.db.transaction(s=>{let i=(n.workspaceId?s.select({id:te.id}).from(te).where(eq(te.id,n.workspaceId)).limit(1).get():void 0)?n.workspaceId:null,u=new Date().toISOString(),d=s.select({id:T.id,message_count:T.message_count,created_by_task_id:T.created_by_task_id}).from(T).where(eq(T.id,e)).limit(1).get();if(d){let c={updated_at:u};n.title!==void 0&&(c.title=n.title),n.titleLocked!==void 0&&(c.title_locked=n.titleLocked?1:0),d.created_by_task_id===null&&n.createdByTaskId!=null&&d.message_count===0&&!Xd(s,e,n.createdByTaskId)&&(c.created_by_task_id=n.createdByTaskId),s.update(T).set(c).where(eq(T.id,e)).run();}else s.insert(T).values({id:e,platform:n.platform,workspace_id:i,created_by_kind:null,created_by_id:null,created_by_task_id:n.createdByTaskId??null,title:n.title??null,title_locked:n.titleLocked?1:0,message_count:0,created_at:u,updated_at:u}).run();},{behavior:"immediate"});}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to upsert thread",s)}finally{r.close();}}ensureThread(e,n,r,s){let o=this.openHandle(true);try{o.db.transaction(i=>{let d=(r?i.select({id:te.id}).from(te).where(eq(te.id,r)).limit(1).get():void 0)?r:null,c=i.select({id:T.id,platform:T.platform,workspace_id:T.workspace_id,message_count:T.message_count,created_by_task_id:T.created_by_task_id}).from(T).where(eq(T.id,e)).limit(1).get();if(c){let p={};d&&!c.workspace_id&&(p.workspace_id=d),c.created_by_task_id===null&&s?.createdByTaskId!=null&&c.message_count===0&&!Xd(i,e,s.createdByTaskId)&&(p.created_by_task_id=s.createdByTaskId),Object.keys(p).length>0&&i.update(T).set(p).where(eq(T.id,e)).run();return}let l=new Date().toISOString();i.insert(T).values({id:e,platform:n,workspace_id:d,created_by_kind:null,created_by_id:null,created_by_task_id:s?.createdByTaskId??null,message_count:0,created_at:l,updated_at:l}).run();},{behavior:"immediate"});}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to ensure thread",i)}finally{o.close();}}saveUserMessage(e,n,r){if(!this.dbExists())return {firstMessage:false};let s=this.openHandle(true);try{let o=new Date().toISOString();return {firstMessage:s.db.transaction(u=>{let c=u.select({message_count:T.message_count}).from(T).where(eq(T.id,e)).limit(1).get()?.message_count===0;return u.run(sql`
587
604
  UPDATE threads
588
605
  SET first_message = COALESCE(first_message, ${n}),
589
606
  title = CASE WHEN title_locked = 0 AND title IS NULL THEN substr(${n}, 1, 60) ELSE title END,
@@ -591,11 +608,11 @@ Message: ${n.message}
591
608
  message_count = message_count + 1,
592
609
  updated_at = ${o}
593
610
  WHERE id = ${e}
594
- `),c},{behavior:"immediate"})}}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to save user message",o)}finally{s.close();}}saveAssistantMessage(e,n,r){if(!this.dbExists())return;let s=this.openHandle(true);try{let o=new Date().toISOString();s.db.update(T).set({last_message:n,updated_at:o}).where(eq(T.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to save assistant message",o)}finally{s.close();}}updateThread(e,n){if(!this.dbExists())return;let r=this.openHandle(true);try{let s={updated_at:new Date().toISOString()};n.title!==void 0&&(s.title=n.title,s.title_locked=1),n.titleLocked!==void 0&&(s.title_locked=n.titleLocked?1:0),r.db.update(T).set(s).where(eq(T.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread",s)}finally{r.close();}}patchThreadTitleMetadata(e,n,r){let s=n;if(!s||typeof s!="object"||Array.isArray(s))return new an("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(s).some(d=>d!=="priority"&&d!=="state"))return new an("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch only supports priority and state");let i=s;if(i.priority===void 0&&i.state===void 0)return new an("THREAD_TITLE_PATCH_EMPTY","Thread-title metadata patch must change priority or state");for(let d of [i.priority,i.state])if(d!=null&&(typeof d!="string"||d.length===0))return new an("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let u=this.openHandle(true);try{let d=r?and(eq(T.id,e),eq(T.workspace_id,r)):eq(T.id,e);return u.db.transaction(c=>{let l=c.select({metadata:T.metadata}).from(T).where(d).get();if(!l)return null;let p=on(l.metadata),g=p.threadTitle,_=g&&typeof g=="object"&&!Array.isArray(g)?{...g}:{};i.priority===null?delete _.priority:i.priority!==void 0&&(_.priority=i.priority),i.state===null?delete _.state:i.state!==void 0&&(_.state=i.state),Object.keys(_).length>0?p.threadTitle=_:delete p.threadTitle;let m=Object.keys(p).length>0?JSON.stringify(p):null,y=new Date().toISOString();c.update(T).set({metadata:m,updated_at:y}).where(d).run();let k=c.select({metadata:T.metadata}).from(T).where(d).get();if(!k)throw new f("DB_ERROR","Thread-title metadata update could not be read back");let N=bf(k.metadata);return {threadId:e,priority:N.priority,state:N.state}},{behavior:"immediate"})}catch(d){throw d instanceof f?d:new f("DB_ERROR","Failed to patch thread-title metadata",d)}finally{u.close();}}togglePin(e,n){let r=this.openHandle(true);try{let s=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e);return r.db.transaction(o=>{let i=o.select({pinned:T.pinned,metadata:T.metadata}).from(T).where(s).get();if(!i)return null;let u=i.pinned?0:1,d=on(i.metadata);if(u){let c=n?and(eq(T.pinned,1),eq(T.workspace_id,n)):eq(T.pinned,1),l=o.select({metadata:T.metadata}).from(T).where(c).all(),p=null;for(let g of l){let _=on(g.metadata);typeof _.pinOrder=="number"&&(p===null||_.pinOrder<p)&&(p=_.pinOrder);}d.pinOrder=p===null?0:p-1;}else delete d.pinOrder;return o.update(T).set({pinned:u,metadata:Object.keys(d).length>0?JSON.stringify(d):null}).where(s).run(),{pinned:!!u}},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to toggle pin",s)}finally{r.close();}}reorderPins(e,n){let r=this.openHandle(true);try{r.db.transaction(s=>{for(let o=0;o<e.length;o++){let i=n?and(eq(T.id,e[o]),eq(T.workspace_id,n)):eq(T.id,e[o]),u=s.select({metadata:T.metadata}).from(T).where(i).get();if(!u)continue;let d=on(u.metadata);d.pinOrder=o+1,s.update(T).set({metadata:JSON.stringify(d)}).where(i).run();}},{behavior:"immediate"});}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to reorder pins",s)}finally{r.close();}}toggleStar(e,n){let r=this.openHandle(true);try{let s=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e),o=r.db.select({starred:T.starred}).from(T).where(s).get();if(!o)return null;let i=o.starred?0:1;return r.db.update(T).set({starred:i}).where(s).run(),{starred:!!i}}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to toggle star",s)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,s){let i=this.openHandle(true);try{let u=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e);return i.db.transaction(c=>{let l=c.select({metadata:T.metadata}).from(T).where(u).get();if(!l)return null;let p=l.metadata?JSON.parse(l.metadata):{},g=p.overdrive??{},_=s?.defaultTurns??g.defaultTurns??3,m=s?.updatedBy??"ui",y=new Date().toISOString(),k,N,I,D;switch(r){case "enable-count":{let E=s?.turns??_,A=s?.consumeCurrent?Math.max(E-1,0):E;k=A>0?"count":"off",N=A,I=!0,D="count";break}case "enable-latch":{k="latch",N=0,I=!0,D="latch";break}case "disable":{k="off",N=0,I=!1;break}default:{let E=g.state??"off",A=typeof g.remaining=="number"?g.remaining:0;if(E==="count"&&A>0){let v=A-1;v<=0?(k="off",N=0):(k="count",N=v),I=!0,D="count";}else E==="latch"?(k="latch",N=0,I=!0,D="latch"):(k="off",N=0,I=!1);break}}return p.overdrive={state:k,remaining:N,defaultTurns:_,updatedAt:y,updatedBy:m},c.update(T).set({metadata:JSON.stringify(p),updated_at:y}).where(u).run(),{applied:I,appliedMode:D,state:k,remaining:N}},{behavior:"immediate"})}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to resolve overdrive",u)}finally{i.close();}}};h();at();mt();kt();it();h();var ho="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function vf(t){let e=randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let s=e[r];s<248&&(n+=ho[s%62]);}for(;n.length<t;)n+=ho[randomBytes(1)[0]%62];return n}function qn(t){return `${t}_${vf(8)}`}function Wd(t,e){let{createHash:n}=Dt("crypto"),r=n("sha256").update(e).digest(),s=Buffer.alloc(8);for(let i=0;i<32;i++)s[i%8]^=r[i];let o="";for(let i of s)o+=ho[i%62];return `${t}_${o}`}Rt();h();var Nf=["urgent","high","medium","low"],xf=["investigating","in-progress","in-review","on-hold","done"],jd="custom:";var Cf=new Set(Nf),Df=new Set(xf);function _o(t){return typeof t=="string"&&Cf.has(t)}function mo(t){if(typeof t!="string")return false;if(Df.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(jd))return false;let e=t.slice(jd.length);return e.length>=1&&e.length<=20}function Gd(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 ko(t){let e=Gd(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,s={};return _o(r.priority)&&(s.priority=r.priority),mo(r.state)&&(s.state=r.state),s}function zd(t,e){let n=Gd(t)??{},r={...ko(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)}vn();var Hf="regeneration_replaced";var Uf="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var Ff="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",yo=class extends f{threadId;highlightId;expectedRevision;currentRevision;constructor(e,n,r,s){super("CONFLICT",`Highlight revision conflict: expected ${r}, current ${s}`),this.name="ThreadHistoryConflictError",this.threadId=e,this.highlightId=n,this.expectedRevision=r,this.currentRevision=s;}},Vn=class extends yo{},Eo=class extends f{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},qf=new Set(Ii),Bf=new Set(Si),Wf=new Set(Ai),jf=new Set(Oi),Gf=50,Vd=100,Jd=280,Xd=40,zf=new Set(bi),Ur=["queued","running"];function wo(t){return zf.has(t)}function G(t){throw new f("VALIDATION",t)}function Be(t){throw new f("NOT_FOUND",t)}function $(t,e){(typeof t!="string"||t.trim().length===0)&&G(`${e} is required`);}function Wn(t={}){let e=t.actor??t,n=e.actorType??"system";return qf.has(n)||G(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&G("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function Kf(t){$(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&$(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&G("title must not be empty"),t.title.length>120&&G("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!_o(t.priority)&&G(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!mo(t.state)&&G(`invalid state: ${String(t.state)}`);}function Vf(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&G("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)&&G(`${n} must be a non-negative integer`);let e=t.limit??Gf;return (!Number.isInteger(e)||e<1||e>Vd)&&G(`limit must be between 1 and ${Vd}`),e}function Ro(t){typeof t!="string"&&G("text is required");let e=t.trim();return e.length===0&&G("text must not be empty"),e.length>Jd&&G(`text must be at most ${Jd} characters`),e}function st(t,e){return $(t??"",e),t}function So(t){jf.has(t)||G(`invalid highlight kind: ${String(t)}`);}function Jf(t){Wf.has(t)||G(`invalid highlight source: ${String(t)}`);}function Xf(t){$(t.threadId,"threadId"),$(t.workspaceId,"workspaceId");let e=t.source??"manual";Jf(e),So(t.kind);let n=Ro(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,s=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let l=t.taskId??(r&&s&&r===s?r:void 0),p=st(l,"taskId");return (r!==p||s!==p)&&G("manual highlights must cover exactly one task"),{source:e,kind:t.kind,text:n,coversFromTaskId:p,coversToTaskId:p,agentId:t.agentId??null,sourceTaskId:null,detectorVersion:null,contentFingerprint:null}}let o=st(r,"coversFromTaskId"),i=st(s,"coversToTaskId"),u=t.sourceTaskId??o,d=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return st(u??void 0,"sourceTaskId"),st(d??void 0,"detectorVersion"),st(c??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:o,coversToTaskId:i,agentId:t.agentId??null,sourceTaskId:u,detectorVersion:d,contentFingerprint:c}}function Yf(t,e){(!t||typeof t!="object")&&G(`candidates[${e}] is required`),So(t.kind);let n=Ro(t.text),r=st(t.anchorTaskId,`candidates[${e}].anchorTaskId`),s=st(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),o=st(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||Wd("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o}));return $(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o,contentFingerprint:i}}function Qf(t){Array.isArray(t)||G("candidates must be an array"),t.length>Xd&&G(`candidates must contain at most ${Xd} items`);let e=new Map;for(let[n,r]of t.entries()){let s=Yf(r,n);e.set(s.contentFingerprint,s);}return [...e.values()]}function Kn(t){let e=ko(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 Zf(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&G("event payload must be a JSON object"),e}catch(e){throw new f("VALIDATION","event payload must be JSON serializable",e)}}function jn(t,e){return t.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,e)).get()?.maxSeq??0}function Gn(t,e){return !!t.select({id:W.id}).from(W).where(eq(W.thread_id,e)).limit(1).get()}function Ct(t,e){Bf.has(e.type)||G(`invalid thread event type: ${String(e.type)}`);let n=qn("the");t.insert(W).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:Zf(e.payload),created_at:e.createdAt}).run();let r=t.select().from(W).where(eq(W.id,n)).get();if(!r)throw new f("DB_ERROR","Thread event insert did not return a row");return r}function zn(t,e,n,r,s){let o=Kn(e);Ct(t,{threadId:e.id,seq:s,type:"thread.snapshot.imported",actorType:n.actorType,actorId:n.actorId,createdAt:r,payload:{title:o.title,priority:o.priority,state:o.state}});}function qr(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 Fr(t,e,n,r,s,o,i){let u=s==="thread.highlight.created"?qr(e):{before:i?qr({...e,...i,id:e.id}):void 0,after:qr(e)};return Ct(t,{threadId:e.thread_id,seq:o,type:s,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:u})}function eg(t,e,n,r,s,o){return Ct(t,{threadId:e.thread_id,seq:s,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:qr(e),...o??{}}})}var Br=class extends he{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 f("NOT_FOUND","Database not found");if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}let r=U(n);if(e)try{Ae(r.db,n);}catch(s){throw r.close(),s}return r}findThread(e,n,r){let s=eq(T.id,n),o=r===void 0?s:r===null?and(s,isNull(T.workspace_id)):and(s,eq(T.workspace_id,r));return e.select().from(T).where(o).limit(1).get()}findRegenerationRun(e,n,r){let s=e.select().from(F).where(eq(F.id,n)).limit(1).get();if(s&&!(r!==void 0&&!this.findThread(e,s.thread_id,r)))return s}resolveWorkspaceId(e){if($(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:T.workspace_id}).from(T).where(eq(T.id,e)).limit(1).get()?.workspaceId??null}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if($(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let s=this.findThread(r.db,e,n);return s?Kn(s):null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read thread snapshot",s)}finally{r.close();}}updateSnapshot(e){Kf(e);let n=Wn(e),r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findThread(o,e.threadId,e.workspaceId);i||Be(`Thread ${e.threadId} not found`);let u=Kn(i),d=e.title!==void 0,c=d&&e.title!==u.title,l=d&&i.title_locked!==1,p=e.priority!==void 0&&e.priority!==u.priority,g=e.state!==void 0&&e.state!==u.state,_=c||p||g;if(!_&&!l)return u;let m=i.metadata;(p||g)&&(m=zd(i.metadata,{priority:e.priority,state:e.state}));let y={};if(_&&(y.metadata=m,y.updated_at=r),c&&(y.title=e.title),d&&(y.title_locked=1),o.update(T).set(y).where(e.workspaceId===void 0?eq(T.id,e.threadId):e.workspaceId===null?and(eq(T.id,e.threadId),isNull(T.workspace_id)):and(eq(T.id,e.threadId),eq(T.workspace_id,e.workspaceId))).run(),!_){let I={...i,title_locked:1};return Kn(I)}let k=jn(o,i.id)+1;Gn(o,i.id)||(zn(o,i,n,r,k),k+=1),c&&(Ct(o,{threadId:i.id,seq:k,type:"thread.title.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.title,after:e.title}}),k+=1),p&&(Ct(o,{threadId:i.id,seq:k,type:"thread.priority.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.priority,after:e.priority}}),k+=1),g&&Ct(o,{threadId:i.id,seq:k,type:"thread.state.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.state,after:e.state}});let N={...i,title:c?e.title:i.title,metadata:m,title_locked:d?1:i.title_locked,updated_at:r};return Kn(N)},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread snapshot",o)}finally{s.close();}}mutateSnapshot(e){return this.updateSnapshot(e)}updateThreadSnapshot(e){return this.updateSnapshot(e)}getLatestSeq(e,n){if($(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(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,e)).get()?.maxSeq??0:null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read latest thread event sequence",s)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if($(e,"threadId"),$(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,[...On]),or(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(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read completed thread highlight turns",s)}finally{r.close();}}createHighlightRegenerationRun(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.requestId,"requestId"),$(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&$(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findThread(s,e.threadId,e.workspaceId);o||Be(`Thread ${e.threadId} not found`);let i=s.select().from(F).where(and(eq(F.thread_id,o.id),eq(F.request_id,e.requestId))).orderBy(desc(F.requested_at),desc(F.id)).limit(1).get();if(i)return {run:i,created:!1};let u=s.select().from(F).where(and(eq(F.thread_id,o.id),inArray(F.status,Ur))).orderBy(asc(F.requested_at),asc(F.id)).limit(1).get();if(u)throw new Eo(u);let d=e.runId??qn("thr");s.insert(F).values({id:d,thread_id:o.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=s.select().from(F).where(eq(F.id,d)).get();if(!c)throw new f("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:c,created:!0}},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to create highlight regeneration run",s)}finally{r.close();}}beginHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}queueHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}getHighlightRegenerationRun(e,n){if($(e,"runId"),n!==void 0&&$(n,"workspaceId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read highlight regeneration run",s)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if($(e,"threadId"),$(n,"workspaceId"),$(r,"requestId"),!existsSync(this.resolveDbPath()))return null;let s=this.openHandle(false);try{return this.findThread(s.db,e,n)?s.db.select().from(F).where(and(eq(F.thread_id,e),eq(F.request_id,r))).orderBy(desc(F.requested_at),desc(F.id)).limit(1).get()??null:null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read highlight regeneration request",o)}finally{s.close();}}findHighlightRegenerationRun(e,n,r){return this.getHighlightRegenerationRunByRequest(e,n,r)}startHighlightRegenerationRun(e,n){$(e,"runId"),n!==void 0&&$(n,"workspaceId");let r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findRegenerationRun(o,e,n);if(i||Be(`Highlight regeneration run ${e} not found`),wo(i.status)||G(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;o.update(F).set({status:"running",started_at:r}).where(and(eq(F.id,i.id),eq(F.status,"queued"))).run();let u=o.select().from(F).where(eq(F.id,i.id)).get();if(!u)throw new f("DB_ERROR","Highlight regeneration run start did not return a row");return u},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to start highlight regeneration run",o)}finally{s.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){$(e.runId,"runId"),$(e.errorCode,"errorCode"),e.workspaceId!==void 0&&$(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findRegenerationRun(s,e.runId,e.workspaceId);if(o||Be(`Highlight regeneration run ${e.runId} not found`),wo(o.status)||G(`invalid highlight regeneration status: ${o.status}`),o.status==="completed"||o.status==="failed")return o;s.update(F).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(and(eq(F.id,o.id),inArray(F.status,Ur))).run();let i=s.select().from(F).where(eq(F.id,o.id)).get();if(!i)throw new f("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to fail highlight regeneration run",s)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=Uf){$(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>s.update(F).set({status:"failed",completed_at:n,error_code:e}).where(inArray(F.status,Ur)).run().changes,{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to recover interrupted highlight runs",s)}finally{r.close();}}completeHighlightRegenerationRun(e){$(e.runId,"runId"),$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.detectorVersion,"detectorVersion");let n=Qf(e.candidates),r=Wn(e),s=this.openHandle(true),o=false;try{return s.db.transaction(i=>{let u=this.findRegenerationRun(i,e.runId,e.workspaceId);if((!u||u.thread_id!==e.threadId)&&Be(`Highlight regeneration run ${e.runId} not found`),wo(u.status)||G(`invalid highlight regeneration status: ${u.status}`),u.status==="failed")throw new f("CONFLICT","Highlight regeneration run has already failed");if(u.status==="completed")return {run:u,deletedCount:0,createdCount:0,previousAutoCount:u.previous_auto_count??0,newAutoCount:u.new_auto_count??0};o=!0;let d=this.findThread(i,e.threadId,e.workspaceId);d||Be(`Thread ${e.threadId} not found`),u.detector_version!==e.detectorVersion&&G("detectorVersion does not match the regeneration run");let c=i.select().from(H).where(eq(H.thread_id,d.id)).orderBy(asc(H.created_at),asc(H.id)).all(),l=new Set(n.map(v=>v.contentFingerprint)),p=c.filter(v=>v.source==="auto"&&v.status==="active"&&v.revision===0&&!l.has(v.content_fingerprint??"")),g=c.filter(v=>v.source==="auto"&&v.status==="active").length,_=new Set(c.filter(v=>!p.includes(v)&&v.content_fingerprint).map(v=>v.content_fingerprint)),m=n.filter(v=>!_.has(v.contentFingerprint)),y=new Date().toISOString(),k=jn(i,d.id)+1;Gn(i,d.id)||(zn(i,d,r,y,k),k+=1);for(let v of p)i.delete(H).where(eq(H.id,v.id)).run(),eg(i,v,r,y,k,{runId:e.runId,reason:Hf}),k+=1;let N=0,I=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let v of m){let Z=qn("thl");i.insert(H).values({id:Z,thread_id:d.id,source:"auto",kind:v.kind,status:"active",text:v.text,covers_from_task_id:v.coversFromTaskId,covers_to_task_id:v.coversToTaskId,revision:0,created_at:y,updated_at:y,agent_id:I,source_task_id:v.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:v.contentFingerprint,dismissed_at:null}).run();let ge=i.select().from(H).where(eq(H.id,Z)).get();if(!ge)throw new f("DB_ERROR","Regenerated highlight insert did not return a row");Fr(i,ge,r,y,"thread.highlight.created",k),k+=1,N+=1;}let E=i.select().from(H).where(eq(H.thread_id,d.id)).all().filter(v=>v.source==="auto"&&v.status==="active").length;Ct(i,{threadId:d.id,seq:k,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:y,payload:{runId:u.id,detectorVersion:e.detectorVersion,previousAutoCount:g,newAutoCount:E,deletedCount:p.length,createdCount:N}}),i.update(F).set({status:"completed",started_at:u.started_at??y,completed_at:y,error_code:null,previous_auto_count:g,new_auto_count:E}).where(and(eq(F.id,u.id),inArray(F.status,Ur))).run();let A=i.select().from(F).where(eq(F.id,u.id)).get();if(!A)throw new f("DB_ERROR","Highlight regeneration completion did not return a row");return {run:A,deletedCount:p.length,createdCount:N,previousAutoCount:g,newAutoCount:E}},{behavior:"immediate"})}catch(i){if(o)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:Ff});}catch{}throw i instanceof f?i:new f("DB_ERROR","Failed to complete highlight regeneration",i)}finally{s.close();}}completeHighlightRegeneration(e){return this.completeHighlightRegenerationRun(e)}replaceAutoHighlightsAtomically(e){return this.completeHighlightRegenerationRun(e)}listTimeline(e,n,r={}){let s=typeof e=="string"?{...r,threadId:e,workspaceId:n}:e;$(s.threadId,"threadId"),$(s.workspaceId,"workspaceId");let o=Vf(s);if(!existsSync(this.resolveDbPath()))return null;let i=this.openHandle(false);try{if(!this.findThread(i.db,s.threadId,s.workspaceId))return null;let u=i.db.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,s.threadId)).get()?.maxSeq??0,d;s.beforeSeq!==void 0?d=i.db.select().from(W).where(and(eq(W.thread_id,s.threadId),lt$1(W.seq,s.beforeSeq))).orderBy(desc(W.seq)).limit(o+1).all().reverse():s.afterSeq!==void 0?d=i.db.select().from(W).where(and(eq(W.thread_id,s.threadId),sql`${W.seq} > ${s.afterSeq}`)).orderBy(asc(W.seq)).limit(o+1).all():d=i.db.select().from(W).where(eq(W.thread_id,s.threadId)).orderBy(desc(W.seq)).limit(o+1).all().reverse();let c=d.length>o,l=s.afterSeq!==void 0?d.slice(0,o):c?d.slice(1):d,p=!1,g=l[0];return g&&(p=!!i.db.select({id:W.id}).from(W).where(and(eq(W.thread_id,s.threadId),lt$1(W.seq,g.seq))).limit(1).get()),{items:l,latestSeq:u,hasMoreOlder:p}}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to list thread timeline",u)}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=Xf(e),r=Wn(e),s=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);if(u||Be(`Thread ${e.threadId} not found`),n.source==="auto"){let g=i.select().from(H).where(and(eq(H.thread_id,e.threadId),eq(H.source_task_id,n.sourceTaskId),eq(H.detector_version,n.detectorVersion),eq(H.content_fingerprint,n.contentFingerprint))).orderBy(asc(H.created_at),asc(H.id)).limit(1).get();if(g)return g}let d=e.id??qn("thl"),c={id:d,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:s,updated_at:s,agent_id:n.agentId,source_task_id:n.sourceTaskId,detector_version:n.detectorVersion,content_fingerprint:n.contentFingerprint,dismissed_at:null};i.insert(H).values(c).run();let l=i.select().from(H).where(eq(H.id,d)).get();if(!l)throw new f("DB_ERROR","Highlight insert did not return a row");let p=jn(i,u.id)+1;return Gn(i,u.id)||(zn(i,u,r,s,p),p+=1),Fr(i,l,r,s,"thread.highlight.created",p),l},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to create thread highlight",i)}finally{o.close();}}updateHighlight(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&G("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&G("highlight update requires at least one field"),e.kind!==void 0&&So(e.kind);let n=e.text===void 0?void 0:Ro(e.text),r=Wn(e),s=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);u||Be(`Thread ${e.threadId} not found`);let d=i.select().from(H).where(and(eq(H.id,e.highlightId),eq(H.thread_id,u.id))).limit(1).get();if(d||Be(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new Vn(u.id,d.id,e.expectedRevision,d.revision);if(d.status!=="active")throw new Vn(u.id,d.id,e.expectedRevision,d.revision);let c=e.kind??d.kind,l=n??d.text,p=e.coversFromTaskId??d.covers_from_task_id,g=e.coversToTaskId??d.covers_to_task_id;(!l||p.length===0||g.length===0)&&G("highlight projection is incomplete");let _=c!==d.kind||l!==d.text||p!==d.covers_from_task_id||g!==d.covers_to_task_id,m=r.actorType==="user"&&d.source==="auto"&&_?"manual":d.source;if(!(_||m!==d.source))return d;let k=d.revision+1;i.update(H).set({source:m,kind:c,text:l,covers_from_task_id:p,covers_to_task_id:g,revision:k,updated_at:s}).where(and(eq(H.id,d.id),eq(H.revision,d.revision))).run();let N=i.select().from(H).where(eq(H.id,d.id)).get();if(!N)throw new f("DB_ERROR","Highlight update did not return a row");let I=jn(i,u.id)+1;return Gn(i,u.id)||(zn(i,u,r,s,I),I+=1),Fr(i,N,r,s,"thread.highlight.updated",I,d),N},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to update thread highlight",i)}finally{o.close();}}dismissHighlight(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&G("expectedRevision must be a non-negative integer");let n=Wn(e),r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findThread(o,e.threadId,e.workspaceId);i||Be(`Thread ${e.threadId} not found`);let u=o.select().from(H).where(and(eq(H.id,e.highlightId),eq(H.thread_id,i.id))).limit(1).get();if(u||Be(`Highlight ${e.highlightId} not found`),u.revision!==e.expectedRevision)throw new Vn(i.id,u.id,e.expectedRevision,u.revision);if(u.status==="dismissed")return u;let d=u.revision+1;o.update(H).set({status:"dismissed",text:null,revision:d,updated_at:r,dismissed_at:r}).where(and(eq(H.id,u.id),eq(H.revision,u.revision))).run();let c=o.select().from(H).where(eq(H.id,u.id)).get();if(!c)throw new f("DB_ERROR","Highlight dismissal did not return a row");let l=jn(o,i.id)+1;return Gn(o,i.id)||(zn(o,i,n,r,l),l+=1),Fr(o,c,n,r,"thread.highlight.deleted",l,u),c},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to dismiss thread highlight",o)}finally{s.close();}}listActiveHighlights(e,n,r={}){if($(e,"threadId"),$(n,"workspaceId"),r.taskId!==void 0&&$(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&$(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&$(r.coversToTaskId,"coversToTaskId"),!existsSync(this.resolveDbPath()))return null;let s=this.openHandle(false);try{if(!this.findThread(s.db,e,n))return null;let i=s.db.select().from(H).where(and(eq(H.thread_id,e),eq(H.status,"active"))).orderBy(asc(H.created_at),asc(H.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return i;let u=s.db.all(sql`
611
+ `),c},{behavior:"immediate"})}}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to save user message",o)}finally{s.close();}}saveAssistantMessage(e,n,r){if(!this.dbExists())return;let s=this.openHandle(true);try{let o=new Date().toISOString();s.db.update(T).set({last_message:n,updated_at:o}).where(eq(T.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to save assistant message",o)}finally{s.close();}}updateThread(e,n){if(!this.dbExists())return;let r=this.openHandle(true);try{let s={updated_at:new Date().toISOString()};n.title!==void 0&&(s.title=n.title,s.title_locked=1),n.titleLocked!==void 0&&(s.title_locked=n.titleLocked?1:0),r.db.update(T).set(s).where(eq(T.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread",s)}finally{r.close();}}patchThreadTitleMetadata(e,n,r){let s=n;if(!s||typeof s!="object"||Array.isArray(s))return new dn("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(s).some(d=>d!=="priority"&&d!=="state"))return new dn("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch only supports priority and state");let i=s;if(i.priority===void 0&&i.state===void 0)return new dn("THREAD_TITLE_PATCH_EMPTY","Thread-title metadata patch must change priority or state");for(let d of [i.priority,i.state])if(d!=null&&(typeof d!="string"||d.length===0))return new dn("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let u=this.openHandle(true);try{let d=r?and(eq(T.id,e),eq(T.workspace_id,r)):eq(T.id,e);return u.db.transaction(c=>{let l=c.select({metadata:T.metadata}).from(T).where(d).get();if(!l)return null;let p=un(l.metadata),g=p.threadTitle,_=g&&typeof g=="object"&&!Array.isArray(g)?{...g}:{};i.priority===null?delete _.priority:i.priority!==void 0&&(_.priority=i.priority),i.state===null?delete _.state:i.state!==void 0&&(_.state=i.state),Object.keys(_).length>0?p.threadTitle=_:delete p.threadTitle;let m=Object.keys(p).length>0?JSON.stringify(p):null,y=new Date().toISOString();c.update(T).set({metadata:m,updated_at:y}).where(d).run();let k=c.select({metadata:T.metadata}).from(T).where(d).get();if(!k)throw new f("DB_ERROR","Thread-title metadata update could not be read back");let v=$f(k.metadata);return {threadId:e,priority:v.priority,state:v.state}},{behavior:"immediate"})}catch(d){throw d instanceof f?d:new f("DB_ERROR","Failed to patch thread-title metadata",d)}finally{u.close();}}togglePin(e,n){let r=this.openHandle(true);try{return r.db.transaction(s=>Hf(s,e,n),{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to toggle pin",s)}finally{r.close();}}reorderPins(e,n){let r=this.openHandle(true);try{r.db.transaction(s=>Uf(s,e,n),{behavior:"immediate"});}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to reorder pins",s)}finally{r.close();}}toggleStar(e,n){let r=this.openHandle(true);try{let s=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e),o=r.db.select({starred:T.starred}).from(T).where(s).get();if(!o)return null;let i=o.starred?0:1;return r.db.update(T).set({starred:i}).where(s).run(),{starred:!!i}}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to toggle star",s)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,s){let i=this.openHandle(true);try{let u=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e);return i.db.transaction(c=>{let l=c.select({metadata:T.metadata}).from(T).where(u).get();if(!l)return null;let p=l.metadata?JSON.parse(l.metadata):{},g=p.overdrive??{},_=s?.defaultTurns??g.defaultTurns??3,m=s?.updatedBy??"ui",y=new Date().toISOString(),k,v,I,D;switch(r){case "enable-count":{let E=s?.turns??_,A=s?.consumeCurrent?Math.max(E-1,0):E;k=A>0?"count":"off",v=A,I=!0,D="count";break}case "enable-latch":{k="latch",v=0,I=!0,D="latch";break}case "disable":{k="off",v=0,I=!1;break}default:{let E=g.state??"off",A=typeof g.remaining=="number"?g.remaining:0;if(E==="count"&&A>0){let N=A-1;N<=0?(k="off",v=0):(k="count",v=N),I=!0,D="count";}else E==="latch"?(k="latch",v=0,I=!0,D="latch"):(k="off",v=0,I=!1);break}}return p.overdrive={state:k,remaining:v,defaultTurns:_,updatedAt:y,updatedBy:m},c.update(T).set({metadata:JSON.stringify(p),updated_at:y}).where(u).run(),{applied:I,appliedMode:D,state:k,remaining:v}},{behavior:"immediate"})}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to resolve overdrive",u)}finally{i.close();}}};h();dt();kt();Tt();at();h();var Eo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Ff(t){let e=randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let s=e[r];s<248&&(n+=Eo[s%62]);}for(;n.length<t;)n+=Eo[randomBytes(1)[0]%62];return n}function zn(t){return `${t}_${Ff(8)}`}function Qd(t,e){let{createHash:n}=Lt("crypto"),r=n("sha256").update(e).digest(),s=Buffer.alloc(8);for(let i=0;i<32;i++)s[i%8]^=r[i];let o="";for(let i of s)o+=Eo[i%62];return `${t}_${o}`}It();h();var qf=["urgent","high","medium","low"],Bf=["investigating","in-progress","in-review","on-hold","done"],Zd="custom:";var Wf=new Set(qf),jf=new Set(Bf);function Ro(t){return typeof t=="string"&&Wf.has(t)}function So(t){if(typeof t!="string")return false;if(jf.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(Zd))return false;let e=t.slice(Zd.length);return e.length>=1&&e.length<=20}function eu(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 Io(t){let e=eu(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,s={};return Ro(r.priority)&&(s.priority=r.priority),So(r.state)&&(s.state=r.state),s}function tu(t,e){let n=eu(t)??{},r={...Io(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)}Dn();var Jf="regeneration_replaced";var Xf="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var Yf="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",bo=class extends f{threadId;highlightId;expectedRevision;currentRevision;constructor(e,n,r,s){super("CONFLICT",`Highlight revision conflict: expected ${r}, current ${s}`),this.name="ThreadHistoryConflictError",this.threadId=e,this.highlightId=n,this.expectedRevision=r,this.currentRevision=s;}},Zn=class extends bo{},No=class extends f{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},Qf=new Set(Ci),Zf=new Set(xi),eg=new Set(Di),tg=new Set(Pi),ng=50,ru=100,su=280,ou=40,rg=new Set(Li),Wr=["queued","running"];function Oo(t){return rg.has(t)}function G(t){throw new f("VALIDATION",t)}function je(t){throw new f("NOT_FOUND",t)}function $(t,e){(typeof t!="string"||t.trim().length===0)&&G(`${e} is required`);}function Vn(t={}){let e=t.actor??t,n=e.actorType??"system";return Qf.has(n)||G(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&G("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function sg(t){$(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&$(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&G("title must not be empty"),t.title.length>120&&G("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!Ro(t.priority)&&G(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!So(t.state)&&G(`invalid state: ${String(t.state)}`);}function og(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&G("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)&&G(`${n} must be a non-negative integer`);let e=t.limit??ng;return (!Number.isInteger(e)||e<1||e>ru)&&G(`limit must be between 1 and ${ru}`),e}function vo(t){typeof t!="string"&&G("text is required");let e=t.trim();return e.length===0&&G("text must not be empty"),e.length>su&&G(`text must be at most ${su} characters`),e}function ot(t,e){return $(t??"",e),t}function xo(t){tg.has(t)||G(`invalid highlight kind: ${String(t)}`);}function ig(t){eg.has(t)||G(`invalid highlight source: ${String(t)}`);}function ag(t){$(t.threadId,"threadId"),$(t.workspaceId,"workspaceId");let e=t.source??"manual";ig(e),xo(t.kind);let n=vo(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,s=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let l=t.taskId??(r&&s&&r===s?r:void 0),p=ot(l,"taskId");return (r!==p||s!==p)&&G("manual highlights must cover exactly one task"),{source:e,kind:t.kind,text:n,coversFromTaskId:p,coversToTaskId:p,agentId:t.agentId??null,sourceTaskId:null,detectorVersion:null,contentFingerprint:null}}let o=ot(r,"coversFromTaskId"),i=ot(s,"coversToTaskId"),u=t.sourceTaskId??o,d=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return ot(u??void 0,"sourceTaskId"),ot(d??void 0,"detectorVersion"),ot(c??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:o,coversToTaskId:i,agentId:t.agentId??null,sourceTaskId:u,detectorVersion:d,contentFingerprint:c}}function dg(t,e){(!t||typeof t!="object")&&G(`candidates[${e}] is required`),xo(t.kind);let n=vo(t.text),r=ot(t.anchorTaskId,`candidates[${e}].anchorTaskId`),s=ot(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),o=ot(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||Qd("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o}));return $(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o,contentFingerprint:i}}function ug(t){Array.isArray(t)||G("candidates must be an array"),t.length>ou&&G(`candidates must contain at most ${ou} items`);let e=new Map;for(let[n,r]of t.entries()){let s=dg(r,n);e.set(s.contentFingerprint,s);}return [...e.values()]}function Qn(t){let e=Io(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 cg(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&G("event payload must be a JSON object"),e}catch(e){throw new f("VALIDATION","event payload must be JSON serializable",e)}}function Jn(t,e){return t.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,e)).get()?.maxSeq??0}function Xn(t,e){return !!t.select({id:W.id}).from(W).where(eq(W.thread_id,e)).limit(1).get()}function Pt(t,e){Zf.has(e.type)||G(`invalid thread event type: ${String(e.type)}`);let n=zn("the");t.insert(W).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:cg(e.payload),created_at:e.createdAt}).run();let r=t.select().from(W).where(eq(W.id,n)).get();if(!r)throw new f("DB_ERROR","Thread event insert did not return a row");return r}function Yn(t,e,n,r,s){let o=Qn(e);Pt(t,{threadId:e.id,seq:s,type:"thread.snapshot.imported",actorType:n.actorType,actorId:n.actorId,createdAt:r,payload:{title:o.title,priority:o.priority,state:o.state}});}function Gr(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 jr(t,e,n,r,s,o,i){let u=s==="thread.highlight.created"?Gr(e):{before:i?Gr({...e,...i,id:e.id}):void 0,after:Gr(e)};return Pt(t,{threadId:e.thread_id,seq:o,type:s,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:u})}function lg(t,e,n,r,s,o){return Pt(t,{threadId:e.thread_id,seq:s,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:Gr(e),...o??{}}})}var zr=class extends me{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 f("NOT_FOUND","Database not found");if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}let r=H(n);if(e)try{be(r.db,n);}catch(s){throw r.close(),s}return r}findThread(e,n,r){let s=eq(T.id,n),o=r===void 0?s:r===null?and(s,isNull(T.workspace_id)):and(s,eq(T.workspace_id,r));return e.select().from(T).where(o).limit(1).get()}findRegenerationRun(e,n,r){let s=e.select().from(F).where(eq(F.id,n)).limit(1).get();if(s&&!(r!==void 0&&!this.findThread(e,s.thread_id,r)))return s}resolveWorkspaceId(e){if($(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:T.workspace_id}).from(T).where(eq(T.id,e)).limit(1).get()?.workspaceId??null}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if($(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let s=this.findThread(r.db,e,n);return s?Qn(s):null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read thread snapshot",s)}finally{r.close();}}updateSnapshot(e){sg(e);let n=Vn(e),r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findThread(o,e.threadId,e.workspaceId);i||je(`Thread ${e.threadId} not found`);let u=Qn(i),d=e.title!==void 0,c=d&&e.title!==u.title,l=d&&i.title_locked!==1,p=e.priority!==void 0&&e.priority!==u.priority,g=e.state!==void 0&&e.state!==u.state,_=c||p||g;if(!_&&!l)return u;let m=i.metadata;(p||g)&&(m=tu(i.metadata,{priority:e.priority,state:e.state}));let y={};if(_&&(y.metadata=m,y.updated_at=r),c&&(y.title=e.title),d&&(y.title_locked=1),o.update(T).set(y).where(e.workspaceId===void 0?eq(T.id,e.threadId):e.workspaceId===null?and(eq(T.id,e.threadId),isNull(T.workspace_id)):and(eq(T.id,e.threadId),eq(T.workspace_id,e.workspaceId))).run(),!_){let I={...i,title_locked:1};return Qn(I)}let k=Jn(o,i.id)+1;Xn(o,i.id)||(Yn(o,i,n,r,k),k+=1),c&&(Pt(o,{threadId:i.id,seq:k,type:"thread.title.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.title,after:e.title}}),k+=1),p&&(Pt(o,{threadId:i.id,seq:k,type:"thread.priority.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.priority,after:e.priority}}),k+=1),g&&Pt(o,{threadId:i.id,seq:k,type:"thread.state.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.state,after:e.state}});let v={...i,title:c?e.title:i.title,metadata:m,title_locked:d?1:i.title_locked,updated_at:r};return Qn(v)},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread snapshot",o)}finally{s.close();}}mutateSnapshot(e){return this.updateSnapshot(e)}updateThreadSnapshot(e){return this.updateSnapshot(e)}getLatestSeq(e,n){if($(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(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,e)).get()?.maxSeq??0:null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read latest thread event sequence",s)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if($(e,"threadId"),$(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,[...xn]),or(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(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read completed thread highlight turns",s)}finally{r.close();}}createHighlightRegenerationRun(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.requestId,"requestId"),$(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&$(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findThread(s,e.threadId,e.workspaceId);o||je(`Thread ${e.threadId} not found`);let i=s.select().from(F).where(and(eq(F.thread_id,o.id),eq(F.request_id,e.requestId))).orderBy(desc(F.requested_at),desc(F.id)).limit(1).get();if(i)return {run:i,created:!1};let u=s.select().from(F).where(and(eq(F.thread_id,o.id),inArray(F.status,Wr))).orderBy(asc(F.requested_at),asc(F.id)).limit(1).get();if(u)throw new No(u);let d=e.runId??zn("thr");s.insert(F).values({id:d,thread_id:o.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=s.select().from(F).where(eq(F.id,d)).get();if(!c)throw new f("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:c,created:!0}},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to create highlight regeneration run",s)}finally{r.close();}}beginHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}queueHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}getHighlightRegenerationRun(e,n){if($(e,"runId"),n!==void 0&&$(n,"workspaceId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read highlight regeneration run",s)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if($(e,"threadId"),$(n,"workspaceId"),$(r,"requestId"),!existsSync(this.resolveDbPath()))return null;let s=this.openHandle(false);try{return this.findThread(s.db,e,n)?s.db.select().from(F).where(and(eq(F.thread_id,e),eq(F.request_id,r))).orderBy(desc(F.requested_at),desc(F.id)).limit(1).get()??null:null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read highlight regeneration request",o)}finally{s.close();}}findHighlightRegenerationRun(e,n,r){return this.getHighlightRegenerationRunByRequest(e,n,r)}startHighlightRegenerationRun(e,n){$(e,"runId"),n!==void 0&&$(n,"workspaceId");let r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findRegenerationRun(o,e,n);if(i||je(`Highlight regeneration run ${e} not found`),Oo(i.status)||G(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;o.update(F).set({status:"running",started_at:r}).where(and(eq(F.id,i.id),eq(F.status,"queued"))).run();let u=o.select().from(F).where(eq(F.id,i.id)).get();if(!u)throw new f("DB_ERROR","Highlight regeneration run start did not return a row");return u},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to start highlight regeneration run",o)}finally{s.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){$(e.runId,"runId"),$(e.errorCode,"errorCode"),e.workspaceId!==void 0&&$(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findRegenerationRun(s,e.runId,e.workspaceId);if(o||je(`Highlight regeneration run ${e.runId} not found`),Oo(o.status)||G(`invalid highlight regeneration status: ${o.status}`),o.status==="completed"||o.status==="failed")return o;s.update(F).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(and(eq(F.id,o.id),inArray(F.status,Wr))).run();let i=s.select().from(F).where(eq(F.id,o.id)).get();if(!i)throw new f("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to fail highlight regeneration run",s)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=Xf){$(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>s.update(F).set({status:"failed",completed_at:n,error_code:e}).where(inArray(F.status,Wr)).run().changes,{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to recover interrupted highlight runs",s)}finally{r.close();}}completeHighlightRegenerationRun(e){$(e.runId,"runId"),$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.detectorVersion,"detectorVersion");let n=ug(e.candidates),r=Vn(e),s=this.openHandle(true),o=false;try{return s.db.transaction(i=>{let u=this.findRegenerationRun(i,e.runId,e.workspaceId);if((!u||u.thread_id!==e.threadId)&&je(`Highlight regeneration run ${e.runId} not found`),Oo(u.status)||G(`invalid highlight regeneration status: ${u.status}`),u.status==="failed")throw new f("CONFLICT","Highlight regeneration run has already failed");if(u.status==="completed")return {run:u,deletedCount:0,createdCount:0,previousAutoCount:u.previous_auto_count??0,newAutoCount:u.new_auto_count??0};o=!0;let d=this.findThread(i,e.threadId,e.workspaceId);d||je(`Thread ${e.threadId} not found`),u.detector_version!==e.detectorVersion&&G("detectorVersion does not match the regeneration run");let c=i.select().from(U).where(eq(U.thread_id,d.id)).orderBy(asc(U.created_at),asc(U.id)).all(),l=new Set(n.map(N=>N.contentFingerprint)),p=c.filter(N=>N.source==="auto"&&N.status==="active"&&N.revision===0&&!l.has(N.content_fingerprint??"")),g=c.filter(N=>N.source==="auto"&&N.status==="active").length,_=new Set(c.filter(N=>!p.includes(N)&&N.content_fingerprint).map(N=>N.content_fingerprint)),m=n.filter(N=>!_.has(N.contentFingerprint)),y=new Date().toISOString(),k=Jn(i,d.id)+1;Xn(i,d.id)||(Yn(i,d,r,y,k),k+=1);for(let N of p)i.delete(U).where(eq(U.id,N.id)).run(),lg(i,N,r,y,k,{runId:e.runId,reason:Jf}),k+=1;let v=0,I=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let N of m){let Z=zn("thl");i.insert(U).values({id:Z,thread_id:d.id,source:"auto",kind:N.kind,status:"active",text:N.text,covers_from_task_id:N.coversFromTaskId,covers_to_task_id:N.coversToTaskId,revision:0,created_at:y,updated_at:y,agent_id:I,source_task_id:N.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:N.contentFingerprint,dismissed_at:null}).run();let _e=i.select().from(U).where(eq(U.id,Z)).get();if(!_e)throw new f("DB_ERROR","Regenerated highlight insert did not return a row");jr(i,_e,r,y,"thread.highlight.created",k),k+=1,v+=1;}let E=i.select().from(U).where(eq(U.thread_id,d.id)).all().filter(N=>N.source==="auto"&&N.status==="active").length;Pt(i,{threadId:d.id,seq:k,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:y,payload:{runId:u.id,detectorVersion:e.detectorVersion,previousAutoCount:g,newAutoCount:E,deletedCount:p.length,createdCount:v}}),i.update(F).set({status:"completed",started_at:u.started_at??y,completed_at:y,error_code:null,previous_auto_count:g,new_auto_count:E}).where(and(eq(F.id,u.id),inArray(F.status,Wr))).run();let A=i.select().from(F).where(eq(F.id,u.id)).get();if(!A)throw new f("DB_ERROR","Highlight regeneration completion did not return a row");return {run:A,deletedCount:p.length,createdCount:v,previousAutoCount:g,newAutoCount:E}},{behavior:"immediate"})}catch(i){if(o)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:Yf});}catch{}throw i instanceof f?i:new f("DB_ERROR","Failed to complete highlight regeneration",i)}finally{s.close();}}completeHighlightRegeneration(e){return this.completeHighlightRegenerationRun(e)}replaceAutoHighlightsAtomically(e){return this.completeHighlightRegenerationRun(e)}listTimeline(e,n,r={}){let s=typeof e=="string"?{...r,threadId:e,workspaceId:n}:e;$(s.threadId,"threadId"),$(s.workspaceId,"workspaceId");let o=og(s);if(!existsSync(this.resolveDbPath()))return null;let i=this.openHandle(false);try{if(!this.findThread(i.db,s.threadId,s.workspaceId))return null;let u=i.db.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,s.threadId)).get()?.maxSeq??0,d;s.beforeSeq!==void 0?d=i.db.select().from(W).where(and(eq(W.thread_id,s.threadId),lt$1(W.seq,s.beforeSeq))).orderBy(desc(W.seq)).limit(o+1).all().reverse():s.afterSeq!==void 0?d=i.db.select().from(W).where(and(eq(W.thread_id,s.threadId),sql`${W.seq} > ${s.afterSeq}`)).orderBy(asc(W.seq)).limit(o+1).all():d=i.db.select().from(W).where(eq(W.thread_id,s.threadId)).orderBy(desc(W.seq)).limit(o+1).all().reverse();let c=d.length>o,l=s.afterSeq!==void 0?d.slice(0,o):c?d.slice(1):d,p=!1,g=l[0];return g&&(p=!!i.db.select({id:W.id}).from(W).where(and(eq(W.thread_id,s.threadId),lt$1(W.seq,g.seq))).limit(1).get()),{items:l,latestSeq:u,hasMoreOlder:p}}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to list thread timeline",u)}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=ag(e),r=Vn(e),s=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);if(u||je(`Thread ${e.threadId} not found`),n.source==="auto"){let g=i.select().from(U).where(and(eq(U.thread_id,e.threadId),eq(U.source_task_id,n.sourceTaskId),eq(U.detector_version,n.detectorVersion),eq(U.content_fingerprint,n.contentFingerprint))).orderBy(asc(U.created_at),asc(U.id)).limit(1).get();if(g)return g}let d=e.id??zn("thl"),c={id:d,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:s,updated_at:s,agent_id:n.agentId,source_task_id:n.sourceTaskId,detector_version:n.detectorVersion,content_fingerprint:n.contentFingerprint,dismissed_at:null};i.insert(U).values(c).run();let l=i.select().from(U).where(eq(U.id,d)).get();if(!l)throw new f("DB_ERROR","Highlight insert did not return a row");let p=Jn(i,u.id)+1;return Xn(i,u.id)||(Yn(i,u,r,s,p),p+=1),jr(i,l,r,s,"thread.highlight.created",p),l},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to create thread highlight",i)}finally{o.close();}}updateHighlight(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&G("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&G("highlight update requires at least one field"),e.kind!==void 0&&xo(e.kind);let n=e.text===void 0?void 0:vo(e.text),r=Vn(e),s=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);u||je(`Thread ${e.threadId} not found`);let d=i.select().from(U).where(and(eq(U.id,e.highlightId),eq(U.thread_id,u.id))).limit(1).get();if(d||je(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new Zn(u.id,d.id,e.expectedRevision,d.revision);if(d.status!=="active")throw new Zn(u.id,d.id,e.expectedRevision,d.revision);let c=e.kind??d.kind,l=n??d.text,p=e.coversFromTaskId??d.covers_from_task_id,g=e.coversToTaskId??d.covers_to_task_id;(!l||p.length===0||g.length===0)&&G("highlight projection is incomplete");let _=c!==d.kind||l!==d.text||p!==d.covers_from_task_id||g!==d.covers_to_task_id,m=r.actorType==="user"&&d.source==="auto"&&_?"manual":d.source;if(!(_||m!==d.source))return d;let k=d.revision+1;i.update(U).set({source:m,kind:c,text:l,covers_from_task_id:p,covers_to_task_id:g,revision:k,updated_at:s}).where(and(eq(U.id,d.id),eq(U.revision,d.revision))).run();let v=i.select().from(U).where(eq(U.id,d.id)).get();if(!v)throw new f("DB_ERROR","Highlight update did not return a row");let I=Jn(i,u.id)+1;return Xn(i,u.id)||(Yn(i,u,r,s,I),I+=1),jr(i,v,r,s,"thread.highlight.updated",I,d),v},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to update thread highlight",i)}finally{o.close();}}dismissHighlight(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&G("expectedRevision must be a non-negative integer");let n=Vn(e),r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findThread(o,e.threadId,e.workspaceId);i||je(`Thread ${e.threadId} not found`);let u=o.select().from(U).where(and(eq(U.id,e.highlightId),eq(U.thread_id,i.id))).limit(1).get();if(u||je(`Highlight ${e.highlightId} not found`),u.revision!==e.expectedRevision)throw new Zn(i.id,u.id,e.expectedRevision,u.revision);if(u.status==="dismissed")return u;let d=u.revision+1;o.update(U).set({status:"dismissed",text:null,revision:d,updated_at:r,dismissed_at:r}).where(and(eq(U.id,u.id),eq(U.revision,u.revision))).run();let c=o.select().from(U).where(eq(U.id,u.id)).get();if(!c)throw new f("DB_ERROR","Highlight dismissal did not return a row");let l=Jn(o,i.id)+1;return Xn(o,i.id)||(Yn(o,i,n,r,l),l+=1),jr(o,c,n,r,"thread.highlight.deleted",l,u),c},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to dismiss thread highlight",o)}finally{s.close();}}listActiveHighlights(e,n,r={}){if($(e,"threadId"),$(n,"workspaceId"),r.taskId!==void 0&&$(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&$(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&$(r.coversToTaskId,"coversToTaskId"),!existsSync(this.resolveDbPath()))return null;let s=this.openHandle(false);try{if(!this.findThread(s.db,e,n))return null;let i=s.db.select().from(U).where(and(eq(U.thread_id,e),eq(U.status,"active"))).orderBy(asc(U.created_at),asc(U.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return i;let u=s.db.all(sql`
595
612
  SELECT id, started_at FROM tasks WHERE thread_id = ${e}
596
613
  ORDER BY started_at ASC, id ASC
597
- `),d=new Map(u.map((g,_)=>[g.id,_])),c=r.taskId===void 0?void 0:d.get(r.taskId),l=r.coversFromTaskId===void 0?void 0:d.get(r.coversFromTaskId),p=r.coversToTaskId===void 0?void 0:d.get(r.coversToTaskId);return i.filter(g=>{let _=d.get(g.covers_from_task_id),m=d.get(g.covers_to_task_id);if(_===void 0||m===void 0)return !1;let y=Math.min(_,m),k=Math.max(_,m);return !(c!==void 0&&(c<y||c>k)||l!==void 0&&k<l||p!==void 0&&y>p)})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to list active thread highlights",o)}finally{s.close();}}listHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}getActiveHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}};h();at();mt();kt();it();Rt();ls();var Y=class extends f{reason;constructor(e,n="VALIDATION",r=e,s){super(n,r,s),this.name="CommonCodeRepositoryError",this.reason=e;}},Qd="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function ug(){let t=randomBytes(16),e="";for(let n of t)e+=Qd[n%Qd.length];return e.slice(0,12)}function Zd(){return `c_${ug()}`}function cg(t){return typeof t=="string"&&us.includes(t)}function lg(t){return typeof t=="string"&&cs.includes(t)}function ln(t){if(!cg(t))throw new Y("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function eu(t){if(!lg(t))throw new Y("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function tu(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new Y("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function pn(t){if(typeof t!="string"||t.trim().length===0)throw new Y("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function Wr(t){if(typeof t!="string"||t.trim().length===0)throw new Y("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function ht(t,e){return and(eq(C.code_group,t),or(isNull(C.workspace_id),eq(C.workspace_id,e)))}var jr=class extends he{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 f("NOT_FOUND","Database not found");e&&mkdirSync(dirname(n),{recursive:true});let r=U(n);if(e)try{Ae(r.db,n);}catch(s){throw r.close(),s}return r}listSelectable(e,n){if(ln(e),pn(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(C).where(and(ht(e,n),eq(C.is_archived,0))).orderBy(asc(C.sort_order),asc(C.code)).all()}catch(s){throw new f("DB_ERROR","Failed to list selectable common codes",s)}finally{r.close();}}listForHistory(e,n){if(ln(e),pn(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(C).where(ht(e,n)).orderBy(asc(C.sort_order),asc(C.code)).all()}catch(s){throw new f("DB_ERROR","Failed to list common-code history",s)}finally{r.close();}}reorder(e){let n=e.group;if(ln(n),pn(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let s of e.codes)Wr(s);if(new Set(e.codes).size!==e.codes.length)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder scope does not exist");let r=this.openHandle(true);try{return r.db.transaction(s=>{let o=s.select().from(C).where(ht(n,e.workspaceId)).all(),i=o.filter(_=>_.is_archived===0),u=new Set(o.map(_=>_.code)),d=new Set(i.map(_=>_.code)),c=e.codes.find(_=>!u.has(_));if(c)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${c}`);if(e.codes.length!==i.length||e.codes.some(_=>!d.has(_)))throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let l=new Map(i.map(_=>[_.code,_])),p=e.codes.map(_=>{let m=l.get(_);if(!m)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${_}`);return m}),g;for(let[_,m]of p.entries())m.sort_order!==_&&(g??=new Date().toISOString(),s.update(C).set({sort_order:_,updated_at:g}).where(and(eq(C.code_group,n),eq(C.code,m.code))).run());return s.select().from(C).where(ht(n,e.workspaceId)).orderBy(asc(C.sort_order),asc(C.code)).all()},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to reorder common codes",s)}finally{r.close();}}resolve(e,n){if(ln(e),Wr(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(C).where(and(eq(C.code_group,e),eq(C.code,n))).limit(1).get()??null}catch(s){throw new f("DB_ERROR","Failed to resolve common code",s)}finally{r.close();}}createThreadState(e){pn(e.workspaceId);let n=tu(e.name);eu(e.color);let r=this.openHandle(true);try{return r.db.transaction(s=>{if(s.select({code:C.code}).from(C).where(and(ht("THREAD_STATE",e.workspaceId),eq(C.is_archived,0),eq(C.code_name,n))).limit(1).get())throw new Y("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let i=s.select({maxSortOrder:sql`max(${C.sort_order})`}).from(C).where(ht("THREAD_STATE",e.workspaceId)).get(),u=new Date().toISOString(),d=Zd();for(;s.select({code:C.code}).from(C).where(and(eq(C.code_group,"THREAD_STATE"),eq(C.code,d))).limit(1).get();)d=Zd();s.insert(C).values({code_group:"THREAD_STATE",code:d,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:u,updated_at:u}).run();let c=s.select().from(C).where(and(eq(C.code_group,"THREAD_STATE"),eq(C.code,d))).limit(1).get();if(!c)throw new f("DB_ERROR","Created common code could not be read back");return c},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to create thread state common code",s)}finally{r.close();}}updateDisplay(e){if(ln(e.group),Wr(e.code),pn(e.workspaceId),e.name===void 0&&e.color===void 0)throw new Y("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:tu(e.name);e.color!==void 0&&eu(e.color);let r=this.openHandle(true);try{return r.db.transaction(s=>{let o=s.select().from(C).where(and(eq(C.code_group,e.group),eq(C.code,e.code))).limit(1).get();if(!o)throw new Y("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e.group}/${e.code}`);if(this.assertOwnership(o,e.workspaceId),n===null&&o.is_builtin!==1)throw new Y("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&o.is_archived===0){let d=and(ht(e.group,e.workspaceId),eq(C.is_archived,0));if(s.select({code:C.code}).from(C).where(and(d,eq(C.code_name,n),sql`${C.code} <> ${e.code}`)).limit(1).get())throw new Y("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),s.update(C).set(i).where(and(eq(C.code_group,e.group),eq(C.code,e.code))).run();let u=s.select().from(C).where(and(eq(C.code_group,e.group),eq(C.code,e.code))).limit(1).get();if(!u)throw new f("DB_ERROR","Updated common code could not be read back");return u},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update common-code display values",s)}finally{r.close();}}archive(e,n,r,s=true){if(ln(e),Wr(n),pn(r),typeof s!="boolean")throw new Y("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let o=this.openHandle(true);try{return o.db.transaction(i=>{let u=i.select().from(C).where(and(eq(C.code_group,e),eq(C.code,n))).limit(1).get();if(!u)throw new Y("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(u.is_builtin===1)throw new Y("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(u,r),!s&&u.code_name!==null&&i.select({code:C.code}).from(C).where(and(ht(e,r),eq(C.is_archived,0),eq(C.code_name,u.code_name),ne$1(C.code,n))).limit(1).get())throw new Y("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${u.code_name}`);i.update(C).set({is_archived:s?1:0,updated_at:new Date().toISOString()}).where(and(eq(C.code_group,e),eq(C.code,n))).run();let d=i.select().from(C).where(and(eq(C.code_group,e),eq(C.code,n))).limit(1).get();if(!d)throw new f("DB_ERROR","Archived common code could not be read back");return d},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to archive common code",i)}finally{o.close();}}assertOwnership(e,n){if(e.workspace_id!==null&&e.workspace_id!==n)throw new Y("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};qt();vn();h();var We={threadContext:"crewx_thread_context",apps:"apps",appsGuidance:"apps_guidance",availableApps:"available_apps",crewxUiState:"crewx_ui_state"};function gg(t){return t.replace(new RegExp(`<${We.threadContext}\\b[^>]*>[\\s\\S]*?<\\/${We.threadContext}>`,"g"),"").replace(new RegExp(`<${We.apps}\\b[^>]*>[\\s\\S]*?<\\/${We.apps}>`,"g"),"").replace(new RegExp(`<${We.appsGuidance}\\b[^>]*>[\\s\\S]*?<\\/${We.appsGuidance}>`,"g"),"").replace(new RegExp(`<${We.availableApps}\\b[^>]*>[\\s\\S]*?<\\/${We.availableApps}>`,"g"),"").replace(new RegExp(`<${We.crewxUiState}\\b[^>]*>[\\s\\S]*?<\\/${We.crewxUiState}>`,"g"),"").replace(/<conversation_history[^>]*>[\s\S]*?<\/conversation_history>/g,"").split(`
614
+ `),d=new Map(u.map((g,_)=>[g.id,_])),c=r.taskId===void 0?void 0:d.get(r.taskId),l=r.coversFromTaskId===void 0?void 0:d.get(r.coversFromTaskId),p=r.coversToTaskId===void 0?void 0:d.get(r.coversToTaskId);return i.filter(g=>{let _=d.get(g.covers_from_task_id),m=d.get(g.covers_to_task_id);if(_===void 0||m===void 0)return !1;let y=Math.min(_,m),k=Math.max(_,m);return !(c!==void 0&&(c<y||c>k)||l!==void 0&&k<l||p!==void 0&&y>p)})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to list active thread highlights",o)}finally{s.close();}}listHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}getActiveHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}};h();dt();kt();Tt();at();It();gs();var Y=class extends f{reason;constructor(e,n="VALIDATION",r=e,s){super(n,r,s),this.name="CommonCodeRepositoryError",this.reason=e;}},au="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function wg(){let t=randomBytes(16),e="";for(let n of t)e+=au[n%au.length];return e.slice(0,12)}function du(){return `c_${wg()}`}function yg(t){return typeof t=="string"&&ps.includes(t)}function Eg(t){return typeof t=="string"&&fs.includes(t)}function fn(t){if(!yg(t))throw new Y("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function uu(t){if(!Eg(t))throw new Y("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function cu(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new Y("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function gn(t){if(typeof t!="string"||t.trim().length===0)throw new Y("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function Kr(t){if(typeof t!="string"||t.trim().length===0)throw new Y("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function _t(t,e){return and(eq(C.code_group,t),or(isNull(C.workspace_id),eq(C.workspace_id,e)))}var Vr=class extends me{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 f("NOT_FOUND","Database not found");e&&mkdirSync(dirname(n),{recursive:true});let r=H(n);if(e)try{be(r.db,n);}catch(s){throw r.close(),s}return r}listSelectable(e,n){if(fn(e),gn(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(C).where(and(_t(e,n),eq(C.is_archived,0))).orderBy(asc(C.sort_order),asc(C.code)).all()}catch(s){throw new f("DB_ERROR","Failed to list selectable common codes",s)}finally{r.close();}}listForHistory(e,n){if(fn(e),gn(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(C).where(_t(e,n)).orderBy(asc(C.sort_order),asc(C.code)).all()}catch(s){throw new f("DB_ERROR","Failed to list common-code history",s)}finally{r.close();}}reorder(e){let n=e.group;if(fn(n),gn(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let s of e.codes)Kr(s);if(new Set(e.codes).size!==e.codes.length)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder scope does not exist");let r=this.openHandle(true);try{return r.db.transaction(s=>{let o=s.select().from(C).where(_t(n,e.workspaceId)).all(),i=o.filter(_=>_.is_archived===0),u=new Set(o.map(_=>_.code)),d=new Set(i.map(_=>_.code)),c=e.codes.find(_=>!u.has(_));if(c)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${c}`);if(e.codes.length!==i.length||e.codes.some(_=>!d.has(_)))throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let l=new Map(i.map(_=>[_.code,_])),p=e.codes.map(_=>{let m=l.get(_);if(!m)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${_}`);return m}),g;for(let[_,m]of p.entries())m.sort_order!==_&&(g??=new Date().toISOString(),s.update(C).set({sort_order:_,updated_at:g}).where(and(eq(C.code_group,n),eq(C.code,m.code))).run());return s.select().from(C).where(_t(n,e.workspaceId)).orderBy(asc(C.sort_order),asc(C.code)).all()},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to reorder common codes",s)}finally{r.close();}}resolve(e,n){if(fn(e),Kr(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(C).where(and(eq(C.code_group,e),eq(C.code,n))).limit(1).get()??null}catch(s){throw new f("DB_ERROR","Failed to resolve common code",s)}finally{r.close();}}createThreadState(e){gn(e.workspaceId);let n=cu(e.name);uu(e.color);let r=this.openHandle(true);try{return r.db.transaction(s=>{if(s.select({code:C.code}).from(C).where(and(_t("THREAD_STATE",e.workspaceId),eq(C.is_archived,0),eq(C.code_name,n))).limit(1).get())throw new Y("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let i=s.select({maxSortOrder:sql`max(${C.sort_order})`}).from(C).where(_t("THREAD_STATE",e.workspaceId)).get(),u=new Date().toISOString(),d=du();for(;s.select({code:C.code}).from(C).where(and(eq(C.code_group,"THREAD_STATE"),eq(C.code,d))).limit(1).get();)d=du();s.insert(C).values({code_group:"THREAD_STATE",code:d,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:u,updated_at:u}).run();let c=s.select().from(C).where(and(eq(C.code_group,"THREAD_STATE"),eq(C.code,d))).limit(1).get();if(!c)throw new f("DB_ERROR","Created common code could not be read back");return c},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to create thread state common code",s)}finally{r.close();}}updateDisplay(e){if(fn(e.group),Kr(e.code),gn(e.workspaceId),e.name===void 0&&e.color===void 0)throw new Y("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:cu(e.name);e.color!==void 0&&uu(e.color);let r=this.openHandle(true);try{return r.db.transaction(s=>{let o=s.select().from(C).where(and(eq(C.code_group,e.group),eq(C.code,e.code))).limit(1).get();if(!o)throw new Y("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e.group}/${e.code}`);if(this.assertOwnership(o,e.workspaceId),n===null&&o.is_builtin!==1)throw new Y("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&o.is_archived===0){let d=and(_t(e.group,e.workspaceId),eq(C.is_archived,0));if(s.select({code:C.code}).from(C).where(and(d,eq(C.code_name,n),sql`${C.code} <> ${e.code}`)).limit(1).get())throw new Y("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),s.update(C).set(i).where(and(eq(C.code_group,e.group),eq(C.code,e.code))).run();let u=s.select().from(C).where(and(eq(C.code_group,e.group),eq(C.code,e.code))).limit(1).get();if(!u)throw new f("DB_ERROR","Updated common code could not be read back");return u},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update common-code display values",s)}finally{r.close();}}archive(e,n,r,s=true){if(fn(e),Kr(n),gn(r),typeof s!="boolean")throw new Y("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let o=this.openHandle(true);try{return o.db.transaction(i=>{let u=i.select().from(C).where(and(eq(C.code_group,e),eq(C.code,n))).limit(1).get();if(!u)throw new Y("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(u.is_builtin===1)throw new Y("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(u,r),!s&&u.code_name!==null&&i.select({code:C.code}).from(C).where(and(_t(e,r),eq(C.is_archived,0),eq(C.code_name,u.code_name),ne$1(C.code,n))).limit(1).get())throw new Y("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${u.code_name}`);i.update(C).set({is_archived:s?1:0,updated_at:new Date().toISOString()}).where(and(eq(C.code_group,e),eq(C.code,n))).run();let d=i.select().from(C).where(and(eq(C.code_group,e),eq(C.code,n))).limit(1).get();if(!d)throw new f("DB_ERROR","Archived common code could not be read back");return d},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to archive common code",i)}finally{o.close();}}assertOwnership(e,n){if(e.workspace_id!==null&&e.workspace_id!==n)throw new Y("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};Wt();Dn();h();var Ge={threadContext:"crewx_thread_context",apps:"apps",appsGuidance:"apps_guidance",availableApps:"available_apps",crewxUiState:"crewx_ui_state"};function Ig(t){return t.replace(new RegExp(`<${Ge.threadContext}\\b[^>]*>[\\s\\S]*?<\\/${Ge.threadContext}>`,"g"),"").replace(new RegExp(`<${Ge.apps}\\b[^>]*>[\\s\\S]*?<\\/${Ge.apps}>`,"g"),"").replace(new RegExp(`<${Ge.appsGuidance}\\b[^>]*>[\\s\\S]*?<\\/${Ge.appsGuidance}>`,"g"),"").replace(new RegExp(`<${Ge.availableApps}\\b[^>]*>[\\s\\S]*?<\\/${Ge.availableApps}>`,"g"),"").replace(new RegExp(`<${Ge.crewxUiState}\\b[^>]*>[\\s\\S]*?<\\/${Ge.crewxUiState}>`,"g"),"").replace(/<conversation_history[^>]*>[\s\S]*?<\/conversation_history>/g,"").split(`
598
615
  `).filter(s=>!(s.startsWith("Loaded ")&&s.includes("layouts from")||s.includes("[dotenv@")||s.includes("[Nest]")&&s.includes("DEBUG")||s.startsWith("Registered custom layout:")||s.startsWith("Updated custom layout:"))).join(`
599
- `).trim()}function hg(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 _g(t,e,n){if(!t||e&&Xe(t,n))return "";let r=t;try{let s=JSON.parse(r);Array.isArray(s)?r=s.filter(o=>o?.type==="text"&&o?.text).map(o=>o.text).join(`
600
- `):s&&typeof s=="object"&&s.result!==void 0&&(r=s.result||"");}catch{r=gg(r);}return r}var mg=new Set(["success","failed","stopped","running"]),kg=new Set(["failed","stopped"]),Tg={user_stop:"stopped by the user before it finished",runner_lost:"end of run not observed \u2014 it may have done part of the work or may still be running",launch_failed:"the runner never started this run"},Gr=200;function nu(t){if(t.length<=Gr)return t;let e=t.charCodeAt(Gr-1),n=e>=55296&&e<=56319?Gr-1:Gr;return t.slice(0,n)}function wg(t){let e=Ze(t),n=typeof t.error=="string"?t.error.split(`
601
- `)[0]??"":"";if(e){let r=Tg[e];return nu(n?`${r}; ${n}`:r)}return n?nu(n):void 0}var zr=class{dbPath;constructor(e){this.dbPath=e??join(homedir(),".crewx","crewx.db");}getThreadRepo(){return new Hr({dbPath:this.dbPath})}getThreadHistoryRepo(){return new Br({dbPath:this.dbPath})}updateThread(e,n){this.getThreadRepo().updateThread(e,{title:n.title});}async ensureThread(e,n,r,s){let o=this.getThreadRepo(),i=o.findThreadById(e);if(i){if(i.platform!==n)throw new Error(`Thread '${e}' already exists with platform '${i.platform}' \u2014 cannot change to '${n}' (platform is immutable)`);return o.ensureThread(e,n,r,s),{created:false}}return o.ensureThread(e,n,r,s),{created:true}}async fetchHistory(e,n){let r=n?.limit??100,s=this.getThreadRepo(),o=s.findThreadById(e),i=s.findTopLevelTasks(e,void 0,r,n?.agentId||void 0),u=new Set(["queued","cancelled"]),d=n?.currentTraceId;i=i.filter(_=>(!_.status||!u.has(_.status))&&(!d||_.trace_id!==d&&_.id!==d));let c=s.findInterceptedRequests(i.map(_=>_.id));c.size>0&&(i=i.map(_=>c.has(_.id)?{..._,prompt:c.get(_.id)}:_));let l=o?.platform??"cli",p=this.rowsToMessages(i),g=n?.includeHighlights===false?void 0:this.readActiveHighlights(e,o?.workspace_id??null);return {threadId:e,platform:l,messages:p,...g?{highlights:g}:{},metadata:{title:o?.title??void 0,firstMessage:o?.first_message??void 0,lastMessage:o?.last_message??void 0,messageCount:o?.message_count??0,updatedAt:o?.updated_at?new Date(o.updated_at).getTime():void 0}}}async fetchThreadState(e){try{let n=this.getThreadHistoryRepo().getSnapshot(e);if(!n)return;let r=new jr({dbPath:this.dbPath}),s=(o,i)=>{try{return r.resolve(o,i)?.code_name||i}catch{return i}};return {...n.title?{title:n.title}:{},...n.priority?{priority:{code:n.priority,name:s("THREAD_PRIORITY",n.priority)}}:{},...n.state?{state:{code:n.state,name:s("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,s){let{firstMessage:o}=this.getThreadRepo().saveUserMessage(e,n);return {id:e,firstMessage:o}}async saveAssistantMessage(e,n,r,s){return this.getThreadRepo().saveAssistantMessage(e,n),{id:e}}close(){}readActiveHighlights(e,n){if(!n)return [];try{return (this.getThreadHistoryRepo().listActiveHighlights(e,n)??[]).filter(s=>typeof s.text=="string"&&s.text.length>0).map(s=>({id:s.id,text:s.text,kind:s.kind,source:s.source,coversFromTaskId:s.covers_from_task_id,coversToTaskId:s.covers_to_task_id,createdAt:s.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 s={status:r.status??"",error:r.error,metadata:r.metadata},o=r.status?$e(s):void 0,i=hg(r.metadata),u=_g(r.result,o!==void 0&&kg.has(o),i);if(u||o!==void 0&&mg.has(o)){let d={agent_id:r.agent_id,task_id:r.id};if(o&&o!=="success"){d.status=o;let c=wg(s);c&&(d.reason=c);}n.push({id:`${r.id}-assistant`,text:u,isAssistant:true,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:d});}}return n}};var Io=class extends ot{name="conversation";_provider;unsubStart=null;unsubEnd=null;constructor(e){super(),this._provider=new zr(e?.dbPath);}get conversationProvider(){return this._provider}async afterUserMessage(e,n,r,s){}async afterAssistantMessage(e,n,r){}attach(e){this.unsubStart=e.on("task:start",async n=>{if(!n.threadId)return;let r=n.platform??"cli";try{let s=await this._provider.ensureThread(n.threadId,r,n.workspaceId,{createdByTaskId:n.traceId}),o=await this._provider.saveUserMessage(n.threadId,n.message??"");await this.afterUserMessage(n.threadId,o.id,s.created||o.firstMessage,n);}catch{}}),this.unsubEnd=e.on("task:end",async n=>{if(!n.result)return;let r=n.metadata?.threadId;if(!r)return;let s=n.agentRef?.replace(/^@/,"")??"";try{let{id:o}=await this._provider.saveAssistantMessage(r,n.result,s);await this.afterAssistantMessage(r,o,n);}catch{}});}detach(e){this.unsubStart?.(),this.unsubStart=null,this.unsubEnd?.(),this.unsubEnd=null,this._provider.close?.();}};export{Io as ConversationPlugin,Jr as FileLoggerPlugin,go as SqliteTracingPlugin};
616
+ `).trim()}function Ag(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 Og(t,e,n){if(!t||e&&Qe(t,n))return "";let r=t;try{let s=JSON.parse(r);Array.isArray(s)?r=s.filter(o=>o?.type==="text"&&o?.text).map(o=>o.text).join(`
617
+ `):s&&typeof s=="object"&&s.result!==void 0&&(r=s.result||"");}catch{r=Ig(r);}return r}var bg=new Set(["success","failed","stopped","running"]),Ng=new Set(["failed","stopped"]),vg={user_stop:"stopped by the user before it finished",runner_lost:"end of run not observed \u2014 it may have done part of the work or may still be running",launch_failed:"the runner never started this run"},Jr=200;function lu(t){if(t.length<=Jr)return t;let e=t.charCodeAt(Jr-1),n=e>=55296&&e<=56319?Jr-1:Jr;return t.slice(0,n)}function xg(t){let e=Ue(t),n=typeof t.error=="string"?t.error.split(`
618
+ `)[0]??"":"";if(e){let r=vg[e];return lu(n?`${r}; ${n}`:r)}return n?lu(n):void 0}var Xr=class{dbPath;constructor(e){this.dbPath=e??join(homedir(),".crewx","crewx.db");}getThreadRepo(){return new Br({dbPath:this.dbPath})}getThreadHistoryRepo(){return new zr({dbPath:this.dbPath})}updateThread(e,n){this.getThreadRepo().updateThread(e,{title:n.title});}async ensureThread(e,n,r,s){let o=this.getThreadRepo(),i=o.findThreadById(e);if(i){if(i.platform!==n)throw new Error(`Thread '${e}' already exists with platform '${i.platform}' \u2014 cannot change to '${n}' (platform is immutable)`);return o.ensureThread(e,n,r,s),{created:false}}return o.ensureThread(e,n,r,s),{created:true}}async fetchHistory(e,n){let r=n?.limit??100,s=this.getThreadRepo(),o=s.findThreadById(e),i=s.findTopLevelTasks(e,void 0,r,n?.agentId||void 0),u=new Set(["queued","cancelled"]),d=n?.currentTraceId;i=i.filter(_=>(!_.status||!u.has(_.status))&&(!d||_.trace_id!==d&&_.id!==d));let c=s.findInterceptedRequests(i.map(_=>_.id));c.size>0&&(i=i.map(_=>c.has(_.id)?{..._,prompt:c.get(_.id)}:_));let l=o?.platform??"cli",p=this.rowsToMessages(i),g=n?.includeHighlights===false?void 0:this.readActiveHighlights(e,o?.workspace_id??null);return {threadId:e,platform:l,messages:p,...g?{highlights:g}:{},metadata:{title:o?.title??void 0,firstMessage:o?.first_message??void 0,lastMessage:o?.last_message??void 0,messageCount:o?.message_count??0,updatedAt:o?.updated_at?new Date(o.updated_at).getTime():void 0}}}async fetchThreadState(e){try{let n=this.getThreadHistoryRepo().getSnapshot(e);if(!n)return;let r=new Vr({dbPath:this.dbPath}),s=(o,i)=>{try{return r.resolve(o,i)?.code_name||i}catch{return i}};return {...n.title?{title:n.title}:{},...n.priority?{priority:{code:n.priority,name:s("THREAD_PRIORITY",n.priority)}}:{},...n.state?{state:{code:n.state,name:s("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,s){let{firstMessage:o}=this.getThreadRepo().saveUserMessage(e,n);return {id:e,firstMessage:o}}async saveAssistantMessage(e,n,r,s){return this.getThreadRepo().saveAssistantMessage(e,n),{id:e}}close(){}readActiveHighlights(e,n){if(!n)return [];try{return (this.getThreadHistoryRepo().listActiveHighlights(e,n)??[]).filter(s=>typeof s.text=="string"&&s.text.length>0).map(s=>({id:s.id,text:s.text,kind:s.kind,source:s.source,coversFromTaskId:s.covers_from_task_id,coversToTaskId:s.covers_to_task_id,createdAt:s.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 s={status:r.status??"",error:r.error,metadata:r.metadata},o=r.status?xe(s):void 0,i=Ag(r.metadata),u=Og(r.result,o!==void 0&&Ng.has(o),i);if(u||o!==void 0&&bg.has(o)){let d={agent_id:r.agent_id,task_id:r.id};if(o&&o!=="success"){d.status=o;let c=xg(s);c&&(d.reason=c);}n.push({id:`${r.id}-assistant`,text:u,isAssistant:true,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:d});}}return n}};var Co=class extends it{name="conversation";_provider;unsubStart=null;unsubEnd=null;constructor(e){super(),this._provider=new Xr(e?.dbPath);}get conversationProvider(){return this._provider}async afterUserMessage(e,n,r,s){}async afterAssistantMessage(e,n,r){}attach(e){this.unsubStart=e.on("task:start",async n=>{if(!n.threadId)return;let r=n.platform??"cli";try{let s=await this._provider.ensureThread(n.threadId,r,n.workspaceId,{createdByTaskId:n.traceId}),o=await this._provider.saveUserMessage(n.threadId,n.message??"");await this.afterUserMessage(n.threadId,o.id,s.created||o.firstMessage,n);}catch{}}),this.unsubEnd=e.on("task:end",async n=>{if(!n.result)return;let r=n.metadata?.threadId;if(!r)return;let s=n.agentRef?.replace(/^@/,"")??"";try{let{id:o}=await this._provider.saveAssistantMessage(r,n.result,s);await this.afterAssistantMessage(r,o,n);}catch{}});}detach(e){this.unsubStart?.(),this.unsubStart=null,this.unsubEnd?.(),this.unsubEnd=null,this._provider.close?.();}};export{Co as ConversationPlugin,Zr as FileLoggerPlugin,To as SqliteTracingPlugin};