@crewx/sdk 0.9.0-rc.112 → 0.9.0-rc.113

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,35 +1,36 @@
1
- 'use strict';var fs=require('fs'),pe=require('path'),ts=require('os'),crypto=require('crypto'),sqliteCore=require('drizzle-orm/sqlite-core'),drizzleOrm=require('drizzle-orm'),child_process=require('child_process');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var pe__namespace=/*#__PURE__*/_interopNamespace(pe);var ts__default=/*#__PURE__*/_interopDefault(ts);var Ba=Object.defineProperty;var Tt=(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 b=(t,e)=>()=>(t&&(e=t(t=0)),e);var ja=(t,e)=>{for(var n in e)Ba(t,n,{get:e[n],enumerable:true});};var _=b(()=>{});var f,nt=b(()=>{_();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 Zo(t){if(t===":memory:")return t;let e=pe.resolve(t),n=e,r=[];for(;!fs.existsSync(n);){let s=pe.dirname(n);if(s===n)return e;r.unshift(n.slice(s.length+1)),n=s;}let o=fs.realpathSync(n);for(let s of r)o=pe.join(o,s);return pe.resolve(o)}function Za(t,e){let n=Zo(t),r=Zo(e);return process.platform==="win32"?n.toLowerCase()===r.toLowerCase():n===r}function rt(t){if((process.env.NODE_ENV==="test"||process.env.VITEST!==void 0)&&Za(t,pe.join(ts__default.default.homedir(),".crewx","crewx.db")))throw new Error(`${Qa}: ${t}. Set CREWX_DB to an isolated temporary path or :memory:.`);return t}var Qa,we,ot=b(()=>{_();Qa="[crewx] Refusing to open the real CrewX database from a test process";we=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||pe.join(ts__default.default.homedir(),".crewx","crewx.db");return rt(e)}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return fs.existsSync(e??this.resolveDbPath())}};});function U(t,e={}){let n=rt(t),r=Tt("better-sqlite3"),{drizzle:o}=Tt("drizzle-orm/better-sqlite3"),s=e.readOnly?new r(n,{readonly:true,fileMustExist:true}):new r(n);return e.readOnly||(s.exec("PRAGMA journal_mode = WAL"),s.exec(`PRAGMA journal_size_limit = ${td}`),s.exec("PRAGMA busy_timeout = 5000"),s.exec("PRAGMA foreign_keys = ON"),s.exec("PRAGMA analysis_limit = 400")),{db:o(s),runRaw:(i,u=[])=>s.prepare(i).run(...u),close:()=>s.close()}}var td,yt=b(()=>{_();ot();td=32*1024*1024;});function xn(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function rd(t,e){if(e>0||!xn(t,"tasks"))return;let n=t.all("PRAGMA table_info(tasks)"),r=new Set(n.map(o=>o.name));for(let[o,s]of Object.entries(nd))r.has(o)||t.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}function sd(t,e,n){if(!xn(t,"__drizzle_migrations")||!xn(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(fs.readFileSync(pe__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let u=od[i.tag];if(!u)continue;let d=pe__namespace.default.join(e,`${i.tag}.sql`);if(!fs.existsSync(d))continue;let c=fs.readFileSync(d,"utf-8"),l=crypto.createHash("sha256").update(c).digest("hex");if(o.has(l))continue;let p=t.all("PRAGMA table_info(tasks)"),g=new Set(p.map(h=>h.name));for(let[h,m]of Object.entries(u))g.has(h)||(t.run(`ALTER TABLE tasks ADD COLUMN ${h} ${m}`),g.add(h));}}function rs(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 o=e.match(/^DROP\s+INDEX\s+IF\s+EXISTS\s+[`"]?([A-Za-z_][\w$]*)[`"]?/i);if(o)return {kind:"drop-index",name:o[1]}}function os(t){return t.split(/-->\s*statement-breakpoint/).map(e=>e.trim()).filter(Boolean)}function id(t,e,n){return t.all(`PRAGMA table_info("${e}")`).some(s=>s.name===n)}function ad(t,e){return t.all(`SELECT name FROM sqlite_master WHERE type = 'index' AND name = '${e}'`).length>0}function vn(t,e){return e.kind==="add-column"?id(t,e.table,e.column):ad(t,e.name)}function ss(t,e,n){let r=t;for(let o of os(e)){let s=rs(o);s?.kind==="add-column"&&vn(r,s)||s?.kind==="create-index"&&vn(r,s)||s?.kind==="drop-index"&&!vn(r,s)||r.run(n.raw(o));}}function dd(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(fs.readFileSync(pe__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let u=pe__namespace.default.join(e,`${i.tag}.sql`);if(!fs.existsSync(u))continue;let d=fs.readFileSync(u,"utf-8"),c=crypto.createHash("sha256").update(d).digest("hex");if(o.has(c))continue;let p=os(d).map(rs);if(p.some(h=>!h))continue;let g=p;g.some(h=>h.kind==="add-column")&&g.some(h=>vn(t,h))&&(t.transaction(h=>{ss(h,d,n),h.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${i.when})`);},{behavior:"immediate"}),o.add(c),console.error(`[crewx] Reconciled additive migration ${i.tag} from existing schema objects.`));}}function ud(t,e){let{sql:n}=Tt("drizzle-orm"),r=JSON.parse(fs.readFileSync(pe__namespace.default.join(e,"meta/_journal.json"),"utf-8")),s=["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=fs.readFileSync(pe__namespace.default.join(e,`${i}.sql`),"utf-8");return {entry:u,content:d,hash:crypto.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(s[0].hash))for(let d of s.slice(1))u.has(d.hash)||(ss(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 ld(t,e,n,r){let s=JSON.parse(fs.readFileSync(pe__namespace.default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===cd);if(!s)return;let i=pe__namespace.default.join(e,`${s.tag}.sql`);if(!fs.existsSync(i))return;let u=crypto.createHash("sha256").update(fs.readFileSync(i,"utf-8")).digest("hex");if(r&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u))return;if(!xn(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
+ 'use strict';var fs=require('fs'),pe=require('path'),ss=require('os'),crypto=require('crypto'),sqliteCore=require('drizzle-orm/sqlite-core'),drizzleOrm=require('drizzle-orm'),child_process=require('child_process');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var pe__namespace=/*#__PURE__*/_interopNamespace(pe);var ss__default=/*#__PURE__*/_interopDefault(ss);var Xa=Object.defineProperty;var wt=(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 b=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ya=(t,e)=>{for(var n in e)Xa(t,n,{get:e[n],enumerable:true});};var _=b(()=>{});var f,rt=b(()=>{_();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 rs(t){if(t===":memory:")return t;let e=pe.resolve(t),n=e,r=[];for(;!fs.existsSync(n);){let s=pe.dirname(n);if(s===n)return e;r.unshift(n.slice(s.length+1)),n=s;}let o=fs.realpathSync(n);for(let s of r)o=pe.join(o,s);return pe.resolve(o)}function ad(t,e){let n=rs(t),r=rs(e);return process.platform==="win32"?n.toLowerCase()===r.toLowerCase():n===r}function ot(t){if((process.env.NODE_ENV==="test"||process.env.VITEST!==void 0)&&ad(t,pe.join(ss__default.default.homedir(),".crewx","crewx.db")))throw new Error(`${id}: ${t}. Set CREWX_DB to an isolated temporary path or :memory:.`);return t}var id,we,st=b(()=>{_();id="[crewx] Refusing to open the real CrewX database from a test process";we=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||pe.join(ss__default.default.homedir(),".crewx","crewx.db");return ot(e)}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return fs.existsSync(e??this.resolveDbPath())}};});function U(t,e={}){let n=ot(t),r=wt("better-sqlite3"),{drizzle:o}=wt("drizzle-orm/better-sqlite3"),s=e.readOnly?new r(n,{readonly:true,fileMustExist:true}):new r(n);return e.readOnly||(s.exec("PRAGMA journal_mode = WAL"),s.exec(`PRAGMA journal_size_limit = ${ud}`),s.exec("PRAGMA busy_timeout = 5000"),s.exec("PRAGMA foreign_keys = ON"),s.exec("PRAGMA analysis_limit = 400")),{db:o(s),runRaw:(i,u=[])=>s.prepare(i).run(...u),close:()=>s.close()}}var ud,Et=b(()=>{_();st();ud=32*1024*1024;});function Cn(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function ld(t,e){if(e>0||!Cn(t,"tasks"))return;let n=t.all("PRAGMA table_info(tasks)"),r=new Set(n.map(o=>o.name));for(let[o,s]of Object.entries(cd))r.has(o)||t.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}function fd(t,e,n){if(!Cn(t,"__drizzle_migrations")||!Cn(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(fs.readFileSync(pe__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let u=pd[i.tag];if(!u)continue;let d=pe__namespace.default.join(e,`${i.tag}.sql`);if(!fs.existsSync(d))continue;let c=fs.readFileSync(d,"utf-8"),l=crypto.createHash("sha256").update(c).digest("hex");if(o.has(l))continue;let p=t.all("PRAGMA table_info(tasks)"),g=new Set(p.map(h=>h.name));for(let[h,m]of Object.entries(u))g.has(h)||(t.run(`ALTER TABLE tasks ADD COLUMN ${h} ${m}`),g.add(h));}}function as(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 o=e.match(/^DROP\s+INDEX\s+IF\s+EXISTS\s+[`"]?([A-Za-z_][\w$]*)[`"]?/i);if(o)return {kind:"drop-index",name:o[1]}}function ds(t){return t.split(/-->\s*statement-breakpoint/).map(e=>e.trim()).filter(Boolean)}function gd(t,e,n){return t.all(`PRAGMA table_info("${e}")`).some(s=>s.name===n)}function hd(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"?gd(t,e.table,e.column):hd(t,e.name)}function us(t,e,n){let r=t;for(let o of ds(e)){let s=as(o);s?.kind==="add-column"&&xn(r,s)||s?.kind==="create-index"&&xn(r,s)||s?.kind==="drop-index"&&!xn(r,s)||r.run(n.raw(o));}}function _d(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(fs.readFileSync(pe__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let u=pe__namespace.default.join(e,`${i.tag}.sql`);if(!fs.existsSync(u))continue;let d=fs.readFileSync(u,"utf-8"),c=crypto.createHash("sha256").update(d).digest("hex");if(o.has(c))continue;let p=ds(d).map(as);if(p.some(h=>!h))continue;let g=p;g.some(h=>h.kind==="add-column")&&g.some(h=>xn(t,h))&&(t.transaction(h=>{us(h,d,n),h.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${i.when})`);},{behavior:"immediate"}),o.add(c),console.error(`[crewx] Reconciled additive migration ${i.tag} from existing schema objects.`));}}function md(t,e){let{sql:n}=wt("drizzle-orm"),r=JSON.parse(fs.readFileSync(pe__namespace.default.join(e,"meta/_journal.json"),"utf-8")),s=["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=fs.readFileSync(pe__namespace.default.join(e,`${i}.sql`),"utf-8");return {entry:u,content:d,hash:crypto.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(s[0].hash))for(let d of s.slice(1))u.has(d.hash)||(us(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 Td(t,e,n,r){let s=JSON.parse(fs.readFileSync(pe__namespace.default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===kd);if(!s)return;let i=pe__namespace.default.join(e,`${s.tag}.sql`);if(!fs.existsSync(i))return;let u=crypto.createHash("sha256").update(fs.readFileSync(i,"utf-8")).digest("hex");if(r&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u))return;if(!Cn(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 pd(t){let{migrate:e}=Tt("drizzle-orm/better-sqlite3/migrator"),{sql:n}=Tt("drizzle-orm"),r=[pe__namespace.default.join(__dirname,"../migrations"),pe__namespace.default.join(__dirname,"migrations"),pe__namespace.default.join(__dirname,"../../../../drizzle/migrations"),pe__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>fs.existsSync(pe__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
6
+ `);return {hash:u,affectedRows:l?.count??0}}function wd(t){let{migrate:e}=wt("drizzle-orm/better-sqlite3/migrator"),{sql:n}=wt("drizzle-orm"),r=[pe__namespace.default.join(__dirname,"../migrations"),pe__namespace.default.join(__dirname,"migrations"),pe__namespace.default.join(__dirname,"../../../../drizzle/migrations"),pe__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>fs.existsSync(pe__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
7
7
  ${r.join(`
8
- `)}`);let s=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),rd(t,i),s?.cnt&&(ud(t,o),dd(t,o,n),sd(t,o,n));let u=ld(t,o,n,!!s?.cnt);e(t,{migrationsFolder:o});let c=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(c>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${c} migration${c>1?"s":""} applied).`);}u&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(p=>p.hash===u.hash)&&console.error(`[crewx] Task stop-marker cleanup (${u.affectedRows} success/failed row(s) affected).`);}function Pe(t,e){ns.has(e)||(pd(t),ns.add(e));}var ns,nd,od,cd,Et=b(()=>{_();ns=new Set,nd={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"};od={"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"}};cd="0027_task_stop_scope_cleanup";});var Rt,Or=b(()=>{_();Rt=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),starred:sqliteCore.integer("starred").notNull().default(0)});});var a,Kt=b(()=>{_();a=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),actor_kind:sqliteCore.text("actor_kind",{enum:["human","agent","system","unknown"]}),actor_id:sqliteCore.text("actor_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),heartbeat_at:sqliteCore.text("heartbeat_at"),stop_requested_at:sqliteCore.text("stop_requested_at"),stop_requested_epoch:sqliteCore.integer("stop_requested_epoch"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),log_storage:sqliteCore.text("log_storage",{enum:["blob","events"]}).notNull().default("blob"),last_log_seq:sqliteCore.integer("last_log_seq").notNull().default(0),log_revision:sqliteCore.integer("log_revision").notNull().default(0),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),cwd:sqliteCore.text("cwd"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},t=>({log_storage_check:sqliteCore.check("tasks_log_storage_ck",drizzleOrm.sql`${t.log_storage} IN ('blob', 'events')`),idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(t.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(t.pid),idx_tasks_status_heartbeat:sqliteCore.index("idx_tasks_status_heartbeat").on(t.status,t.heartbeat_at),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(t.workspace_id,t.started_at)}));});var Le,ds=b(()=>{_();Kt();Le=sqliteCore.sqliteTable("task_log_events",{id:sqliteCore.integer("id").primaryKey(),task_id:sqliteCore.text("task_id").notNull().references(()=>a.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),timestamp:sqliteCore.text("timestamp").notNull(),level:sqliteCore.text("level").notNull(),message:sqliteCore.text("message").notNull()},t=>({taskSeqUnique:sqliteCore.uniqueIndex("task_log_events_task_seq_uq").on(t.task_id,t.seq),timestampIdIndex:sqliteCore.index("task_log_events_timestamp_id_idx").on(t.timestamp,t.id)}));});var Ed,Rd,T,Ln=b(()=>{_();Or();Ed="json_extract(metadata, '$.threadTitle.state')",Rd="json_extract(metadata, '$.threadTitle.priority')",T=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>Rt.id,{onDelete:"set null"}),created_by_kind:sqliteCore.text("created_by_kind",{enum:["human","agent","system","unknown"]}),created_by_id:sqliteCore.text("created_by_id"),created_by_task_id:sqliteCore.text("created_by_task_id"),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},t=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_workspace_created_by_kind_updated_at:sqliteCore.index("idx_threads_workspace_created_by_kind_updated_at").on(t.workspace_id,t.created_by_kind,t.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(t.title),idx_threads_workspace_thread_state:sqliteCore.index("idx_threads_workspace_thread_state").on(t.workspace_id,drizzleOrm.sql.raw(Ed)),idx_threads_workspace_thread_priority:sqliteCore.index("idx_threads_workspace_thread_priority").on(t.workspace_id,drizzleOrm.sql.raw(Rd))}));});var Ad,ls=b(()=>{_();Kt();Ad=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>a.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>Ad.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},t=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(t.parent_span_id)}));});var ps=b(()=>{_();Kt();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>a.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},t=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(t.timestamp)}));});var gs=b(()=>{_();Ln();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(t.thread_id,t.seq)}));});var _s=b(()=>{_();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},t=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(t.partition_key)}));});var Ts=b(()=>{_();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));});var ws=b(()=>{_();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},t=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));});var Es=b(()=>{_();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},t=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(t.workspace_id,drizzleOrm.sql`${t.created_at} DESC`)})),sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.notification_id,t.user_id]})}));});var Ss=b(()=>{_();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));});var Is=b(()=>{_();sqliteCore.sqliteTable("ui_instances",{id:sqliteCore.text("id").primaryKey().notNull(),definition_id:sqliteCore.text("definition_id").notNull(),definition_version:sqliteCore.integer("definition_version").notNull(),definition_hash:sqliteCore.text("definition_hash").notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),thread_id:sqliteCore.text("thread_id").notNull(),app_id:sqliteCore.text("app_id"),anchor_task_id:sqliteCore.text("anchor_task_id"),domain_ref_json:sqliteCore.text("domain_ref_json").notNull(),state_json:sqliteCore.text("state_json").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),status:sqliteCore.text("status").notNull().default("active"),granted_capabilities_json:sqliteCore.text("granted_capabilities_json").notNull().default("[]"),created_at:sqliteCore.integer("created_at").notNull(),updated_at:sqliteCore.integer("updated_at").notNull()},t=>({idCheck:sqliteCore.check("ui_instances_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:sqliteCore.check("ui_instances_definition_id_ck",drizzleOrm.sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:sqliteCore.check("ui_instances_definition_version_ck",drizzleOrm.sql`${t.definition_version} >= 1`),definitionHashCheck:sqliteCore.check("ui_instances_definition_hash_ck",drizzleOrm.sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:sqliteCore.check("ui_instances_workspace_id_ck",drizzleOrm.sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:sqliteCore.check("ui_instances_thread_id_ck",drizzleOrm.sql`length(${t.thread_id}) BETWEEN 1 AND 256`),appIdCheck:sqliteCore.check("ui_instances_app_id_ck",drizzleOrm.sql`${t.app_id} IS NULL OR length(${t.app_id}) BETWEEN 1 AND 128`),domainRefJsonCheck:sqliteCore.check("ui_instances_domain_ref_json_ck",drizzleOrm.sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:sqliteCore.check("ui_instances_state_json_ck",drizzleOrm.sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:sqliteCore.check("ui_instances_revision_ck",drizzleOrm.sql`${t.revision} >= 0`),statusCheck:sqliteCore.check("ui_instances_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:sqliteCore.check("ui_instances_granted_capabilities_json_ck",drizzleOrm.sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),createdAtCheck:sqliteCore.check("ui_instances_created_at_ck",drizzleOrm.sql`${t.created_at} >= 0`),updatedAtCheck:sqliteCore.check("ui_instances_updated_at_ck",drizzleOrm.sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:sqliteCore.index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id),workspaceThreadAppUnique:sqliteCore.uniqueIndex("ui_instances_workspace_thread_app_uq").on(t.workspace_id,t.thread_id,t.app_id).where(drizzleOrm.sql`${t.status} = 'active'`)}));});var Os=b(()=>{_();sqliteCore.sqliteTable("ui_action_receipts",{id:sqliteCore.text("id").primaryKey().notNull(),instance_id:sqliteCore.text("instance_id").notNull(),request_id:sqliteCore.text("request_id").notNull(),action_id:sqliteCore.text("action_id").notNull(),actor_json:sqliteCore.text("actor_json").notNull(),source:sqliteCore.text("source").notNull(),expected_revision:sqliteCore.integer("expected_revision").notNull(),before_revision:sqliteCore.integer("before_revision").notNull(),after_revision:sqliteCore.integer("after_revision"),status:sqliteCore.text("status").notNull(),outcome:sqliteCore.text("outcome"),input_json:sqliteCore.text("input_json").notNull(),result_json:sqliteCore.text("result_json"),error_code:sqliteCore.text("error_code"),requested_at:sqliteCore.integer("requested_at").notNull(),settled_at:sqliteCore.integer("settled_at")},t=>({idCheck:sqliteCore.check("ui_action_receipts_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:sqliteCore.check("ui_action_receipts_instance_id_ck",drizzleOrm.sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:sqliteCore.check("ui_action_receipts_request_id_ck",drizzleOrm.sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:sqliteCore.check("ui_action_receipts_action_id_ck",drizzleOrm.sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:sqliteCore.check("ui_action_receipts_actor_json_ck",drizzleOrm.sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:sqliteCore.check("ui_action_receipts_source_ck",drizzleOrm.sql`${t.source} IN ('ui_host', 'cli', 'system', 'mcp')`),expectedRevisionCheck:sqliteCore.check("ui_action_receipts_expected_revision_ck",drizzleOrm.sql`${t.expected_revision} >= 0`),beforeRevisionCheck:sqliteCore.check("ui_action_receipts_before_revision_ck",drizzleOrm.sql`${t.before_revision} >= 0`),afterRevisionCheck:sqliteCore.check("ui_action_receipts_after_revision_ck",drizzleOrm.sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:sqliteCore.check("ui_action_receipts_status_ck",drizzleOrm.sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:sqliteCore.check("ui_action_receipts_outcome_ck",drizzleOrm.sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:sqliteCore.check("ui_action_receipts_input_json_ck",drizzleOrm.sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:sqliteCore.check("ui_action_receipts_result_json_ck",drizzleOrm.sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:sqliteCore.check("ui_action_receipts_requested_at_ck",drizzleOrm.sql`${t.requested_at} >= 0`),settledAtCheck:sqliteCore.check("ui_action_receipts_settled_at_ck",drizzleOrm.sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:sqliteCore.check("ui_action_receipts_status_transition_ck",drizzleOrm.sql`(
8
+ `)}`);let s=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),ld(t,i),s?.cnt&&(md(t,o),_d(t,o,n),fd(t,o,n));let u=Td(t,o,n,!!s?.cnt);e(t,{migrationsFolder:o});let c=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(c>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${c} migration${c>1?"s":""} applied).`);}u&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(p=>p.hash===u.hash)&&console.error(`[crewx] Task stop-marker cleanup (${u.affectedRows} success/failed row(s) affected).`);}function De(t,e){is.has(e)||(wd(t),is.add(e));}var is,cd,pd,kd,Rt=b(()=>{_();is=new Set,cd={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"};pd={"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"}};kd="0027_task_stop_scope_cleanup";});var St,vr=b(()=>{_();St=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),starred:sqliteCore.integer("starred").notNull().default(0)});});var a,Vt=b(()=>{_();a=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),actor_kind:sqliteCore.text("actor_kind",{enum:["human","agent","system","unknown"]}),actor_id:sqliteCore.text("actor_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),heartbeat_at:sqliteCore.text("heartbeat_at"),stop_requested_at:sqliteCore.text("stop_requested_at"),stop_requested_epoch:sqliteCore.integer("stop_requested_epoch"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),log_storage:sqliteCore.text("log_storage",{enum:["blob","events"]}).notNull().default("blob"),last_log_seq:sqliteCore.integer("last_log_seq").notNull().default(0),log_revision:sqliteCore.integer("log_revision").notNull().default(0),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),cwd:sqliteCore.text("cwd"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},t=>({log_storage_check:sqliteCore.check("tasks_log_storage_ck",drizzleOrm.sql`${t.log_storage} IN ('blob', 'events')`),idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(t.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(t.pid),idx_tasks_status_heartbeat:sqliteCore.index("idx_tasks_status_heartbeat").on(t.status,t.heartbeat_at),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(t.workspace_id,t.started_at)}));});var Me,ps=b(()=>{_();Vt();Me=sqliteCore.sqliteTable("task_log_events",{id:sqliteCore.integer("id").primaryKey(),task_id:sqliteCore.text("task_id").notNull().references(()=>a.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),timestamp:sqliteCore.text("timestamp").notNull(),level:sqliteCore.text("level").notNull(),message:sqliteCore.text("message").notNull()},t=>({taskSeqUnique:sqliteCore.uniqueIndex("task_log_events_task_seq_uq").on(t.task_id,t.seq),timestampIdIndex:sqliteCore.index("task_log_events_timestamp_id_idx").on(t.timestamp,t.id)}));});var xd,Cd,T,Mn=b(()=>{_();vr();xd="json_extract(metadata, '$.threadTitle.state')",Cd="json_extract(metadata, '$.threadTitle.priority')",T=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>St.id,{onDelete:"set null"}),created_by_kind:sqliteCore.text("created_by_kind",{enum:["human","agent","system","unknown"]}),created_by_id:sqliteCore.text("created_by_id"),created_by_task_id:sqliteCore.text("created_by_task_id"),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},t=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_workspace_created_by_kind_updated_at:sqliteCore.index("idx_threads_workspace_created_by_kind_updated_at").on(t.workspace_id,t.created_by_kind,t.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(t.title),idx_threads_workspace_thread_state:sqliteCore.index("idx_threads_workspace_thread_state").on(t.workspace_id,drizzleOrm.sql.raw(xd)),idx_threads_workspace_thread_priority:sqliteCore.index("idx_threads_workspace_thread_priority").on(t.workspace_id,drizzleOrm.sql.raw(Cd))}));});var Dd,hs=b(()=>{_();Vt();Dd=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>a.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>Dd.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},t=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(t.parent_span_id)}));});var _s=b(()=>{_();Vt();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>a.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},t=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(t.timestamp)}));});var ks=b(()=>{_();Mn();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(t.thread_id,t.seq)}));});var ws=b(()=>{_();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},t=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(t.partition_key)}));});var Rs=b(()=>{_();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));});var Ss=b(()=>{_();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},t=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));});var As=b(()=>{_();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},t=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(t.workspace_id,drizzleOrm.sql`${t.created_at} DESC`)})),sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.notification_id,t.user_id]})}));});var bs=b(()=>{_();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));});var vs=b(()=>{_();sqliteCore.sqliteTable("ui_instances",{id:sqliteCore.text("id").primaryKey().notNull(),definition_id:sqliteCore.text("definition_id").notNull(),definition_version:sqliteCore.integer("definition_version").notNull(),definition_hash:sqliteCore.text("definition_hash").notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),thread_id:sqliteCore.text("thread_id").notNull(),app_id:sqliteCore.text("app_id"),anchor_task_id:sqliteCore.text("anchor_task_id"),domain_ref_json:sqliteCore.text("domain_ref_json").notNull(),state_json:sqliteCore.text("state_json").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),status:sqliteCore.text("status").notNull().default("active"),granted_capabilities_json:sqliteCore.text("granted_capabilities_json").notNull().default("[]"),created_at:sqliteCore.integer("created_at").notNull(),updated_at:sqliteCore.integer("updated_at").notNull()},t=>({idCheck:sqliteCore.check("ui_instances_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:sqliteCore.check("ui_instances_definition_id_ck",drizzleOrm.sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:sqliteCore.check("ui_instances_definition_version_ck",drizzleOrm.sql`${t.definition_version} >= 1`),definitionHashCheck:sqliteCore.check("ui_instances_definition_hash_ck",drizzleOrm.sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:sqliteCore.check("ui_instances_workspace_id_ck",drizzleOrm.sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:sqliteCore.check("ui_instances_thread_id_ck",drizzleOrm.sql`length(${t.thread_id}) BETWEEN 1 AND 256`),appIdCheck:sqliteCore.check("ui_instances_app_id_ck",drizzleOrm.sql`${t.app_id} IS NULL OR length(${t.app_id}) BETWEEN 1 AND 128`),domainRefJsonCheck:sqliteCore.check("ui_instances_domain_ref_json_ck",drizzleOrm.sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:sqliteCore.check("ui_instances_state_json_ck",drizzleOrm.sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:sqliteCore.check("ui_instances_revision_ck",drizzleOrm.sql`${t.revision} >= 0`),statusCheck:sqliteCore.check("ui_instances_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:sqliteCore.check("ui_instances_granted_capabilities_json_ck",drizzleOrm.sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),createdAtCheck:sqliteCore.check("ui_instances_created_at_ck",drizzleOrm.sql`${t.created_at} >= 0`),updatedAtCheck:sqliteCore.check("ui_instances_updated_at_ck",drizzleOrm.sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:sqliteCore.index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id),workspaceThreadAppUnique:sqliteCore.uniqueIndex("ui_instances_workspace_thread_app_uq").on(t.workspace_id,t.thread_id,t.app_id).where(drizzleOrm.sql`${t.status} = 'active'`)}));});var Cs=b(()=>{_();sqliteCore.sqliteTable("ui_action_receipts",{id:sqliteCore.text("id").primaryKey().notNull(),instance_id:sqliteCore.text("instance_id").notNull(),request_id:sqliteCore.text("request_id").notNull(),action_id:sqliteCore.text("action_id").notNull(),actor_json:sqliteCore.text("actor_json").notNull(),source:sqliteCore.text("source").notNull(),expected_revision:sqliteCore.integer("expected_revision").notNull(),before_revision:sqliteCore.integer("before_revision").notNull(),after_revision:sqliteCore.integer("after_revision"),status:sqliteCore.text("status").notNull(),outcome:sqliteCore.text("outcome"),input_json:sqliteCore.text("input_json").notNull(),result_json:sqliteCore.text("result_json"),error_code:sqliteCore.text("error_code"),requested_at:sqliteCore.integer("requested_at").notNull(),settled_at:sqliteCore.integer("settled_at")},t=>({idCheck:sqliteCore.check("ui_action_receipts_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:sqliteCore.check("ui_action_receipts_instance_id_ck",drizzleOrm.sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:sqliteCore.check("ui_action_receipts_request_id_ck",drizzleOrm.sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:sqliteCore.check("ui_action_receipts_action_id_ck",drizzleOrm.sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:sqliteCore.check("ui_action_receipts_actor_json_ck",drizzleOrm.sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:sqliteCore.check("ui_action_receipts_source_ck",drizzleOrm.sql`${t.source} IN ('ui_host', 'cli', 'system', 'mcp')`),expectedRevisionCheck:sqliteCore.check("ui_action_receipts_expected_revision_ck",drizzleOrm.sql`${t.expected_revision} >= 0`),beforeRevisionCheck:sqliteCore.check("ui_action_receipts_before_revision_ck",drizzleOrm.sql`${t.before_revision} >= 0`),afterRevisionCheck:sqliteCore.check("ui_action_receipts_after_revision_ck",drizzleOrm.sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:sqliteCore.check("ui_action_receipts_status_ck",drizzleOrm.sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:sqliteCore.check("ui_action_receipts_outcome_ck",drizzleOrm.sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:sqliteCore.check("ui_action_receipts_input_json_ck",drizzleOrm.sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:sqliteCore.check("ui_action_receipts_result_json_ck",drizzleOrm.sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:sqliteCore.check("ui_action_receipts_requested_at_ck",drizzleOrm.sql`${t.requested_at} >= 0`),settledAtCheck:sqliteCore.check("ui_action_receipts_settled_at_ck",drizzleOrm.sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:sqliteCore.check("ui_action_receipts_status_transition_ck",drizzleOrm.sql`(
9
9
  (${t.status} = 'requested' AND ${t.after_revision} IS NULL AND ${t.outcome} IS NULL AND ${t.settled_at} IS NULL)
10
10
  OR
11
11
  (${t.status} = 'settled' AND ${t.after_revision} IS NOT NULL AND ${t.outcome} IS NOT NULL AND ${t.settled_at} IS NOT NULL)
12
- )`),instanceRequestUnique:sqliteCore.uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:sqliteCore.index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:sqliteCore.index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));});var vs,xs=b(()=>{_();vs=sqliteCore.sqliteTable("projects",{id:sqliteCore.text("id").primaryKey().notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),name:sqliteCore.text("name").notNull(),outcome:sqliteCore.text("outcome").notNull(),due_date:sqliteCore.text("due_date"),scene:sqliteCore.text("scene").notNull().default("planning"),stages_json:sqliteCore.text("stages_json").notNull(),stage_index:sqliteCore.integer("stage_index").notNull(),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),accepted_at:sqliteCore.text("accepted_at"),archived_at:sqliteCore.text("archived_at")},t=>({idCheck:sqliteCore.check("projects_id_ck",drizzleOrm.sql`${t.id} GLOB 'prj_*'`),sceneCheck:sqliteCore.check("projects_scene_ck",drizzleOrm.sql`${t.scene} IN ('planning', 'plan_review', 'running', 'human_wait', 'limit_wait', 'failed_stop', 'analyzing_feedback', 'replanned', 'awaiting_review', 'accepted')`),stagesJsonCheck:sqliteCore.check("projects_stages_json_ck",drizzleOrm.sql`json_valid(${t.stages_json}) AND json_type(${t.stages_json}) = 'array'`),stageIndexCheck:sqliteCore.check("projects_stage_index_ck",drizzleOrm.sql`${t.stage_index} >= 1`)})),sqliteCore.sqliteTable("project_criteria",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>vs.id,{onDelete:"cascade"}),position:sqliteCore.integer("position").notNull(),statement:sqliteCore.text("statement").notNull(),verify_status:sqliteCore.text("verify_status").notNull().default("pending"),verified_at:sqliteCore.text("verified_at"),evidence_json:sqliteCore.text("evidence_json").notNull().default("[]"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idCheck:sqliteCore.check("project_criteria_id_ck",drizzleOrm.sql`${t.id} GLOB 'pjc_*'`),verifyStatusCheck:sqliteCore.check("project_criteria_verify_status_ck",drizzleOrm.sql`${t.verify_status} IN ('pending', 'verifying', 'passed', 'failed')`),evidenceJsonCheck:sqliteCore.check("project_criteria_evidence_json_ck",drizzleOrm.sql`json_valid(${t.evidence_json}) AND json_type(${t.evidence_json}) = 'array'`),projectPositionUnique:sqliteCore.uniqueIndex("project_criteria_project_position_uq").on(t.project_id,t.position)})),sqliteCore.sqliteTable("project_events",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>vs.id,{onDelete:"restrict"}),seq:sqliteCore.integer("seq").notNull(),actor_type:sqliteCore.text("actor_type").notNull(),actor_id:sqliteCore.text("actor_id"),type:sqliteCore.text("type").notNull(),title:sqliteCore.text("title").notNull(),summary:sqliteCore.text("summary"),payload_json:sqliteCore.text("payload_json").notNull().default("{}"),created_at:sqliteCore.text("created_at").notNull()},t=>({idCheck:sqliteCore.check("project_events_id_ck",drizzleOrm.sql`${t.id} GLOB 'pje_*'`),actorTypeCheck:sqliteCore.check("project_events_actor_type_ck",drizzleOrm.sql`${t.actor_type} IN ('user', 'project_manager', 'system')`),payloadJsonCheck:sqliteCore.check("project_events_payload_json_ck",drizzleOrm.sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),projectSeqUnique:sqliteCore.uniqueIndex("project_events_project_seq_uq").on(t.project_id,t.seq)}));});var Dr,Lr,S,Mr=b(()=>{_();Dr=["THREAD_STATE","THREAD_PRIORITY"],Lr=["gray","blue","violet","green","amber","orange","red","pink"],S=sqliteCore.sqliteTable("common_codes",{code_group:sqliteCore.text("code_group").notNull(),code:sqliteCore.text("code").notNull(),code_name:sqliteCore.text("code_name"),color:sqliteCore.text("color").notNull().default("gray"),sort_order:sqliteCore.integer("sort_order").notNull(),workspace_id:sqliteCore.text("workspace_id"),is_builtin:sqliteCore.integer("is_builtin").notNull().default(0),is_archived:sqliteCore.integer("is_archived").notNull().default(0),metadata:sqliteCore.text("metadata"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.code_group,t.code]}),metadataCheck:sqliteCore.check("common_codes_metadata_ck",drizzleOrm.sql`${t.metadata} IS NULL OR (json_valid(${t.metadata}) AND json_type(${t.metadata}) = 'object')`),builtinCheck:sqliteCore.check("common_codes_builtin_ck",drizzleOrm.sql`${t.is_builtin} IN (0, 1)`),archivedCheck:sqliteCore.check("common_codes_archived_ck",drizzleOrm.sql`${t.is_archived} IN (0, 1)`),idxCommonCodesSelection:sqliteCore.index("idx_common_codes_group_archived_order").on(t.code_group,t.is_archived,t.sort_order)}));});var Cs,Ns,Ps,Ds,Ls,B,$,D,Ms=b(()=>{_();Ln();Cs=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],Ns=["user","agent","system"],Ps=["auto","manual"],Ds=["decision","judgment","issue","result","pivot"],Ls=["queued","running","completed","failed"],B=sqliteCore.sqliteTable("thread_events",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),type:sqliteCore.text("type").notNull(),actor_type:sqliteCore.text("actor_type").notNull(),payload_json:sqliteCore.text("payload_json").notNull(),created_at:sqliteCore.text("created_at").notNull(),actor_id:sqliteCore.text("actor_id"),task_id:sqliteCore.text("task_id"),highlight_id:sqliteCore.text("highlight_id")},t=>({typeCheck:sqliteCore.check("thread_events_type_ck",drizzleOrm.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:sqliteCore.check("thread_events_actor_type_ck",drizzleOrm.sql`${t.actor_type} IN ('user', 'agent', 'system')`),payloadJsonCheck:sqliteCore.check("thread_events_payload_json_ck",drizzleOrm.sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),threadSeqIndex:sqliteCore.index("idx_thread_events_thread_seq").on(t.thread_id,t.seq),threadCreatedIndex:sqliteCore.index("idx_thread_events_thread_created").on(t.thread_id,t.created_at),threadSeqUnique:sqliteCore.uniqueIndex("thread_events_thread_seq_uq").on(t.thread_id,t.seq)})),$=sqliteCore.sqliteTable("thread_highlight_runs",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),request_id:sqliteCore.text("request_id").notNull(),status:sqliteCore.text("status").notNull(),detector_version:sqliteCore.text("detector_version").notNull(),requested_at:sqliteCore.text("requested_at").notNull(),started_at:sqliteCore.text("started_at"),completed_at:sqliteCore.text("completed_at"),error_code:sqliteCore.text("error_code"),previous_auto_count:sqliteCore.integer("previous_auto_count"),new_auto_count:sqliteCore.integer("new_auto_count")},t=>({statusCheck:sqliteCore.check("thread_highlight_runs_status_ck",drizzleOrm.sql`${t.status} IN ('queued', 'running', 'completed', 'failed')`),countCheck:sqliteCore.check("thread_highlight_runs_counts_ck",drizzleOrm.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:sqliteCore.uniqueIndex("thread_highlight_runs_thread_request_uq").on(t.thread_id,t.request_id),inProgressThreadUnique:sqliteCore.uniqueIndex("thread_highlight_runs_in_progress_thread_uq").on(t.thread_id).where(drizzleOrm.sql`${t.status} IN ('queued', 'running')`),threadStatusRequestedIndex:sqliteCore.index("idx_thread_highlight_runs_thread_status_requested").on(t.thread_id,t.status,t.requested_at)})),D=sqliteCore.sqliteTable("thread_highlights",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),source:sqliteCore.text("source").notNull(),kind:sqliteCore.text("kind").notNull(),status:sqliteCore.text("status").notNull().default("active"),text:sqliteCore.text("text"),covers_from_task_id:sqliteCore.text("covers_from_task_id").notNull(),covers_to_task_id:sqliteCore.text("covers_to_task_id").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),agent_id:sqliteCore.text("agent_id"),source_task_id:sqliteCore.text("source_task_id"),detector_version:sqliteCore.text("detector_version"),content_fingerprint:sqliteCore.text("content_fingerprint"),dismissed_at:sqliteCore.text("dismissed_at")},t=>({sourceCheck:sqliteCore.check("thread_highlights_source_ck",drizzleOrm.sql`${t.source} IN ('auto', 'manual')`),kindCheck:sqliteCore.check("thread_highlights_kind_ck",drizzleOrm.sql`${t.kind} IN ('decision', 'judgment', 'issue', 'result', 'pivot')`),statusCheck:sqliteCore.check("thread_highlights_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'dismissed')`),activeTextCheck:sqliteCore.check("thread_highlights_active_text_ck",drizzleOrm.sql`${t.status} = 'dismissed' OR (${t.text} IS NOT NULL AND length(${t.text}) > 0)`),coversCheck:sqliteCore.check("thread_highlights_covers_ck",drizzleOrm.sql`length(${t.covers_from_task_id}) > 0 AND length(${t.covers_to_task_id}) > 0`),autoKeyCheck:sqliteCore.check("thread_highlights_auto_key_ck",drizzleOrm.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:sqliteCore.index("idx_thread_highlights_thread_status_created").on(t.thread_id,t.status,t.created_at),threadCoversIndex:sqliteCore.index("idx_thread_highlights_thread_covers").on(t.thread_id,t.covers_from_task_id,t.covers_to_task_id),autoIdempotencyUnique:sqliteCore.uniqueIndex("thread_highlights_auto_idempotency_uq").on(t.thread_id,t.source_task_id,t.detector_version,t.content_fingerprint).where(drizzleOrm.sql`${t.source} = 'auto'`)}));});var $s=b(()=>{_();sqliteCore.sqliteTable("storage_metadata",{source_kind:sqliteCore.text("source_kind").notNull(),source_id:sqliteCore.text("source_id").notNull(),utc_ts:sqliteCore.text("utc_ts"),bytes:sqliteCore.integer("bytes").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.source_kind,t.source_id]}),kindTimestampBytesIndex:sqliteCore.index("idx_storage_metadata_kind_ts_bytes").on(t.source_kind,t.utc_ts,t.bytes)})),sqliteCore.sqliteTable("storage_metadata_state",{unit:sqliteCore.text("unit").primaryKey().notNull(),cursor_rowid:sqliteCore.integer("cursor_rowid").notNull().default(0),end_rowid:sqliteCore.integer("end_rowid"),complete:sqliteCore.integer("complete").notNull().default(0),updated_at:sqliteCore.text("updated_at").notNull()});});var St=b(()=>{_();Or();Kt();ds();Ln();ls();ps();gs();_s();Ts();ws();Es();Ss();Is();Os();xs();Mr();Ms();$s();});var It,$r,Us,Ur=b(()=>{_();It={"claude-fable-5-1":{input:10,cachedInput:.25,output:50},"claude-fable-5":{input:10,cachedInput:1,output:50},"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":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-6-astra":{input:10,cachedInput:1,output:50},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"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.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},$r=new Set(["gpt-5.3-codex-spark"]),Us=new Set(["auto","claude-fable-5","claude-fable-5-1","claude-haiku-4-5","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","gemini-3.1-pro","gemini-3.5-flash","gemini-3.6-flash","gemini-3.7-flash","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-oss-120b","grok-4.5","grok-4.6"]);});function qr(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 eu(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),Yt;let e=qr(t),n=Zd[e];if(n)return Bn[n]??It[n]??Yt;if(Bn[e])return Bn[e];if(It[e])return It[e];if($r.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),Yt;if(Us.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),Yt;let r={...It,...Bn};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),Yt}function tu(t,e,n,r=0,o){let s=eu(n),i=Math.min(r,t),d=(t-i)*s.input/1e6,c=i*s.cachedInput/1e6,l=e*s.output/1e6;return d+c+l}function qs(t,e,n,r,o,s){return t&&t>0?t:!e&&!n?0:tu(e??0,n??0,o,r??0)}var Zd,Yt,Bn,jn=b(()=>{_();Ur();Ur();Zd={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"},Yt={input:0,cachedInput:0,output:0},Bn={};});function Ws(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function Bs(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function Gs(t){return Number.isSafeInteger(t)&&t>0}function iu(t,e){return new Promise(n=>{let r;try{r=child_process.spawn(t,e,{windowsHide:!0});}catch(c){n({status:null,stdout:"",stderr:"",error:Ws(c)});return}let o="",s="",i=false,u,d=setTimeout(()=>{try{r.kill();}catch{}u({status:null,stdout:o,stderr:s,error:new Error(`Command timed out after ${Fs}ms`)});},Fs);u=c=>{i||(i=true,clearTimeout(d),n(c));},r.stdout?.setEncoding("utf8"),r.stderr?.setEncoding("utf8"),r.stdout?.on("data",c=>{o+=String(c);}),r.stderr?.on("data",c=>{s+=String(c);}),r.once("error",c=>{u({status:null,stdout:o,stderr:s,error:c});}),r.once("close",c=>{u({status:c,stdout:o,stderr:s});});})}async function zs(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):iu(t,e)}function au(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function du(){return new Promise(t=>{setImmediate(t);})}function dt(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return Bs(n)==="ESRCH"?"not_found":Bs(n)==="EPERM"?"alive":"unknown"}}function uu(t,e){let n=dt(-t,e),r=dt(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function Ks(t,e,n,r){let o=Math.max(0,n),s=Math.max(1,r.pollIntervalMs??ou),i=Date.now()+o,u,d=o===0,c=r.sleep?Promise.resolve().then(()=>r.sleep(o)).then(()=>{},()=>{}):new Promise(l=>{u=setTimeout(l,o);});c.then(()=>{d=true;});try{for(await du();;){let l=uu(t,e);if(l==="not_found")return l;let p=i-Date.now();if(d||p<=0)return l;await Promise.race([c,au(Math.min(s,p))]);}}finally{u!==void 0&&clearTimeout(u);}}async function js(t,e,n,r,o){let s=await Ks(t,e,o.hardConfirmMs??su,{...o,sleep:void 0});return s==="not_found"?n?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r}:s==="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 Wn(t,e,n={}){if(!Gs(t))return "unknown";let r=n.platform??process.platform,o=r==="win32"?"powershell.exe":"ps",s=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 zs(o,s,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 Ot(t,e={}){let n=e.platform??process.platform,r=n==="win32"?"taskkill":"process-group",o=g=>({status:"failed",pid:t,method:r,error:g});if(!Gs(t))return o("Invalid process ID");let s=e.kill??process.kill,i=dt(t,s);if(i==="not_found")return {status:"not_found",pid:t,method:r};if(i!=="alive")return o("Unable to determine whether the process is alive");if(n==="win32"){let g;try{g=await zs("taskkill",["/PID",String(t),"/T","/F"],e);}catch(m){g={status:null,stdout:"",stderr:"",error:Ws(m)};}let h=dt(t,s);return h==="not_found"?g.status===0&&!g.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:o(h==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let u,d=e.signal??"SIGKILL";try{s(-t,d);}catch(g){u=g;}if(d==="SIGKILL")return js(t,s,u,r,e);if(await Ks(t,s,e.graceMs??ru,e)==="not_found")return u?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r};let l;try{s(-t,"SIGKILL");}catch(g){l=g;}let p=await js(t,s,l,r,e);return p.status==="terminated"?p:p.status==="not_found"?u?p:{status:"terminated",pid:t,method:r}:o(p.error??"Process termination failed")}var Fs,At,ru,ou,su,Gn=b(()=>{_();Fs=3e3,At="SIGINT",ru=2e3,ou=25,su=100;});function Qs(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 Xs(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,o)=>Qs(r,o))}catch(r){throw r instanceof f?new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function Zs(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 Ys(t){return {taskId:t.id,source:Zs(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function hu(t){if(!Number.isInteger(t)||t<0)throw new f("VALIDATION","Task log tail limit must be a non-negative integer")}var zn,ei=b(()=>{_();ot();yt();Et();nt();St();zn=class extends we{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=pe.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?rt(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=pe.dirname(n);fs.existsSync(o)||fs.mkdirSync(o,{recursive:true});}else if(!fs.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{Pe(r.db,n);}catch(o){throw r.close(),o}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(drizzleOrm.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(drizzleOrm.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((s,i)=>Qs(s,i));if(r.length===0){let s=this.getLogState(e);if(!s)throw new f("NOT_FOUND",`Task not found: ${e}`);return s}let o=this.openHandle(true);try{return o.db.transaction(i=>{let u=this.requireStateRowInTransaction(i,e),d=Zs(u);if(d==="blob"){let g=Xs(e,u.logs);if(i.update(a).set({logs:JSON.stringify([...g,...r]),log_revision:drizzleOrm.sql`${a.log_revision} + 1`}).where(drizzleOrm.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(Le).values(r.map((g,h)=>({task_id:e,seq:c+h,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),i.update(a).set({last_log_seq:l,log_revision:drizzleOrm.sql`${a.log_revision} + 1`}).where(drizzleOrm.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(s){throw s instanceof f?s:new f("DB_ERROR","Failed to append task log",s)}finally{o.close();}}getLogState(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=this.findStateRow(n,e);return r?Ys(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 hu(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(o=>{let s=this.findStateRowInTransaction(o,e);if(!s)return;let i=Ys(s);if(i.source==="blob"){let l=Xs(e,s.logs);return {...i,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let u=o.select({seq:Le.seq,timestamp:Le.timestamp,level:Le.level,message:Le.message}).from(Le).where(drizzleOrm.eq(Le.task_id,e)).orderBy(n===void 0?drizzleOrm.asc(Le.seq):drizzleOrm.desc(Le.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(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read task logs",o)}finally{r.close();}}};});var ti=b(()=>{_();});var Y,ut=b(()=>{_();Y=class extends Error{constructor(n,r,o){super(n);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout};});var ct,Fr=b(()=>{_();ut();ct=class extends Y{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function _u(t,e){let n=t.trimStart();if(!n.startsWith("{"))return false;let r;try{r=JSON.parse(n);}catch{return false}let o=r.type;if(typeof o!="string")return false;let s=e?Su[e]:void 0;return s?s(r,o):Object.values(ri).some(i=>i(r,o))}function Ue(t,e){let n=t.split(`
13
- `).filter(r=>r.trim());return n.length===0?false:n.every(r=>_u(r,e))}function he(t){return typeof t=="object"&&t!==null}function ni(t,e){if(e==="assistant"||e==="user"){let n=t.message;return he(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||he(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?he(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function mu(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:ni(t,e)}function ku(t,e){if(e==="error")return typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||he(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 he(n)&&typeof n.type=="string"}return false}function Tu(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||he(t.part):e==="text"||e==="tool_use"?he(t.part):e==="result"?typeof t.result=="string":false}function wu(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||he(t.part)||e==="result"&&typeof t.result=="string")}function yu(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?he(t.data):e==="result"?typeof t.result=="string":false}function Eu(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 Ru(t,e){return e==="available_commands"?he(t.tools)||he(t.commands):e==="usage"?he(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||he(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var ri,Su,bt=b(()=>{_();ri={claude:ni,codex:ku,opencode:Tu,copilot:yu,gemini:Eu},Su={...ri,claude:mu,opencode:wu,grok:Ru,antigravity:()=>false};});function qe(t){return /crewx\s+(q|query|x|execute)\s/.test(t)}function Fe(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 vt=b(()=>{_();});function Ou(t){let e=bu(t),n=e.map((s,i)=>({line:s,index:i})).filter(({line:s})=>xu(s.value)),r=vu(e);return {result:n.length===1&&n[0].index===r?Cu(n[0].line.value):null,resultPreview:Du(e,n),hasReservedLine:n.length>0}}function Ge(t,e){let n=Ou(t);return {resultPreview:n.resultPreview,isError:e||n.result?.isError===true,...n.hasReservedLine?{delegationResult:n.result}:{}}}function bu(t){let e=[],n=0;for(let r=0;r<t.length;r++){let o=t[r];if(o!==`
12
+ )`),instanceRequestUnique:sqliteCore.uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:sqliteCore.index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:sqliteCore.index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));});var Ps,Ds=b(()=>{_();Ps=sqliteCore.sqliteTable("projects",{id:sqliteCore.text("id").primaryKey().notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),name:sqliteCore.text("name").notNull(),outcome:sqliteCore.text("outcome").notNull(),due_date:sqliteCore.text("due_date"),scene:sqliteCore.text("scene").notNull().default("planning"),stages_json:sqliteCore.text("stages_json").notNull(),stage_index:sqliteCore.integer("stage_index").notNull(),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),accepted_at:sqliteCore.text("accepted_at"),archived_at:sqliteCore.text("archived_at")},t=>({idCheck:sqliteCore.check("projects_id_ck",drizzleOrm.sql`${t.id} GLOB 'prj_*'`),sceneCheck:sqliteCore.check("projects_scene_ck",drizzleOrm.sql`${t.scene} IN ('planning', 'plan_review', 'running', 'human_wait', 'limit_wait', 'failed_stop', 'analyzing_feedback', 'replanned', 'awaiting_review', 'accepted')`),stagesJsonCheck:sqliteCore.check("projects_stages_json_ck",drizzleOrm.sql`json_valid(${t.stages_json}) AND json_type(${t.stages_json}) = 'array'`),stageIndexCheck:sqliteCore.check("projects_stage_index_ck",drizzleOrm.sql`${t.stage_index} >= 1`)})),sqliteCore.sqliteTable("project_criteria",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>Ps.id,{onDelete:"cascade"}),position:sqliteCore.integer("position").notNull(),statement:sqliteCore.text("statement").notNull(),verify_status:sqliteCore.text("verify_status").notNull().default("pending"),verified_at:sqliteCore.text("verified_at"),evidence_json:sqliteCore.text("evidence_json").notNull().default("[]"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idCheck:sqliteCore.check("project_criteria_id_ck",drizzleOrm.sql`${t.id} GLOB 'pjc_*'`),verifyStatusCheck:sqliteCore.check("project_criteria_verify_status_ck",drizzleOrm.sql`${t.verify_status} IN ('pending', 'verifying', 'passed', 'failed')`),evidenceJsonCheck:sqliteCore.check("project_criteria_evidence_json_ck",drizzleOrm.sql`json_valid(${t.evidence_json}) AND json_type(${t.evidence_json}) = 'array'`),projectPositionUnique:sqliteCore.uniqueIndex("project_criteria_project_position_uq").on(t.project_id,t.position)})),sqliteCore.sqliteTable("project_events",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>Ps.id,{onDelete:"restrict"}),seq:sqliteCore.integer("seq").notNull(),actor_type:sqliteCore.text("actor_type").notNull(),actor_id:sqliteCore.text("actor_id"),type:sqliteCore.text("type").notNull(),title:sqliteCore.text("title").notNull(),summary:sqliteCore.text("summary"),payload_json:sqliteCore.text("payload_json").notNull().default("{}"),created_at:sqliteCore.text("created_at").notNull()},t=>({idCheck:sqliteCore.check("project_events_id_ck",drizzleOrm.sql`${t.id} GLOB 'pje_*'`),actorTypeCheck:sqliteCore.check("project_events_actor_type_ck",drizzleOrm.sql`${t.actor_type} IN ('user', 'project_manager', 'system')`),payloadJsonCheck:sqliteCore.check("project_events_payload_json_ck",drizzleOrm.sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),projectSeqUnique:sqliteCore.uniqueIndex("project_events_project_seq_uq").on(t.project_id,t.seq)}));});var Mr,Hr,S,$r=b(()=>{_();Mr=["THREAD_STATE","THREAD_PRIORITY"],Hr=["gray","blue","violet","green","amber","orange","red","pink"],S=sqliteCore.sqliteTable("common_codes",{code_group:sqliteCore.text("code_group").notNull(),code:sqliteCore.text("code").notNull(),code_name:sqliteCore.text("code_name"),color:sqliteCore.text("color").notNull().default("gray"),sort_order:sqliteCore.integer("sort_order").notNull(),workspace_id:sqliteCore.text("workspace_id"),is_builtin:sqliteCore.integer("is_builtin").notNull().default(0),is_archived:sqliteCore.integer("is_archived").notNull().default(0),metadata:sqliteCore.text("metadata"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.code_group,t.code]}),metadataCheck:sqliteCore.check("common_codes_metadata_ck",drizzleOrm.sql`${t.metadata} IS NULL OR (json_valid(${t.metadata}) AND json_type(${t.metadata}) = 'object')`),builtinCheck:sqliteCore.check("common_codes_builtin_ck",drizzleOrm.sql`${t.is_builtin} IN (0, 1)`),archivedCheck:sqliteCore.check("common_codes_archived_ck",drizzleOrm.sql`${t.is_archived} IN (0, 1)`),idxCommonCodesSelection:sqliteCore.index("idx_common_codes_group_archived_order").on(t.code_group,t.is_archived,t.sort_order)}));});var Ls,Ms,Hs,$s,Us,B,$,D,Fs=b(()=>{_();Mn();Ls=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],Ms=["user","agent","system"],Hs=["auto","manual"],$s=["decision","judgment","issue","result","pivot"],Us=["queued","running","completed","failed"],B=sqliteCore.sqliteTable("thread_events",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),type:sqliteCore.text("type").notNull(),actor_type:sqliteCore.text("actor_type").notNull(),payload_json:sqliteCore.text("payload_json").notNull(),created_at:sqliteCore.text("created_at").notNull(),actor_id:sqliteCore.text("actor_id"),task_id:sqliteCore.text("task_id"),highlight_id:sqliteCore.text("highlight_id")},t=>({typeCheck:sqliteCore.check("thread_events_type_ck",drizzleOrm.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:sqliteCore.check("thread_events_actor_type_ck",drizzleOrm.sql`${t.actor_type} IN ('user', 'agent', 'system')`),payloadJsonCheck:sqliteCore.check("thread_events_payload_json_ck",drizzleOrm.sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),threadSeqIndex:sqliteCore.index("idx_thread_events_thread_seq").on(t.thread_id,t.seq),threadCreatedIndex:sqliteCore.index("idx_thread_events_thread_created").on(t.thread_id,t.created_at),threadSeqUnique:sqliteCore.uniqueIndex("thread_events_thread_seq_uq").on(t.thread_id,t.seq)})),$=sqliteCore.sqliteTable("thread_highlight_runs",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),request_id:sqliteCore.text("request_id").notNull(),status:sqliteCore.text("status").notNull(),detector_version:sqliteCore.text("detector_version").notNull(),requested_at:sqliteCore.text("requested_at").notNull(),started_at:sqliteCore.text("started_at"),completed_at:sqliteCore.text("completed_at"),error_code:sqliteCore.text("error_code"),previous_auto_count:sqliteCore.integer("previous_auto_count"),new_auto_count:sqliteCore.integer("new_auto_count")},t=>({statusCheck:sqliteCore.check("thread_highlight_runs_status_ck",drizzleOrm.sql`${t.status} IN ('queued', 'running', 'completed', 'failed')`),countCheck:sqliteCore.check("thread_highlight_runs_counts_ck",drizzleOrm.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:sqliteCore.uniqueIndex("thread_highlight_runs_thread_request_uq").on(t.thread_id,t.request_id),inProgressThreadUnique:sqliteCore.uniqueIndex("thread_highlight_runs_in_progress_thread_uq").on(t.thread_id).where(drizzleOrm.sql`${t.status} IN ('queued', 'running')`),threadStatusRequestedIndex:sqliteCore.index("idx_thread_highlight_runs_thread_status_requested").on(t.thread_id,t.status,t.requested_at)})),D=sqliteCore.sqliteTable("thread_highlights",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),source:sqliteCore.text("source").notNull(),kind:sqliteCore.text("kind").notNull(),status:sqliteCore.text("status").notNull().default("active"),text:sqliteCore.text("text"),covers_from_task_id:sqliteCore.text("covers_from_task_id").notNull(),covers_to_task_id:sqliteCore.text("covers_to_task_id").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),agent_id:sqliteCore.text("agent_id"),source_task_id:sqliteCore.text("source_task_id"),detector_version:sqliteCore.text("detector_version"),content_fingerprint:sqliteCore.text("content_fingerprint"),dismissed_at:sqliteCore.text("dismissed_at")},t=>({sourceCheck:sqliteCore.check("thread_highlights_source_ck",drizzleOrm.sql`${t.source} IN ('auto', 'manual')`),kindCheck:sqliteCore.check("thread_highlights_kind_ck",drizzleOrm.sql`${t.kind} IN ('decision', 'judgment', 'issue', 'result', 'pivot')`),statusCheck:sqliteCore.check("thread_highlights_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'dismissed')`),activeTextCheck:sqliteCore.check("thread_highlights_active_text_ck",drizzleOrm.sql`${t.status} = 'dismissed' OR (${t.text} IS NOT NULL AND length(${t.text}) > 0)`),coversCheck:sqliteCore.check("thread_highlights_covers_ck",drizzleOrm.sql`length(${t.covers_from_task_id}) > 0 AND length(${t.covers_to_task_id}) > 0`),autoKeyCheck:sqliteCore.check("thread_highlights_auto_key_ck",drizzleOrm.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:sqliteCore.index("idx_thread_highlights_thread_status_created").on(t.thread_id,t.status,t.created_at),threadCoversIndex:sqliteCore.index("idx_thread_highlights_thread_covers").on(t.thread_id,t.covers_from_task_id,t.covers_to_task_id),autoIdempotencyUnique:sqliteCore.uniqueIndex("thread_highlights_auto_idempotency_uq").on(t.thread_id,t.source_task_id,t.detector_version,t.content_fingerprint).where(drizzleOrm.sql`${t.source} = 'auto'`)}));});var Bs=b(()=>{_();sqliteCore.sqliteTable("storage_metadata",{source_kind:sqliteCore.text("source_kind").notNull(),source_id:sqliteCore.text("source_id").notNull(),utc_ts:sqliteCore.text("utc_ts"),bytes:sqliteCore.integer("bytes").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.source_kind,t.source_id]}),kindTimestampBytesIndex:sqliteCore.index("idx_storage_metadata_kind_ts_bytes").on(t.source_kind,t.utc_ts,t.bytes)})),sqliteCore.sqliteTable("storage_metadata_state",{unit:sqliteCore.text("unit").primaryKey().notNull(),cursor_rowid:sqliteCore.integer("cursor_rowid").notNull().default(0),end_rowid:sqliteCore.integer("end_rowid"),complete:sqliteCore.integer("complete").notNull().default(0),updated_at:sqliteCore.text("updated_at").notNull()});});var It=b(()=>{_();vr();Vt();ps();Mn();hs();_s();ks();ws();Rs();Ss();As();bs();vs();Cs();Ds();$r();Fs();Bs();});var At,Fr,js,qr=b(()=>{_();At={"claude-fable-5-1":{input:10,cachedInput:.25,output:50},"claude-fable-5":{input:10,cachedInput:1,output:50},"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":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-6-astra":{input:10,cachedInput:1,output:50},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"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.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},Fr=new Set(["gpt-5.3-codex-spark"]),js=new Set(["auto","claude-fable-5","claude-fable-5-1","claude-haiku-4-5","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","gemini-3.1-pro","gemini-3.5-flash","gemini-3.6-flash","gemini-3.7-flash","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-oss-120b","grok-4.5","grok-4.6"]);});function Br(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 du(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),Qt;let e=Br(t),n=au[e];if(n)return jn[n]??At[n]??Qt;if(jn[e])return jn[e];if(At[e])return At[e];if(Fr.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),Qt;if(js.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),Qt;let r={...At,...jn};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),Qt}function uu(t,e,n,r=0,o){let s=du(n),i=Math.min(r,t),d=(t-i)*s.input/1e6,c=i*s.cachedInput/1e6,l=e*s.output/1e6;return d+c+l}function Ws(t,e,n,r,o,s){return t&&t>0?t:!e&&!n?0:uu(e??0,n??0,o,r??0)}var au,Qt,jn,Wn=b(()=>{_();qr();qr();au={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"},Qt={input:0,cachedInput:0,output:0},jn={};});function Vs(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function zs(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function Js(t){return Number.isSafeInteger(t)&&t>0}function gu(t,e){return new Promise(n=>{let r;try{r=child_process.spawn(t,e,{windowsHide:!0});}catch(c){n({status:null,stdout:"",stderr:"",error:Vs(c)});return}let o="",s="",i=false,u,d=setTimeout(()=>{try{r.kill();}catch{}u({status:null,stdout:o,stderr:s,error:new Error(`Command timed out after ${Gs}ms`)});},Gs);u=c=>{i||(i=true,clearTimeout(d),n(c));},r.stdout?.setEncoding("utf8"),r.stderr?.setEncoding("utf8"),r.stdout?.on("data",c=>{o+=String(c);}),r.stderr?.on("data",c=>{s+=String(c);}),r.once("error",c=>{u({status:null,stdout:o,stderr:s,error:c});}),r.once("close",c=>{u({status:c,stdout:o,stderr:s});});})}async function Xs(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):gu(t,e)}function hu(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function _u(){return new Promise(t=>{setImmediate(t);})}function ut(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return zs(n)==="ESRCH"?"not_found":zs(n)==="EPERM"?"alive":"unknown"}}function mu(t,e){let n=ut(-t,e),r=ut(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function Ys(t,e,n,r){let o=Math.max(0,n),s=Math.max(1,r.pollIntervalMs??pu),i=Date.now()+o,u,d=o===0,c=r.sleep?Promise.resolve().then(()=>r.sleep(o)).then(()=>{},()=>{}):new Promise(l=>{u=setTimeout(l,o);});c.then(()=>{d=true;});try{for(await _u();;){let l=mu(t,e);if(l==="not_found")return l;let p=i-Date.now();if(d||p<=0)return l;await Promise.race([c,hu(Math.min(s,p))]);}}finally{u!==void 0&&clearTimeout(u);}}async function Ks(t,e,n,r,o){let s=await Ys(t,e,o.hardConfirmMs??fu,{...o,sleep:void 0});return s==="not_found"?n?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r}:s==="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 Gn(t,e,n={}){if(!Js(t))return "unknown";let r=n.platform??process.platform,o=r==="win32"?"powershell.exe":"ps",s=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 Xs(o,s,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",o=g=>({status:"failed",pid:t,method:r,error:g});if(!Js(t))return o("Invalid process ID");let s=e.kill??process.kill,i=ut(t,s);if(i==="not_found")return {status:"not_found",pid:t,method:r};if(i!=="alive")return o("Unable to determine whether the process is alive");if(n==="win32"){let g;try{g=await Xs("taskkill",["/PID",String(t),"/T","/F"],e);}catch(m){g={status:null,stdout:"",stderr:"",error:Vs(m)};}let h=ut(t,s);return h==="not_found"?g.status===0&&!g.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:o(h==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let u,d=e.signal??"SIGKILL";try{s(-t,d);}catch(g){u=g;}if(d==="SIGKILL")return Ks(t,s,u,r,e);if(await Ys(t,s,e.graceMs??lu,e)==="not_found")return u?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r};let l;try{s(-t,"SIGKILL");}catch(g){l=g;}let p=await Ks(t,s,l,r,e);return p.status==="terminated"?p:p.status==="not_found"?u?p:{status:"terminated",pid:t,method:r}:o(p.error??"Process termination failed")}var Gs,Ot,lu,pu,fu,zn=b(()=>{_();Gs=3e3,Ot="SIGINT",lu=2e3,pu=25,fu=100;});function ni(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 ei(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,o)=>ni(r,o))}catch(r){throw r instanceof f?new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function ri(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 ti(t){return {taskId:t.id,source:ri(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function Ru(t){if(!Number.isInteger(t)||t<0)throw new f("VALIDATION","Task log tail limit must be a non-negative integer")}var Kn,oi=b(()=>{_();st();Et();Rt();rt();It();Kn=class extends we{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=pe.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?ot(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=pe.dirname(n);fs.existsSync(o)||fs.mkdirSync(o,{recursive:true});}else if(!fs.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{De(r.db,n);}catch(o){throw r.close(),o}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(drizzleOrm.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(drizzleOrm.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((s,i)=>ni(s,i));if(r.length===0){let s=this.getLogState(e);if(!s)throw new f("NOT_FOUND",`Task not found: ${e}`);return s}let o=this.openHandle(true);try{return o.db.transaction(i=>{let u=this.requireStateRowInTransaction(i,e),d=ri(u);if(d==="blob"){let g=ei(e,u.logs);if(i.update(a).set({logs:JSON.stringify([...g,...r]),log_revision:drizzleOrm.sql`${a.log_revision} + 1`}).where(drizzleOrm.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(Me).values(r.map((g,h)=>({task_id:e,seq:c+h,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),i.update(a).set({last_log_seq:l,log_revision:drizzleOrm.sql`${a.log_revision} + 1`}).where(drizzleOrm.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(s){throw s instanceof f?s:new f("DB_ERROR","Failed to append task log",s)}finally{o.close();}}getLogState(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=this.findStateRow(n,e);return r?ti(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 Ru(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(o=>{let s=this.findStateRowInTransaction(o,e);if(!s)return;let i=ti(s);if(i.source==="blob"){let l=ei(e,s.logs);return {...i,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let u=o.select({seq:Me.seq,timestamp:Me.timestamp,level:Me.level,message:Me.message}).from(Me).where(drizzleOrm.eq(Me.task_id,e)).orderBy(n===void 0?drizzleOrm.asc(Me.seq):drizzleOrm.desc(Me.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(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read task logs",o)}finally{r.close();}}};});var si=b(()=>{_();});var Y,ct=b(()=>{_();Y=class extends Error{constructor(n,r,o){super(n);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout};});var lt,jr=b(()=>{_();ct();lt=class extends Y{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Gr(t){if(!Vn(t)||t.type!=="item.started"||!ai(t)||!ii(t))return false;let e=t.item;return !Vn(e)||!ai(e)||!ii(e)||!Wr(e.id)?false:e.type==="web_search"?e.query===""&&Vn(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=>Vn(n)&&Wr(n.path)&&Wr(n.kind)):false}function Vn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function di(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Wr(t){return typeof t=="string"&&t.trim().length>0}function ii(t){return !di(t,"status")||t.status==="in_progress"}function ai(t){for(let e of ["error","errors","isError","is_error"])if(di(t,e))return false;return true}var zr=b(()=>{_();});function Su(t,e){let n=t.trimStart();if(!n.startsWith("{"))return false;let r;try{r=JSON.parse(n);}catch{return false}let o=r.type;if(typeof o!="string")return false;let s=e?Nu[e]:void 0;return s?s(r,o):Object.values(ci).some(i=>i(r,o))}function Fe(t,e){let n=t.split(`
13
+ `).filter(r=>r.trim());return n.length===0?false:n.every(r=>Su(r,e))}function he(t){return typeof t=="object"&&t!==null}function ui(t,e){if(e==="assistant"||e==="user"){let n=t.message;return he(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||he(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?he(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function Iu(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:ui(t,e)}function Au(t,e){if(e==="error")return typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||he(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 he(n)&&typeof n.type=="string"}return false}function Ou(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||he(t.part):e==="text"||e==="tool_use"?he(t.part):e==="result"?typeof t.result=="string":false}function bu(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||he(t.part)||e==="result"&&typeof t.result=="string")}function vu(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?he(t.data):e==="result"?typeof t.result=="string":false}function xu(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 Cu(t,e){return e==="available_commands"?he(t.tools)||he(t.commands):e==="usage"?he(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||he(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var ci,Nu,vt=b(()=>{_();zr();ci={claude:ui,codex:Au,opencode:Ou,copilot:vu,gemini:xu},Nu={...ci,claude:Iu,opencode:bu,grok:Cu,antigravity:()=>false};});function qe(t){return /crewx\s+(q|query|x|execute)\s/.test(t)}function Be(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 xt=b(()=>{_();});function Lu(t){let e=Mu(t),n=e.map((s,i)=>({line:s,index:i})).filter(({line:s})=>$u(s.value)),r=Hu(e);return {result:n.length===1&&n[0].index===r?Uu(n[0].line.value):null,resultPreview:Bu(e,n),hasReservedLine:n.length>0}}function Ge(t,e){let n=Lu(t);return {resultPreview:n.resultPreview,isError:e||n.result?.isError===true,...n.hasReservedLine?{delegationResult:n.result}:{}}}function Mu(t){let e=[],n=0;for(let r=0;r<t.length;r++){let o=t[r];if(o!==`
14
14
  `&&o!=="\r")continue;let s=o==="\r"&&t[r+1]===`
15
15
  `?`\r
16
- `:o;e.push({value:t.slice(n,r),separator:s}),r+=s.length-1,n=r+1;}return e.push({value:t.slice(n),separator:""}),e}function vu(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function xu(t){return t.trimStart().startsWith(Iu)}function Cu(t){let e=t.trim();if(!e.startsWith(oi)||!e.endsWith("]]"))return null;let n=e.slice(oi.length,-2);if(!n)return null;try{return Nu(JSON.parse(n))}catch{return null}}function Nu(t){return Pu(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function Pu(t){if(!Lu(t)||Object.keys(t).some(r=>!Au.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?si(t.taskId)&&si(t.agentId):t.isError===true}function Du(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,o)=>n.has(o)?"":r.value+r.separator).join("")}function si(t){return typeof t=="string"&&t.trim().length>0}function Lu(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var oi,Iu,Au,Zt=b(()=>{_();oi="[[crewx:delegation-result ",Iu="[[crewx:delegation-result",Au=new Set(["schema","taskId","agentId","isError"]);});function Be(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 xt=b(()=>{_();});var ii,Kn,Br,Vn=b(()=>{_();ii=["none","minimal","low","medium","high","xhigh","max","ultra"],Kn={claude:["low","medium","high","xhigh","max"],codex:["minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]},Br={claude:{models:[{id:"claude-fable-5-1",name:"Claude Fable 5.1",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5-1":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-6-astra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Object.fromEntries(Object.entries(Br).map(([t,e])=>[t,e.models]));});function jr(t){return Hu[t]??t}function Uu(t){return $u.get(t)??t}function Wr(t){if(!t)return {};let e=Fu.get(t);return e?{...e}:{model:t}}function Gr(t,e){return t==="antigravity"||t==="cli/antigravity"?Wr(e):e===void 0?{}:{model:Uu(e)}}var Mu,Hu,$u,qu,Fu,en=b(()=>{_();Mu=[{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]"}],Hu={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};$u=new Map(Mu.map(({baseModelId:t,catalogModelId:e})=>[t,e]));qu=[{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"}],Fu=new Map(qu.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function ju(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function Qe(t){return Jn(t).models}function Jn(t){return Bu[t]??Br[t]??ju()}function tn(t,e){let n=Jn(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=Gr(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function ai(t){return Jn(t).modelOverrides}function di(){return Qe("claude")}function ui(){return Qe("codex")}function ci(){return Qe("copilot")}function li(){return Qe("antigravity")}var Bu,lt=b(()=>{_();Vn();jn();en();Bu={};});function pi(t){return Wu[t]??t}var Wu,fi=b(()=>{_();lt();en();Wu={auto:"default"};});function Xn(t,e){return (Kn[t]??[]).includes(e)}function Ze(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return Gu.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function gi(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 ["--sandbox","workspace-write"];default:return []}}function hi(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 _i(t){return !t||!Xn("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function mi(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=pi(t);return e.has(n)?["--permission-mode",n]:[]}function ki(t){return t?Xn("claude",t)?["--effort",t]:[]:[]}function Ti(t){return t==="default"?[]:t&&zu.has(t)?["--permission-mode",t]:[]}function wi(t){return t===true?["--always-approve"]:[]}function yi(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 Ei(t){return t?Xn("grok",t)?["--effort",t]:[]:[]}function Ri(t){if(!t)return [];switch(jr(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function Si(t){return t?Xn("antigravity",t)?["--effort",t]:[]:[]}var Gu,zu,nn=b(()=>{_();fi();en();Vn();Gu=new Set(ii);zu=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function Ku(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),o="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,s="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,i=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:n,cachedInputTokens:i}}function Vu(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),o=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:o,cachedInputTokens:d}}function Ju(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),o=Number(n.output??0),s=n.cache,i=s?Number(s.read??0):0;return {inputTokens:r+i,outputTokens:o,cachedInputTokens:i}}function Ii(t){let e=new Map,n;for(let s of t.split(`
17
- `))if(s.trim())try{let i=JSON.parse(s);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,o=0;for(let s of e.values())r+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:n}}function Ct(t){if(!t||!t.trim())return;let e=null,n=null;for(let r of t.split(`
18
- `))if(r.trim())try{let o=JSON.parse(r),s=Ju(o);if(s){n||(n={inputTokens:0,outputTokens:0,cachedInputTokens:0}),n.inputTokens+=s.inputTokens,n.outputTokens+=s.outputTokens,n.cachedInputTokens+=s.cachedInputTokens;continue}let i=Ku(o)??Vu(o);i&&(e=i);}catch{}return n||(e??void 0)}var rn=b(()=>{_();});function Oe(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 pt=b(()=>{_();});function Ai(t){let e=t.split(`
19
- `).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&n.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function Qu(t){let e=t.split(`
20
- `).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 Zu(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Oi(t){let e=Zu(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=tc(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(nc(n))return `Claude rate limit: ${n}`}}function ec(t){let e=Oi(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",o=typeof t.terminal_reason=="string"?t.terminal_reason:"unknown";return `Claude ended without an answer (subtype=${r}, terminal_reason=${o})`}function tc(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
16
+ `:o;e.push({value:t.slice(n,r),separator:s}),r+=s.length-1,n=r+1;}return e.push({value:t.slice(n),separator:""}),e}function Hu(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function $u(t){return t.trimStart().startsWith(Pu)}function Uu(t){let e=t.trim();if(!e.startsWith(li)||!e.endsWith("]]"))return null;let n=e.slice(li.length,-2);if(!n)return null;try{return Fu(JSON.parse(n))}catch{return null}}function Fu(t){return qu(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function qu(t){if(!ju(t)||Object.keys(t).some(r=>!Du.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?pi(t.taskId)&&pi(t.agentId):t.isError===true}function Bu(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,o)=>n.has(o)?"":r.value+r.separator).join("")}function pi(t){return typeof t=="string"&&t.trim().length>0}function ju(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var li,Pu,Du,en=b(()=>{_();li="[[crewx:delegation-result ",Pu="[[crewx:delegation-result",Du=new Set(["schema","taskId","agentId","isError"]);});function Oe(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 Ct=b(()=>{_();});var fi,Jn,Kr,Xn=b(()=>{_();fi=["none","minimal","low","medium","high","xhigh","max","ultra"],Jn={claude:["low","medium","high","xhigh","max"],codex:["minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]},Kr={claude:{models:[{id:"claude-fable-5-1",name:"Claude Fable 5.1",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5-1":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-6-astra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Object.fromEntries(Object.entries(Kr).map(([t,e])=>[t,e.models]));});function Vr(t){return Gu[t]??t}function Ku(t){return zu.get(t)??t}function Jr(t){if(!t)return {};let e=Ju.get(t);return e?{...e}:{model:t}}function Xr(t,e){return t==="antigravity"||t==="cli/antigravity"?Jr(e):e===void 0?{}:{model:Ku(e)}}var Wu,Gu,zu,Vu,Ju,tn=b(()=>{_();Wu=[{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]"}],Gu={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};zu=new Map(Wu.map(({baseModelId:t,catalogModelId:e})=>[t,e]));Vu=[{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"}],Ju=new Map(Vu.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function Yu(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function Qe(t){return Yn(t).models}function Yn(t){return Xu[t]??Kr[t]??Yu()}function nn(t,e){let n=Yn(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=Xr(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function gi(t){return Yn(t).modelOverrides}function hi(){return Qe("claude")}function _i(){return Qe("codex")}function mi(){return Qe("copilot")}function ki(){return Qe("antigravity")}var Xu,pt=b(()=>{_();Xn();Wn();tn();Xu={};});function Ti(t){return Qu[t]??t}var Qu,wi=b(()=>{_();pt();tn();Qu={auto:"default"};});function Qn(t,e){return (Jn[t]??[]).includes(e)}function Ze(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return Zu.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function yi(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 ["--sandbox","workspace-write"];default:return []}}function Ei(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 Ri(t){return !t||!Qn("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function Si(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=Ti(t);return e.has(n)?["--permission-mode",n]:[]}function Ii(t){return t?Qn("claude",t)?["--effort",t]:[]:[]}function Ai(t){return t==="default"?[]:t&&ec.has(t)?["--permission-mode",t]:[]}function Oi(t){return t===true?["--always-approve"]:[]}function bi(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 vi(t){return t?Qn("grok",t)?["--effort",t]:[]:[]}function xi(t){if(!t)return [];switch(Vr(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function Ci(t){return t?Qn("antigravity",t)?["--effort",t]:[]:[]}var Zu,ec,rn=b(()=>{_();wi();tn();Xn();Zu=new Set(fi);ec=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function tc(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),o="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,s="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,i=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:n,cachedInputTokens:i}}function nc(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),o=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:o,cachedInputTokens:d}}function rc(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),o=Number(n.output??0),s=n.cache,i=s?Number(s.read??0):0;return {inputTokens:r+i,outputTokens:o,cachedInputTokens:i}}function Ni(t){let e=new Map,n;for(let s of t.split(`
17
+ `))if(s.trim())try{let i=JSON.parse(s);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,o=0;for(let s of e.values())r+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:n}}function Nt(t){if(!t||!t.trim())return;let e=null,n=null;for(let r of t.split(`
18
+ `))if(r.trim())try{let o=JSON.parse(r),s=rc(o);if(s){n||(n={inputTokens:0,outputTokens:0,cachedInputTokens:0}),n.inputTokens+=s.inputTokens,n.outputTokens+=s.outputTokens,n.cachedInputTokens+=s.cachedInputTokens;continue}let i=tc(o)??nc(o);i&&(e=i);}catch{}return n||(e??void 0)}var on=b(()=>{_();});function be(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 ft=b(()=>{_();});function Pi(t){let e=t.split(`
19
+ `).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&n.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function ic(t){let e=t.split(`
20
+ `).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 ac(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Di(t){let e=ac(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=uc(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(cc(n))return `Claude rate limit: ${n}`}}function dc(t){let e=Di(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",o=typeof t.terminal_reason=="string"?t.terminal_reason:"unknown";return `Claude ended without an answer (subtype=${r}, terminal_reason=${o})`}function uc(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
21
21
 
22
- `):""}function nc(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function rc(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||""),o=e.id,s=e.input,i=Be(s);return r==="Bash"&&qe(i)?Fe(t,i,o):{timestamp:t,type:"tool_use",toolUseId:o,toolName:r,toolInput:i}}if(n==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(u=>u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
23
- `):i=JSON.stringify(s),{timestamp:t,type:"tool_result",toolUseId:o,...Ge(i,r)}}return null}var Xu,Yu,Yn,zr=b(()=>{_();Fr();ut();bt();vt();Zt();xt();nn();lt();rn();pt();Xu=new Set(["tool_progress"]),Yu="cli/claude";Yn={command:"claude",meta:{displayName:"Claude",models:di(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=Ze(e.model),s=e.effort??o,i=mi(e.mode),u=ki(s),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=Qu(t);if(e?.is_error===true){let o=Yn.extractFailure(JSON.stringify(e));if(o)throw o;let s=typeof e.subtype=="string"?e.subtype:"unknown",i=typeof e.terminal_reason=="string"?e.terminal_reason:"unknown";throw new Y(`Claude ended without an answer (subtype=${s}, terminal_reason=${i})`,Yu,{code:"EMPTY_OUTPUT",kind:"permanent"})}let n=Ai(t);if(n)return n;let r=t.trim();return Ue(r,"claude")?"":r},extractPartialText(t){return Ai(t)},extractFailure(t){try{let e=JSON.parse(t),n=Oi(e);if(n)return new ct(n)}catch{}return null},parseResultMeta(t){let e=t.split(`
24
- `);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let s=o.usage,i=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,u=o.modelUsage,d=u?Object.keys(u)[0]??null:null;return {usage:i,model:d}}}catch{}let n=Ii(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 o=Oe(n,e??new Date().toISOString()),s=ec(n);if(s)return [{timestamp:o,type:"error",content:s,errorMessage:s}];if(r!=="assistant"&&r!=="user")return [];let u=n.message?.content;if(!Array.isArray(u))return [];let d=[];for(let c of u){let l=rc(o,c);l&&d.push(l);}return d},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Xu.has(r):!1}catch{return false}}};});function bi(t){let e=t.split(`
25
- `).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&n.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}var oc,Kr,Vr=b(()=>{_();bt();rn();vt();xt();Zt();lt();Vn();pt();oc=new Set(["interactive","plan","autopilot"]);Kr={command:"copilot",meta:{displayName:"Copilot",models:ci()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&oc.has(e.mode)&&r.push("--mode",e.mode),e.effort&&(Kn.copilot??[]).includes(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=bi(t);if(e)return e;let n=t.trim();return Ue(n,"copilot")?"":n},extractPartialText(t){return bi(t)},parseResultMeta(t){let e=Ct(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 o=n.data;if(!o)return [];let s=Oe(n,e??new Date().toISOString()),i=o.toolCallId;if(r==="tool.execution_start"){let u=String(o.toolName||""),d=o.arguments,c=Be(d);return (u==="bash"||u==="Bash")&&qe(c)?[Fe(s,c,i)]:[{timestamp:s,type:"tool_use",toolName:u,toolInput:c,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let u=o.error;if(u)return [{timestamp:s,type:"tool_result",...i&&{toolUseId:i},...Ge(String(u.message||""),true)}];let d=o.result,c=String(d?.content||"");return [{timestamp:s,type:"tool_result",...i&&{toolUseId:i},...Ge(c,false)}]}if(r==="assistant.message"){let u=String(o.content||"");return u?[{timestamp:s,type:"text",content:u}]:[]}return []}};});function ac(t){let e=[],n=0,r=false,o=false,s=0;for(let u=0;u<t.length;u++){let d=t[u];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(s,u+1).trim();c&&e.push(c),s=u+1;}}}let i=t.slice(s).trim();return i&&e.push(i),e}function dc(t){return t[0]==="exec"?t.slice(1):t}function vi(t){let e=t.split(`
26
- `).map(o=>o.trim()).filter(Boolean),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&n.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function Jr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function xi(t){return t.type==="turn.failed"?true:t.type!=="error"?false:typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||Jr(t.error)}function Ci(t){let e=Jr(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 uc(t){for(let e of t.split(/\r?\n/)){if(!e.trim())continue;let n;try{n=JSON.parse(e);}catch{continue}if(Jr(n)&&xi(n))return Ci(n)}}function cc(t,e){let n=e.type;if(n==="command_execution"){let r=String(e.command||"");return qe(r)?[Fe(t,r)]:[{timestamp:t,type:"tool_use",toolName:"Bash",toolInput:r}]}return n==="web_search"?[]:n==="file_change"?[]:[]}function lc(t,e){let n=e.type;if(n==="message"||n==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let s=pc(t,o);if(s)return s}if(typeof e.text=="string")return {timestamp:t,type:"text",content:e.text}}if(n==="agent_message"&&typeof e.text=="string")return {timestamp:t,type:"text",content:e.text};if(n==="reasoning"){let r=typeof e.text=="string"?e.text.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:t,type:"tool_result",...Ge(r,o)}}if(n==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,s=Be(o);return r==="Bash"&&qe(s)?Fe(t,s):{timestamp:t,type:"tool_use",toolName:r,toolInput:s}}if(n==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",...Ge(o,r)}}if(n==="web_search"){let r=e.action,o;if(r?.type==="search"){let s=r.queries;o=String(r.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:t,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(n==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(i=>String(i.path||"")).filter(Boolean);if(o.length===0)return null;let s=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:s}}return null}function pc(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||""),o=e.input,s=Be(o);return r==="Bash"&&qe(s)?Fe(t,s):{timestamp:t,type:"tool_use",toolName:r,toolInput:s}}return null}var sc,ic,Xr,Yr=b(()=>{_();ut();bt();rn();vt();xt();Zt();nn();lt();pt();sc=new Set(["turn.started","turn.completed","item.updated"]),ic="cli/codex";Xr={command:"codex",meta:{displayName:"Codex",models:ui(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=Ze(e.model),s=e.effort??o,i=e.resumeSessionId?hi(e.mode):gi(e.mode),u=_i(s),d=r?["-m",r]:[],c=dc(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=uc(t);if(e)throw new Y(e,ic);let n=vi(t);if(n)return n;let r=t.trim();return Ue(r,"codex")?"":r},extractPartialText(t){return vi(t)},parseResultMeta(t){let e=Ct(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=[],o;try{JSON.parse(t),o=[t];}catch{o=ac(t),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let u=i.type;if(!u)continue;let d=Oe(i,n);if(xi(i)){let l=Ci(i);r.push({timestamp:d,type:"error",content:l,errorMessage:l});continue}if(!u.startsWith("item.")&&!u.startsWith("turn.")&&!u.startsWith("thread."))continue;let c=i.item;if(c){if(u==="item.started"){r.push(...cc(d,c));continue}if(u==="item.completed"){let l=lc(d,c);l&&r.push(l);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?sc.has(r):!1}catch{return false}}};});function hc(t){return t?gc[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Qn(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Mi(t){let e=[],n=0,r=false,o=false,s=0;for(let u=0;u<t.length;u++){let d=t[u];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(s,u+1).trim();c&&e.push(c),s=u+1;}}}let i=t.slice(s).trim();return i&&e.push(i),e}function Pt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function _c(t){let e=[],n=false;for(let r of t.split(/\r?\n/)){let o=r.trim();if(!o)continue;try{let i=JSON.parse(o);Pt(i)?e.push(i):n=!0;continue}catch{}let s=Mi(o);s.length>1&&console.warn("[opencode] extractText: falling back to concatenated-JSON split for a malformed line");for(let i of s)try{let u=JSON.parse(i);Pt(u)?e.push(u):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function ft(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,Li).trim()}function Hi(t){let e=Pt(t.error)?t.error:void 0,n=e&&Pt(e.data)?e.data:void 0,r=ft(e?.name),o=ft(n?.message)??ft(e?.message)??ft(t.message)??ft(t.errorMessage)??ft(t.error),s=ft(t.ref),i=r&&o&&r!==o?`${r}: ${o}`:r??o??Di;return (s?`${i} (ref: ${s})`:i).slice(0,Li)}function Ni(t){let e=_c(t),n=[],r=null,o=0,s=[],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=Pt(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"){o++;continue}if(c==="error"){s.push(Hi(d));continue}if(c==="step_finish"){u=true;let l=Pt(d.part)?d.part:void 0;i=typeof l?.reason=="string"?l.reason:void 0;}}}return {...e,texts:n,resultText:r,toolUseCount:o,errorMessages:s,terminalReason:i,hasTerminal:u}}function $i(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function Zn(){return new Y("OpenCode returned no assistant output.",Nt,{code:"EMPTY_OUTPUT",kind:"transient"})}function mc(){return new Y("OpenCode emitted malformed JSON output.",Nt,{code:"PROVIDER_CRASHED",kind:"transient"})}function Pi(t,e){switch($i(t)){case "length":return new Y("OpenCode stopped because the context window was exceeded.",Nt,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new Y("OpenCode stopped because the content filter blocked the response.",Nt,{code:"UNKNOWN",kind:"permanent"});case "error":return new Y(e?`OpenCode error: ${e}`:`${Di} while generating a response.`,Nt,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var fc,Nt,Di,Li,gc,Qr,Zr=b(()=>{_();ut();rn();xt();pt();fc=new Set(["step_start","step_finish"]),Nt="cli/opencode",Di="OpenCode provider error",Li=240,gc={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};Qr={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];Qn(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,autoApprove:i}=hc(e.mode);Qn(o,"--agent")||s!==void 0&&o.push("--agent",s),i&&!Qn(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!Qn(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let u;return !n&&!i&&!e.env?.OPENCODE_PERMISSION&&(u={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:t,env:u}},extractText(t){let e=Ni(t),n=e.errorMessages[0];if(n){let i=Pi("error",n);if(i)throw i}let r=Pi(e.terminalReason??"",void 0);if(r)throw r;let o=e.texts.length>0?e.texts[e.texts.length-1]:void 0;if(o!==void 0){if(!e.hasTerminal)throw Zn();return o}if(e.resultText?.trim()){if(!e.hasTerminal)throw Zn();return e.resultText}if(e.malformed)throw mc();if(!e.hasTerminal)throw Zn();let s=$i(e.terminalReason);if((s==="stop"||s==="tool-calls")&&e.toolUseCount>0)return "";throw Zn()},interpretExit(t,e,n=""){if(t===0)return null;let o=Ni(n).errorMessages[0];return o?new Y(`OpenCode error: ${o}`,Nt,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=Ct(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=[],o;try{JSON.parse(t),o=[t];}catch{o=Mi(t),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let u=Oe(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,h=String(g?.status||""),m=g?.input,w=Be(m);if(r.push({timestamp:u,type:"tool_use",toolName:l,toolUseId:p,toolInput:w}),h==="completed"&&g?.output!==void 0){let k=g.output,C=typeof k=="string"?k:JSON.stringify(k);r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:C,isError:false});}else h==="error"&&r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}if(d==="error"){let c=Hi(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?fc.has(r):!1}catch{return false}}};});function on(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function kc(t,e){if(!(t?Qe(eo).some(s=>s.id===t):false)||!t)return e;let r=tn(eo,t),o=ai(eo)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:o&&r.includes(o)?o:void 0:o}var eo,to,no=b(()=>{_();ut();en();lt();nn();eo="antigravity";to={command:"agy",meta:{displayName:"Antigravity",models:li(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:o}=Ze(e.model),s=Wr(r),i=s.model,u=e.effort??o??s.effort,d=kc(i,u),c=e.additionalArgs??[],l=i&&!on(c,"--model")?["--model",i]:[],p=on(c,"--effort")?[]:Si(d),g=on(c,"--mode")||on(c,"--dangerously-skip-permissions")?[]:Ri(e.mode),h=on(c,"--print")?[]:["--print",t];return {args:[...l,...p,...g,...c,...h]}},extractText(t){let e=t.trim();if(!e)throw new Y("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 Ui=b(()=>{_();vt();xt();Zt();pt();});function Dt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function tr(t){return Dt(t)?t:void 0}function le(t){return typeof t=="string"?t:void 0}function gt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function Rc(t){let e=[],n=-1,r=0,o=false,s=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(s){s=false;continue}if(u==="\\"&&o){s=true;continue}if(u==='"'){o=!o;continue}o||(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 sn(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return Dt(n)?[n]:[]}catch{return Rc(e).flatMap(n=>{try{let r=JSON.parse(n);return Dt(r)?[r]:[]}catch{return []}})}}function an(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function dn(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(dn).filter(n=>n!==void 0);return e.length>0?e.join(`
27
- `):void 0}if(Dt(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=dn(t[e]);if(n!==void 0)return n}}}function Sc(t){if(t.rawOutput!==null&&t.rawOutput!==void 0)return dn(t.rawOutput)??an(t.rawOutput);if(t.content!==null&&t.content!==void 0)return dn(t.content)??an(t.content);if(t.result!==null&&t.result!==void 0)return dn(t.result)??an(t.result)}function Wi(t){let e=tr(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?Gi(n):"Grok CLI reported an error."}function Gi(t){return (t.replace(Ec,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function ji(t){return yc.test(t)}function Ic(t){let e=tr(t.modelUsage);return e?Object.keys(e)[0]??null:null}function Ac(t){let e=tr(t.usage);if(!e)return null;let n=gt(e.cache_read_input_tokens);return {inputTokens:gt(e.input_tokens)+n,cachedInputTokens:n,outputTokens:gt(e.output_tokens),costUsd:gt(t.total_cost_usd)}}function Oc(t){let e=0,n=0,r=0,o=false,s=new Set;for(let i of t.split(`
28
- `).flatMap(sn)){if(i.type!=="usage")continue;let u=tr(i.usage);if(!u)continue;let d=le(i.signature);if(d&&d.length>0){let l=`signature:${d}`;if(s.has(l))continue;s.add(l);}let c=gt(u.cache_read_input_tokens);e+=gt(u.input_tokens)+c,n+=c,r+=gt(u.output_tokens),o=true;}return o?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function bc(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let s of e.entries.slice(0,qi)){if(!Dt(s))continue;let i=le(s.content)?.trim();if(!i)continue;let u=le(s.status)?.trim(),d=le(s.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>qi&&n.push(Bi);let r=n.join(`
29
- `),o=r.length>Fi?`${r.slice(0,Fi-1)}${Bi}`:r;return [{timestamp:t,type:"info",content:o}]}function vc(t,e){let n=le(e.type);if(n==="thought"){let r=le(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=le(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return bc(t,e);if(n==="tool_call"){let r=le(e.toolCallId),o=le(e.toolName)??le(e.title),s=e.rawInput===void 0?void 0:an(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:o,toolInput:s}]}if(n==="tool_call_update"){let r=le(e.status);return r!=="completed"&&r!=="failed"&&r!=="error"?[]:[{timestamp:t,type:"tool_result",toolUseId:le(e.toolCallId),toolName:le(e.toolName)??le(e.title),resultPreview:Sc(e),isError:r!=="completed"||e.isError===true}]}if(n==="error"){let r=Wi(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var er,wc,yc,Ec,qi,Fi,Bi,ro,oo=b(()=>{_();ut();Fr();lt();nn();pt();er="cli/grok",wc=new Set(["available_commands","usage","end"]),yc=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,Ec=/\u001b\[[0-?]*[ -/]*[@-~]/g,qi=20,Fi=4e3,Bi="\u2026";ro={command:"grok",createSessionId:()=>crypto.randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=Ze(e.model),o=e.effort??r,s=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],i=n?["--model",n]:[],u=n?Qe("grok").some(N=>N.id===n):false,d=n&&u?tn("grok",n):[],c=!o||d.length===0||d.includes(o)?o:void 0,l=Ei(c),p=e.additionalArgs??[],g=N=>p.some(E=>E===N||E.startsWith(`${N}=`)),h=e.providerOptions,m=h?.alwaysApprove,w=h?.sandbox,k=g("--permission-mode")?[]:Ti(e.mode),C=g("--always-approve")?[]:wi(m),L=g("--sandbox")?[]:yi(w);return {args:["--no-auto-update",...s,"--single",t,"--output-format","streaming-json","--no-alt-screen",...i,...l,...k,...C,...L,...p]}},extractText(t){let e=[],n=false;for(let r of t.split(`
30
- `).flatMap(sn))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 sn(t))if(e.type==="error"){let n=Wi(e);return ji(an(e))?new ct(n,er):new Y(n,er)}return null},interpretExit(t,e){if(t===0)return null;let n=Gi(e)||`Grok CLI exited with code ${t}.`;return ji(e)?new ct(n,er):new Y(n,er)},parseResultMeta(t){let n=t.split(`
31
- `).flatMap(sn).find(r=>r.type==="end");return n?{usage:Ac(n),model:Ic(n)}:{usage:Oc(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return sn(t).flatMap(r=>vc(Oe(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return Dt(n)&&typeof n.type=="string"?wc.has(n.type):!1}catch{return false}}};});var zi,Ki=b(()=>{_();zr();Vr();Yr();Zr();no();Ui();oo();zr();Vr();Yr();Zr();no();oo();vt();zi={codex:Xr,claude:Yn,opencode:Qr,antigravity:to,copilot:Kr,grok:ro};});function Vi(t){if(t.startsWith("cli/"))return zi[t.slice(4)]}var Ji=b(()=>{_();ti();Ki();});function nr(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function xc(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(`
32
- `)??"";if(!n.trim())return;let r=Vi(t.provider);if(!r)return;let o;try{o=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let s=xc(o?.model,t.model),i=o?.usage;if(!i)return {stdout:n,adapter:r};let u=nr(i.inputTokens),d=nr(i.outputTokens),c=nr(i.cachedInputTokens),l=qs(nr(i.costUsd),u,d,c,s);return u!==0||d!==0||c!==0||l!==0?{stdout:n,adapter:r,usage:{inputTokens:u,outputTokens:d,cachedInputTokens:c,costUsd:l,model:s}}:{stdout:n,adapter:r}}var so=b(()=>{_();Ji();jn();});function Nc(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"&&Cc.has(n)?n:void 0}catch{return}}function ht(t){switch(t.status){case "stopped":case "runner_lost":case "pending":case "running":case "paused":case "success":return t.status;case "completed":case "done":return "success";case "error":return "failed";case "failed":{let e=Nc(t.metadata);return e==="user_stop"?"stopped":e==="runner_lost"?"runner_lost":e==="launch_failed"?"failed":typeof t.error=="string"&&Xi.stopped.test(t.error)?"stopped":typeof t.error=="string"&&Xi.runnerLost.test(t.error)?"runner_lost":"failed"}default:return t.status}}var Yi,Xi,Cc,or=b(()=>{_();Yi=["success","failed","stopped","runner_lost"],Xi={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},Cc=new Set(["user_stop","runner_lost","launch_failed"]);});function io(t,e,n=1){let r=process.env[t];if(r===void 0||r==="")return e;let o=Number(r);return !Number.isFinite(o)||o<=0?e:Math.max(n,Math.trunc(o))}function ao(){return io("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function Mt(){return io("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function ir(){return io("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function Lt(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 Pc(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 Qi(t,e){return !!t.stop_requested_at&&Lt(t.stop_requested_epoch)===Lt(e)}function Zi(t,e){let n=Lt(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let o=Pc(t.getTask(e.taskId));return !o||o.status!=="running"||Lt(o.run_epoch)!==n?{accepted:false,row:o}:{accepted:true,row:o}}function ra(t,e){let n=un.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),un.delete(t),true)}function cn(t,e){let n=un.get(t);return !n||e!==void 0&&n.runEpoch!==Lt(e)?false:ra(t,n)}function oa(t,e){let n=Lt(e.runEpoch);cn(e.taskId);let r=true,o=null;try{let c=Zi(t,{...e,runEpoch:n});r=c.accepted,o=c.row;}catch(c){sr(c);}if(!r)return false;let s=ao(),i=Math.min(s,1e3),u=setInterval(()=>{let c=un.get(e.taskId);if(!(!c||c.timer!==u))try{c.heartbeatElapsedMs+=i;let l=c.heartbeatElapsedMs>=s,p=Zi(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:l});if(!p.accepted){ra(e.taskId,c);return}l&&(c.heartbeatElapsedMs%=s,c.lastHeartbeatAt=Date.now()),p.row&&Qi(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 un.set(e.taskId,d),typeof u=="object"&&u!==null&&"unref"in u&&u.unref(),o&&Qi(o,n)&&e.onStopRequested&&(d.stopRequested=true,Promise.resolve(e.onStopRequested(o)).catch(sr)),true}var ea,ta,na,un,ln=b(()=>{_();ea=1e4,ta=3e4,na=18e5;un=new Map;});function ar(t,e=Date.now(),n=po){let r=t?Date.parse(t):Number.NaN,o=typeof e=="number"?e:Date.parse(e),s=ho(n,po,0);return Number.isFinite(r)&&Number.isFinite(o)&&o-r>s?"forced":"cooperative"}function ho(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function ua(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function Fc(t){if(!t)return;let e=ua(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function _e(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=Fc(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function To(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 z(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 lo(t,e){return z(t,Mc,e)}function Bc(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=Mt():false}function jc(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Wc(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=ua(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(o=>o!==void 0))]}function Gc(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return _e(r,n)}async function zc(t,e,n,r){let o=Date.now()+n;for(;;){let s=Gc(t,e);if(s)return s;let i=o-Date.now();if(i<=0)return;await new Promise(u=>{setTimeout(u,Math.min(r,i));});}}async function da(t,e,n){let r=new Date().toISOString(),o={origin:n.origin??"internal",...n.callerPid!==void 0?{callerPid:n.callerPid}:{},...n.callerTaskId!==void 0?{callerTaskId:n.callerTaskId}:{}},s=t.requestTaskStop({id:e,requestedAt:r,...o}),i=t.getTask(e);if(!s.accepted){if(s.status==="pending"){let N=t.stopPendingTask(e,void 0,void 0,{...o,at:r}),E=t.getTask(e);if(N||!E||E.status!=="running")return _e(E);if(s=t.requestTaskStop({id:e,requestedAt:r,...o}),!s.accepted&&s.status!=="running"||!s.accepted&&!s.alreadyRequestedAt)return _e(t.getTask(e))}else if(!(s.status==="running"&&s.alreadyRequestedAt))return _e(i)}let u=s.runEpoch,d=ho(n.graceMs,po,0),c=ho(n.pollMs,Dc,1),l=await zc(t,e,d,c);if(l)return l;let p=t.getTask(e);if(!p||p.status!=="running")return _e(p);let g=Wc(p),h=g[0];if(!h){let N=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),E=t.getTask(e);return N||E?.status!=="running"?_e(E):z(E,"Failed to finalize task stop")}let m=jc(n),w="unknown";if(!Bc(p,Date.now())){let N=n.processControl?.checkProcessOwnershipAsync??Wn;try{w=await N(h,n.ownershipMarkers??ko,m);}catch{w="unknown";}if(w!=="owned")return To(p)}let k=n.processControl?.terminateProcessTree??Ot;for(let N of g){let E;try{E=await k(N,{...m,signal:At});}catch(v){E={status:"failed",pid:N,method:m.platform==="win32"?"taskkill":"process-group",error:v instanceof Error?v.message:String(v)};}if(E.status==="failed")return z(t.getTask(e),E.error??"Failed to terminate process tree")}let C=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),L=t.getTask(e);return C||L?.status!=="running"?_e(L,h):z(L,"Task changed before stop was finalized")}function _o(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function mo(t){return Number.isSafeInteger(t)&&t>=0}function pn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Kc(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Vc(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Jc(t,e){let n=t?.pid&&t.pid>0?t.pid:e;return {status:"stopped",method:"forced",finalStatus:t?.status??"runner_lost",...n?{pid:n}:{}}}function Xc(t){switch(t){case "epoch_mismatch":return fo;case "workspace_mismatch":return go;default:return}}async function ca(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return lo(n,_o(e.targetPid)?e.targetPid:void 0);if(!mo(e.sourceRunEpoch)||!mo(e.settleRunEpoch)||pn(n.run_epoch)!==e.settleRunEpoch)return z(n,uo,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return z(n,co,e.targetPid);let r=new Date().toISOString(),o;try{o=t.requestTaskStop({id:e.taskId,requestedAt:r,sourceRunEpoch:e.sourceRunEpoch,settleRunEpoch:e.settleRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return z(n,Hc,e.targetPid)}let s=t.getTask(e.taskId);if(!s||s.status!=="running")return lo(s,e.targetPid);if(o.runEpoch!==e.settleRunEpoch||pn(s.run_epoch)!==e.settleRunEpoch)return z(s,uo,e.targetPid);if(e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId)return z(s,co,e.targetPid);if(!_o(e.targetPid))return z(s,Lc);let i=Kc(e),u=e.processControl?.checkProcessOwnershipAsync??Wn,d="unknown";try{d=await u(e.targetPid,e.ownershipMarkers??ko,i);}catch{d="unknown";}if(d!=="owned")return To(s,e.targetPid);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return lo(c,e.targetPid);if(pn(c.run_epoch)!==e.settleRunEpoch)return z(c,uo,e.targetPid);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return z(c,co,e.targetPid);let l=e.processControl?.terminateProcessTree??Ot,p;try{p=await l(e.targetPid,{...i,signal:At});}catch{return z(t.getTask(e.taskId),sa,e.targetPid)}if(p.status==="failed")return z(t.getTask(e.taskId),sa,e.targetPid);let g;try{g=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return z(t.getTask(e.taskId),ia,e.targetPid)}return g?_e(t.getTask(e.taskId),e.targetPid):z(t.getTask(e.taskId),ia,e.targetPid)}async function la(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return _e(n);if(!mo(e.expectedRunEpoch)||pn(n.run_epoch)!==e.expectedRunEpoch)return z(n,fo);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return z(n,go);let r=n.pid;if(!_o(r))return z(n,$c);let o=Vc(e),s=e.processControl?.checkProcessOwnershipAsync??Wn,i="unknown";try{i=await s(r,e.ownershipMarkers??ko,o);}catch{i="unknown";}if(i!=="owned")return To(n,r,Uc);let u=e.processControl?.terminateProcessTree??Ot,d;try{d=await u(r,{...o,signal:At});}catch{return z(t.getTask(e.taskId),aa,r)}if(d.status==="failed")return z(t.getTask(e.taskId),aa,r);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return _e(c,r);if(pn(c.run_epoch)!==e.expectedRunEpoch)return z(c,fo,r);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return z(c,go,r);let l;try{l=t.finalizeTaskForHostShutdown({id:e.taskId,expectedRunEpoch:e.expectedRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return z(t.getTask(e.taskId),qc,r)}let p=Xc(l);return p?z(t.getTask(e.taskId),p,r):l!=="settled"?_e(t.getTask(e.taskId),r):Jc(t.getTask(e.taskId),r)}function pa(t,e,n={}){if(typeof t=="string"){let r=t,o=e??{};return Promise.resolve().then(()=>(yo(),fa)).then(({TaskRepository:s})=>da(new s,r,o))}return da(t,e,n)}var po,Dc,ko,Lc,uo,co,Mc,sa,ia,Hc,fo,go,$c,Uc,aa,qc,wo=b(()=>{_();Gn();ln();po=5e3,Dc=250;ko=["crewx","claude","codex","opencode","grok","node"],Lc="INSTRUCTION_STOP_TARGET_PID_MISSING",uo="INSTRUCTION_STOP_EPOCH_MISMATCH",co="INSTRUCTION_STOP_WORKSPACE_MISMATCH",Mc="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",sa="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",ia="INSTRUCTION_STOP_SETTLE_CAS_FAILED",Hc="INSTRUCTION_STOP_REQUEST_FAILED",fo="HOST_SHUTDOWN_EPOCH_MISMATCH",go="HOST_SHUTDOWN_WORKSPACE_MISMATCH",$c="HOST_SHUTDOWN_TARGET_PID_MISSING",Uc="HOST_SHUTDOWN_OWNERSHIP_UNVERIFIED",aa="HOST_SHUTDOWN_PROCESS_TERMINATION_FAILED",qc="HOST_SHUTDOWN_SETTLE_CAS_FAILED";});var fa={};ja(fa,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>wa,HOST_SHUTDOWN_TERMINAL_ERROR:()=>ma,PENDING_ADOPT_GRACE_MS:()=>Ta,PID_NULL_REAP_GRACE_MS:()=>No,TASK_HEARTBEAT_HARD_STALE_MS:()=>na,TASK_HEARTBEAT_INTERVAL_MS:()=>ea,TASK_HEARTBEAT_STALE_MS:()=>ta,TaskRepository:()=>mn,hasRecordedUsage:()=>Co,mergeTerminalReason:()=>xo,resolveTaskHeartbeatHardStaleMs:()=>ir,resolveTaskHeartbeatIntervalMs:()=>ao,resolveTaskHeartbeatStaleMs:()=>Mt});function ve(t){return {...t,status:ht(t)}}function Ro(t){return {...t,status:ht(t)}}function Io(t=a.model,e=a.metadata){let n=drizzleOrm.sql`
22
+ `):""}function cc(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function lc(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||""),o=e.id,s=e.input,i=Oe(s);return r==="Bash"&&qe(i)?Be(t,i,o):{timestamp:t,type:"tool_use",toolUseId:o,toolName:r,toolInput:i}}if(n==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(u=>u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
23
+ `):i=JSON.stringify(s),{timestamp:t,type:"tool_result",toolUseId:o,...Ge(i,r)}}return null}var oc,sc,Zn,Yr=b(()=>{_();jr();ct();vt();xt();en();Ct();rn();pt();on();ft();oc=new Set(["tool_progress"]),sc="cli/claude";Zn={command:"claude",meta:{displayName:"Claude",models:hi(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=Ze(e.model),s=e.effort??o,i=Si(e.mode),u=Ii(s),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=ic(t);if(e?.is_error===true){let o=Zn.extractFailure(JSON.stringify(e));if(o)throw o;let s=typeof e.subtype=="string"?e.subtype:"unknown",i=typeof e.terminal_reason=="string"?e.terminal_reason:"unknown";throw new Y(`Claude ended without an answer (subtype=${s}, terminal_reason=${i})`,sc,{code:"EMPTY_OUTPUT",kind:"permanent"})}let n=Pi(t);if(n)return n;let r=t.trim();return Fe(r,"claude")?"":r},extractPartialText(t){return Pi(t)},extractFailure(t){try{let e=JSON.parse(t),n=Di(e);if(n)return new lt(n)}catch{}return null},parseResultMeta(t){let e=t.split(`
24
+ `);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let s=o.usage,i=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,u=o.modelUsage,d=u?Object.keys(u)[0]??null:null;return {usage:i,model:d}}}catch{}let n=Ni(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 o=be(n,e??new Date().toISOString()),s=dc(n);if(s)return [{timestamp:o,type:"error",content:s,errorMessage:s}];if(r!=="assistant"&&r!=="user")return [];let u=n.message?.content;if(!Array.isArray(u))return [];let d=[];for(let c of u){let l=lc(o,c);l&&d.push(l);}return d},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?oc.has(r):!1}catch{return false}}};});function Li(t){let e=t.split(`
25
+ `).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&n.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}var pc,Qr,Zr=b(()=>{_();vt();on();xt();Ct();en();pt();Xn();ft();pc=new Set(["interactive","plan","autopilot"]);Qr={command:"copilot",meta:{displayName:"Copilot",models:mi()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&pc.has(e.mode)&&r.push("--mode",e.mode),e.effort&&(Jn.copilot??[]).includes(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=Li(t);if(e)return e;let n=t.trim();return Fe(n,"copilot")?"":n},extractPartialText(t){return Li(t)},parseResultMeta(t){let e=Nt(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 o=n.data;if(!o)return [];let s=be(n,e??new Date().toISOString()),i=o.toolCallId;if(r==="tool.execution_start"){let u=String(o.toolName||""),d=o.arguments,c=Oe(d);return (u==="bash"||u==="Bash")&&qe(c)?[Be(s,c,i)]:[{timestamp:s,type:"tool_use",toolName:u,toolInput:c,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let u=o.error;if(u)return [{timestamp:s,type:"tool_result",...i&&{toolUseId:i},...Ge(String(u.message||""),true)}];let d=o.result,c=String(d?.content||"");return [{timestamp:s,type:"tool_result",...i&&{toolUseId:i},...Ge(c,false)}]}if(r==="assistant.message"){let u=String(o.content||"");return u?[{timestamp:s,type:"text",content:u}]:[]}return []}};});function hc(t){let e=[],n=0,r=false,o=false,s=0;for(let u=0;u<t.length;u++){let d=t[u];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(s,u+1).trim();c&&e.push(c),s=u+1;}}}let i=t.slice(s).trim();return i&&e.push(i),e}function _c(t){return t[0]==="exec"?t.slice(1):t}function Mi(t){let e=t.split(`
26
+ `).map(o=>o.trim()).filter(Boolean),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&n.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function et(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function $i(t){return t.type==="turn.failed"?true:t.type!=="error"?false:typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||et(t.error)}function Ui(t){let e=et(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 mc(t){for(let e of t.split(/\r?\n/)){if(!e.trim())continue;let n;try{n=JSON.parse(e);}catch{continue}if(et(n)&&$i(n))return Ui(n)}}function Hi(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 o=n.state.get("codex.pending");o||(o=new Map,n.state.set("codex.pending",o));let s=JSON.stringify([t.type,t.id]);if(e==="item.started"){let d=`codex:${JSON.stringify(t.id)}#${n.rowIndex}:${r}`,c=o.get(s)??[];return c.push(d),o.set(s,c),d}let i=o.get(s),u=i?.pop();return i?.length||o.delete(s),u}function kc(t,e,n){let r=e.type;if(r==="command_execution"){let o=String(e.command||"");return qe(o)?[Be(t,o,n)]:[{timestamp:t,type:"tool_use",toolName:"Bash",toolInput:o,...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:Oe(e.arguments),...n?{toolUseId:n}:{}}]:[]}function Tc(t,e,n){let r=e.type;if(r==="message"||r==="text"){let o=e.content;if(Array.isArray(o))for(let s of o){let i=wc(t,s);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 o=typeof e.text=="string"?e.text.trim():"";return o?{timestamp:t,type:"thinking",content:o}:null}if(r==="command_execution"){let o=String(e.aggregated_output||e.output||""),s=!!e.is_error;return {timestamp:t,type:"tool_result",...Ge(o,s),...n?{toolUseId:n}:{}}}if(r==="mcp_tool_call"){let o=et(e.result)?e.result:void 0,i=(Array.isArray(o?.content)?o.content:[]).filter(d=>et(d)&&d.type==="text"&&typeof d.text=="string").map(d=>d.text).join(`
27
+ `),u=typeof e.error=="string"?e.error:et(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 o=String(e.name||e.tool_name||""),s=e.input,i=Oe(s);return o==="Bash"&&qe(i)?Be(t,i):{timestamp:t,type:"tool_use",toolName:o,toolInput:i}}if(r==="tool_result"){let o=!!e.is_error,s=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",...Ge(s,o)}}if(r==="web_search"){let o=e.action,s;if(o?.type==="search"){let i=o.queries;s=String(o.query||"")||(i?.length?i.join(", "):"")||String(e.query||"");}else s=e.query?"open: "+String(e.query):"";return !s&&!(et(o)&&o.type==="other"&&e.query==="")?null:{timestamp:t,type:"tool_use",toolName:"WebSearch",toolInput:s}}if(r==="file_change"){let o=e.changes;if(!Array.isArray(o)||o.length===0)return null;let s=o.map(u=>String(u.path||"")).filter(Boolean);if(s.length===0)return null;let i=s.length===1?s[0]:`${s.slice(0,2).join(", ")}${s.length>2?` (+${s.length-2})`:""}`;return {timestamp:t,type:"tool_use",toolName:"Edit",toolInput:i}}return null}function wc(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||""),o=e.input,s=Oe(o);return r==="Bash"&&qe(s)?Be(t,s):{timestamp:t,type:"tool_use",toolName:r,toolInput:s}}return null}var fc,gc,eo,to=b(()=>{_();ct();vt();on();xt();Ct();zr();en();rn();pt();ft();fc=new Set(["turn.started","turn.completed","item.updated"]),gc="cli/codex";eo={command:"codex",meta:{displayName:"Codex",models:_i(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=Ze(e.model),s=e.effort??o,i=e.resumeSessionId?Ei(e.mode):yi(e.mode),u=Ri(s),d=r?["-m",r]:[],c=_c(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=mc(t);if(e)throw new Y(e,gc);let n=Mi(t);if(n)return n;let r=t.trim();return Fe(r,"codex")?"":r},extractPartialText(t){return Mi(t)},parseResultMeta(t){let e=Nt(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(),o=[],s;try{JSON.parse(t),s=[t];}catch{s=hc(t),s.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let[i,u]of s.entries()){let d;try{d=JSON.parse(u);}catch{continue}if(!et(d))continue;let c=d.type;if(!c)continue;let l=be(d,r);if($i(d)){let g=Ui(d);o.push({timestamp:l,type:"error",content:g,errorMessage:g});continue}if(!c.startsWith("item.")&&!c.startsWith("turn.")&&!c.startsWith("thread.")||Gr(d))continue;c==="thread.started"&&n&&n.state.delete("codex.pending");let p=d.item;if(p){if(c==="item.started"){o.push(...kc(l,p,Hi(p,c,n,i)));continue}if(c==="item.completed"){let g=Tc(l,p,Hi(p,c,n,i));g&&o.push(g);continue}}}return o},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?fc.has(r):!1}catch{return false}}};});function Rc(t){return t?Ec[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function er(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Wi(t){let e=[],n=0,r=false,o=false,s=0;for(let u=0;u<t.length;u++){let d=t[u];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(s,u+1).trim();c&&e.push(c),s=u+1;}}}let i=t.slice(s).trim();return i&&e.push(i),e}function Dt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Sc(t){let e=[],n=false;for(let r of t.split(/\r?\n/)){let o=r.trim();if(!o)continue;try{let i=JSON.parse(o);Dt(i)?e.push(i):n=!0;continue}catch{}let s=Wi(o);s.length>1&&console.warn("[opencode] extractText: falling back to concatenated-JSON split for a malformed line");for(let i of s)try{let u=JSON.parse(i);Dt(u)?e.push(u):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function gt(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,ji).trim()}function Gi(t){let e=Dt(t.error)?t.error:void 0,n=e&&Dt(e.data)?e.data:void 0,r=gt(e?.name),o=gt(n?.message)??gt(e?.message)??gt(t.message)??gt(t.errorMessage)??gt(t.error),s=gt(t.ref),i=r&&o&&r!==o?`${r}: ${o}`:r??o??Bi;return (s?`${i} (ref: ${s})`:i).slice(0,ji)}function Fi(t){let e=Sc(t),n=[],r=null,o=0,s=[],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=Dt(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"){o++;continue}if(c==="error"){s.push(Gi(d));continue}if(c==="step_finish"){u=true;let l=Dt(d.part)?d.part:void 0;i=typeof l?.reason=="string"?l.reason:void 0;}}}return {...e,texts:n,resultText:r,toolUseCount:o,errorMessages:s,terminalReason:i,hasTerminal:u}}function zi(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function tr(){return new Y("OpenCode returned no assistant output.",Pt,{code:"EMPTY_OUTPUT",kind:"transient"})}function Ic(){return new Y("OpenCode emitted malformed JSON output.",Pt,{code:"PROVIDER_CRASHED",kind:"transient"})}function qi(t,e){switch(zi(t)){case "length":return new Y("OpenCode stopped because the context window was exceeded.",Pt,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new Y("OpenCode stopped because the content filter blocked the response.",Pt,{code:"UNKNOWN",kind:"permanent"});case "error":return new Y(e?`OpenCode error: ${e}`:`${Bi} while generating a response.`,Pt,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var yc,Pt,Bi,ji,Ec,no,ro=b(()=>{_();ct();on();Ct();ft();yc=new Set(["step_start","step_finish"]),Pt="cli/opencode",Bi="OpenCode provider error",ji=240,Ec={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};no={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];er(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,autoApprove:i}=Rc(e.mode);er(o,"--agent")||s!==void 0&&o.push("--agent",s),i&&!er(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!er(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let u;return !n&&!i&&!e.env?.OPENCODE_PERMISSION&&(u={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:t,env:u}},extractText(t){let e=Fi(t),n=e.errorMessages[0];if(n){let i=qi("error",n);if(i)throw i}let r=qi(e.terminalReason??"",void 0);if(r)throw r;let o=e.texts.length>0?e.texts[e.texts.length-1]:void 0;if(o!==void 0){if(!e.hasTerminal)throw tr();return o}if(e.resultText?.trim()){if(!e.hasTerminal)throw tr();return e.resultText}if(e.malformed)throw Ic();if(!e.hasTerminal)throw tr();let s=zi(e.terminalReason);if((s==="stop"||s==="tool-calls")&&e.toolUseCount>0)return "";throw tr()},interpretExit(t,e,n=""){if(t===0)return null;let o=Fi(n).errorMessages[0];return o?new Y(`OpenCode error: ${o}`,Pt,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=Nt(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=[],o;try{JSON.parse(t),o=[t];}catch{o=Wi(t),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let u=be(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,h=String(g?.status||""),m=g?.input,w=Oe(m);if(r.push({timestamp:u,type:"tool_use",toolName:l,toolUseId:p,toolInput:w}),h==="completed"&&g?.output!==void 0){let k=g.output,C=typeof k=="string"?k:JSON.stringify(k);r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:C,isError:false});}else h==="error"&&r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}if(d==="error"){let c=Gi(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?yc.has(r):!1}catch{return false}}};});function sn(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Ac(t,e){if(!(t?Qe(oo).some(s=>s.id===t):false)||!t)return e;let r=nn(oo,t),o=gi(oo)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:o&&r.includes(o)?o:void 0:o}var oo,so,io=b(()=>{_();ct();tn();pt();rn();oo="antigravity";so={command:"agy",meta:{displayName:"Antigravity",models:ki(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:o}=Ze(e.model),s=Jr(r),i=s.model,u=e.effort??o??s.effort,d=Ac(i,u),c=e.additionalArgs??[],l=i&&!sn(c,"--model")?["--model",i]:[],p=sn(c,"--effort")?[]:Ci(d),g=sn(c,"--mode")||sn(c,"--dangerously-skip-permissions")?[]:xi(e.mode),h=sn(c,"--print")?[]:["--print",t];return {args:[...l,...p,...g,...c,...h]}},extractText(t){let e=t.trim();if(!e)throw new Y("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 Ki=b(()=>{_();xt();Ct();en();ft();});function Lt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function rr(t){return Lt(t)?t:void 0}function le(t){return typeof t=="string"?t:void 0}function ht(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function Cc(t){let e=[],n=-1,r=0,o=false,s=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(s){s=false;continue}if(u==="\\"&&o){s=true;continue}if(u==='"'){o=!o;continue}o||(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 Lt(n)?[n]:[]}catch{return Cc(e).flatMap(n=>{try{let r=JSON.parse(n);return Lt(r)?[r]:[]}catch{return []}})}}function dn(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function un(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(un).filter(n=>n!==void 0);return e.length>0?e.join(`
28
+ `):void 0}if(Lt(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=un(t[e]);if(n!==void 0)return n}}}function Nc(t){if(t.rawOutput!==null&&t.rawOutput!==void 0)return un(t.rawOutput)??dn(t.rawOutput);if(t.content!==null&&t.content!==void 0)return un(t.content)??dn(t.content);if(t.result!==null&&t.result!==void 0)return un(t.result)??dn(t.result)}function Qi(t){let e=rr(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?Zi(n):"Grok CLI reported an error."}function Zi(t){return (t.replace(xc,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function Yi(t){return vc.test(t)}function Pc(t){let e=rr(t.modelUsage);return e?Object.keys(e)[0]??null:null}function Dc(t){let e=rr(t.usage);if(!e)return null;let n=ht(e.cache_read_input_tokens);return {inputTokens:ht(e.input_tokens)+n,cachedInputTokens:n,outputTokens:ht(e.output_tokens),costUsd:ht(t.total_cost_usd)}}function Lc(t){let e=0,n=0,r=0,o=false,s=new Set;for(let i of t.split(`
29
+ `).flatMap(an)){if(i.type!=="usage")continue;let u=rr(i.usage);if(!u)continue;let d=le(i.signature);if(d&&d.length>0){let l=`signature:${d}`;if(s.has(l))continue;s.add(l);}let c=ht(u.cache_read_input_tokens);e+=ht(u.input_tokens)+c,n+=c,r+=ht(u.output_tokens),o=true;}return o?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function Mc(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let s of e.entries.slice(0,Vi)){if(!Lt(s))continue;let i=le(s.content)?.trim();if(!i)continue;let u=le(s.status)?.trim(),d=le(s.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>Vi&&n.push(Xi);let r=n.join(`
30
+ `),o=r.length>Ji?`${r.slice(0,Ji-1)}${Xi}`:r;return [{timestamp:t,type:"info",content:o}]}function Hc(t,e){let n=le(e.type);if(n==="thought"){let r=le(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=le(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return Mc(t,e);if(n==="tool_call"){let r=le(e.toolCallId),o=le(e.toolName)??le(e.title),s=e.rawInput===void 0?void 0:dn(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:o,toolInput:s}]}if(n==="tool_call_update"){let r=le(e.status);return r!=="completed"&&r!=="failed"&&r!=="error"?[]:[{timestamp:t,type:"tool_result",toolUseId:le(e.toolCallId),toolName:le(e.toolName)??le(e.title),resultPreview:Nc(e),isError:r!=="completed"||e.isError===true}]}if(n==="error"){let r=Qi(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var nr,bc,vc,xc,Vi,Ji,Xi,ao,uo=b(()=>{_();ct();jr();pt();rn();ft();nr="cli/grok",bc=new Set(["available_commands","usage","end"]),vc=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,xc=/\u001b\[[0-?]*[ -/]*[@-~]/g,Vi=20,Ji=4e3,Xi="\u2026";ao={command:"grok",createSessionId:()=>crypto.randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=Ze(e.model),o=e.effort??r,s=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],i=n?["--model",n]:[],u=n?Qe("grok").some(N=>N.id===n):false,d=n&&u?nn("grok",n):[],c=!o||d.length===0||d.includes(o)?o:void 0,l=vi(c),p=e.additionalArgs??[],g=N=>p.some(E=>E===N||E.startsWith(`${N}=`)),h=e.providerOptions,m=h?.alwaysApprove,w=h?.sandbox,k=g("--permission-mode")?[]:Ai(e.mode),C=g("--always-approve")?[]:Oi(m),L=g("--sandbox")?[]:bi(w);return {args:["--no-auto-update",...s,"--single",t,"--output-format","streaming-json","--no-alt-screen",...i,...l,...k,...C,...L,...p]}},extractText(t){let e=[],n=false;for(let r of t.split(`
31
+ `).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=Qi(e);return Yi(dn(e))?new lt(n,nr):new Y(n,nr)}return null},interpretExit(t,e){if(t===0)return null;let n=Zi(e)||`Grok CLI exited with code ${t}.`;return Yi(e)?new lt(n,nr):new Y(n,nr)},parseResultMeta(t){let n=t.split(`
32
+ `).flatMap(an).find(r=>r.type==="end");return n?{usage:Dc(n),model:Pc(n)}:{usage:Lc(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return an(t).flatMap(r=>Hc(be(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return Lt(n)&&typeof n.type=="string"?bc.has(n.type):!1}catch{return false}}};});var ea,ta=b(()=>{_();Yr();Zr();to();ro();io();Ki();uo();Yr();Zr();to();ro();io();uo();xt();ea={codex:eo,claude:Zn,opencode:no,antigravity:so,copilot:Qr,grok:ao};});function na(t){if(t.startsWith("cli/"))return ea[t.slice(4)]}var ra=b(()=>{_();si();ta();});function or(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function $c(t,e){return typeof t=="string"&&t.length>0?t:typeof e=="string"&&e.length>0?e:null}function sr(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(`
33
+ `)??"";if(!n.trim())return;let r=na(t.provider);if(!r)return;let o;try{o=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let s=$c(o?.model,t.model),i=o?.usage;if(!i)return {stdout:n,adapter:r};let u=or(i.inputTokens),d=or(i.outputTokens),c=or(i.cachedInputTokens),l=Ws(or(i.costUsd),u,d,c,s);return u!==0||d!==0||c!==0||l!==0?{stdout:n,adapter:r,usage:{inputTokens:u,outputTokens:d,cachedInputTokens:c,costUsd:l,model:s}}:{stdout:n,adapter:r}}var co=b(()=>{_();ra();Wn();});function Fc(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"&&Uc.has(n)?n:void 0}catch{return}}function _t(t){switch(t.status){case "stopped":case "runner_lost":case "pending":case "running":case "paused":case "success":return t.status;case "completed":case "done":return "success";case "error":return "failed";case "failed":{let e=Fc(t.metadata);return e==="user_stop"?"stopped":e==="runner_lost"?"runner_lost":e==="launch_failed"?"failed":typeof t.error=="string"&&oa.stopped.test(t.error)?"stopped":typeof t.error=="string"&&oa.runnerLost.test(t.error)?"runner_lost":"failed"}default:return t.status}}var sa,oa,Uc,ir=b(()=>{_();sa=["success","failed","stopped","runner_lost"],oa={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},Uc=new Set(["user_stop","runner_lost","launch_failed"]);});function lo(t,e,n=1){let r=process.env[t];if(r===void 0||r==="")return e;let o=Number(r);return !Number.isFinite(o)||o<=0?e:Math.max(n,Math.trunc(o))}function po(){return lo("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function Ht(){return lo("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function dr(){return lo("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function Mt(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function ar(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 qc(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 ia(t,e){return !!t.stop_requested_at&&Mt(t.stop_requested_epoch)===Mt(e)}function aa(t,e){let n=Mt(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let o=qc(t.getTask(e.taskId));return !o||o.status!=="running"||Mt(o.run_epoch)!==n?{accepted:false,row:o}:{accepted:true,row:o}}function la(t,e){let n=cn.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),cn.delete(t),true)}function ln(t,e){let n=cn.get(t);return !n||e!==void 0&&n.runEpoch!==Mt(e)?false:la(t,n)}function pa(t,e){let n=Mt(e.runEpoch);ln(e.taskId);let r=true,o=null;try{let c=aa(t,{...e,runEpoch:n});r=c.accepted,o=c.row;}catch(c){ar(c);}if(!r)return false;let s=po(),i=Math.min(s,1e3),u=setInterval(()=>{let c=cn.get(e.taskId);if(!(!c||c.timer!==u))try{c.heartbeatElapsedMs+=i;let l=c.heartbeatElapsedMs>=s,p=aa(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:l});if(!p.accepted){la(e.taskId,c);return}l&&(c.heartbeatElapsedMs%=s,c.lastHeartbeatAt=Date.now()),p.row&&ia(p.row,n)&&!c.stopRequested&&(c.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(ar));}catch(l){ar(l);}},i),d={timer:u,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return cn.set(e.taskId,d),typeof u=="object"&&u!==null&&"unref"in u&&u.unref(),o&&ia(o,n)&&e.onStopRequested&&(d.stopRequested=true,Promise.resolve(e.onStopRequested(o)).catch(ar)),true}var da,ua,ca,cn,pn=b(()=>{_();da=1e4,ua=3e4,ca=18e5;cn=new Map;});function ur(t,e=Date.now(),n=_o){let r=t?Date.parse(t):Number.NaN,o=typeof e=="number"?e:Date.parse(e),s=To(n,_o,0);return Number.isFinite(r)&&Number.isFinite(o)&&o-r>s?"forced":"cooperative"}function To(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function ma(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function Jc(t){if(!t)return;let e=ma(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function _e(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=Jc(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 z(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 ho(t,e){return z(t,Wc,e)}function Xc(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=Ht():false}function Yc(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Qc(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=ma(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(o=>o!==void 0))]}function Zc(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return _e(r,n)}async function el(t,e,n,r){let o=Date.now()+n;for(;;){let s=Zc(t,e);if(s)return s;let i=o-Date.now();if(i<=0)return;await new Promise(u=>{setTimeout(u,Math.min(r,i));});}}async function _a(t,e,n){let r=new Date().toISOString(),o={origin:n.origin??"internal",...n.callerPid!==void 0?{callerPid:n.callerPid}:{},...n.callerTaskId!==void 0?{callerTaskId:n.callerTaskId}:{}},s=t.requestTaskStop({id:e,requestedAt:r,...o}),i=t.getTask(e);if(!s.accepted){if(s.status==="pending"){let N=t.stopPendingTask(e,void 0,void 0,{...o,at:r}),E=t.getTask(e);if(N||!E||E.status!=="running")return _e(E);if(s=t.requestTaskStop({id:e,requestedAt:r,...o}),!s.accepted&&s.status!=="running"||!s.accepted&&!s.alreadyRequestedAt)return _e(t.getTask(e))}else if(!(s.status==="running"&&s.alreadyRequestedAt))return _e(i)}let u=s.runEpoch,d=To(n.graceMs,_o,0),c=To(n.pollMs,Bc,1),l=await el(t,e,d,c);if(l)return l;let p=t.getTask(e);if(!p||p.status!=="running")return _e(p);let g=Qc(p),h=g[0];if(!h){let N=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),E=t.getTask(e);return N||E?.status!=="running"?_e(E):z(E,"Failed to finalize task stop")}let m=Yc(n),w="unknown";if(!Xc(p,Date.now())){let N=n.processControl?.checkProcessOwnershipAsync??Gn;try{w=await N(h,n.ownershipMarkers??Eo,m);}catch{w="unknown";}if(w!=="owned")return Ro(p)}let k=n.processControl?.terminateProcessTree??bt;for(let N of g){let E;try{E=await k(N,{...m,signal:Ot});}catch(v){E={status:"failed",pid:N,method:m.platform==="win32"?"taskkill":"process-group",error:v instanceof Error?v.message:String(v)};}if(E.status==="failed")return z(t.getTask(e),E.error??"Failed to terminate process tree")}let C=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),L=t.getTask(e);return C||L?.status!=="running"?_e(L,h):z(L,"Task changed before stop was finalized")}function wo(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function yo(t){return Number.isSafeInteger(t)&&t>=0}function fn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function tl(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function nl(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function rl(t,e){let n=t?.pid&&t.pid>0?t.pid:e;return {status:"stopped",method:"forced",finalStatus:t?.status??"runner_lost",...n?{pid:n}:{}}}function ol(t){switch(t){case "epoch_mismatch":return mo;case "workspace_mismatch":return ko;default:return}}async function ka(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return ho(n,wo(e.targetPid)?e.targetPid:void 0);if(!yo(e.sourceRunEpoch)||!yo(e.settleRunEpoch)||fn(n.run_epoch)!==e.settleRunEpoch)return z(n,fo,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return z(n,go,e.targetPid);let r=new Date().toISOString(),o;try{o=t.requestTaskStop({id:e.taskId,requestedAt:r,sourceRunEpoch:e.sourceRunEpoch,settleRunEpoch:e.settleRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return z(n,Gc,e.targetPid)}let s=t.getTask(e.taskId);if(!s||s.status!=="running")return ho(s,e.targetPid);if(o.runEpoch!==e.settleRunEpoch||fn(s.run_epoch)!==e.settleRunEpoch)return z(s,fo,e.targetPid);if(e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId)return z(s,go,e.targetPid);if(!wo(e.targetPid))return z(s,jc);let i=tl(e),u=e.processControl?.checkProcessOwnershipAsync??Gn,d="unknown";try{d=await u(e.targetPid,e.ownershipMarkers??Eo,i);}catch{d="unknown";}if(d!=="owned")return Ro(s,e.targetPid);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return ho(c,e.targetPid);if(fn(c.run_epoch)!==e.settleRunEpoch)return z(c,fo,e.targetPid);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return z(c,go,e.targetPid);let l=e.processControl?.terminateProcessTree??bt,p;try{p=await l(e.targetPid,{...i,signal:Ot});}catch{return z(t.getTask(e.taskId),fa,e.targetPid)}if(p.status==="failed")return z(t.getTask(e.taskId),fa,e.targetPid);let g;try{g=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return z(t.getTask(e.taskId),ga,e.targetPid)}return g?_e(t.getTask(e.taskId),e.targetPid):z(t.getTask(e.taskId),ga,e.targetPid)}async function Ta(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return _e(n);if(!yo(e.expectedRunEpoch)||fn(n.run_epoch)!==e.expectedRunEpoch)return z(n,mo);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return z(n,ko);let r=n.pid;if(!wo(r))return z(n,zc);let o=nl(e),s=e.processControl?.checkProcessOwnershipAsync??Gn,i="unknown";try{i=await s(r,e.ownershipMarkers??Eo,o);}catch{i="unknown";}if(i!=="owned")return Ro(n,r,Kc);let u=e.processControl?.terminateProcessTree??bt,d;try{d=await u(r,{...o,signal:Ot});}catch{return z(t.getTask(e.taskId),ha,r)}if(d.status==="failed")return z(t.getTask(e.taskId),ha,r);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return _e(c,r);if(fn(c.run_epoch)!==e.expectedRunEpoch)return z(c,mo,r);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return z(c,ko,r);let l;try{l=t.finalizeTaskForHostShutdown({id:e.taskId,expectedRunEpoch:e.expectedRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return z(t.getTask(e.taskId),Vc,r)}let p=ol(l);return p?z(t.getTask(e.taskId),p,r):l!=="settled"?_e(t.getTask(e.taskId),r):rl(t.getTask(e.taskId),r)}function wa(t,e,n={}){if(typeof t=="string"){let r=t,o=e??{};return Promise.resolve().then(()=>(Io(),ya)).then(({TaskRepository:s})=>_a(new s,r,o))}return _a(t,e,n)}var _o,Bc,Eo,jc,fo,go,Wc,fa,ga,Gc,mo,ko,zc,Kc,ha,Vc,So=b(()=>{_();zn();pn();_o=5e3,Bc=250;Eo=["crewx","claude","codex","opencode","grok","node"],jc="INSTRUCTION_STOP_TARGET_PID_MISSING",fo="INSTRUCTION_STOP_EPOCH_MISMATCH",go="INSTRUCTION_STOP_WORKSPACE_MISMATCH",Wc="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",fa="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",ga="INSTRUCTION_STOP_SETTLE_CAS_FAILED",Gc="INSTRUCTION_STOP_REQUEST_FAILED",mo="HOST_SHUTDOWN_EPOCH_MISMATCH",ko="HOST_SHUTDOWN_WORKSPACE_MISMATCH",zc="HOST_SHUTDOWN_TARGET_PID_MISSING",Kc="HOST_SHUTDOWN_OWNERSHIP_UNVERIFIED",ha="HOST_SHUTDOWN_PROCESS_TERMINATION_FAILED",Vc="HOST_SHUTDOWN_SETTLE_CAS_FAILED";});var ya={};Ya(ya,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>ba,HOST_SHUTDOWN_TERMINAL_ERROR:()=>Ia,PENDING_ADOPT_GRACE_MS:()=>Oa,PID_NULL_REAP_GRACE_MS:()=>Mo,TASK_HEARTBEAT_HARD_STALE_MS:()=>ca,TASK_HEARTBEAT_INTERVAL_MS:()=>da,TASK_HEARTBEAT_STALE_MS:()=>ua,TaskRepository:()=>kn,hasRecordedUsage:()=>Lo,mergeTerminalReason:()=>Do,resolveTaskHeartbeatHardStaleMs:()=>dr,resolveTaskHeartbeatIntervalMs:()=>po,resolveTaskHeartbeatStaleMs:()=>Ht});function xe(t){return {...t,status:_t(t)}}function Oo(t){return {...t,status:_t(t)}}function vo(t=a.model,e=a.metadata){let n=drizzleOrm.sql`
33
34
  CASE
34
35
  WHEN ${t} LIKE 'claude-%' OR ${t} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
35
36
  WHEN ${t} LIKE 'gpt-%' OR ${t} LIKE 'codex-%' THEN 'codex'
@@ -58,7 +59,7 @@ ${r.join(`
58
59
  WHEN trim(${i}) = '' THEN 'unknown'
59
60
  ELSE ${i}
60
61
  END
61
- `}function _n(t){return drizzleOrm.sql`${t} NOT IN (${drizzleOrm.sql.join(sl.map(e=>drizzleOrm.sql`${e}`),drizzleOrm.sql`, `)})`}function dr(t){let e=drizzleOrm.sql`
62
+ `}function mn(t){return drizzleOrm.sql`${t} NOT IN (${drizzleOrm.sql.join(fl.map(e=>drizzleOrm.sql`${e}`),drizzleOrm.sql`, `)})`}function cr(t){let e=drizzleOrm.sql`
62
63
  CASE
63
64
  WHEN json_valid(${t}) = 1
64
65
  THEN json_extract(${t}, '$.usageAccounting')
@@ -68,7 +69,7 @@ ${r.join(`
68
69
  COALESCE(SUM(
69
70
  CASE WHEN ${e} = 'unavailable' THEN 1 ELSE 0 END
70
71
  ), 0)
71
- `}function qt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Z(t){if(!t)return {};try{let e=JSON.parse(t);return qt(e)?{...e}:{}}catch{return {}}}function lr(t){return t==null||t===""}function Oo(t,e){return lr(t)&&!lr(e)?e:t}function il(t,e){let n=Z(t);if(!e)return n;for(let[r,o]of Object.entries(e))lr(n[r])&&!lr(o)&&(n[r]=o);return n}function ur(t,e){let n=t.origin&&ka.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 al(t){let e=Z(t).stopRequest;if(qt(e)&&!(typeof e.origin!="string"||!ka.has(e.origin)||typeof e.at!="string"||typeof e.callerPid!="number"))return {...e}}function ha(){return drizzleOrm.or(drizzleOrm.isNull(a.stop_requested_at),drizzleOrm.ne(drizzleOrm.sql`COALESCE(${a.stop_requested_epoch}, 0)`,drizzleOrm.sql`COALESCE(${a.run_epoch}, 0)`))}function xo(t,e){let n=Z(t??null);return n.terminalReason=e,JSON.stringify(n)}function bo(t,e){let n={...t,terminalReason:"user_stop"},r=e?.trim();return r&&r!==ga&&(n[rl]=e),{error:ga,metadata:n}}function re(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function Co(t){return re(t.input_tokens)!==0||re(t.output_tokens)!==0||re(t.cached_input_tokens)!==0||re(t.cost_usd)!==0}function K(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function _a(t){return {inputTokens:re(t.inputTokens??0),outputTokens:re(t.outputTokens??0),cachedInputTokens:re(t.cachedInputTokens??0),costUsd:re(t.costUsd??0)}}function dl(t){if(qt(t))return {inputTokens:re(t.inputTokens),outputTokens:re(t.outputTokens),cachedInputTokens:re(t.cachedInputTokens),costUsd:re(t.costUsd)}}function ul(t){let e={inputTokens:0,outputTokens:0,cachedInputTokens:0,costUsd:0};for(let n of Object.values(t)){let r=dl(n);r&&(e.inputTokens+=r.inputTokens,e.outputTokens+=r.outputTokens,e.cachedInputTokens+=r.cachedInputTokens,e.costUsd+=r.costUsd);}return e}function cr(t,e,n){let r=Date.parse(t),o=Date.parse(e);return Number.isFinite(r)&&Number.isFinite(o)?o-r:n??null}var So,Ht,tl,$t,Ut,nl,Ao,hn,xe,ga,ma,rl,ol,sl,ka,No,Ta,wa,mn,yo=b(()=>{_();ot();yt();Et();nt();St();jn();Gn();ei();so();or();ln();wo();ln();So=40,Ht="2026-05-09",tl="0.8.9-rc.13",$t=10,Ut=parseInt(tl.split("rc.")[1]);nl=new Set(["workflow","mcp"]),Ao="usageByEpoch",hn="lateUsage",xe="usageAccounting",ga="Stopped by user",ma="Stopped by app shutdown",rl="terminalErrorOriginal",ol=new Set(["stopped","runner_lost"]),sl=["pending","running"];ka=new Set(["http","cli","instruction","workflow","internal"]);No=600*1e3,Ta=600*1e3,wa=300*1e3,mn=class extends we{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=pe.join(e.dbRoot,".crewx","crewx.db")),this.taskLogRepository=new zn({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?rt(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=pe.dirname(n);fs.existsSync(o)||fs.mkdirSync(o,{recursive:true});}else if(!fs.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{Pe(r.db,n);}catch(o){throw r.close(),o}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=K(e.runEpoch),o=r===0?drizzleOrm.or(drizzleOrm.eq(a.run_epoch,0),drizzleOrm.isNull(a.run_epoch)):drizzleOrm.eq(a.run_epoch,r);return n.db.update(a).set({heartbeat_at:new Date(this.clock()).toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),o,drizzleOrm.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(o=>{let s=o.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!s)return;let i=K(s.run_epoch);if(s.status!=="running"){r={accepted:!1,status:s.status,runEpoch:i};return}let u=s.stop_requested_at!==null&&K(s.stop_requested_epoch)===i,d=u?s.stop_requested_at:e.requestedAt,c=Z(s.metadata),l=u?al(s.metadata)??ur({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d):ur({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d);if(o.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:drizzleOrm.sql`${a.run_epoch}`,metadata:JSON.stringify({...c,stopRequest:l})}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),ha())).run().changes===0){let m=o.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:K(m?.run_epoch)};return}r={accepted:!1,status:m.status,runEpoch:K(m.run_epoch),...m.stop_requested_at&&K(m.stop_requested_epoch)===K(m.run_epoch)?{alreadyRequestedAt:m.stop_requested_at}:{}};}else r={accepted:!0,status:s.status,runEpoch:i};let g=new Set([e.id]),h=(m,w)=>{if(w>=8)return;let k=o.select({id:a.id,status:a.status,metadata:a.metadata}).from(a).where(drizzleOrm.and(drizzleOrm.eq(a.parent_task_id,m),drizzleOrm.eq(a.status,"running"))).all();for(let C of k)g.has(C.id)||(g.add(C.id),o.update(a).set({stop_requested_at:d,stop_requested_epoch:drizzleOrm.sql`${a.run_epoch}`,metadata:JSON.stringify({...Z(C.metadata),stopRequest:l})}).where(drizzleOrm.and(drizzleOrm.eq(a.id,C.id),drizzleOrm.eq(a.status,"running"),ha())).run(),h(C.id,w+1));};h(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(o=>{let s=o.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!s)return;let i=K(s.run_epoch),u=K(e.sourceRunEpoch),d=K(e.settleRunEpoch);if(s.status!=="running"||i!==d||e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId){r={accepted:!1,status:s.status,runEpoch:i};return}let c=d===0?drizzleOrm.or(drizzleOrm.eq(a.run_epoch,0),drizzleOrm.isNull(a.run_epoch)):drizzleOrm.eq(a.run_epoch,d),l=drizzleOrm.or(drizzleOrm.isNull(a.stop_requested_at),drizzleOrm.isNull(a.stop_requested_epoch),drizzleOrm.ne(a.stop_requested_epoch,u)),p=ur({origin:"instruction",at:e.requestedAt,callerPid:e.callerPid,callerTaskId:e.callerTaskId},e.requestedAt),g=k=>o.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:u,metadata:JSON.stringify({...Z(s.metadata),stopRequest:p})}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),c,k,l)).run();if((e.workspaceId===void 0?g():e.workspaceId===null?g(drizzleOrm.isNull(a.workspace_id)):g(drizzleOrm.eq(a.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:s.status,runEpoch:d};return}let m=o.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:K(m?.run_epoch)};return}let w=K(m.run_epoch);r={accepted:!1,status:m.status,runEpoch:w,...m.stop_requested_at&&K(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(),o=!1;return n.db.transaction(s=>{let i=s.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!i||i.status!=="running"||K(i.run_epoch)!==K(e.runEpoch))return;let u=i.stop_requested_at!==null&&K(i.stop_requested_epoch)===K(e.runEpoch),d=Z(i.metadata),c=u?bo(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??cr(i.started_at,r,void 0),g=i.run_epoch===null?drizzleOrm.isNull(a.run_epoch):drizzleOrm.eq(a.run_epoch,i.run_epoch);o=s.update(a).set({status:"stopped",error:c.error,completed_at:r,duration_ms:p,metadata:JSON.stringify(l)}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),g)).run().changes>0;},{behavior:"immediate"}),o}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(),o=K(e.expectedRunEpoch),s="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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!u||u.status!=="running"){s="not_running";return}if(K(u.run_epoch)!==o){s="epoch_mismatch";return}if(e.workspaceId!==void 0&&u.workspace_id!==e.workspaceId){s="workspace_mismatch";return}let c=u.run_epoch===null?drizzleOrm.isNull(a.run_epoch):drizzleOrm.eq(a.run_epoch,u.run_epoch),l=e.workspaceId===void 0?void 0:e.workspaceId===null?drizzleOrm.isNull(a.workspace_id):drizzleOrm.eq(a.workspace_id,e.workspaceId),p={...Z(u.metadata),terminalReason:"runner_lost"},g=u.duration_ms??cr(u.started_at,r,void 0);s=i.update(a).set({status:"runner_lost",error:ma,completed_at:r,duration_ms:g,metadata:JSON.stringify(p)}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),c,l)).run().changes>0?"settled":"not_running";},{behavior:"immediate"}),s}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 pa(this,e,n)}async stopTaskGenerationForInstruction(e){return ca({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={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,coding_agent_command:e.codingAgentCommand??null,log_storage:"events"},o=s=>{n.db.insert(a).values(s).onConflictDoUpdate({target:a.id,set:{status:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN 'running' ELSE ${a.status} END`,pid:drizzleOrm.sql`COALESCE(excluded.pid, ${a.pid})`,actor_kind:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.actor_kind}, excluded.actor_kind) ELSE ${a.actor_kind} END`,actor_id:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.actor_id}, excluded.actor_id) ELSE ${a.actor_id} END`,command:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.command ELSE ${a.command} END`,metadata:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.metadata ELSE ${a.metadata} END`,workspace_id:drizzleOrm.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:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.cwd}, excluded.cwd) ELSE ${a.cwd} END`,project_id:drizzleOrm.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:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.crewx_version ELSE ${a.crewx_version} END`,model:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.model ELSE ${a.model} END`,rendered_prompt:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.rendered_prompt ELSE ${a.rendered_prompt} END`,coding_agent_command:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.coding_agent_command ELSE ${a.coding_agent_command} END`},setWhere:drizzleOrm.or(drizzleOrm.eq(a.status,"running"),drizzleOrm.and(drizzleOrm.eq(a.status,"pending"),drizzleOrm.isNull(a.pid)))}).run();};try{o(r);}catch(s){let i=s instanceof Error?s.message:typeof s=="object"&&s!==null&&"message"in s?String(s.message):String(s);if(!/log_storage|heartbeat_at|stop_requested_at|stop_requested_epoch|cwd|actor_kind|actor_id/i.test(i)||!/no such column|no column named/i.test(i))throw s;let u=new Set(n.db.all("PRAGMA table_info(tasks)").map(Rr=>Rr.name)),d=u.has("cwd"),c=u.has("user_id"),l=u.has("actor_kind"),p=u.has("actor_id"),g=u.has("log_storage"),h=d?", cwd":"",m=d?", ?":"",w=d?", cwd = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.cwd, excluded.cwd) ELSE tasks.cwd END":"",k=g?", log_storage":"",C=g?", ?":"",L=c?", user_id":"",N=c?", ?":"",E=l?", actor_kind":"",v=l?", ?":"",O=p?", actor_id":"",X=p?", ?":"",de=g?`,
72
+ `}function qt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Z(t){if(!t)return {};try{let e=JSON.parse(t);return qt(e)?{...e}:{}}catch{return {}}}function fr(t){return t==null||t===""}function Co(t,e){return fr(t)&&!fr(e)?e:t}function gl(t,e){let n=Z(t);if(!e)return n;for(let[r,o]of Object.entries(e))fr(n[r])&&!fr(o)&&(n[r]=o);return n}function lr(t,e){let n=t.origin&&Aa.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 hl(t){let e=Z(t).stopRequest;if(qt(e)&&!(typeof e.origin!="string"||!Aa.has(e.origin)||typeof e.at!="string"||typeof e.callerPid!="number"))return {...e}}function Ra(){return drizzleOrm.or(drizzleOrm.isNull(a.stop_requested_at),drizzleOrm.ne(drizzleOrm.sql`COALESCE(${a.stop_requested_epoch}, 0)`,drizzleOrm.sql`COALESCE(${a.run_epoch}, 0)`))}function Do(t,e){let n=Z(t??null);return n.terminalReason=e,JSON.stringify(n)}function No(t,e){let n={...t,terminalReason:"user_stop"},r=e?.trim();return r&&r!==Ea&&(n[ll]=e),{error:Ea,metadata:n}}function re(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function Lo(t){return re(t.input_tokens)!==0||re(t.output_tokens)!==0||re(t.cached_input_tokens)!==0||re(t.cost_usd)!==0}function K(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Sa(t){return {inputTokens:re(t.inputTokens??0),outputTokens:re(t.outputTokens??0),cachedInputTokens:re(t.cachedInputTokens??0),costUsd:re(t.costUsd??0)}}function _l(t){if(qt(t))return {inputTokens:re(t.inputTokens),outputTokens:re(t.outputTokens),cachedInputTokens:re(t.cachedInputTokens),costUsd:re(t.costUsd)}}function ml(t){let e={inputTokens:0,outputTokens:0,cachedInputTokens:0,costUsd:0};for(let n of Object.values(t)){let r=_l(n);r&&(e.inputTokens+=r.inputTokens,e.outputTokens+=r.outputTokens,e.cachedInputTokens+=r.cachedInputTokens,e.costUsd+=r.costUsd);}return e}function pr(t,e,n){let r=Date.parse(t),o=Date.parse(e);return Number.isFinite(r)&&Number.isFinite(o)?o-r:n??null}var bo,$t,ul,Ut,Ft,cl,xo,_n,Ce,Ea,Ia,ll,pl,fl,Aa,Mo,Oa,ba,kn,Io=b(()=>{_();st();Et();Rt();rt();It();Wn();zn();oi();co();ir();pn();So();pn();bo=40,$t="2026-05-09",ul="0.8.9-rc.13",Ut=10,Ft=parseInt(ul.split("rc.")[1]);cl=new Set(["workflow","mcp"]),xo="usageByEpoch",_n="lateUsage",Ce="usageAccounting",Ea="Stopped by user",Ia="Stopped by app shutdown",ll="terminalErrorOriginal",pl=new Set(["stopped","runner_lost"]),fl=["pending","running"];Aa=new Set(["http","cli","instruction","workflow","internal"]);Mo=600*1e3,Oa=600*1e3,ba=300*1e3,kn=class extends we{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=pe.join(e.dbRoot,".crewx","crewx.db")),this.taskLogRepository=new Kn({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?ot(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=pe.dirname(n);fs.existsSync(o)||fs.mkdirSync(o,{recursive:true});}else if(!fs.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{De(r.db,n);}catch(o){throw r.close(),o}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=K(e.runEpoch),o=r===0?drizzleOrm.or(drizzleOrm.eq(a.run_epoch,0),drizzleOrm.isNull(a.run_epoch)):drizzleOrm.eq(a.run_epoch,r);return n.db.update(a).set({heartbeat_at:new Date(this.clock()).toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),o,drizzleOrm.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(o=>{let s=o.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!s)return;let i=K(s.run_epoch);if(s.status!=="running"){r={accepted:!1,status:s.status,runEpoch:i};return}let u=s.stop_requested_at!==null&&K(s.stop_requested_epoch)===i,d=u?s.stop_requested_at:e.requestedAt,c=Z(s.metadata),l=u?hl(s.metadata)??lr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d):lr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d);if(o.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:drizzleOrm.sql`${a.run_epoch}`,metadata:JSON.stringify({...c,stopRequest:l})}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),Ra())).run().changes===0){let m=o.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:K(m?.run_epoch)};return}r={accepted:!1,status:m.status,runEpoch:K(m.run_epoch),...m.stop_requested_at&&K(m.stop_requested_epoch)===K(m.run_epoch)?{alreadyRequestedAt:m.stop_requested_at}:{}};}else r={accepted:!0,status:s.status,runEpoch:i};let g=new Set([e.id]),h=(m,w)=>{if(w>=8)return;let k=o.select({id:a.id,status:a.status,metadata:a.metadata}).from(a).where(drizzleOrm.and(drizzleOrm.eq(a.parent_task_id,m),drizzleOrm.eq(a.status,"running"))).all();for(let C of k)g.has(C.id)||(g.add(C.id),o.update(a).set({stop_requested_at:d,stop_requested_epoch:drizzleOrm.sql`${a.run_epoch}`,metadata:JSON.stringify({...Z(C.metadata),stopRequest:l})}).where(drizzleOrm.and(drizzleOrm.eq(a.id,C.id),drizzleOrm.eq(a.status,"running"),Ra())).run(),h(C.id,w+1));};h(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(o=>{let s=o.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!s)return;let i=K(s.run_epoch),u=K(e.sourceRunEpoch),d=K(e.settleRunEpoch);if(s.status!=="running"||i!==d||e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId){r={accepted:!1,status:s.status,runEpoch:i};return}let c=d===0?drizzleOrm.or(drizzleOrm.eq(a.run_epoch,0),drizzleOrm.isNull(a.run_epoch)):drizzleOrm.eq(a.run_epoch,d),l=drizzleOrm.or(drizzleOrm.isNull(a.stop_requested_at),drizzleOrm.isNull(a.stop_requested_epoch),drizzleOrm.ne(a.stop_requested_epoch,u)),p=lr({origin:"instruction",at:e.requestedAt,callerPid:e.callerPid,callerTaskId:e.callerTaskId},e.requestedAt),g=k=>o.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:u,metadata:JSON.stringify({...Z(s.metadata),stopRequest:p})}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),c,k,l)).run();if((e.workspaceId===void 0?g():e.workspaceId===null?g(drizzleOrm.isNull(a.workspace_id)):g(drizzleOrm.eq(a.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:s.status,runEpoch:d};return}let m=o.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:K(m?.run_epoch)};return}let w=K(m.run_epoch);r={accepted:!1,status:m.status,runEpoch:w,...m.stop_requested_at&&K(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(),o=!1;return n.db.transaction(s=>{let i=s.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!i||i.status!=="running"||K(i.run_epoch)!==K(e.runEpoch))return;let u=i.stop_requested_at!==null&&K(i.stop_requested_epoch)===K(e.runEpoch),d=Z(i.metadata),c=u?No(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??pr(i.started_at,r,void 0),g=i.run_epoch===null?drizzleOrm.isNull(a.run_epoch):drizzleOrm.eq(a.run_epoch,i.run_epoch);o=s.update(a).set({status:"stopped",error:c.error,completed_at:r,duration_ms:p,metadata:JSON.stringify(l)}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),g)).run().changes>0;},{behavior:"immediate"}),o}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(),o=K(e.expectedRunEpoch),s="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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!u||u.status!=="running"){s="not_running";return}if(K(u.run_epoch)!==o){s="epoch_mismatch";return}if(e.workspaceId!==void 0&&u.workspace_id!==e.workspaceId){s="workspace_mismatch";return}let c=u.run_epoch===null?drizzleOrm.isNull(a.run_epoch):drizzleOrm.eq(a.run_epoch,u.run_epoch),l=e.workspaceId===void 0?void 0:e.workspaceId===null?drizzleOrm.isNull(a.workspace_id):drizzleOrm.eq(a.workspace_id,e.workspaceId),p={...Z(u.metadata),terminalReason:"runner_lost"},g=u.duration_ms??pr(u.started_at,r,void 0);s=i.update(a).set({status:"runner_lost",error:Ia,completed_at:r,duration_ms:g,metadata:JSON.stringify(p)}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),c,l)).run().changes>0?"settled":"not_running";},{behavior:"immediate"}),s}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 wa(this,e,n)}async stopTaskGenerationForInstruction(e){return ka({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={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,coding_agent_command:e.codingAgentCommand??null,log_storage:"events"},o=s=>{n.db.insert(a).values(s).onConflictDoUpdate({target:a.id,set:{status:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN 'running' ELSE ${a.status} END`,pid:drizzleOrm.sql`COALESCE(excluded.pid, ${a.pid})`,actor_kind:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.actor_kind}, excluded.actor_kind) ELSE ${a.actor_kind} END`,actor_id:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.actor_id}, excluded.actor_id) ELSE ${a.actor_id} END`,command:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.command ELSE ${a.command} END`,metadata:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.metadata ELSE ${a.metadata} END`,workspace_id:drizzleOrm.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:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.cwd}, excluded.cwd) ELSE ${a.cwd} END`,project_id:drizzleOrm.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:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.crewx_version ELSE ${a.crewx_version} END`,model:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.model ELSE ${a.model} END`,rendered_prompt:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.rendered_prompt ELSE ${a.rendered_prompt} END`,coding_agent_command:drizzleOrm.sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.coding_agent_command ELSE ${a.coding_agent_command} END`},setWhere:drizzleOrm.or(drizzleOrm.eq(a.status,"running"),drizzleOrm.and(drizzleOrm.eq(a.status,"pending"),drizzleOrm.isNull(a.pid)))}).run();};try{o(r);}catch(s){let i=s instanceof Error?s.message:typeof s=="object"&&s!==null&&"message"in s?String(s.message):String(s);if(!/log_storage|heartbeat_at|stop_requested_at|stop_requested_epoch|cwd|actor_kind|actor_id/i.test(i)||!/no such column|no column named/i.test(i))throw s;let u=new Set(n.db.all("PRAGMA table_info(tasks)").map(Ir=>Ir.name)),d=u.has("cwd"),c=u.has("user_id"),l=u.has("actor_kind"),p=u.has("actor_id"),g=u.has("log_storage"),h=d?", cwd":"",m=d?", ?":"",w=d?", cwd = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.cwd, excluded.cwd) ELSE tasks.cwd END":"",k=g?", log_storage":"",C=g?", ?":"",L=c?", user_id":"",N=c?", ?":"",E=l?", actor_kind":"",v=l?", ?":"",O=p?", actor_id":"",X=p?", ?":"",de=g?`,
72
73
  log_storage = CASE WHEN tasks.status = 'pending' THEN excluded.log_storage ELSE tasks.log_storage END`:"";n.runRaw(`INSERT INTO tasks (
73
74
  id, agent_id, prompt, mode, status, started_at, pid,
74
75
  parent_task_id, caller_agent_id, trace_id, command, metadata,
@@ -86,9 +87,9 @@ ${r.join(`
86
87
  model = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.model ELSE tasks.model END,
87
88
  rendered_prompt = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.rendered_prompt ELSE tasks.rendered_prompt END,
88
89
  coding_agent_command = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.coding_agent_command ELSE tasks.coding_agent_command END${de}
89
- WHERE tasks.status = 'running' OR (tasks.status = 'pending' AND tasks.pid IS NULL)`,[r.id,r.agent_id,r.prompt,r.mode,r.status,r.started_at,r.pid,r.parent_task_id,r.caller_agent_id,r.trace_id,r.command,r.metadata,r.workspace_id,...d?[r.cwd]:[],r.project_id,r.platform,r.crewx_version,r.thread_id,r.model,r.rendered_prompt,r.coding_agent_command,...c?[r.user_id]:[],...l?[r.actor_kind]:[],...p?[r.actor_id]:[],...g?[r.log_storage]:[]]);}}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to start task",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,coding_agent_command:a.coding_agent_command}).from(a).where(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!r||r.status!=="running"||K(r.run_epoch)!==K(e.runEpoch))return !1;let o=il(r.metadata,e.runtime?.metadata);o.ownership=e.ownership,e.ownership==="runner"&&e.providerPid!==void 0&&(o.providerPid=e.providerPid);let s=r.run_epoch===null?drizzleOrm.isNull(a.run_epoch):drizzleOrm.eq(a.run_epoch,r.run_epoch),i=n.db.update(a).set({metadata:JSON.stringify(o),model:Oo(r.model,e.runtime?.model),rendered_prompt:Oo(r.rendered_prompt,e.runtime?.renderedPrompt),coding_agent_command:Oo(r.coding_agent_command,e.runtime?.codingAgentCommand)}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),s)).run();return i.changes>0&&K(e.runEpoch)>0&&n.db.update(a).set({stop_requested_at:null,stop_requested_epoch:null}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),s,drizzleOrm.sql`${a.stop_requested_at} IS NOT NULL
90
- 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(drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.status,"pending"),drizzleOrm.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 o=this.openHandle(true);try{return o.db.update(a).set({status:"failed",error:n,completed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.status,"pending"))).run().changes>0}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to fail pending task",s)}finally{o.close();}}stopPendingTask(e,n,r=new Date().toISOString(),o={}){let s=this.openHandle(true);try{let i=!1;return s.db.transaction(u=>{let d=u.select({metadata:a.metadata}).from(a).where(drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.status,"pending"))).limit(1).get();if(!d)return;let c=bo(Z(d.metadata),n),l={...c.metadata,stopMethod:"cooperative",stopRequest:ur(o,r)};i=u.update(a).set({status:"stopped",error:c.error,completed_at:r,metadata:JSON.stringify(l)}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.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{s.close();}}listTasksByProjectId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(a).where(drizzleOrm.eq(a.project_id,e)).orderBy(drizzleOrm.desc(a.started_at)).all().map(ve)}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,o;try{n.db.transaction(s=>{let i=s.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!i)return;let u=K(i.run_epoch),d=K(e.runEpoch),c=i.status==="running"&&u===d,l=i.stop_requested_at!==null&&K(i.stop_requested_epoch)===u,p=c&&l,g=i.status==="stopped"&&u===d&&l,h=Z(i.metadata),m=qt(h[hn])?h[hn]:{},w=String(d),k=ol.has(i.status),C=k&&u===d&&!Co(i)&&!Object.prototype.hasOwnProperty.call(m,w),L=k&&u===d&&!Object.prototype.hasOwnProperty.call(m,w),N=u>0||d>0||e.runEpoch!==void 0&&e.runEpoch!==null||u!==d,E={},v;if(i.status!=="running"&&(r=i.status,o=e.result?.trim()||e.error?.trim()||`task:end status=${e.status}`),N&&(i.status==="running"||L)){v=Z(i.metadata);let O=qt(v[Ao])?{...v[Ao]}:{};O[String(d)]=_a(e),v[Ao]=O;let X=ul(O),de=X.inputTokens!==0||X.outputTokens!==0||X.cachedInputTokens!==0||X.costUsd!==0;de&&h[xe]==="unavailable"?v[xe]="recorded":i.status!=="running"&&!de&&h[xe]===void 0&&(v[xe]="unavailable"),E.metadata=JSON.stringify(v),E.input_tokens=X.inputTokens,E.output_tokens=X.outputTokens,E.cached_input_tokens=X.cachedInputTokens,E.cost_usd=X.costUsd;}else if(c||C)if(c)E.input_tokens=re(e.inputTokens??0),E.output_tokens=re(e.outputTokens??0),E.cached_input_tokens=re(e.cachedInputTokens??0),E.cost_usd=re(e.costUsd??0);else {let O=_a(e),X=O.inputTokens!==0||O.outputTokens!==0||O.cachedInputTokens!==0||O.costUsd!==0;X&&(E.input_tokens=O.inputTokens,E.output_tokens=O.outputTokens,E.cached_input_tokens=O.cachedInputTokens,E.cost_usd=O.costUsd),v={...h};let de=qt(h[hn])?{...h[hn]}:{};de[w]={at:e.completedAt},v[hn]=de,v[xe]===void 0?v[xe]=X?"recorded":"unavailable":X&&v[xe]==="unavailable"&&(v[xe]="recorded"),E.metadata=JSON.stringify(v);}if((c||C)&&e.model!==void 0&&e.model!==null&&(!C||i.model===null)&&(E.model=e.model),p){v??=Z(i.metadata);let O=bo(v,e.error);v={...O.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=O.error,E.completed_at=e.completedAt,E.duration_ms=i.duration_ms??e.durationMs??cr(i.started_at,e.completedAt,void 0),E.exit_code=e.exitCode??i.exit_code,E.metadata=JSON.stringify(v);}else if(c)e.partialResultRecovered===!0&&(v??=Z(i.metadata),v.partialResultRecovered=!0,E.metadata=JSON.stringify(v)),E.status=e.status,E.result=e.result??null,E.error=e.error??null,E.completed_at=e.completedAt,E.duration_ms=u>0?cr(i.started_at,e.completedAt,e.durationMs):e.durationMs??null,E.exit_code=e.exitCode??null;else if(g){let O=!1;i.result===null&&e.result!==void 0&&e.result!==null&&(E.result=e.result,O=!0),i.exit_code===null&&e.exitCode!==void 0&&e.exitCode!==null&&(E.exit_code=e.exitCode),e.partialResultRecovered===!0&&(v??=Z(i.metadata),v.partialResultRecovered=!0,E.metadata=JSON.stringify(v)),O&&(r=void 0,o=void 0);}Object.keys(E).length>0&&s.update(a).set(E).where(drizzleOrm.eq(a.id,e.id)).run();},{behavior:"immediate"});}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to finish task",s)}finally{n.close();}if(r!==void 0){try{this.taskLogRepository.appendLog(e.id,{timestamp:e.completedAt,level:"late-result",message:o??`task:end status=${e.status}`});}catch(s){console.error(`[crewx] failed to preserve late task result for ${e.id}: ${s instanceof Error?s.message:String(s)}`);}process.stderr.write(`Task ${e.id} was already finalized (${r}); late result kept in task log
91
- `);}}updateTaskLifecycle(e){let n=this.openHandle(true);try{let r=drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.workspace_id,e.workspaceId)),o={status:e.status,error:e.error,completed_at:e.completedAt,duration_ms:e.durationMs};if(e.terminalReason){let s=n.db.select({metadata:a.metadata}).from(a).where(r).limit(1).get(),i=Z(s?.metadata??null);i.terminalReason=e.terminalReason,o.metadata=JSON.stringify(i);}n.db.update(a).set(o).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().from(a).where(drizzleOrm.eq(a.status,"running")).orderBy(drizzleOrm.desc(a.started_at)).all().map(ve)}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().from(a).where(drizzleOrm.inArray(a.status,["pending","running"])).orderBy(drizzleOrm.desc(a.started_at)).all().map(ve)}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().from(a).orderBy(drizzleOrm.desc(a.started_at)).limit(100).all().map(ve)}catch(n){throw new f("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=n.db.select().from(a).where(drizzleOrm.eq(a.id,e)).limit(1).get();return r?ve(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(drizzleOrm.or(drizzleOrm.eq(a.status,"running"),drizzleOrm.eq(a.status,"pending"))).all(),o=this.clock(),s=Math.max(1,Math.trunc(e.tickIntervalMs??wa)),i=this.lastReaperTickAt,u=i===void 0?Number.POSITIVE_INFINITY:o-i,d=i!==void 0&&u>=0&&u<=s*2;this.lastReaperTickAt=o;let c=Mt(),l=ir(),p=new Date(o-Ta).toISOString(),g=new Date(o).toISOString(),h=new Set,m=0,w=(k,C)=>{let L=Z(xo(k.metadata,"runner_lost")),N=typeof L.provider=="string"?L.provider:void 0,E;try{E=rr({taskLogRepository:this.taskLogRepository,taskId:k.id,provider:N,model:k.model})?.usage;}catch{}let v={status:"runner_lost",error:C,completed_at:g};E?(v.input_tokens=E.inputTokens,v.output_tokens=E.outputTokens,v.cached_input_tokens=E.cachedInputTokens,v.cost_usd=E.costUsd,k.model===null&&E.model!==null&&(v.model=E.model),L[xe]="recorded"):!Co(k)&&L[xe]!=="recorded"&&(L[xe]="unavailable"),v.metadata=JSON.stringify(L);let O=k.run_epoch===null?drizzleOrm.isNull(a.run_epoch):drizzleOrm.eq(a.run_epoch,k.run_epoch),X=k.heartbeat_at===null?drizzleOrm.isNull(a.heartbeat_at):drizzleOrm.eq(a.heartbeat_at,k.heartbeat_at),de=n.db.update(a).set(v).where(drizzleOrm.and(drizzleOrm.eq(a.id,k.id),drizzleOrm.eq(a.status,"running"),O,X)).run();return de.changes>0&&m++,de.changes>0};for(let k of r){if(k.status==="pending"){if(k.pid!==null||k.started_at>=p)continue;let E=xo(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(drizzleOrm.and(drizzleOrm.eq(a.id,k.id),drizzleOrm.eq(a.status,"pending"),drizzleOrm.isNull(a.pid),drizzleOrm.lt(a.started_at,p))).run().changes>0&&m++;continue}if(nl.has(k.platform??"cli"))continue;if(k.pid===null){let E=`${k.id}:${k.run_epoch??0}`;h.add(E);let v=this.pidNullObservedSince.get(E);if(v===void 0){this.pidNullObservedSince.set(E,o);continue}o-v>=No&&w(k,"Reaped: pid never recorded after resume (stale running_instruction)")&&this.pidNullObservedSince.delete(E);continue}if(k.heartbeat_at===null){dt(k.pid)==="not_found"&&w(k,"Reaped: process not found (orphaned task)");continue}let C=Date.parse(k.heartbeat_at),L=Number.isFinite(C)?o-C:Number.POSITIVE_INFINITY;if(L<=c)continue;dt(k.pid)==="not_found"?w(k,"Reaped: process not found (orphaned task)"):L>l&&d&&w(k,"Reaped: heartbeat stale beyond hard limit (orphaned task)");}for(let k of Array.from(this.pidNullObservedSince.keys()))h.has(k)||this.pidNullObservedSince.delete(k);return m}finally{n.close();}}reapRunningWorkflowTasks(e=No){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString(),o=drizzleOrm.and(drizzleOrm.eq(a.status,"running"),drizzleOrm.eq(a.platform,"workflow"),drizzleOrm.isNull(a.pid),drizzleOrm.lt(a.started_at,r),drizzleOrm.or(drizzleOrm.isNull(a.metadata),drizzleOrm.and(drizzleOrm.notLike(a.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(a.metadata,'%"kind":"workflow_ui_instance"%')))),s=n.db.select({id:a.id,metadata:a.metadata}).from(a).where(o).all(),i=new Date().toISOString(),u=0;for(let d of s){let c=Z(d.metadata);c.terminalReason="runner_lost";let l=n.db.update(a).set({status:"runner_lost",error:"Reaped: stale workflow run (finally not executed)",completed_at:i,metadata:JSON.stringify(c)}).where(drizzleOrm.and(drizzleOrm.eq(a.id,d.id),drizzleOrm.eq(a.status,"running"))).run();u+=l.changes??0;}return u}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let o of r){if(!fs.existsSync(o))continue;let s=U(o);try{let i=n?drizzleOrm.eq(a.workspace_id,n):void 0,u=i?drizzleOrm.and(drizzleOrm.eq(a.id,e),i):drizzleOrm.eq(a.id,e),d=s.db.select().from(a).where(u).limit(1).get()??void 0;if(!d){let c=i?drizzleOrm.and(drizzleOrm.eq(a.thread_id,e),i):drizzleOrm.eq(a.thread_id,e);d=s.db.select().from(a).where(c).orderBy(drizzleOrm.desc(a.started_at)).limit(1).get()??void 0;}if(d)return ve(d)}catch(i){throw new f("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!fs.existsSync(i))continue;let u=U(i);try{let d=n?drizzleOrm.and(drizzleOrm.eq(a.parent_task_id,e),drizzleOrm.eq(a.workspace_id,n)):drizzleOrm.eq(a.parent_task_id,e),c=u.db.select().from(a).where(d).orderBy(drizzleOrm.asc(a.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),s.push(ve(l)));}catch(d){throw new f("DB_ERROR","Failed to find child tasks",d)}finally{u.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?drizzleOrm.sql`
90
+ WHERE tasks.status = 'running' OR (tasks.status = 'pending' AND tasks.pid IS NULL)`,[r.id,r.agent_id,r.prompt,r.mode,r.status,r.started_at,r.pid,r.parent_task_id,r.caller_agent_id,r.trace_id,r.command,r.metadata,r.workspace_id,...d?[r.cwd]:[],r.project_id,r.platform,r.crewx_version,r.thread_id,r.model,r.rendered_prompt,r.coding_agent_command,...c?[r.user_id]:[],...l?[r.actor_kind]:[],...p?[r.actor_id]:[],...g?[r.log_storage]:[]]);}}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to start task",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,coding_agent_command:a.coding_agent_command}).from(a).where(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!r||r.status!=="running"||K(r.run_epoch)!==K(e.runEpoch))return !1;let o=gl(r.metadata,e.runtime?.metadata);o.ownership=e.ownership,e.ownership==="runner"&&e.providerPid!==void 0&&(o.providerPid=e.providerPid);let s=r.run_epoch===null?drizzleOrm.isNull(a.run_epoch):drizzleOrm.eq(a.run_epoch,r.run_epoch),i=n.db.update(a).set({metadata:JSON.stringify(o),model:Co(r.model,e.runtime?.model),rendered_prompt:Co(r.rendered_prompt,e.runtime?.renderedPrompt),coding_agent_command:Co(r.coding_agent_command,e.runtime?.codingAgentCommand)}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),s)).run();return i.changes>0&&K(e.runEpoch)>0&&n.db.update(a).set({stop_requested_at:null,stop_requested_epoch:null}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.status,"running"),s,drizzleOrm.sql`${a.stop_requested_at} IS NOT NULL
91
+ 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(drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.status,"pending"),drizzleOrm.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 o=this.openHandle(true);try{return o.db.update(a).set({status:"failed",error:n,completed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.status,"pending"))).run().changes>0}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to fail pending task",s)}finally{o.close();}}stopPendingTask(e,n,r=new Date().toISOString(),o={}){let s=this.openHandle(true);try{let i=!1;return s.db.transaction(u=>{let d=u.select({metadata:a.metadata}).from(a).where(drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.status,"pending"))).limit(1).get();if(!d)return;let c=No(Z(d.metadata),n),l={...c.metadata,stopMethod:"cooperative",stopRequest:lr(o,r)};i=u.update(a).set({status:"stopped",error:c.error,completed_at:r,metadata:JSON.stringify(l)}).where(drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.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{s.close();}}listTasksByProjectId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(a).where(drizzleOrm.eq(a.project_id,e)).orderBy(drizzleOrm.desc(a.started_at)).all().map(xe)}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,o;try{n.db.transaction(s=>{let i=s.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(drizzleOrm.eq(a.id,e.id)).limit(1).get();if(!i)return;let u=K(i.run_epoch),d=K(e.runEpoch),c=i.status==="running"&&u===d,l=i.stop_requested_at!==null&&K(i.stop_requested_epoch)===u,p=c&&l,g=i.status==="stopped"&&u===d&&l,h=Z(i.metadata),m=qt(h[_n])?h[_n]:{},w=String(d),k=pl.has(i.status),C=k&&u===d&&!Lo(i)&&!Object.prototype.hasOwnProperty.call(m,w),L=k&&u===d&&!Object.prototype.hasOwnProperty.call(m,w),N=u>0||d>0||e.runEpoch!==void 0&&e.runEpoch!==null||u!==d,E={},v;if(i.status!=="running"&&(r=i.status,o=e.result?.trim()||e.error?.trim()||`task:end status=${e.status}`),N&&(i.status==="running"||L)){v=Z(i.metadata);let O=qt(v[xo])?{...v[xo]}:{};O[String(d)]=Sa(e),v[xo]=O;let X=ml(O),de=X.inputTokens!==0||X.outputTokens!==0||X.cachedInputTokens!==0||X.costUsd!==0;de&&h[Ce]==="unavailable"?v[Ce]="recorded":i.status!=="running"&&!de&&h[Ce]===void 0&&(v[Ce]="unavailable"),E.metadata=JSON.stringify(v),E.input_tokens=X.inputTokens,E.output_tokens=X.outputTokens,E.cached_input_tokens=X.cachedInputTokens,E.cost_usd=X.costUsd;}else if(c||C)if(c)E.input_tokens=re(e.inputTokens??0),E.output_tokens=re(e.outputTokens??0),E.cached_input_tokens=re(e.cachedInputTokens??0),E.cost_usd=re(e.costUsd??0);else {let O=Sa(e),X=O.inputTokens!==0||O.outputTokens!==0||O.cachedInputTokens!==0||O.costUsd!==0;X&&(E.input_tokens=O.inputTokens,E.output_tokens=O.outputTokens,E.cached_input_tokens=O.cachedInputTokens,E.cost_usd=O.costUsd),v={...h};let de=qt(h[_n])?{...h[_n]}:{};de[w]={at:e.completedAt},v[_n]=de,v[Ce]===void 0?v[Ce]=X?"recorded":"unavailable":X&&v[Ce]==="unavailable"&&(v[Ce]="recorded"),E.metadata=JSON.stringify(v);}if((c||C)&&e.model!==void 0&&e.model!==null&&(!C||i.model===null)&&(E.model=e.model),p){v??=Z(i.metadata);let O=No(v,e.error);v={...O.metadata,...e.partialResultRecovered===!0?{partialResultRecovered:!0}:{},stopMethod:ur(i.stop_requested_at,e.completedAt)},E.status="stopped",E.result=e.result??i.result,E.error=O.error,E.completed_at=e.completedAt,E.duration_ms=i.duration_ms??e.durationMs??pr(i.started_at,e.completedAt,void 0),E.exit_code=e.exitCode??i.exit_code,E.metadata=JSON.stringify(v);}else if(c)e.partialResultRecovered===!0&&(v??=Z(i.metadata),v.partialResultRecovered=!0,E.metadata=JSON.stringify(v)),E.status=e.status,E.result=e.result??null,E.error=e.error??null,E.completed_at=e.completedAt,E.duration_ms=u>0?pr(i.started_at,e.completedAt,e.durationMs):e.durationMs??null,E.exit_code=e.exitCode??null;else if(g){let O=!1;i.result===null&&e.result!==void 0&&e.result!==null&&(E.result=e.result,O=!0),i.exit_code===null&&e.exitCode!==void 0&&e.exitCode!==null&&(E.exit_code=e.exitCode),e.partialResultRecovered===!0&&(v??=Z(i.metadata),v.partialResultRecovered=!0,E.metadata=JSON.stringify(v)),O&&(r=void 0,o=void 0);}Object.keys(E).length>0&&s.update(a).set(E).where(drizzleOrm.eq(a.id,e.id)).run();},{behavior:"immediate"});}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to finish task",s)}finally{n.close();}if(r!==void 0){try{this.taskLogRepository.appendLog(e.id,{timestamp:e.completedAt,level:"late-result",message:o??`task:end status=${e.status}`});}catch(s){console.error(`[crewx] failed to preserve late task result for ${e.id}: ${s instanceof Error?s.message:String(s)}`);}process.stderr.write(`Task ${e.id} was already finalized (${r}); late result kept in task log
92
+ `);}}updateTaskLifecycle(e){let n=this.openHandle(true);try{let r=drizzleOrm.and(drizzleOrm.eq(a.id,e.id),drizzleOrm.eq(a.workspace_id,e.workspaceId)),o={status:e.status,error:e.error,completed_at:e.completedAt,duration_ms:e.durationMs};if(e.terminalReason){let s=n.db.select({metadata:a.metadata}).from(a).where(r).limit(1).get(),i=Z(s?.metadata??null);i.terminalReason=e.terminalReason,o.metadata=JSON.stringify(i);}n.db.update(a).set(o).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().from(a).where(drizzleOrm.eq(a.status,"running")).orderBy(drizzleOrm.desc(a.started_at)).all().map(xe)}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().from(a).where(drizzleOrm.inArray(a.status,["pending","running"])).orderBy(drizzleOrm.desc(a.started_at)).all().map(xe)}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().from(a).orderBy(drizzleOrm.desc(a.started_at)).limit(100).all().map(xe)}catch(n){throw new f("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=n.db.select().from(a).where(drizzleOrm.eq(a.id,e)).limit(1).get();return r?xe(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(drizzleOrm.or(drizzleOrm.eq(a.status,"running"),drizzleOrm.eq(a.status,"pending"))).all(),o=this.clock(),s=Math.max(1,Math.trunc(e.tickIntervalMs??ba)),i=this.lastReaperTickAt,u=i===void 0?Number.POSITIVE_INFINITY:o-i,d=i!==void 0&&u>=0&&u<=s*2;this.lastReaperTickAt=o;let c=Ht(),l=dr(),p=new Date(o-Oa).toISOString(),g=new Date(o).toISOString(),h=new Set,m=0,w=(k,C)=>{let L=Z(Do(k.metadata,"runner_lost")),N=typeof L.provider=="string"?L.provider:void 0,E;try{E=sr({taskLogRepository:this.taskLogRepository,taskId:k.id,provider:N,model:k.model})?.usage;}catch{}let v={status:"runner_lost",error:C,completed_at:g};E?(v.input_tokens=E.inputTokens,v.output_tokens=E.outputTokens,v.cached_input_tokens=E.cachedInputTokens,v.cost_usd=E.costUsd,k.model===null&&E.model!==null&&(v.model=E.model),L[Ce]="recorded"):!Lo(k)&&L[Ce]!=="recorded"&&(L[Ce]="unavailable"),v.metadata=JSON.stringify(L);let O=k.run_epoch===null?drizzleOrm.isNull(a.run_epoch):drizzleOrm.eq(a.run_epoch,k.run_epoch),X=k.heartbeat_at===null?drizzleOrm.isNull(a.heartbeat_at):drizzleOrm.eq(a.heartbeat_at,k.heartbeat_at),de=n.db.update(a).set(v).where(drizzleOrm.and(drizzleOrm.eq(a.id,k.id),drizzleOrm.eq(a.status,"running"),O,X)).run();return de.changes>0&&m++,de.changes>0};for(let k of r){if(k.status==="pending"){if(k.pid!==null||k.started_at>=p)continue;let E=Do(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(drizzleOrm.and(drizzleOrm.eq(a.id,k.id),drizzleOrm.eq(a.status,"pending"),drizzleOrm.isNull(a.pid),drizzleOrm.lt(a.started_at,p))).run().changes>0&&m++;continue}if(cl.has(k.platform??"cli"))continue;if(k.pid===null){let E=`${k.id}:${k.run_epoch??0}`;h.add(E);let v=this.pidNullObservedSince.get(E);if(v===void 0){this.pidNullObservedSince.set(E,o);continue}o-v>=Mo&&w(k,"Reaped: pid never recorded after resume (stale running_instruction)")&&this.pidNullObservedSince.delete(E);continue}if(k.heartbeat_at===null){ut(k.pid)==="not_found"&&w(k,"Reaped: process not found (orphaned task)");continue}let C=Date.parse(k.heartbeat_at),L=Number.isFinite(C)?o-C:Number.POSITIVE_INFINITY;if(L<=c)continue;ut(k.pid)==="not_found"?w(k,"Reaped: process not found (orphaned task)"):L>l&&d&&w(k,"Reaped: heartbeat stale beyond hard limit (orphaned task)");}for(let k of Array.from(this.pidNullObservedSince.keys()))h.has(k)||this.pidNullObservedSince.delete(k);return m}finally{n.close();}}reapRunningWorkflowTasks(e=Mo){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString(),o=drizzleOrm.and(drizzleOrm.eq(a.status,"running"),drizzleOrm.eq(a.platform,"workflow"),drizzleOrm.isNull(a.pid),drizzleOrm.lt(a.started_at,r),drizzleOrm.or(drizzleOrm.isNull(a.metadata),drizzleOrm.and(drizzleOrm.notLike(a.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(a.metadata,'%"kind":"workflow_ui_instance"%')))),s=n.db.select({id:a.id,metadata:a.metadata}).from(a).where(o).all(),i=new Date().toISOString(),u=0;for(let d of s){let c=Z(d.metadata);c.terminalReason="runner_lost";let l=n.db.update(a).set({status:"runner_lost",error:"Reaped: stale workflow run (finally not executed)",completed_at:i,metadata:JSON.stringify(c)}).where(drizzleOrm.and(drizzleOrm.eq(a.id,d.id),drizzleOrm.eq(a.status,"running"))).run();u+=l.changes??0;}return u}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let o of r){if(!fs.existsSync(o))continue;let s=U(o);try{let i=n?drizzleOrm.eq(a.workspace_id,n):void 0,u=i?drizzleOrm.and(drizzleOrm.eq(a.id,e),i):drizzleOrm.eq(a.id,e),d=s.db.select().from(a).where(u).limit(1).get()??void 0;if(!d){let c=i?drizzleOrm.and(drizzleOrm.eq(a.thread_id,e),i):drizzleOrm.eq(a.thread_id,e);d=s.db.select().from(a).where(c).orderBy(drizzleOrm.desc(a.started_at)).limit(1).get()??void 0;}if(d)return xe(d)}catch(i){throw new f("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!fs.existsSync(i))continue;let u=U(i);try{let d=n?drizzleOrm.and(drizzleOrm.eq(a.parent_task_id,e),drizzleOrm.eq(a.workspace_id,n)):drizzleOrm.eq(a.parent_task_id,e),c=u.db.select().from(a).where(d).orderBy(drizzleOrm.asc(a.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),s.push(xe(l)));}catch(d){throw new f("DB_ERROR","Failed to find child tasks",d)}finally{u.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?drizzleOrm.sql`
92
93
  SELECT
93
94
  COALESCE(workspace_id, 'unknown') AS workspace_id,
94
95
  COALESCE(SUM(input_tokens), 0) AS input_tokens,
@@ -109,14 +110,14 @@ ${r.join(`
109
110
  FROM tasks
110
111
  GROUP BY workspace_id
111
112
  ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
112
- `)}catch(r){throw new f("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,u=0;for(let d of r){if(!fs.existsSync(d))continue;let c=U(d);try{let l=drizzleOrm.eq(a.thread_id,e),p=n?drizzleOrm.and(l,drizzleOrm.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 h of g)o.has(h.id)||(o.add(h.id),s+=h.input_tokens??0,i+=h.output_tokens??0,u+=h.cost_usd??0);}catch(l){throw new f("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:s,outputTokens:i,costUsd:u}}findTasksByThread(e,n,r){let o=this.resolveDbPaths(),s=new Set,i=[],u=r?.projection==="activity-log";for(let d of o){if(!fs.existsSync(d))continue;let c=U(d);try{let l=drizzleOrm.eq(a.thread_id,e),p=n?drizzleOrm.and(l,drizzleOrm.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(drizzleOrm.asc(a.started_at)).all():c.db.select().from(a).where(p).orderBy(drizzleOrm.asc(a.started_at)).all().map(ve);for(let h of g)s.has(h.id)||(s.add(h.id),i.push(h));}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(!fs.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(drizzleOrm.and(drizzleOrm.eq(a.platform,"workflow"),drizzleOrm.inArray(a.status,["running","pending"]),drizzleOrm.or(drizzleOrm.like(a.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(a.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(drizzleOrm.desc(a.started_at)).all().map(Ro));}catch(o){throw new f("DB_ERROR","Failed to find workflow parent tasks",o)}finally{r.close();}}return e}findWorkflowParentTasksByWorkspace(e){let n=[],r=new Map;for(let o of this.resolveDbPaths()){if(!fs.existsSync(o))continue;let s=U(o);try{let i=s.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(drizzleOrm.and(drizzleOrm.eq(a.platform,"workflow"),drizzleOrm.eq(a.workspace_id,e))).orderBy(drizzleOrm.desc(a.started_at),drizzleOrm.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(Ro(u)));}}catch(i){throw new f("DB_ERROR","Failed to find workflow parent tasks by workspace",i)}finally{s.close();}}return n}findWorkflowParentTask(e){if(this.dbExists())for(let n of this.resolveDbPaths()){if(!fs.existsSync(n))continue;let r=U(n);try{let o=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(drizzleOrm.and(drizzleOrm.eq(a.platform,"workflow"),drizzleOrm.eq(a.workspace_id,e.workspaceId))).orderBy(drizzleOrm.desc(a.started_at),drizzleOrm.desc(a.id)).all();for(let s of o){let i=this.parseWorkflowCardMetadata(s.metadata);if(i.kind===e.kind&&i.workflowRunId===e.workflowRunId)return Ro(s)}}catch(o){throw new f("DB_ERROR","Failed to find workflow parent task",o)}finally{r.close();}}}batchFetchWorkflowCards(e,n){let r=new Map;if(e.length===0)return r;let o=new Set(e),s=new Map,i=n?drizzleOrm.eq(a.workspace_id,n):void 0,u=(d,c)=>{if(!d)return;let l=s.get(d);if(l&&c.started_at<=l)return;let p=this.parseWorkflowCardMetadata(c.metadata);p.kind!=="workflow_card"&&p.kind!=="workflow_ui_instance"||(s.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(!fs.existsSync(d))continue;let c=U(d);try{let l=drizzleOrm.and(drizzleOrm.inArray(a.thread_id,e),drizzleOrm.or(drizzleOrm.like(a.metadata,'%"kind":"workflow_card"%'),drizzleOrm.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?drizzleOrm.and(l,i):l).all();for(let m of p)u(m.thread_id,m);let g=drizzleOrm.and(drizzleOrm.isNull(a.thread_id),drizzleOrm.or(drizzleOrm.like(a.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(a.metadata,'%"kind":"workflow_ui_instance"%'))),h=c.db.select({id:a.id,command:a.command,metadata:a.metadata,result:a.result,started_at:a.started_at}).from(a).where(i?drizzleOrm.and(g,i):g).all();for(let m of h){let w=this.extractThreadIdFromCommand(m.command);!w||!o.has(w)||u(w,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(drizzleOrm.eq(a.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(a.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(a.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(a.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(a.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(a.started_at,e.to));let u=r.length>0?drizzleOrm.and(...r):void 0,d=n.db.select({count:drizzleOrm.sql`count(*)`}).from(a).where(u).get(),c=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(a.started_at):drizzleOrm.desc(a.started_at);return {rows:n.db.select().from(a).where(u).orderBy(c).limit(e.limit).offset(e.offset).all().map(ve),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 o=this.openHandle(false);try{let s=Io(drizzleOrm.sql.raw("t.model"),drizzleOrm.sql.raw("t.metadata")),i=_n(drizzleOrm.sql.raw("t.status")),u=dr(drizzleOrm.sql.raw("t.metadata")),d=drizzleOrm.sql`
113
+ `)}catch(r){throw new f("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,u=0;for(let d of r){if(!fs.existsSync(d))continue;let c=U(d);try{let l=drizzleOrm.eq(a.thread_id,e),p=n?drizzleOrm.and(l,drizzleOrm.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 h of g)o.has(h.id)||(o.add(h.id),s+=h.input_tokens??0,i+=h.output_tokens??0,u+=h.cost_usd??0);}catch(l){throw new f("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:s,outputTokens:i,costUsd:u}}findTasksByThread(e,n,r){let o=this.resolveDbPaths(),s=new Set,i=[],u=r?.projection==="activity-log";for(let d of o){if(!fs.existsSync(d))continue;let c=U(d);try{let l=drizzleOrm.eq(a.thread_id,e),p=n?drizzleOrm.and(l,drizzleOrm.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(drizzleOrm.asc(a.started_at)).all():c.db.select().from(a).where(p).orderBy(drizzleOrm.asc(a.started_at)).all().map(xe);for(let h of g)s.has(h.id)||(s.add(h.id),i.push(h));}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(!fs.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(drizzleOrm.and(drizzleOrm.eq(a.platform,"workflow"),drizzleOrm.inArray(a.status,["running","pending"]),drizzleOrm.or(drizzleOrm.like(a.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(a.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(drizzleOrm.desc(a.started_at)).all().map(Oo));}catch(o){throw new f("DB_ERROR","Failed to find workflow parent tasks",o)}finally{r.close();}}return e}findWorkflowParentTasksByWorkspace(e){let n=[],r=new Map;for(let o of this.resolveDbPaths()){if(!fs.existsSync(o))continue;let s=U(o);try{let i=s.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(drizzleOrm.and(drizzleOrm.eq(a.platform,"workflow"),drizzleOrm.eq(a.workspace_id,e))).orderBy(drizzleOrm.desc(a.started_at),drizzleOrm.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(Oo(u)));}}catch(i){throw new f("DB_ERROR","Failed to find workflow parent tasks by workspace",i)}finally{s.close();}}return n}findWorkflowParentTask(e){if(this.dbExists())for(let n of this.resolveDbPaths()){if(!fs.existsSync(n))continue;let r=U(n);try{let o=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(drizzleOrm.and(drizzleOrm.eq(a.platform,"workflow"),drizzleOrm.eq(a.workspace_id,e.workspaceId))).orderBy(drizzleOrm.desc(a.started_at),drizzleOrm.desc(a.id)).all();for(let s of o){let i=this.parseWorkflowCardMetadata(s.metadata);if(i.kind===e.kind&&i.workflowRunId===e.workflowRunId)return Oo(s)}}catch(o){throw new f("DB_ERROR","Failed to find workflow parent task",o)}finally{r.close();}}}batchFetchWorkflowCards(e,n){let r=new Map;if(e.length===0)return r;let o=new Set(e),s=new Map,i=n?drizzleOrm.eq(a.workspace_id,n):void 0,u=(d,c)=>{if(!d)return;let l=s.get(d);if(l&&c.started_at<=l)return;let p=this.parseWorkflowCardMetadata(c.metadata);p.kind!=="workflow_card"&&p.kind!=="workflow_ui_instance"||(s.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(!fs.existsSync(d))continue;let c=U(d);try{let l=drizzleOrm.and(drizzleOrm.inArray(a.thread_id,e),drizzleOrm.or(drizzleOrm.like(a.metadata,'%"kind":"workflow_card"%'),drizzleOrm.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?drizzleOrm.and(l,i):l).all();for(let m of p)u(m.thread_id,m);let g=drizzleOrm.and(drizzleOrm.isNull(a.thread_id),drizzleOrm.or(drizzleOrm.like(a.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(a.metadata,'%"kind":"workflow_ui_instance"%'))),h=c.db.select({id:a.id,command:a.command,metadata:a.metadata,result:a.result,started_at:a.started_at}).from(a).where(i?drizzleOrm.and(g,i):g).all();for(let m of h){let w=this.extractThreadIdFromCommand(m.command);!w||!o.has(w)||u(w,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(drizzleOrm.eq(a.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(a.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(a.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(a.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(a.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(a.started_at,e.to));let u=r.length>0?drizzleOrm.and(...r):void 0,d=n.db.select({count:drizzleOrm.sql`count(*)`}).from(a).where(u).get(),c=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(a.started_at):drizzleOrm.desc(a.started_at);return {rows:n.db.select().from(a).where(u).orderBy(c).limit(e.limit).offset(e.offset).all().map(xe),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 o=this.openHandle(false);try{let s=vo(drizzleOrm.sql.raw("t.model"),drizzleOrm.sql.raw("t.metadata")),i=mn(drizzleOrm.sql.raw("t.status")),u=cr(drizzleOrm.sql.raw("t.metadata")),d=drizzleOrm.sql`
113
114
  COALESCE(t.input_tokens, 0)
114
115
  + CASE
115
- WHEN t.started_at >= ${Ht}
116
+ WHEN t.started_at >= ${$t}
116
117
  AND (
117
118
  t.crewx_version IS NULL
118
119
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
119
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${$t}) AS INTEGER) < ${Ut})
120
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Ut}) AS INTEGER) < ${Ft})
120
121
  )
121
122
  THEN COALESCE(t.cached_input_tokens, 0)
122
123
  ELSE 0
@@ -135,7 +136,7 @@ ${r.join(`
135
136
  FROM tasks t
136
137
  ${c}
137
138
  GROUP BY t.agent_id, t.workspace_id, ${s}
138
- `),p=new Map;for(let m of l){let w=typeof m.provider=="string"&&m.provider.trim()!==""?m.provider:"unknown",k={provider:w,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},C=m.workspace_id??null,L=JSON.stringify([m.agent_id,C]),N=p.get(L);if(!N){p.set(L,{agentId:m.agent_id,workspaceId:C,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}N.totalTasks+=m.total_tasks,N.unavailableTaskCount=(N.unavailableTaskCount??0)+m.unavailable_task_count,N.inputTokens+=m.input_tokens,N.outputTokens+=m.output_tokens,N.cachedInputTokens+=m.cached_input_tokens,N.costUsd+=m.cost_usd,N.totalTokens+=m.input_tokens+m.output_tokens;let E=N.providers.find(v=>v.provider===w);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):N.providers.push(k);}let g=[...p.values()];for(let m of g)m.providers.sort((w,k)=>w.provider===k.provider?0:w.provider==="unknown"?1:k.provider==="unknown"?-1:w.totalTokens!==k.totalTokens?k.totalTokens-w.totalTokens:w.provider<k.provider?-1:1);let h=(m,w)=>m===w?0:m<w?-1:1;return g.sort((m,w)=>{if(m.totalTokens!==w.totalTokens)return w.totalTokens-m.totalTokens;let k=h(m.agentId,w.agentId);return k!==0?k:m.workspaceId===w.workspaceId?0:m.workspaceId===null?1:w.workspaceId===null?-1:h(m.workspaceId,w.workspaceId)}),g}catch(s){throw new f("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=_n(drizzleOrm.sql.raw("t.status")),i=dr(drizzleOrm.sql.raw("t.metadata"));return o.db.all(r?drizzleOrm.sql`
139
+ `),p=new Map;for(let m of l){let w=typeof m.provider=="string"&&m.provider.trim()!==""?m.provider:"unknown",k={provider:w,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},C=m.workspace_id??null,L=JSON.stringify([m.agent_id,C]),N=p.get(L);if(!N){p.set(L,{agentId:m.agent_id,workspaceId:C,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}N.totalTasks+=m.total_tasks,N.unavailableTaskCount=(N.unavailableTaskCount??0)+m.unavailable_task_count,N.inputTokens+=m.input_tokens,N.outputTokens+=m.output_tokens,N.cachedInputTokens+=m.cached_input_tokens,N.costUsd+=m.cost_usd,N.totalTokens+=m.input_tokens+m.output_tokens;let E=N.providers.find(v=>v.provider===w);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):N.providers.push(k);}let g=[...p.values()];for(let m of g)m.providers.sort((w,k)=>w.provider===k.provider?0:w.provider==="unknown"?1:k.provider==="unknown"?-1:w.totalTokens!==k.totalTokens?k.totalTokens-w.totalTokens:w.provider<k.provider?-1:1);let h=(m,w)=>m===w?0:m<w?-1:1;return g.sort((m,w)=>{if(m.totalTokens!==w.totalTokens)return w.totalTokens-m.totalTokens;let k=h(m.agentId,w.agentId);return k!==0?k:m.workspaceId===w.workspaceId?0:m.workspaceId===null?1:w.workspaceId===null?-1:h(m.workspaceId,w.workspaceId)}),g}catch(s){throw new f("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=mn(drizzleOrm.sql.raw("t.status")),i=cr(drizzleOrm.sql.raw("t.metadata"));return o.db.all(r?drizzleOrm.sql`
139
140
  SELECT
140
141
  date(t.started_at) AS date,
141
142
  t.agent_id,
@@ -143,11 +144,11 @@ ${r.join(`
143
144
  COALESCE(SUM(
144
145
  COALESCE(t.input_tokens, 0)
145
146
  + CASE
146
- WHEN t.started_at >= ${Ht}
147
+ WHEN t.started_at >= ${$t}
147
148
  AND (
148
149
  t.crewx_version IS NULL
149
150
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
150
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${$t}) AS INTEGER) < ${Ut})
151
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Ut}) AS INTEGER) < ${Ft})
151
152
  )
152
153
  THEN COALESCE(t.cached_input_tokens, 0)
153
154
  ELSE 0
@@ -171,11 +172,11 @@ ${r.join(`
171
172
  COALESCE(SUM(
172
173
  COALESCE(t.input_tokens, 0)
173
174
  + CASE
174
- WHEN t.started_at >= ${Ht}
175
+ WHEN t.started_at >= ${$t}
175
176
  AND (
176
177
  t.crewx_version IS NULL
177
178
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
178
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${$t}) AS INTEGER) < ${Ut})
179
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Ut}) AS INTEGER) < ${Ft})
179
180
  )
180
181
  THEN COALESCE(t.cached_input_tokens, 0)
181
182
  ELSE 0
@@ -190,14 +191,14 @@ ${r.join(`
190
191
  AND t.started_at < ${n}
191
192
  GROUP BY date(t.started_at), t.agent_id
192
193
  ORDER BY date(t.started_at) ASC
193
- `).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(s){throw new f("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let o=r.db.select().from(a).where(drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.workspace_id,n))).limit(1).get();return o?ve(o):void 0}catch(o){throw new f("DB_ERROR","Failed to find task for stop",o)}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(drizzleOrm.and(drizzleOrm.eq(a.agent_id,e.agentId),drizzleOrm.eq(a.workspace_id,e.workspaceId),drizzleOrm.sql`${a.metadata} IS NOT NULL AND json_valid(${a.metadata}) AND json_extract(${a.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.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,o="failed",s){if(!this.dbExists())return;let i=this.openHandle(true);try{let u=new Date().toISOString(),d=r?drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.status,"running"),drizzleOrm.eq(a.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.status,"running")),c=i.db.select({metadata:a.metadata}).from(a).where(d).limit(1).get();if(!c)return;let l={status:o,error:n,completed_at:u};if(s){let p=Z(c.metadata);p.terminalReason=s,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(),o=new Set,s=[];for(let i of r){if(!fs.existsSync(i))continue;let u=U(i);try{let d=n?drizzleOrm.and(drizzleOrm.like(a.prompt,`%${e}%`),drizzleOrm.eq(a.workspace_id,n)):drizzleOrm.like(a.prompt,`%${e}%`),c=u.db.select().from(a).where(d).orderBy(drizzleOrm.asc(a.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),s.push(ve(l)));}catch(d){throw new f("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{u.close();}}return s}getProviderUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=Io(),i=_n(a.status),u=dr(a.metadata),d=drizzleOrm.sql`
194
+ `).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(s){throw new f("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let o=r.db.select().from(a).where(drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.workspace_id,n))).limit(1).get();return o?xe(o):void 0}catch(o){throw new f("DB_ERROR","Failed to find task for stop",o)}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(drizzleOrm.and(drizzleOrm.eq(a.agent_id,e.agentId),drizzleOrm.eq(a.workspace_id,e.workspaceId),drizzleOrm.sql`${a.metadata} IS NOT NULL AND json_valid(${a.metadata}) AND json_extract(${a.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.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,o="failed",s){if(!this.dbExists())return;let i=this.openHandle(true);try{let u=new Date().toISOString(),d=r?drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.status,"running"),drizzleOrm.eq(a.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(a.id,e),drizzleOrm.eq(a.status,"running")),c=i.db.select({metadata:a.metadata}).from(a).where(d).limit(1).get();if(!c)return;let l={status:o,error:n,completed_at:u};if(s){let p=Z(c.metadata);p.terminalReason=s,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(),o=new Set,s=[];for(let i of r){if(!fs.existsSync(i))continue;let u=U(i);try{let d=n?drizzleOrm.and(drizzleOrm.like(a.prompt,`%${e}%`),drizzleOrm.eq(a.workspace_id,n)):drizzleOrm.like(a.prompt,`%${e}%`),c=u.db.select().from(a).where(d).orderBy(drizzleOrm.asc(a.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),s.push(xe(l)));}catch(d){throw new f("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{u.close();}}return s}getProviderUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=vo(),i=mn(a.status),u=cr(a.metadata),d=drizzleOrm.sql`
194
195
  COALESCE(${a.input_tokens}, 0)
195
196
  + CASE
196
- WHEN ${a.started_at} >= ${Ht}
197
+ WHEN ${a.started_at} >= ${$t}
197
198
  AND (
198
199
  ${a.crewx_version} IS NULL
199
200
  OR (${a.crewx_version} LIKE '0.8.%' AND ${a.crewx_version} NOT LIKE '0.8.9%')
200
- OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${$t}) AS INTEGER) < ${Ut})
201
+ OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${Ut}) AS INTEGER) < ${Ft})
201
202
  )
202
203
  THEN COALESCE(${a.cached_input_tokens}, 0)
203
204
  ELSE 0
@@ -217,14 +218,14 @@ ${r.join(`
217
218
  ${c}
218
219
  GROUP BY ${s}
219
220
  ORDER BY (COALESCE(SUM(${d}), 0) + COALESCE(SUM(${a.output_tokens}), 0)) DESC
220
- `).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(s){throw new f("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=Io(),i=_n(a.status),u=dr(a.metadata),d=drizzleOrm.sql`
221
+ `).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(s){throw new f("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=vo(),i=mn(a.status),u=cr(a.metadata),d=drizzleOrm.sql`
221
222
  COALESCE(${a.input_tokens}, 0)
222
223
  + CASE
223
- WHEN ${a.started_at} >= ${Ht}
224
+ WHEN ${a.started_at} >= ${$t}
224
225
  AND (
225
226
  ${a.crewx_version} IS NULL
226
227
  OR (${a.crewx_version} LIKE '0.8.%' AND ${a.crewx_version} NOT LIKE '0.8.9%')
227
- OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${$t}) AS INTEGER) < ${Ut})
228
+ OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${Ut}) AS INTEGER) < ${Ft})
228
229
  )
229
230
  THEN COALESCE(${a.cached_input_tokens}, 0)
230
231
  ELSE 0
@@ -244,7 +245,7 @@ ${r.join(`
244
245
  FROM ${a}
245
246
  ${c}
246
247
  GROUP BY ${a.model}, ${s}
247
- `),p=new Map;for(let g of l){let h=qr(g.model??""),m=JSON.stringify([g.provider,h]),w=p.get(m);w?(w.totalTasks+=g.total_tasks,w.unavailableTaskCount=(w.unavailableTaskCount??0)+g.unavailable_task_count,w.inputTokens+=g.input_tokens,w.outputTokens+=g.output_tokens,w.cachedInputTokens+=g.cached_input_tokens,w.costUsd+=g.cost_usd,w.totalTokens+=g.input_tokens+g.output_tokens,w.activeDurationMs+=g.active_duration_ms??0,g.last_active_at&&(!w.lastActiveAt||g.last_active_at>w.lastActiveAt)&&(w.lastActiveAt=g.last_active_at)):p.set(m,{model:h,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,h)=>h.costUsd-g.costUsd)}catch(s){throw new f("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=r?drizzleOrm.sql`WHERE ${a.started_at} >= ${e} AND ${a.started_at} < ${n} AND ${a.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${a.started_at} >= ${e} AND ${a.started_at} < ${n}`;return o.db.all(drizzleOrm.sql`
248
+ `),p=new Map;for(let g of l){let h=Br(g.model??""),m=JSON.stringify([g.provider,h]),w=p.get(m);w?(w.totalTasks+=g.total_tasks,w.unavailableTaskCount=(w.unavailableTaskCount??0)+g.unavailable_task_count,w.inputTokens+=g.input_tokens,w.outputTokens+=g.output_tokens,w.cachedInputTokens+=g.cached_input_tokens,w.costUsd+=g.cost_usd,w.totalTokens+=g.input_tokens+g.output_tokens,w.activeDurationMs+=g.active_duration_ms??0,g.last_active_at&&(!w.lastActiveAt||g.last_active_at>w.lastActiveAt)&&(w.lastActiveAt=g.last_active_at)):p.set(m,{model:h,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,h)=>h.costUsd-g.costUsd)}catch(s){throw new f("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=r?drizzleOrm.sql`WHERE ${a.started_at} >= ${e} AND ${a.started_at} < ${n} AND ${a.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${a.started_at} >= ${e} AND ${a.started_at} < ${n}`;return o.db.all(drizzleOrm.sql`
248
249
  SELECT
249
250
  ${a.thread_id} AS thread_id,
250
251
  ${a.agent_id} AS agent_id,
@@ -258,16 +259,16 @@ ${r.join(`
258
259
  `).map(u=>({threadId:u.thread_id,agentId:u.agent_id,startedAt:u.started_at,status:u.status,error:u.error,exitCode:u.exit_code}))}catch(s){throw new f("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}getDelegationMatrix(e,n,r){if(!this.dbExists())return {edges:[],truncated:false};let o=this.openHandle(false);try{let s=drizzleOrm.sql`
259
260
  COALESCE(${a.input_tokens}, 0)
260
261
  + CASE
261
- WHEN ${a.started_at} >= ${Ht}
262
+ WHEN ${a.started_at} >= ${$t}
262
263
  AND (
263
264
  ${a.crewx_version} IS NULL
264
265
  OR (${a.crewx_version} LIKE '0.8.%' AND ${a.crewx_version} NOT LIKE '0.8.9%')
265
- OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${$t}) AS INTEGER) < ${Ut})
266
+ OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${Ut}) AS INTEGER) < ${Ft})
266
267
  )
267
268
  THEN COALESCE(${a.cached_input_tokens}, 0)
268
269
  ELSE 0
269
270
  END
270
- `,i=_n(a.status),u=r?drizzleOrm.sql`WHERE ${i} AND ${a.started_at} >= ${e} AND ${a.started_at} < ${n} AND ${a.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${i} AND ${a.started_at} >= ${e} AND ${a.started_at} < ${n}`,d=o.db.all(drizzleOrm.sql`
271
+ `,i=mn(a.status),u=r?drizzleOrm.sql`WHERE ${i} AND ${a.started_at} >= ${e} AND ${a.started_at} < ${n} AND ${a.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${i} AND ${a.started_at} >= ${e} AND ${a.started_at} < ${n}`,d=o.db.all(drizzleOrm.sql`
271
272
  SELECT
272
273
  ${a.caller_agent_id} AS caller_agent_id,
273
274
  ${a.agent_id} AS agent_id,
@@ -278,18 +279,18 @@ ${r.join(`
278
279
  ${u}
279
280
  GROUP BY ${a.caller_agent_id}, ${a.agent_id}
280
281
  ORDER BY task_count DESC, ${a.caller_agent_id} ASC, ${a.agent_id} ASC
281
- LIMIT ${So+1}
282
- `),c=d.length>So;return {edges:d.slice(0,So).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(s){throw new f("DB_ERROR","Failed to get delegation matrix",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(a.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(a.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(a.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(a.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(a.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(a.started_at):drizzleOrm.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(o).orderBy(s).limit(e.limit).all():n.db.select(i).from(a).where(o).orderBy(s).all()).map(({error:d,metadata:c,...l})=>({...l,status:ht({status:l.status,error:d,metadata:c})}))}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,o=e.maxTurnsPerThread??4,s=[drizzleOrm.isNotNull(a.thread_id),drizzleOrm.isNull(a.parent_task_id),drizzleOrm.isNull(a.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(a.platform),drizzleOrm.ne(a.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(a.metadata),drizzleOrm.and(drizzleOrm.notLike(a.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(a.metadata,'%"kind":"workflow_ui_instance"%'))),drizzleOrm.or(drizzleOrm.isNull(a.metadata),drizzleOrm.notLike(a.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(a.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(a.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(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(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(a.started_at),drizzleOrm.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(-o)}))}catch(r){throw new f("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}};});_();_();_();var Ve=class{detach(e){}};_();function Go(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 Sr(t){let e=t.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}var Ir=class extends Ve{name="file-logger";unsubs=[];logFiles=new Map;logsDir;version;constructor(e){super(),this.logsDir=pe.join(e?.workspaceRoot??process.cwd(),".crewx","logs"),this.version=e?.version??"unknown";}attach(e){this.unsubs.push(e.on("task:start",n=>{try{fs.existsSync(this.logsDir)||fs.mkdirSync(this.logsDir,{recursive:!0});let r=Go(n.timestamp),o=pe.join(this.logsDir,`${r}_${n.traceId}.log`);this.logFiles.set(n.traceId,o);let s=`=== TASK LOG: ${n.traceId} ===
282
+ LIMIT ${bo+1}
283
+ `),c=d.length>bo;return {edges:d.slice(0,bo).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(s){throw new f("DB_ERROR","Failed to get delegation matrix",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(a.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(a.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(a.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(a.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(a.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(a.started_at):drizzleOrm.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(o).orderBy(s).limit(e.limit).all():n.db.select(i).from(a).where(o).orderBy(s).all()).map(({error:d,metadata:c,...l})=>({...l,status:_t({status:l.status,error:d,metadata:c})}))}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,o=e.maxTurnsPerThread??4,s=[drizzleOrm.isNotNull(a.thread_id),drizzleOrm.isNull(a.parent_task_id),drizzleOrm.isNull(a.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(a.platform),drizzleOrm.ne(a.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(a.metadata),drizzleOrm.and(drizzleOrm.notLike(a.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(a.metadata,'%"kind":"workflow_ui_instance"%'))),drizzleOrm.or(drizzleOrm.isNull(a.metadata),drizzleOrm.notLike(a.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(a.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(a.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(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(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(a.started_at),drizzleOrm.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(-o)}))}catch(r){throw new f("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}};});_();_();_();var Ve=class{detach(e){}};_();function Jo(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 Ar(t){let e=t.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}var Or=class extends Ve{name="file-logger";unsubs=[];logFiles=new Map;logsDir;version;constructor(e){super(),this.logsDir=pe.join(e?.workspaceRoot??process.cwd(),".crewx","logs"),this.version=e?.version??"unknown";}attach(e){this.unsubs.push(e.on("task:start",n=>{try{fs.existsSync(this.logsDir)||fs.mkdirSync(this.logsDir,{recursive:!0});let r=Jo(n.timestamp),o=pe.join(this.logsDir,`${r}_${n.traceId}.log`);this.logFiles.set(n.traceId,o);let s=`=== TASK LOG: ${n.traceId} ===
283
284
  CrewX Version: ${this.version}
284
285
  Mode: ${n.mode}
285
286
  Agent: ${n.agentRef}
286
- Started: ${Sr(n.timestamp)}
287
+ Started: ${Ar(n.timestamp)}
287
288
  Message: ${n.message}
288
289
 
289
290
  `;fs.writeFileSync(o,s,{encoding:"utf8",mode:384});}catch{}}),e.on("task:output",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let o=new Date().toISOString();fs.appendFileSync(r,`[${o}] STDOUT: ${n.output}
290
- `,"utf8");}catch{}}),e.on("task:end",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let o=Sr(new Date),s=n.error?`failed: ${n.error.message}`:"completed successfully",i=`[${o}] INFO: Task ${s} in ${n.durationMs}ms
291
+ `,"utf8");}catch{}}),e.on("task:end",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let o=Ar(new Date),s=n.error?`failed: ${n.error.message}`:"completed successfully",i=`[${o}] INFO: Task ${s} in ${n.durationMs}ms
291
292
  [${o}] INFO: Process closed with exit code: ${n.error?1:0}
292
- `;fs.appendFileSync(r,i,"utf8"),this.logFiles.delete(n.traceId);}catch{}}));}detach(e){this.unsubs.forEach(n=>n()),this.unsubs=[],this.logFiles.clear();}};_();_();var wt=new Map;function bn(t){let e=pe__namespace.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function Xo(t){let e=bn(t);return crypto.createHash("sha256").update(e).digest("hex")}function Yo(t){let e=bn(t),n=wt.get(e);if(n!==void 0)return n;let r=e;try{let o=pe__namespace.join(e,".git");if(!fs.lstatSync(o).isFile())return wt.set(e,r),r;let s=/^gitdir:\s*(.+?)\s*$/i.exec(fs.readFileSync(o,"utf8").trim());if(!s)return wt.set(e,r),r;let i=s[1],u=pe__namespace.isAbsolute(i)?i:pe__namespace.resolve(pe__namespace.dirname(o),i),d=fs.readFileSync(pe__namespace.join(u,"commondir"),"utf8").trim();if(!d)return wt.set(e,r),r;let c=pe__namespace.isAbsolute(d)?d:pe__namespace.resolve(u,d);if(pe__namespace.basename(c)!==".git"||!fs.statSync(c).isDirectory())return wt.set(e,r),r;let l=bn(fs.realpathSync.native(e)),p=bn(fs.realpathSync.native(pe__namespace.dirname(c)));(l===p||(p.endsWith("/")?l.startsWith(p):l.startsWith(`${p}/`)))&&(r=p);}catch{}return wt.set(e,r),r}nt();yo();bt();so();ln();wo();Gn();var ll=200,pl=200;function fl(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 gl(t){let e=t instanceof f?t.code:void 0,n=t instanceof f?t.cause:t,r=fl(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function Ea(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function hl(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ra(t){if(!t)return {};try{let e=JSON.parse(t);return hl(e)?e:{}}catch{return {}}}function kn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var _l=new Set(["workflow","mcp"]),Po=class extends Ve{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?pe.join(e.dbRoot,".crewx","crewx.db"):n??pe.join(ts.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 mn({dbPath:this.dbPath});n.resolveDbPath(),this.taskRepo=n;let r=process.cwd(),o=fs.existsSync(pe.join(r,"crewx.yaml"))||fs.existsSync(pe.join(r,"crewx.yml")),s=this.inheritWorktreeOwner?Yo(r):r,i=o?Xo(s):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:h}=this.runnerIdentity,m=h??d.traceId,w=kn(d.metadata?.runEpoch),k=g?"runner":"caller",C=d.workspaceId??i,L=g?n.getTask(m):void 0,N=d.pid??null,E={...d.metadata??{provider:d.provider??"cli/claude"},ownership:k,...g&&N!==null?{providerPid:N}:{}},v=JSON.stringify(E);if(g&&L?.status==="running"&&L.pid!==null&&w===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:N,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,command:u,codingAgentCommand:d.codingAgentCommand??null,workspaceId:C,projectId:d.projectId??null,callerAgentId:c,parentTaskId:l,traceId:p,metadata:v,threadId:d.threadId??null,cwd:d.cwd??null}),n.updateTaskOwnership({id:m,runEpoch:w,ownership:k,...g?{providerPid:N}:{},runtime:{model:d.model??null,renderedPrompt:d.renderedPrompt??null,codingAgentCommand:d.codingAgentCommand??null,metadata:E}})?this.recordOwnedTaskRun({taskId:m,runEpoch:w,workspaceId:C,ownership:k}):console.warn("[crewx] task execution metadata not recorded",{taskId:m,runEpoch:w,ownership:k}),_l.has(d.platform??"cli")||oa(n,{taskId:m,runEpoch:w,onStopRequested:Rr=>this.handleStopRequested(n,Rr)})&&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],Ea(l));}}),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,kn(l)),cn(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,h=d.result??null,m=!1;if(d.error&&(!h||h.trim()==="")){let w=this.recoverPartialResult(c,d,l);w&&(h=w,m=!0);}n.finishTask({id:c,status:d.error?"failed":"success",result:h,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)cn(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 o=await la(e,{taskId:r.taskId,expectedRunEpoch:r.runEpoch,workspaceId:r.workspaceId});(o.status==="failed"||o.status==="ownership_unverified")&&console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,status:o.status,...o.error?{error:o.error}:{}});}catch(o){console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,cause:o instanceof Error?o.name:typeof o});}}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+=Ea(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>=ll){this.flushTaskLogs(e);return}if(!r.timer){let o=setTimeout(()=>{let s=this.queues.get(e);!s||s.timer!==o||(s.timer=void 0,this.flushTaskLogs(e));},pl);r.timer=o;}}recoverPartialResult(e,n,r){try{let o=this.taskRepo;if(!o)return;let s=o.getTask(e);if(!s||s.status!=="running"||kn(s.run_epoch)!==kn(r))return;let i=Ra(s.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:o,taskId:e,provider:u,model:s.model});if(!d?.adapter.extractPartialText)return;let c=d.adapter.extractPartialText(d.stdout);return !c||!c.trim()||Ue(c,u)?void 0:c}catch{return}}async handleStopRequested(e,n){let r=n.id;if(!r)return;let o=kn(n.run_epoch),s=Ra(n.metadata??null),i=s.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 s.providerPid=="number"&&Number.isSafeInteger(s.providerPid)&&s.providerPid>0?s.providerPid:void 0,d=i==="runner"?u:typeof n.pid=="number"&&n.pid>0?n.pid:void 0;if(d!==void 0){let c;try{c=await Ot(d,{signal:At});}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:o,method:ar(n.stop_requested_at)}),l=e.getTask(r);(c||l?.status!=="running")&&cn(r,o)&&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,o=n.bytes;n.entries=[],n.bytes=0,this.metrics.flushCount+=1;try{this.taskRepo?.appendLogs(e,r),this.metrics.flushedEntries+=r.length;}catch(i){this.recordAppendFailure(i,r,o);}let s=this.queues.get(e);s&&s.entries.length===0&&(s.timer&&clearTimeout(s.timer),this.queues.delete(e));}flushAllTaskLogs(){for(let e of [...this.queues.keys()])this.flushTaskLogs(e);}clearAllTimers(){for(let e of this.queues.values())e.timer&&(clearTimeout(e.timer),e.timer=void 0);}recordAppendFailure(e,n,r){let o=gl(e);this.metrics.appendFailureCount+=1,this.metrics.appendFailureEntries+=n.length,this.metrics.appendFailureBytes+=r,this.metrics.appendFailureByCode[o.code]=(this.metrics.appendFailureByCode[o.code]??0)+1,this.metrics.appendFailureByCause[o.cause]=(this.metrics.appendFailureByCause[o.cause]??0)+1,console.warn("[crewx] sqlite tracing append failed",{code:o.code,cause:o.cause,pendingEntries:n.length,pendingBytes:r});}};_();_();_();ot();yt();Et();nt();St();or();function fr(t){return {...t,status:ht(t)}}function El({metadata:t,...e}){return {...e,status:ht({...e,metadata:t})}}var Aa=900;function gr(t){return t!==null&&t!==""}function Rl(t){return t.schedule_id!==null&&t.schedule_id!==void 0?"system":gr(t.parent_task_id)||gr(t.caller_agent_id)?"agent":t.platform==="workflow"?"system":"human"}function Sl(t){return {origin:t.created_by_kind==="human"?"direct":"delegated",delegatedByAgentId:t.created_by_kind==="agent"&&gr(t.created_by_id)?t.created_by_id:null}}function Oa(t){return t==="direct"?drizzleOrm.sql`created_by_kind = 'human'`:t==="delegated"?drizzleOrm.sql`created_by_kind IN ('agent', 'system', 'unknown')`:drizzleOrm.sql`created_by_kind IS NOT NULL`}var Ft=class extends f{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function Tn(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function Il(t){let n=Tn(t).threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {priority:null,state:null};let r=n;return {priority:typeof r.priority=="string"?r.priority:null,state:typeof r.state=="string"?r.state:null}}var hr=class extends we{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=pe.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=pe.dirname(n);fs.existsSync(o)||fs.mkdirSync(o,{recursive:true});}else if(!fs.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{Pe(r.db,n);}catch(o){throw r.close(),o}return r}validateWorkspaceId(e,n){return e.db.select({id:Rt.id}).from(Rt).where(drizzleOrm.eq(Rt.id,n)).limit(1).get()?n:null}topLevelTaskPredicateSql(e="child"){return drizzleOrm.sql.raw(`NOT EXISTS (
293
+ `;fs.appendFileSync(r,i,"utf8"),this.logFiles.delete(n.traceId);}catch{}}));}detach(e){this.unsubs.forEach(n=>n()),this.unsubs=[],this.logFiles.clear();}};_();_();var yt=new Map;function vn(t){let e=pe__namespace.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function es(t){let e=vn(t);return crypto.createHash("sha256").update(e).digest("hex")}function ts(t){let e=vn(t),n=yt.get(e);if(n!==void 0)return n;let r=e;try{let o=pe__namespace.join(e,".git");if(!fs.lstatSync(o).isFile())return yt.set(e,r),r;let s=/^gitdir:\s*(.+?)\s*$/i.exec(fs.readFileSync(o,"utf8").trim());if(!s)return yt.set(e,r),r;let i=s[1],u=pe__namespace.isAbsolute(i)?i:pe__namespace.resolve(pe__namespace.dirname(o),i),d=fs.readFileSync(pe__namespace.join(u,"commondir"),"utf8").trim();if(!d)return yt.set(e,r),r;let c=pe__namespace.isAbsolute(d)?d:pe__namespace.resolve(u,d);if(pe__namespace.basename(c)!==".git"||!fs.statSync(c).isDirectory())return yt.set(e,r),r;let l=vn(fs.realpathSync.native(e)),p=vn(fs.realpathSync.native(pe__namespace.dirname(c)));(l===p||(p.endsWith("/")?l.startsWith(p):l.startsWith(`${p}/`)))&&(r=p);}catch{}return yt.set(e,r),r}rt();Io();vt();co();pn();So();zn();var Tl=200,wl=200;function yl(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 El(t){let e=t instanceof f?t.code:void 0,n=t instanceof f?t.cause:t,r=yl(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function xa(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function Rl(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ca(t){if(!t)return {};try{let e=JSON.parse(t);return Rl(e)?e:{}}catch{return {}}}function Tn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var Sl=new Set(["workflow","mcp"]),Ho=class extends Ve{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?pe.join(e.dbRoot,".crewx","crewx.db"):n??pe.join(ss.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 kn({dbPath:this.dbPath});n.resolveDbPath(),this.taskRepo=n;let r=process.cwd(),o=fs.existsSync(pe.join(r,"crewx.yaml"))||fs.existsSync(pe.join(r,"crewx.yml")),s=this.inheritWorktreeOwner?ts(r):r,i=o?es(s):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:h}=this.runnerIdentity,m=h??d.traceId,w=Tn(d.metadata?.runEpoch),k=g?"runner":"caller",C=d.workspaceId??i,L=g?n.getTask(m):void 0,N=d.pid??null,E={...d.metadata??{provider:d.provider??"cli/claude"},ownership:k,...g&&N!==null?{providerPid:N}:{}},v=JSON.stringify(E);if(g&&L?.status==="running"&&L.pid!==null&&w===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:N,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,command:u,codingAgentCommand:d.codingAgentCommand??null,workspaceId:C,projectId:d.projectId??null,callerAgentId:c,parentTaskId:l,traceId:p,metadata:v,threadId:d.threadId??null,cwd:d.cwd??null}),n.updateTaskOwnership({id:m,runEpoch:w,ownership:k,...g?{providerPid:N}:{},runtime:{model:d.model??null,renderedPrompt:d.renderedPrompt??null,codingAgentCommand:d.codingAgentCommand??null,metadata:E}})?this.recordOwnedTaskRun({taskId:m,runEpoch:w,workspaceId:C,ownership:k}):console.warn("[crewx] task execution metadata not recorded",{taskId:m,runEpoch:w,ownership:k}),Sl.has(d.platform??"cli")||pa(n,{taskId:m,runEpoch:w,onStopRequested:Ir=>this.handleStopRequested(n,Ir)})&&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],xa(l));}}),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,Tn(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,h=d.result??null,m=!1;if(d.error&&(!h||h.trim()==="")){let w=this.recoverPartialResult(c,d,l);w&&(h=w,m=!0);}n.finishTask({id:c,status:d.error?"failed":"success",result:h,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 o=await Ta(e,{taskId:r.taskId,expectedRunEpoch:r.runEpoch,workspaceId:r.workspaceId});(o.status==="failed"||o.status==="ownership_unverified")&&console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,status:o.status,...o.error?{error:o.error}:{}});}catch(o){console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,cause:o instanceof Error?o.name:typeof o});}}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+=xa(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>=Tl){this.flushTaskLogs(e);return}if(!r.timer){let o=setTimeout(()=>{let s=this.queues.get(e);!s||s.timer!==o||(s.timer=void 0,this.flushTaskLogs(e));},wl);r.timer=o;}}recoverPartialResult(e,n,r){try{let o=this.taskRepo;if(!o)return;let s=o.getTask(e);if(!s||s.status!=="running"||Tn(s.run_epoch)!==Tn(r))return;let i=Ca(s.metadata),u=typeof i.provider=="string"?i.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!u)return;let d=sr({taskLogRepository:o,taskId:e,provider:u,model:s.model});if(!d?.adapter.extractPartialText)return;let c=d.adapter.extractPartialText(d.stdout);return !c||!c.trim()||Fe(c,u)?void 0:c}catch{return}}async handleStopRequested(e,n){let r=n.id;if(!r)return;let o=Tn(n.run_epoch),s=Ca(n.metadata??null),i=s.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 s.providerPid=="number"&&Number.isSafeInteger(s.providerPid)&&s.providerPid>0?s.providerPid:void 0,d=i==="runner"?u:typeof n.pid=="number"&&n.pid>0?n.pid:void 0;if(d!==void 0){let c;try{c=await bt(d,{signal:Ot});}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:o,method:ur(n.stop_requested_at)}),l=e.getTask(r);(c||l?.status!=="running")&&ln(r,o)&&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,o=n.bytes;n.entries=[],n.bytes=0,this.metrics.flushCount+=1;try{this.taskRepo?.appendLogs(e,r),this.metrics.flushedEntries+=r.length;}catch(i){this.recordAppendFailure(i,r,o);}let s=this.queues.get(e);s&&s.entries.length===0&&(s.timer&&clearTimeout(s.timer),this.queues.delete(e));}flushAllTaskLogs(){for(let e of [...this.queues.keys()])this.flushTaskLogs(e);}clearAllTimers(){for(let e of this.queues.values())e.timer&&(clearTimeout(e.timer),e.timer=void 0);}recordAppendFailure(e,n,r){let o=El(e);this.metrics.appendFailureCount+=1,this.metrics.appendFailureEntries+=n.length,this.metrics.appendFailureBytes+=r,this.metrics.appendFailureByCode[o.code]=(this.metrics.appendFailureByCode[o.code]??0)+1,this.metrics.appendFailureByCause[o.cause]=(this.metrics.appendFailureByCause[o.cause]??0)+1,console.warn("[crewx] sqlite tracing append failed",{code:o.code,cause:o.cause,pendingEntries:n.length,pendingBytes:r});}};_();_();_();st();Et();Rt();rt();It();ir();function hr(t){return {...t,status:_t(t)}}function xl({metadata:t,...e}){return {...e,status:_t({...e,metadata:t})}}var Da=900;function _r(t){return t!==null&&t!==""}function Cl(t){return t.schedule_id!==null&&t.schedule_id!==void 0?"system":_r(t.parent_task_id)||_r(t.caller_agent_id)?"agent":t.platform==="workflow"?"system":"human"}function Nl(t){return {origin:t.created_by_kind==="human"?"direct":"delegated",delegatedByAgentId:t.created_by_kind==="agent"&&_r(t.created_by_id)?t.created_by_id:null}}function La(t){return t==="direct"?drizzleOrm.sql`created_by_kind = 'human'`:t==="delegated"?drizzleOrm.sql`created_by_kind IN ('agent', 'system', 'unknown')`:drizzleOrm.sql`created_by_kind IS NOT NULL`}var Bt=class extends f{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function wn(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function Pl(t){let n=wn(t).threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {priority:null,state:null};let r=n;return {priority:typeof r.priority=="string"?r.priority:null,state:typeof r.state=="string"?r.state:null}}var mr=class extends we{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=pe.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=pe.dirname(n);fs.existsSync(o)||fs.mkdirSync(o,{recursive:true});}else if(!fs.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{De(r.db,n);}catch(o){throw r.close(),o}return r}validateWorkspaceId(e,n){return e.db.select({id:St.id}).from(St).where(drizzleOrm.eq(St.id,n)).limit(1).get()?n:null}topLevelTaskPredicateSql(e="child"){return drizzleOrm.sql.raw(`NOT EXISTS (
293
294
  SELECT 1 FROM tasks parent
294
295
  WHERE parent.id = ${e}.parent_task_id
295
296
  AND parent.thread_id = ${e}.thread_id
@@ -327,7 +328,7 @@ Message: ${n.message}
327
328
  AND ${this.topLevelTaskPredicateSql()}
328
329
  ${n?drizzleOrm.sql`AND child.workspace_id = ${n}`:drizzleOrm.sql``}
329
330
  ORDER BY child.started_at ASC
330
- `);for(let l of c)s.has(l.id)||(s.add(l.id),i.push(fr(l)));}catch(c){throw new f("DB_ERROR","Failed to find top-level tasks",c)}finally{d.close();}}if(r!==void 0&&o.length>1){let u=new Map;for(let d of i){let c=d.agent_id??"";u.has(c)||u.set(c,[]),u.get(c).push(d);}i=[];for(let d of u.values())d.sort((c,l)=>(l.started_at??"").localeCompare(c.started_at??"")),i.push(...d.slice(0,r));i.sort((d,c)=>(d.started_at??"").localeCompare(c.started_at??""));}return i}findAllTasks(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!fs.existsSync(i))continue;let u=U(i);try{let d=drizzleOrm.eq(a.thread_id,e),c=n?drizzleOrm.and(d,drizzleOrm.eq(a.workspace_id,n)):d,l=u.db.select().from(a).where(c).orderBy(drizzleOrm.asc(a.started_at)).all();for(let p of l)o.has(p.id)||(o.add(p.id),s.push(fr(p)));}catch(d){throw new f("DB_ERROR","Failed to find all tasks for thread",d)}finally{u.close();}}return s}findTaskById(e,n,r){let o=this.resolveDbPaths();for(let s of o){if(!fs.existsSync(s))continue;let i=U(s);try{let u=drizzleOrm.and(drizzleOrm.eq(a.id,n),drizzleOrm.eq(a.thread_id,e)),d=r?drizzleOrm.and(u,drizzleOrm.eq(a.workspace_id,r)):u,c=i.db.select().from(a).where(d).limit(1).get();if(!c)continue;let l=i.db.select().from(a).where(drizzleOrm.eq(a.parent_task_id,c.id)).orderBy(drizzleOrm.asc(a.started_at)).all().map(fr);return {task:fr(c),children:l}}catch(u){throw new f("DB_ERROR","Failed to find task by id",u)}finally{i.close();}}}batchFetchTasksQuery(e,n){return drizzleOrm.sql`
331
+ `);for(let l of c)s.has(l.id)||(s.add(l.id),i.push(hr(l)));}catch(c){throw new f("DB_ERROR","Failed to find top-level tasks",c)}finally{d.close();}}if(r!==void 0&&o.length>1){let u=new Map;for(let d of i){let c=d.agent_id??"";u.has(c)||u.set(c,[]),u.get(c).push(d);}i=[];for(let d of u.values())d.sort((c,l)=>(l.started_at??"").localeCompare(c.started_at??"")),i.push(...d.slice(0,r));i.sort((d,c)=>(d.started_at??"").localeCompare(c.started_at??""));}return i}findAllTasks(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!fs.existsSync(i))continue;let u=U(i);try{let d=drizzleOrm.eq(a.thread_id,e),c=n?drizzleOrm.and(d,drizzleOrm.eq(a.workspace_id,n)):d,l=u.db.select().from(a).where(c).orderBy(drizzleOrm.asc(a.started_at)).all();for(let p of l)o.has(p.id)||(o.add(p.id),s.push(hr(p)));}catch(d){throw new f("DB_ERROR","Failed to find all tasks for thread",d)}finally{u.close();}}return s}findTaskById(e,n,r){let o=this.resolveDbPaths();for(let s of o){if(!fs.existsSync(s))continue;let i=U(s);try{let u=drizzleOrm.and(drizzleOrm.eq(a.id,n),drizzleOrm.eq(a.thread_id,e)),d=r?drizzleOrm.and(u,drizzleOrm.eq(a.workspace_id,r)):u,c=i.db.select().from(a).where(d).limit(1).get();if(!c)continue;let l=i.db.select().from(a).where(drizzleOrm.eq(a.parent_task_id,c.id)).orderBy(drizzleOrm.asc(a.started_at)).all().map(hr);return {task:hr(c),children:l}}catch(u){throw new f("DB_ERROR","Failed to find task by id",u)}finally{i.close();}}}batchFetchTasksQuery(e,n){return drizzleOrm.sql`
331
332
  SELECT child.id, child.thread_id, child.agent_id, child.status,
332
333
  child.parent_task_id, child.started_at, child.completed_at,
333
334
  child.duration_ms, child.input_tokens, child.output_tokens,
@@ -337,7 +338,7 @@ Message: ${n.message}
337
338
  AND ${this.topLevelTaskPredicateSql()}
338
339
  ${n?drizzleOrm.sql`AND child.workspace_id = ${n}`:drizzleOrm.sql``}
339
340
  ORDER BY child.started_at ASC
340
- `}batchFetchTasks(e,n){let r=new Map;if(e.length===0)return r;let o=this.resolveDbPaths();for(let s of o){if(!fs.existsSync(s))continue;let i=U(s);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(El(d));}}catch(u){throw new f("DB_ERROR","Failed to batch fetch tasks",u)}finally{i.close();}}return r}findThreadOriginsQuery(e,n){return drizzleOrm.sql`
341
+ `}batchFetchTasks(e,n){let r=new Map;if(e.length===0)return r;let o=this.resolveDbPaths();for(let s of o){if(!fs.existsSync(s))continue;let i=U(s);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(xl(d));}}catch(u){throw new f("DB_ERROR","Failed to batch fetch tasks",u)}finally{i.close();}}return r}findThreadOriginsQuery(e,n){return drizzleOrm.sql`
341
342
  WITH root AS (
342
343
  SELECT child.thread_id, child.id, child.caller_agent_id, child.parent_task_id,
343
344
  CASE
@@ -361,11 +362,11 @@ Message: ${n.message}
361
362
  FROM root
362
363
  LEFT JOIN tasks parent ON parent.id = root.parent_task_id
363
364
  WHERE root.rn = 1
364
- `}findRecordedThreadOriginsQuery(e,n){let r=[drizzleOrm.sql`id IN (${drizzleOrm.sql.join(e.map(o=>drizzleOrm.sql`${o}`),drizzleOrm.sql`, `)})`,Oa()];return n&&r.unshift(drizzleOrm.sql`workspace_id = ${n}`),drizzleOrm.sql`
365
+ `}findRecordedThreadOriginsQuery(e,n){let r=[drizzleOrm.sql`id IN (${drizzleOrm.sql.join(e.map(o=>drizzleOrm.sql`${o}`),drizzleOrm.sql`, `)})`,La()];return n&&r.unshift(drizzleOrm.sql`workspace_id = ${n}`),drizzleOrm.sql`
365
366
  SELECT id AS thread_id, created_by_kind, created_by_id
366
367
  FROM threads INDEXED BY idx_threads_workspace_created_by_kind_updated_at
367
368
  WHERE ${drizzleOrm.sql.join(r,drizzleOrm.sql` AND `)}
368
- `}findThreadsByOriginQuery(e,n){let r=[Oa(e)];return n&&r.unshift(drizzleOrm.sql`workspace_id = ${n}`),drizzleOrm.sql`
369
+ `}findThreadsByOriginQuery(e,n){let r=[La(e)];return n&&r.unshift(drizzleOrm.sql`workspace_id = ${n}`),drizzleOrm.sql`
369
370
  SELECT *
370
371
  FROM threads INDEXED BY idx_threads_workspace_created_by_kind_updated_at
371
372
  WHERE ${drizzleOrm.sql.join(r,drizzleOrm.sql` AND `)}
@@ -375,7 +376,7 @@ Message: ${n.message}
375
376
  FROM threads INDEXED BY idx_threads_workspace_created_by_kind_updated_at
376
377
  WHERE ${drizzleOrm.sql.join(n,drizzleOrm.sql` AND `)}
377
378
  ORDER BY updated_at DESC
378
- `}findThreadOrigins(e,n){let r=new Map;if(e.length===0)return r;let o=this.resolveDbPaths();for(let s of o){if(!fs.existsSync(s))continue;let i=U(s);try{for(let u=0;u<e.length;u+=Aa){let d=e.slice(u,u+Aa),c=i.db.all(this.findRecordedThreadOriginsQuery(d,n)),l=new Set;for(let h of c)l.add(h.thread_id),r.has(h.thread_id)||r.set(h.thread_id,Sl(h));let p=d.filter(h=>!l.has(h)&&!r.has(h));if(p.length===0)continue;let g=i.db.all(this.findThreadOriginsQuery(p,n));for(let h of g){if(r.has(h.thread_id))continue;let m=Rl(h),w=gr(h.caller_agent_id)?h.caller_agent_id:null,k=h.parent_thread_id!==null&&h.parent_thread_id!==h.thread_id,C=m==="agent"?w??(k&&h.parent_agent_id||null):null;r.set(h.thread_id,{origin:m==="human"?"direct":"delegated",delegatedByAgentId:C});}}}catch(u){throw new f("DB_ERROR","Failed to fetch thread origins",u)}finally{i.close();}}return r}findThreadsByOrigin(e,n){let r=new Map,o=new Map;for(let u of this.resolveDbPaths()){if(!fs.existsSync(u))continue;let d=U(u);try{for(let c of d.db.all(this.findThreadsByOriginQuery(e,n)))r.has(c.id)||r.set(c.id,c);for(let c of d.db.all(this.findLegacyThreadsQuery(n)))o.has(c.id)||o.set(c.id,c);}catch(c){throw new f("DB_ERROR","Failed to find threads by origin",c)}finally{d.close();}}let s=[...r.values()],i=[...o.keys()].filter(u=>!r.has(u));if(i.length>0){let u=this.findThreadOrigins(i,n);for(let d of i)(u.get(d)?.origin??"direct")===e&&s.push(o.get(d));}return s.sort((u,d)=>{let c=new Date(d.updated_at).getTime()-new Date(u.updated_at).getTime();return c!==0?c:u.id.localeCompare(d.id)})}explainBatchFetchTasksPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!fs.existsSync(o))continue;let s=U(o);try{return s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.batchFetchTasksQuery(e,n)}`).map(u=>u.detail)}finally{s.close();}}return []}explainFindThreadOriginsPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!fs.existsSync(o))continue;let s=U(o);try{let i=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findRecordedThreadOriginsQuery(e,n)}`),u=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery(e,n)}`);return [...i,...u].map(d=>d.detail)}finally{s.close();}}return []}explainFindThreadsByOriginPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!fs.existsSync(o))continue;let s=U(o);try{let i=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findThreadsByOriginQuery(e,n)}`),u=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findLegacyThreadsQuery(n)}`);return [...i,...u].map(d=>d.detail)}finally{s.close();}}return []}updateThreadTitle(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=drizzleOrm.eq(T.id,e),i=r?drizzleOrm.and(s,drizzleOrm.eq(T.workspace_id,r)):s;if(!o.db.select({id:T.id}).from(T).where(i).limit(1).get())return;o.db.update(T).set({title:n,title_locked:1,updated_at:new Date().toISOString()}).where(drizzleOrm.eq(T.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread title",s)}finally{o.close();}}upsertThread(e,n){let r=this.openHandle(true);try{let o=n.workspaceId?this.validateWorkspaceId(r,n.workspaceId):null,s=new Date().toISOString(),i=r.db.select({id:T.id,message_count:T.message_count,created_by_task_id:T.created_by_task_id}).from(T).where(drizzleOrm.eq(T.id,e)).limit(1).get();if(i){let u={updated_at:s};n.title!==void 0&&(u.title=n.title),n.titleLocked!==void 0&&(u.title_locked=n.titleLocked?1:0),i.created_by_task_id===null&&n.createdByTaskId!=null&&(u.created_by_task_id=n.createdByTaskId),r.db.update(T).set(u).where(drizzleOrm.eq(T.id,e)).run();}else r.db.insert(T).values({id:e,platform:n.platform,workspace_id:o,created_by_kind:n.createdByKind??null,created_by_id:n.createdById??null,created_by_task_id:n.createdByTaskId??null,title:n.title??null,title_locked:n.titleLocked?1:0,message_count:0,created_at:s,updated_at:s}).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to upsert thread",o)}finally{r.close();}}ensureThread(e,n,r,o){let s=this.openHandle(true);try{let i=r?this.validateWorkspaceId(s,r):null,u=s.db.select({id:T.id,platform:T.platform,workspace_id:T.workspace_id,created_by_task_id:T.created_by_task_id}).from(T).where(drizzleOrm.eq(T.id,e)).limit(1).get();if(u){let c={};i&&!u.workspace_id&&(c.workspace_id=i),u.created_by_task_id===null&&o?.createdByTaskId!=null&&(c.created_by_task_id=o.createdByTaskId),Object.keys(c).length>0&&s.db.update(T).set(c).where(drizzleOrm.eq(T.id,e)).run();return}let d=new Date().toISOString();s.db.insert(T).values({id:e,platform:n,workspace_id:i,created_by_kind:o?.createdByKind??null,created_by_id:o?.createdById??null,created_by_task_id:o?.createdByTaskId??null,message_count:0,created_at:d,updated_at:d}).run();}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to ensure thread",i)}finally{s.close();}}saveUserMessage(e,n,r){if(!this.dbExists())return {firstMessage:false};let o=this.openHandle(true);try{let s=new Date().toISOString();return {firstMessage:o.db.transaction(u=>{let c=u.select({message_count:T.message_count}).from(T).where(drizzleOrm.eq(T.id,e)).limit(1).get()?.message_count===0;return u.run(drizzleOrm.sql`
379
+ `}findThreadOrigins(e,n){let r=new Map;if(e.length===0)return r;let o=this.resolveDbPaths();for(let s of o){if(!fs.existsSync(s))continue;let i=U(s);try{for(let u=0;u<e.length;u+=Da){let d=e.slice(u,u+Da),c=i.db.all(this.findRecordedThreadOriginsQuery(d,n)),l=new Set;for(let h of c)l.add(h.thread_id),r.has(h.thread_id)||r.set(h.thread_id,Nl(h));let p=d.filter(h=>!l.has(h)&&!r.has(h));if(p.length===0)continue;let g=i.db.all(this.findThreadOriginsQuery(p,n));for(let h of g){if(r.has(h.thread_id))continue;let m=Cl(h),w=_r(h.caller_agent_id)?h.caller_agent_id:null,k=h.parent_thread_id!==null&&h.parent_thread_id!==h.thread_id,C=m==="agent"?w??(k&&h.parent_agent_id||null):null;r.set(h.thread_id,{origin:m==="human"?"direct":"delegated",delegatedByAgentId:C});}}}catch(u){throw new f("DB_ERROR","Failed to fetch thread origins",u)}finally{i.close();}}return r}findThreadsByOrigin(e,n){let r=new Map,o=new Map;for(let u of this.resolveDbPaths()){if(!fs.existsSync(u))continue;let d=U(u);try{for(let c of d.db.all(this.findThreadsByOriginQuery(e,n)))r.has(c.id)||r.set(c.id,c);for(let c of d.db.all(this.findLegacyThreadsQuery(n)))o.has(c.id)||o.set(c.id,c);}catch(c){throw new f("DB_ERROR","Failed to find threads by origin",c)}finally{d.close();}}let s=[...r.values()],i=[...o.keys()].filter(u=>!r.has(u));if(i.length>0){let u=this.findThreadOrigins(i,n);for(let d of i)(u.get(d)?.origin??"direct")===e&&s.push(o.get(d));}return s.sort((u,d)=>{let c=new Date(d.updated_at).getTime()-new Date(u.updated_at).getTime();return c!==0?c:u.id.localeCompare(d.id)})}explainBatchFetchTasksPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!fs.existsSync(o))continue;let s=U(o);try{return s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.batchFetchTasksQuery(e,n)}`).map(u=>u.detail)}finally{s.close();}}return []}explainFindThreadOriginsPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!fs.existsSync(o))continue;let s=U(o);try{let i=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findRecordedThreadOriginsQuery(e,n)}`),u=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery(e,n)}`);return [...i,...u].map(d=>d.detail)}finally{s.close();}}return []}explainFindThreadsByOriginPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!fs.existsSync(o))continue;let s=U(o);try{let i=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findThreadsByOriginQuery(e,n)}`),u=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findLegacyThreadsQuery(n)}`);return [...i,...u].map(d=>d.detail)}finally{s.close();}}return []}updateThreadTitle(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=drizzleOrm.eq(T.id,e),i=r?drizzleOrm.and(s,drizzleOrm.eq(T.workspace_id,r)):s;if(!o.db.select({id:T.id}).from(T).where(i).limit(1).get())return;o.db.update(T).set({title:n,title_locked:1,updated_at:new Date().toISOString()}).where(drizzleOrm.eq(T.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread title",s)}finally{o.close();}}upsertThread(e,n){let r=this.openHandle(true);try{let o=n.workspaceId?this.validateWorkspaceId(r,n.workspaceId):null,s=new Date().toISOString(),i=r.db.select({id:T.id,message_count:T.message_count,created_by_task_id:T.created_by_task_id}).from(T).where(drizzleOrm.eq(T.id,e)).limit(1).get();if(i){let u={updated_at:s};n.title!==void 0&&(u.title=n.title),n.titleLocked!==void 0&&(u.title_locked=n.titleLocked?1:0),i.created_by_task_id===null&&n.createdByTaskId!=null&&(u.created_by_task_id=n.createdByTaskId),r.db.update(T).set(u).where(drizzleOrm.eq(T.id,e)).run();}else r.db.insert(T).values({id:e,platform:n.platform,workspace_id:o,created_by_kind:n.createdByKind??null,created_by_id:n.createdById??null,created_by_task_id:n.createdByTaskId??null,title:n.title??null,title_locked:n.titleLocked?1:0,message_count:0,created_at:s,updated_at:s}).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to upsert thread",o)}finally{r.close();}}ensureThread(e,n,r,o){let s=this.openHandle(true);try{let i=r?this.validateWorkspaceId(s,r):null,u=s.db.select({id:T.id,platform:T.platform,workspace_id:T.workspace_id,created_by_task_id:T.created_by_task_id}).from(T).where(drizzleOrm.eq(T.id,e)).limit(1).get();if(u){let c={};i&&!u.workspace_id&&(c.workspace_id=i),u.created_by_task_id===null&&o?.createdByTaskId!=null&&(c.created_by_task_id=o.createdByTaskId),Object.keys(c).length>0&&s.db.update(T).set(c).where(drizzleOrm.eq(T.id,e)).run();return}let d=new Date().toISOString();s.db.insert(T).values({id:e,platform:n,workspace_id:i,created_by_kind:o?.createdByKind??null,created_by_id:o?.createdById??null,created_by_task_id:o?.createdByTaskId??null,message_count:0,created_at:d,updated_at:d}).run();}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to ensure thread",i)}finally{s.close();}}saveUserMessage(e,n,r){if(!this.dbExists())return {firstMessage:false};let o=this.openHandle(true);try{let s=new Date().toISOString();return {firstMessage:o.db.transaction(u=>{let c=u.select({message_count:T.message_count}).from(T).where(drizzleOrm.eq(T.id,e)).limit(1).get()?.message_count===0;return u.run(drizzleOrm.sql`
379
380
  UPDATE threads
380
381
  SET first_message = COALESCE(first_message, ${n}),
381
382
  title = CASE WHEN title_locked = 0 AND title IS NULL THEN substr(${n}, 1, 60) ELSE title END,
@@ -383,11 +384,11 @@ Message: ${n.message}
383
384
  message_count = message_count + 1,
384
385
  updated_at = ${s}
385
386
  WHERE id = ${e}
386
- `),c},{behavior:"immediate"})}}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to save user message",s)}finally{o.close();}}saveAssistantMessage(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString();o.db.update(T).set({last_message:n,updated_at:s}).where(drizzleOrm.eq(T.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to save assistant message",s)}finally{o.close();}}updateThread(e,n){if(!this.dbExists())return;let r=this.openHandle(true);try{let o={updated_at:new Date().toISOString()};n.title!==void 0&&(o.title=n.title,o.title_locked=1),n.titleLocked!==void 0&&(o.title_locked=n.titleLocked?1:0),r.db.update(T).set(o).where(drizzleOrm.eq(T.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread",o)}finally{r.close();}}patchThreadTitleMetadata(e,n,r){let o=n;if(!o||typeof o!="object"||Array.isArray(o))return new Ft("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(o).some(d=>d!=="priority"&&d!=="state"))return new Ft("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch only supports priority and state");let i=o;if(i.priority===void 0&&i.state===void 0)return new Ft("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 Ft("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let u=this.openHandle(true);try{let d=r?drizzleOrm.and(drizzleOrm.eq(T.id,e),drizzleOrm.eq(T.workspace_id,r)):drizzleOrm.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=Tn(l.metadata),g=p.threadTitle,h=g&&typeof g=="object"&&!Array.isArray(g)?{...g}:{};i.priority===null?delete h.priority:i.priority!==void 0&&(h.priority=i.priority),i.state===null?delete h.state:i.state!==void 0&&(h.state=i.state),Object.keys(h).length>0?p.threadTitle=h:delete p.threadTitle;let m=Object.keys(p).length>0?JSON.stringify(p):null,w=new Date().toISOString();c.update(T).set({metadata:m,updated_at:w}).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 C=Il(k.metadata);return {threadId:e,priority:C.priority,state:C.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 o=n?drizzleOrm.and(drizzleOrm.eq(T.id,e),drizzleOrm.eq(T.workspace_id,n)):drizzleOrm.eq(T.id,e);return r.db.transaction(s=>{let i=s.select({pinned:T.pinned,metadata:T.metadata}).from(T).where(o).get();if(!i)return null;let u=i.pinned?0:1,d=Tn(i.metadata);if(u){let c=n?drizzleOrm.and(drizzleOrm.eq(T.pinned,1),drizzleOrm.eq(T.workspace_id,n)):drizzleOrm.eq(T.pinned,1),l=s.select({metadata:T.metadata}).from(T).where(c).all(),p=null;for(let g of l){let h=Tn(g.metadata);typeof h.pinOrder=="number"&&(p===null||h.pinOrder<p)&&(p=h.pinOrder);}d.pinOrder=p===null?0:p-1;}else delete d.pinOrder;return s.update(T).set({pinned:u,metadata:Object.keys(d).length>0?JSON.stringify(d):null}).where(o).run(),{pinned:!!u}},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to toggle pin",o)}finally{r.close();}}reorderPins(e,n){let r=this.openHandle(true);try{r.db.transaction(o=>{for(let s=0;s<e.length;s++){let i=n?drizzleOrm.and(drizzleOrm.eq(T.id,e[s]),drizzleOrm.eq(T.workspace_id,n)):drizzleOrm.eq(T.id,e[s]),u=o.select({metadata:T.metadata}).from(T).where(i).get();if(!u)continue;let d=Tn(u.metadata);d.pinOrder=s+1,o.update(T).set({metadata:JSON.stringify(d)}).where(i).run();}},{behavior:"immediate"});}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to reorder pins",o)}finally{r.close();}}toggleStar(e,n){let r=this.openHandle(true);try{let o=n?drizzleOrm.and(drizzleOrm.eq(T.id,e),drizzleOrm.eq(T.workspace_id,n)):drizzleOrm.eq(T.id,e),s=r.db.select({starred:T.starred}).from(T).where(o).get();if(!s)return null;let i=s.starred?0:1;return r.db.update(T).set({starred:i}).where(o).run(),{starred:!!i}}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to toggle star",o)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,o){let i=this.openHandle(true);try{let u=n?drizzleOrm.and(drizzleOrm.eq(T.id,e),drizzleOrm.eq(T.workspace_id,n)):drizzleOrm.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??{},h=o?.defaultTurns??g.defaultTurns??3,m=o?.updatedBy??"ui",w=new Date().toISOString(),k,C,L,N;switch(r){case "enable-count":{let E=o?.turns??h,v=o?.consumeCurrent?Math.max(E-1,0):E;k=v>0?"count":"off",C=v,L=!0,N="count";break}case "enable-latch":{k="latch",C=0,L=!0,N="latch";break}case "disable":{k="off",C=0,L=!1;break}default:{let E=g.state??"off",v=typeof g.remaining=="number"?g.remaining:0;if(E==="count"&&v>0){let O=v-1;O<=0?(k="off",C=0):(k="count",C=O),L=!0,N="count";}else E==="latch"?(k="latch",C=0,L=!0,N="latch"):(k="off",C=0,L=!1);break}}return p.overdrive={state:k,remaining:C,defaultTurns:h,updatedAt:w,updatedBy:m},c.update(T).set({metadata:JSON.stringify(p),updated_at:w}).where(u).run(),{applied:L,appliedMode:N,state:k,remaining:C}},{behavior:"immediate"})}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to resolve overdrive",u)}finally{i.close();}}};_();ot();yt();Et();nt();_();var Do="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Al(t){let e=crypto.randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let o=e[r];o<248&&(n+=Do[o%62]);}for(;n.length<t;)n+=Do[crypto.randomBytes(1)[0]%62];return n}function wn(t){return `${t}_${Al(8)}`}function va(t,e){let{createHash:n}=Tt("crypto"),r=n("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=Do[i%62];return `${t}_${s}`}St();_();var Ol=["urgent","high","medium","low"],bl=["investigating","in-progress","in-review","on-hold","done"],xa="custom:";var vl=new Set(Ol),xl=new Set(bl);function Lo(t){return typeof t=="string"&&vl.has(t)}function Mo(t){if(typeof t!="string")return false;if(xl.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(xa))return false;let e=t.slice(xa.length);return e.length>=1&&e.length<=20}function Ca(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 Ho(t){let e=Ca(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,o={};return Lo(r.priority)&&(o.priority=r.priority),Mo(r.state)&&(o.state=r.state),o}function Na(t,e){let n=Ca(t)??{},r={...Ho(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)}or();var Ll="regeneration_replaced";var Ml="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var Hl="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",qo=class extends f{threadId;highlightId;expectedRevision;currentRevision;constructor(e,n,r,o){super("CONFLICT",`Highlight revision conflict: expected ${r}, current ${o}`),this.name="ThreadHistoryConflictError",this.threadId=e,this.highlightId=n,this.expectedRevision=r,this.currentRevision=o;}},On=class extends qo{},Fo=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;}},$l=new Set(Ns),Ul=new Set(Cs),ql=new Set(Ps),Fl=new Set(Ds),Bl=50,Da=100,La=280,Ma=40,jl=new Set(Ls),_r=["queued","running"];function Uo(t){return jl.has(t)}function j(t){throw new f("VALIDATION",t)}function Ne(t){throw new f("NOT_FOUND",t)}function P(t,e){(typeof t!="string"||t.trim().length===0)&&j(`${e} is required`);}function En(t={}){let e=t.actor??t,n=e.actorType??"system";return $l.has(n)||j(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&j("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function Wl(t){P(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&P(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&j("title must not be empty"),t.title.length>120&&j("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!Lo(t.priority)&&j(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!Mo(t.state)&&j(`invalid state: ${String(t.state)}`);}function Gl(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&j("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)&&j(`${n} must be a non-negative integer`);let e=t.limit??Bl;return (!Number.isInteger(e)||e<1||e>Da)&&j(`limit must be between 1 and ${Da}`),e}function Bo(t){typeof t!="string"&&j("text is required");let e=t.trim();return e.length===0&&j("text must not be empty"),e.length>La&&j(`text must be at most ${La} characters`),e}function Ke(t,e){return P(t??"",e),t}function jo(t){Fl.has(t)||j(`invalid highlight kind: ${String(t)}`);}function zl(t){ql.has(t)||j(`invalid highlight source: ${String(t)}`);}function Kl(t){P(t.threadId,"threadId"),P(t.workspaceId,"workspaceId");let e=t.source??"manual";zl(e),jo(t.kind);let n=Bo(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,o=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let l=t.taskId??(r&&o&&r===o?r:void 0),p=Ke(l,"taskId");return (r!==p||o!==p)&&j("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 s=Ke(r,"coversFromTaskId"),i=Ke(o,"coversToTaskId"),u=t.sourceTaskId??s,d=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return Ke(u??void 0,"sourceTaskId"),Ke(d??void 0,"detectorVersion"),Ke(c??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:s,coversToTaskId:i,agentId:t.agentId??null,sourceTaskId:u,detectorVersion:d,contentFingerprint:c}}function Vl(t,e){(!t||typeof t!="object")&&j(`candidates[${e}] is required`),jo(t.kind);let n=Bo(t.text),r=Ke(t.anchorTaskId,`candidates[${e}].anchorTaskId`),o=Ke(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),s=Ke(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||va("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s}));return P(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s,contentFingerprint:i}}function Jl(t){Array.isArray(t)||j("candidates must be an array"),t.length>Ma&&j(`candidates must contain at most ${Ma} items`);let e=new Map;for(let[n,r]of t.entries()){let o=Vl(r,n);e.set(o.contentFingerprint,o);}return [...e.values()]}function An(t){let e=Ho(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 Xl(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&j("event payload must be a JSON object"),e}catch(e){throw new f("VALIDATION","event payload must be JSON serializable",e)}}function Rn(t,e){return t.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${B.seq}), 0)`}).from(B).where(drizzleOrm.eq(B.thread_id,e)).get()?.maxSeq??0}function Sn(t,e){return !!t.select({id:B.id}).from(B).where(drizzleOrm.eq(B.thread_id,e)).limit(1).get()}function mt(t,e){Ul.has(e.type)||j(`invalid thread event type: ${String(e.type)}`);let n=wn("the");t.insert(B).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:Xl(e.payload),created_at:e.createdAt}).run();let r=t.select().from(B).where(drizzleOrm.eq(B.id,n)).get();if(!r)throw new f("DB_ERROR","Thread event insert did not return a row");return r}function In(t,e,n,r,o){let s=An(e);mt(t,{threadId:e.id,seq:o,type:"thread.snapshot.imported",actorType:n.actorType,actorId:n.actorId,createdAt:r,payload:{title:s.title,priority:s.priority,state:s.state}});}function kr(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 mr(t,e,n,r,o,s,i){let u=o==="thread.highlight.created"?kr(e):{before:i?kr({...e,...i,id:e.id}):void 0,after:kr(e)};return mt(t,{threadId:e.thread_id,seq:s,type:o,actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source==="manual"?e.covers_from_task_id:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:u})}function Yl(t,e,n,r,o,s){return mt(t,{threadId:e.thread_id,seq:o,type:"thread.highlight.deleted",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:{before:kr(e),...s??{}}})}var Tr=class extends we{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=pe.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!fs.existsSync(n))throw new f("NOT_FOUND","Database not found");if(e){let o=pe.dirname(n);fs.existsSync(o)||fs.mkdirSync(o,{recursive:true});}let r=U(n);if(e)try{Pe(r.db,n);}catch(o){throw r.close(),o}return r}findThread(e,n,r){let o=drizzleOrm.eq(T.id,n),s=r===void 0?o:r===null?drizzleOrm.and(o,drizzleOrm.isNull(T.workspace_id)):drizzleOrm.and(o,drizzleOrm.eq(T.workspace_id,r));return e.select().from(T).where(s).limit(1).get()}findRegenerationRun(e,n,r){let o=e.select().from($).where(drizzleOrm.eq($.id,n)).limit(1).get();if(o&&!(r!==void 0&&!this.findThread(e,o.thread_id,r)))return o}resolveWorkspaceId(e){if(P(e,"threadId"),!fs.existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:T.workspace_id}).from(T).where(drizzleOrm.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(P(e,"threadId"),!fs.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let o=this.findThread(r.db,e,n);return o?An(o):null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read thread snapshot",o)}finally{r.close();}}updateSnapshot(e){Wl(e);let n=En(e),r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let i=this.findThread(s,e.threadId,e.workspaceId);i||Ne(`Thread ${e.threadId} not found`);let u=An(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,h=c||p||g;if(!h&&!l)return u;let m=i.metadata;(p||g)&&(m=Na(i.metadata,{priority:e.priority,state:e.state}));let w={};if(h&&(w.metadata=m,w.updated_at=r),c&&(w.title=e.title),d&&(w.title_locked=1),s.update(T).set(w).where(e.workspaceId===void 0?drizzleOrm.eq(T.id,e.threadId):e.workspaceId===null?drizzleOrm.and(drizzleOrm.eq(T.id,e.threadId),drizzleOrm.isNull(T.workspace_id)):drizzleOrm.and(drizzleOrm.eq(T.id,e.threadId),drizzleOrm.eq(T.workspace_id,e.workspaceId))).run(),!h){let L={...i,title_locked:1};return An(L)}let k=Rn(s,i.id)+1;Sn(s,i.id)||(In(s,i,n,r,k),k+=1),c&&(mt(s,{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&&(mt(s,{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&&mt(s,{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 C={...i,title:c?e.title:i.title,metadata:m,title_locked:d?1:i.title_locked,updated_at:r};return An(C)},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread snapshot",s)}finally{o.close();}}mutateSnapshot(e){return this.updateSnapshot(e)}updateThreadSnapshot(e){return this.updateSnapshot(e)}getLatestSeq(e,n){if(P(e,"threadId"),!fs.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${B.seq}), 0)`}).from(B).where(drizzleOrm.eq(B.thread_id,e)).get()?.maxSeq??0:null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read latest thread event sequence",o)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if(P(e,"threadId"),P(n,"workspaceId"),!fs.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(drizzleOrm.and(drizzleOrm.eq(a.thread_id,e),drizzleOrm.eq(a.workspace_id,n),drizzleOrm.inArray(a.status,[...Yi,"completed","done","error"]),drizzleOrm.or(drizzleOrm.isNull(a.parent_task_id),drizzleOrm.eq(a.parent_task_id,"")),drizzleOrm.sql`${a.result} IS NOT NULL AND length(trim(${a.result})) > 0`)).orderBy(drizzleOrm.asc(a.started_at),drizzleOrm.asc(a.id)).all().map(i=>({taskId:i.taskId,prompt:i.prompt,result:i.result,status:i.status,startedAt:i.startedAt,completedAt:i.completedAt})):null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read completed thread highlight turns",o)}finally{r.close();}}createHighlightRegenerationRun(e){P(e.threadId,"threadId"),P(e.workspaceId,"workspaceId"),P(e.requestId,"requestId"),P(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&P(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>{let s=this.findThread(o,e.threadId,e.workspaceId);s||Ne(`Thread ${e.threadId} not found`);let i=o.select().from($).where(drizzleOrm.and(drizzleOrm.eq($.thread_id,s.id),drizzleOrm.eq($.request_id,e.requestId))).orderBy(drizzleOrm.desc($.requested_at),drizzleOrm.desc($.id)).limit(1).get();if(i)return {run:i,created:!1};let u=o.select().from($).where(drizzleOrm.and(drizzleOrm.eq($.thread_id,s.id),drizzleOrm.inArray($.status,_r))).orderBy(drizzleOrm.asc($.requested_at),drizzleOrm.asc($.id)).limit(1).get();if(u)throw new Fo(u);let d=e.runId??wn("thr");o.insert($).values({id:d,thread_id:s.id,request_id:e.requestId,status:"queued",detector_version:e.detectorVersion,requested_at:n,started_at:null,completed_at:null,error_code:null,previous_auto_count:null,new_auto_count:null}).run();let c=o.select().from($).where(drizzleOrm.eq($.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(o){throw o instanceof f?o:new f("DB_ERROR","Failed to create highlight regeneration run",o)}finally{r.close();}}beginHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}queueHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}getHighlightRegenerationRun(e,n){if(P(e,"runId"),n!==void 0&&P(n,"workspaceId"),!fs.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read highlight regeneration run",o)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if(P(e,"threadId"),P(n,"workspaceId"),P(r,"requestId"),!fs.existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{return this.findThread(o.db,e,n)?o.db.select().from($).where(drizzleOrm.and(drizzleOrm.eq($.thread_id,e),drizzleOrm.eq($.request_id,r))).orderBy(drizzleOrm.desc($.requested_at),drizzleOrm.desc($.id)).limit(1).get()??null:null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read highlight regeneration request",s)}finally{o.close();}}findHighlightRegenerationRun(e,n,r){return this.getHighlightRegenerationRunByRequest(e,n,r)}startHighlightRegenerationRun(e,n){P(e,"runId"),n!==void 0&&P(n,"workspaceId");let r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let i=this.findRegenerationRun(s,e,n);if(i||Ne(`Highlight regeneration run ${e} not found`),Uo(i.status)||j(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;s.update($).set({status:"running",started_at:r}).where(drizzleOrm.and(drizzleOrm.eq($.id,i.id),drizzleOrm.eq($.status,"queued"))).run();let u=s.select().from($).where(drizzleOrm.eq($.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(s){throw s instanceof f?s:new f("DB_ERROR","Failed to start highlight regeneration run",s)}finally{o.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){P(e.runId,"runId"),P(e.errorCode,"errorCode"),e.workspaceId!==void 0&&P(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>{let s=this.findRegenerationRun(o,e.runId,e.workspaceId);if(s||Ne(`Highlight regeneration run ${e.runId} not found`),Uo(s.status)||j(`invalid highlight regeneration status: ${s.status}`),s.status==="completed"||s.status==="failed")return s;o.update($).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(drizzleOrm.and(drizzleOrm.eq($.id,s.id),drizzleOrm.inArray($.status,_r))).run();let i=o.select().from($).where(drizzleOrm.eq($.id,s.id)).get();if(!i)throw new f("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to fail highlight regeneration run",o)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=Ml){P(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>o.update($).set({status:"failed",completed_at:n,error_code:e}).where(drizzleOrm.inArray($.status,_r)).run().changes,{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to recover interrupted highlight runs",o)}finally{r.close();}}completeHighlightRegenerationRun(e){P(e.runId,"runId"),P(e.threadId,"threadId"),P(e.workspaceId,"workspaceId"),P(e.detectorVersion,"detectorVersion");let n=Jl(e.candidates),r=En(e),o=this.openHandle(true),s=false;try{return o.db.transaction(i=>{let u=this.findRegenerationRun(i,e.runId,e.workspaceId);if((!u||u.thread_id!==e.threadId)&&Ne(`Highlight regeneration run ${e.runId} not found`),Uo(u.status)||j(`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};s=!0;let d=this.findThread(i,e.threadId,e.workspaceId);d||Ne(`Thread ${e.threadId} not found`),u.detector_version!==e.detectorVersion&&j("detectorVersion does not match the regeneration run");let c=i.select().from(D).where(drizzleOrm.eq(D.thread_id,d.id)).orderBy(drizzleOrm.asc(D.created_at),drizzleOrm.asc(D.id)).all(),l=new Set(n.map(O=>O.contentFingerprint)),p=c.filter(O=>O.source==="auto"&&O.status==="active"&&O.revision===0&&!l.has(O.content_fingerprint??"")),g=c.filter(O=>O.source==="auto"&&O.status==="active").length,h=new Set(c.filter(O=>!p.includes(O)&&O.content_fingerprint).map(O=>O.content_fingerprint)),m=n.filter(O=>!h.has(O.contentFingerprint)),w=new Date().toISOString(),k=Rn(i,d.id)+1;Sn(i,d.id)||(In(i,d,r,w,k),k+=1);for(let O of p)i.delete(D).where(drizzleOrm.eq(D.id,O.id)).run(),Yl(i,O,r,w,k,{runId:e.runId,reason:Ll}),k+=1;let C=0,L=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let O of m){let X=wn("thl");i.insert(D).values({id:X,thread_id:d.id,source:"auto",kind:O.kind,status:"active",text:O.text,covers_from_task_id:O.coversFromTaskId,covers_to_task_id:O.coversToTaskId,revision:0,created_at:w,updated_at:w,agent_id:L,source_task_id:O.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:O.contentFingerprint,dismissed_at:null}).run();let de=i.select().from(D).where(drizzleOrm.eq(D.id,X)).get();if(!de)throw new f("DB_ERROR","Regenerated highlight insert did not return a row");mr(i,de,r,w,"thread.highlight.created",k),k+=1,C+=1;}let E=i.select().from(D).where(drizzleOrm.eq(D.thread_id,d.id)).all().filter(O=>O.source==="auto"&&O.status==="active").length;mt(i,{threadId:d.id,seq:k,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:w,payload:{runId:u.id,detectorVersion:e.detectorVersion,previousAutoCount:g,newAutoCount:E,deletedCount:p.length,createdCount:C}}),i.update($).set({status:"completed",started_at:u.started_at??w,completed_at:w,error_code:null,previous_auto_count:g,new_auto_count:E}).where(drizzleOrm.and(drizzleOrm.eq($.id,u.id),drizzleOrm.inArray($.status,_r))).run();let v=i.select().from($).where(drizzleOrm.eq($.id,u.id)).get();if(!v)throw new f("DB_ERROR","Highlight regeneration completion did not return a row");return {run:v,deletedCount:p.length,createdCount:C,previousAutoCount:g,newAutoCount:E}},{behavior:"immediate"})}catch(i){if(s)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:Hl});}catch{}throw i instanceof f?i:new f("DB_ERROR","Failed to complete highlight regeneration",i)}finally{o.close();}}completeHighlightRegeneration(e){return this.completeHighlightRegenerationRun(e)}replaceAutoHighlightsAtomically(e){return this.completeHighlightRegenerationRun(e)}listTimeline(e,n,r={}){let o=typeof e=="string"?{...r,threadId:e,workspaceId:n}:e;P(o.threadId,"threadId"),P(o.workspaceId,"workspaceId");let s=Gl(o);if(!fs.existsSync(this.resolveDbPath()))return null;let i=this.openHandle(false);try{if(!this.findThread(i.db,o.threadId,o.workspaceId))return null;let u=i.db.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${B.seq}), 0)`}).from(B).where(drizzleOrm.eq(B.thread_id,o.threadId)).get()?.maxSeq??0,d;o.beforeSeq!==void 0?d=i.db.select().from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,o.threadId),drizzleOrm.lt(B.seq,o.beforeSeq))).orderBy(drizzleOrm.desc(B.seq)).limit(s+1).all().reverse():o.afterSeq!==void 0?d=i.db.select().from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,o.threadId),drizzleOrm.sql`${B.seq} > ${o.afterSeq}`)).orderBy(drizzleOrm.asc(B.seq)).limit(s+1).all():d=i.db.select().from(B).where(drizzleOrm.eq(B.thread_id,o.threadId)).orderBy(drizzleOrm.desc(B.seq)).limit(s+1).all().reverse();let c=d.length>s,l=o.afterSeq!==void 0?d.slice(0,s):c?d.slice(1):d,p=!1,g=l[0];return g&&(p=!!i.db.select({id:B.id}).from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,o.threadId),drizzleOrm.lt(B.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=Kl(e),r=En(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);if(u||Ne(`Thread ${e.threadId} not found`),n.source==="auto"){let g=i.select().from(D).where(drizzleOrm.and(drizzleOrm.eq(D.thread_id,e.threadId),drizzleOrm.eq(D.source_task_id,n.sourceTaskId),drizzleOrm.eq(D.detector_version,n.detectorVersion),drizzleOrm.eq(D.content_fingerprint,n.contentFingerprint))).orderBy(drizzleOrm.asc(D.created_at),drizzleOrm.asc(D.id)).limit(1).get();if(g)return g}let d=e.id??wn("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:o,updated_at:o,agent_id:n.agentId,source_task_id:n.sourceTaskId,detector_version:n.detectorVersion,content_fingerprint:n.contentFingerprint,dismissed_at:null};i.insert(D).values(c).run();let l=i.select().from(D).where(drizzleOrm.eq(D.id,d)).get();if(!l)throw new f("DB_ERROR","Highlight insert did not return a row");let p=Rn(i,u.id)+1;return Sn(i,u.id)||(In(i,u,r,o,p),p+=1),mr(i,l,r,o,"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{s.close();}}updateHighlight(e){P(e.threadId,"threadId"),P(e.workspaceId,"workspaceId"),P(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&j("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&j("highlight update requires at least one field"),e.kind!==void 0&&jo(e.kind);let n=e.text===void 0?void 0:Bo(e.text),r=En(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);u||Ne(`Thread ${e.threadId} not found`);let d=i.select().from(D).where(drizzleOrm.and(drizzleOrm.eq(D.id,e.highlightId),drizzleOrm.eq(D.thread_id,u.id))).limit(1).get();if(d||Ne(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new On(u.id,d.id,e.expectedRevision,d.revision);if(d.status!=="active")throw new On(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)&&j("highlight projection is incomplete");let h=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"&&h?"manual":d.source;if(!(h||m!==d.source))return d;let k=d.revision+1;i.update(D).set({source:m,kind:c,text:l,covers_from_task_id:p,covers_to_task_id:g,revision:k,updated_at:o}).where(drizzleOrm.and(drizzleOrm.eq(D.id,d.id),drizzleOrm.eq(D.revision,d.revision))).run();let C=i.select().from(D).where(drizzleOrm.eq(D.id,d.id)).get();if(!C)throw new f("DB_ERROR","Highlight update did not return a row");let L=Rn(i,u.id)+1;return Sn(i,u.id)||(In(i,u,r,o,L),L+=1),mr(i,C,r,o,"thread.highlight.updated",L,d),C},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to update thread highlight",i)}finally{s.close();}}dismissHighlight(e){P(e.threadId,"threadId"),P(e.workspaceId,"workspaceId"),P(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&j("expectedRevision must be a non-negative integer");let n=En(e),r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let i=this.findThread(s,e.threadId,e.workspaceId);i||Ne(`Thread ${e.threadId} not found`);let u=s.select().from(D).where(drizzleOrm.and(drizzleOrm.eq(D.id,e.highlightId),drizzleOrm.eq(D.thread_id,i.id))).limit(1).get();if(u||Ne(`Highlight ${e.highlightId} not found`),u.revision!==e.expectedRevision)throw new On(i.id,u.id,e.expectedRevision,u.revision);if(u.status==="dismissed")return u;let d=u.revision+1;s.update(D).set({status:"dismissed",text:null,revision:d,updated_at:r,dismissed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(D.id,u.id),drizzleOrm.eq(D.revision,u.revision))).run();let c=s.select().from(D).where(drizzleOrm.eq(D.id,u.id)).get();if(!c)throw new f("DB_ERROR","Highlight dismissal did not return a row");let l=Rn(s,i.id)+1;return Sn(s,i.id)||(In(s,i,n,r,l),l+=1),mr(s,c,n,r,"thread.highlight.deleted",l,u),c},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to dismiss thread highlight",s)}finally{o.close();}}listActiveHighlights(e,n,r={}){if(P(e,"threadId"),P(n,"workspaceId"),r.taskId!==void 0&&P(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&P(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&P(r.coversToTaskId,"coversToTaskId"),!fs.existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{if(!this.findThread(o.db,e,n))return null;let i=o.db.select().from(D).where(drizzleOrm.and(drizzleOrm.eq(D.thread_id,e),drizzleOrm.eq(D.status,"active"))).orderBy(drizzleOrm.asc(D.created_at),drizzleOrm.asc(D.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return i;let u=o.db.all(drizzleOrm.sql`
387
+ `),c},{behavior:"immediate"})}}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to save user message",s)}finally{o.close();}}saveAssistantMessage(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString();o.db.update(T).set({last_message:n,updated_at:s}).where(drizzleOrm.eq(T.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to save assistant message",s)}finally{o.close();}}updateThread(e,n){if(!this.dbExists())return;let r=this.openHandle(true);try{let o={updated_at:new Date().toISOString()};n.title!==void 0&&(o.title=n.title,o.title_locked=1),n.titleLocked!==void 0&&(o.title_locked=n.titleLocked?1:0),r.db.update(T).set(o).where(drizzleOrm.eq(T.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread",o)}finally{r.close();}}patchThreadTitleMetadata(e,n,r){let o=n;if(!o||typeof o!="object"||Array.isArray(o))return new Bt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(o).some(d=>d!=="priority"&&d!=="state"))return new Bt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch only supports priority and state");let i=o;if(i.priority===void 0&&i.state===void 0)return new Bt("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 Bt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let u=this.openHandle(true);try{let d=r?drizzleOrm.and(drizzleOrm.eq(T.id,e),drizzleOrm.eq(T.workspace_id,r)):drizzleOrm.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=wn(l.metadata),g=p.threadTitle,h=g&&typeof g=="object"&&!Array.isArray(g)?{...g}:{};i.priority===null?delete h.priority:i.priority!==void 0&&(h.priority=i.priority),i.state===null?delete h.state:i.state!==void 0&&(h.state=i.state),Object.keys(h).length>0?p.threadTitle=h:delete p.threadTitle;let m=Object.keys(p).length>0?JSON.stringify(p):null,w=new Date().toISOString();c.update(T).set({metadata:m,updated_at:w}).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 C=Pl(k.metadata);return {threadId:e,priority:C.priority,state:C.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 o=n?drizzleOrm.and(drizzleOrm.eq(T.id,e),drizzleOrm.eq(T.workspace_id,n)):drizzleOrm.eq(T.id,e);return r.db.transaction(s=>{let i=s.select({pinned:T.pinned,metadata:T.metadata}).from(T).where(o).get();if(!i)return null;let u=i.pinned?0:1,d=wn(i.metadata);if(u){let c=n?drizzleOrm.and(drizzleOrm.eq(T.pinned,1),drizzleOrm.eq(T.workspace_id,n)):drizzleOrm.eq(T.pinned,1),l=s.select({metadata:T.metadata}).from(T).where(c).all(),p=null;for(let g of l){let h=wn(g.metadata);typeof h.pinOrder=="number"&&(p===null||h.pinOrder<p)&&(p=h.pinOrder);}d.pinOrder=p===null?0:p-1;}else delete d.pinOrder;return s.update(T).set({pinned:u,metadata:Object.keys(d).length>0?JSON.stringify(d):null}).where(o).run(),{pinned:!!u}},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to toggle pin",o)}finally{r.close();}}reorderPins(e,n){let r=this.openHandle(true);try{r.db.transaction(o=>{for(let s=0;s<e.length;s++){let i=n?drizzleOrm.and(drizzleOrm.eq(T.id,e[s]),drizzleOrm.eq(T.workspace_id,n)):drizzleOrm.eq(T.id,e[s]),u=o.select({metadata:T.metadata}).from(T).where(i).get();if(!u)continue;let d=wn(u.metadata);d.pinOrder=s+1,o.update(T).set({metadata:JSON.stringify(d)}).where(i).run();}},{behavior:"immediate"});}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to reorder pins",o)}finally{r.close();}}toggleStar(e,n){let r=this.openHandle(true);try{let o=n?drizzleOrm.and(drizzleOrm.eq(T.id,e),drizzleOrm.eq(T.workspace_id,n)):drizzleOrm.eq(T.id,e),s=r.db.select({starred:T.starred}).from(T).where(o).get();if(!s)return null;let i=s.starred?0:1;return r.db.update(T).set({starred:i}).where(o).run(),{starred:!!i}}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to toggle star",o)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,o){let i=this.openHandle(true);try{let u=n?drizzleOrm.and(drizzleOrm.eq(T.id,e),drizzleOrm.eq(T.workspace_id,n)):drizzleOrm.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??{},h=o?.defaultTurns??g.defaultTurns??3,m=o?.updatedBy??"ui",w=new Date().toISOString(),k,C,L,N;switch(r){case "enable-count":{let E=o?.turns??h,v=o?.consumeCurrent?Math.max(E-1,0):E;k=v>0?"count":"off",C=v,L=!0,N="count";break}case "enable-latch":{k="latch",C=0,L=!0,N="latch";break}case "disable":{k="off",C=0,L=!1;break}default:{let E=g.state??"off",v=typeof g.remaining=="number"?g.remaining:0;if(E==="count"&&v>0){let O=v-1;O<=0?(k="off",C=0):(k="count",C=O),L=!0,N="count";}else E==="latch"?(k="latch",C=0,L=!0,N="latch"):(k="off",C=0,L=!1);break}}return p.overdrive={state:k,remaining:C,defaultTurns:h,updatedAt:w,updatedBy:m},c.update(T).set({metadata:JSON.stringify(p),updated_at:w}).where(u).run(),{applied:L,appliedMode:N,state:k,remaining:C}},{behavior:"immediate"})}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to resolve overdrive",u)}finally{i.close();}}};_();st();Et();Rt();rt();_();var $o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Dl(t){let e=crypto.randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let o=e[r];o<248&&(n+=$o[o%62]);}for(;n.length<t;)n+=$o[crypto.randomBytes(1)[0]%62];return n}function yn(t){return `${t}_${Dl(8)}`}function Ha(t,e){let{createHash:n}=wt("crypto"),r=n("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=$o[i%62];return `${t}_${s}`}It();_();var Ll=["urgent","high","medium","low"],Ml=["investigating","in-progress","in-review","on-hold","done"],$a="custom:";var Hl=new Set(Ll),$l=new Set(Ml);function Uo(t){return typeof t=="string"&&Hl.has(t)}function Fo(t){if(typeof t!="string")return false;if($l.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith($a))return false;let e=t.slice($a.length);return e.length>=1&&e.length<=20}function Ua(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 qo(t){let e=Ua(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,o={};return Uo(r.priority)&&(o.priority=r.priority),Fo(r.state)&&(o.state=r.state),o}function Fa(t,e){let n=Ua(t)??{},r={...qo(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)}ir();var jl="regeneration_replaced";var Wl="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var Gl="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",Wo=class extends f{threadId;highlightId;expectedRevision;currentRevision;constructor(e,n,r,o){super("CONFLICT",`Highlight revision conflict: expected ${r}, current ${o}`),this.name="ThreadHistoryConflictError",this.threadId=e,this.highlightId=n,this.expectedRevision=r,this.currentRevision=o;}},bn=class extends Wo{},Go=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;}},zl=new Set(Ms),Kl=new Set(Ls),Vl=new Set(Hs),Jl=new Set($s),Xl=50,Ba=100,ja=280,Wa=40,Yl=new Set(Us),kr=["queued","running"];function jo(t){return Yl.has(t)}function j(t){throw new f("VALIDATION",t)}function Pe(t){throw new f("NOT_FOUND",t)}function P(t,e){(typeof t!="string"||t.trim().length===0)&&j(`${e} is required`);}function Rn(t={}){let e=t.actor??t,n=e.actorType??"system";return zl.has(n)||j(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&j("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function Ql(t){P(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&P(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&j("title must not be empty"),t.title.length>120&&j("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!Uo(t.priority)&&j(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!Fo(t.state)&&j(`invalid state: ${String(t.state)}`);}function Zl(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&j("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)&&j(`${n} must be a non-negative integer`);let e=t.limit??Xl;return (!Number.isInteger(e)||e<1||e>Ba)&&j(`limit must be between 1 and ${Ba}`),e}function zo(t){typeof t!="string"&&j("text is required");let e=t.trim();return e.length===0&&j("text must not be empty"),e.length>ja&&j(`text must be at most ${ja} characters`),e}function Ke(t,e){return P(t??"",e),t}function Ko(t){Jl.has(t)||j(`invalid highlight kind: ${String(t)}`);}function ep(t){Vl.has(t)||j(`invalid highlight source: ${String(t)}`);}function tp(t){P(t.threadId,"threadId"),P(t.workspaceId,"workspaceId");let e=t.source??"manual";ep(e),Ko(t.kind);let n=zo(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,o=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let l=t.taskId??(r&&o&&r===o?r:void 0),p=Ke(l,"taskId");return (r!==p||o!==p)&&j("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 s=Ke(r,"coversFromTaskId"),i=Ke(o,"coversToTaskId"),u=t.sourceTaskId??s,d=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return Ke(u??void 0,"sourceTaskId"),Ke(d??void 0,"detectorVersion"),Ke(c??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:s,coversToTaskId:i,agentId:t.agentId??null,sourceTaskId:u,detectorVersion:d,contentFingerprint:c}}function np(t,e){(!t||typeof t!="object")&&j(`candidates[${e}] is required`),Ko(t.kind);let n=zo(t.text),r=Ke(t.anchorTaskId,`candidates[${e}].anchorTaskId`),o=Ke(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),s=Ke(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||Ha("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s}));return P(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s,contentFingerprint:i}}function rp(t){Array.isArray(t)||j("candidates must be an array"),t.length>Wa&&j(`candidates must contain at most ${Wa} items`);let e=new Map;for(let[n,r]of t.entries()){let o=np(r,n);e.set(o.contentFingerprint,o);}return [...e.values()]}function On(t){let e=qo(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 op(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&j("event payload must be a JSON object"),e}catch(e){throw new f("VALIDATION","event payload must be JSON serializable",e)}}function Sn(t,e){return t.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${B.seq}), 0)`}).from(B).where(drizzleOrm.eq(B.thread_id,e)).get()?.maxSeq??0}function In(t,e){return !!t.select({id:B.id}).from(B).where(drizzleOrm.eq(B.thread_id,e)).limit(1).get()}function kt(t,e){Kl.has(e.type)||j(`invalid thread event type: ${String(e.type)}`);let n=yn("the");t.insert(B).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:op(e.payload),created_at:e.createdAt}).run();let r=t.select().from(B).where(drizzleOrm.eq(B.id,n)).get();if(!r)throw new f("DB_ERROR","Thread event insert did not return a row");return r}function An(t,e,n,r,o){let s=On(e);kt(t,{threadId:e.id,seq:o,type:"thread.snapshot.imported",actorType:n.actorType,actorId:n.actorId,createdAt:r,payload:{title:s.title,priority:s.priority,state:s.state}});}function wr(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 Tr(t,e,n,r,o,s,i){let u=o==="thread.highlight.created"?wr(e):{before:i?wr({...e,...i,id:e.id}):void 0,after:wr(e)};return kt(t,{threadId:e.thread_id,seq:s,type:o,actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source==="manual"?e.covers_from_task_id:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:u})}function sp(t,e,n,r,o,s){return kt(t,{threadId:e.thread_id,seq:o,type:"thread.highlight.deleted",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:{before:wr(e),...s??{}}})}var yr=class extends we{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=pe.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!fs.existsSync(n))throw new f("NOT_FOUND","Database not found");if(e){let o=pe.dirname(n);fs.existsSync(o)||fs.mkdirSync(o,{recursive:true});}let r=U(n);if(e)try{De(r.db,n);}catch(o){throw r.close(),o}return r}findThread(e,n,r){let o=drizzleOrm.eq(T.id,n),s=r===void 0?o:r===null?drizzleOrm.and(o,drizzleOrm.isNull(T.workspace_id)):drizzleOrm.and(o,drizzleOrm.eq(T.workspace_id,r));return e.select().from(T).where(s).limit(1).get()}findRegenerationRun(e,n,r){let o=e.select().from($).where(drizzleOrm.eq($.id,n)).limit(1).get();if(o&&!(r!==void 0&&!this.findThread(e,o.thread_id,r)))return o}resolveWorkspaceId(e){if(P(e,"threadId"),!fs.existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:T.workspace_id}).from(T).where(drizzleOrm.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(P(e,"threadId"),!fs.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let o=this.findThread(r.db,e,n);return o?On(o):null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read thread snapshot",o)}finally{r.close();}}updateSnapshot(e){Ql(e);let n=Rn(e),r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let i=this.findThread(s,e.threadId,e.workspaceId);i||Pe(`Thread ${e.threadId} not found`);let u=On(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,h=c||p||g;if(!h&&!l)return u;let m=i.metadata;(p||g)&&(m=Fa(i.metadata,{priority:e.priority,state:e.state}));let w={};if(h&&(w.metadata=m,w.updated_at=r),c&&(w.title=e.title),d&&(w.title_locked=1),s.update(T).set(w).where(e.workspaceId===void 0?drizzleOrm.eq(T.id,e.threadId):e.workspaceId===null?drizzleOrm.and(drizzleOrm.eq(T.id,e.threadId),drizzleOrm.isNull(T.workspace_id)):drizzleOrm.and(drizzleOrm.eq(T.id,e.threadId),drizzleOrm.eq(T.workspace_id,e.workspaceId))).run(),!h){let L={...i,title_locked:1};return On(L)}let k=Sn(s,i.id)+1;In(s,i.id)||(An(s,i,n,r,k),k+=1),c&&(kt(s,{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&&(kt(s,{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&&kt(s,{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 C={...i,title:c?e.title:i.title,metadata:m,title_locked:d?1:i.title_locked,updated_at:r};return On(C)},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread snapshot",s)}finally{o.close();}}mutateSnapshot(e){return this.updateSnapshot(e)}updateThreadSnapshot(e){return this.updateSnapshot(e)}getLatestSeq(e,n){if(P(e,"threadId"),!fs.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${B.seq}), 0)`}).from(B).where(drizzleOrm.eq(B.thread_id,e)).get()?.maxSeq??0:null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read latest thread event sequence",o)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if(P(e,"threadId"),P(n,"workspaceId"),!fs.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(drizzleOrm.and(drizzleOrm.eq(a.thread_id,e),drizzleOrm.eq(a.workspace_id,n),drizzleOrm.inArray(a.status,[...sa,"completed","done","error"]),drizzleOrm.or(drizzleOrm.isNull(a.parent_task_id),drizzleOrm.eq(a.parent_task_id,"")),drizzleOrm.sql`${a.result} IS NOT NULL AND length(trim(${a.result})) > 0`)).orderBy(drizzleOrm.asc(a.started_at),drizzleOrm.asc(a.id)).all().map(i=>({taskId:i.taskId,prompt:i.prompt,result:i.result,status:i.status,startedAt:i.startedAt,completedAt:i.completedAt})):null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read completed thread highlight turns",o)}finally{r.close();}}createHighlightRegenerationRun(e){P(e.threadId,"threadId"),P(e.workspaceId,"workspaceId"),P(e.requestId,"requestId"),P(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&P(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>{let s=this.findThread(o,e.threadId,e.workspaceId);s||Pe(`Thread ${e.threadId} not found`);let i=o.select().from($).where(drizzleOrm.and(drizzleOrm.eq($.thread_id,s.id),drizzleOrm.eq($.request_id,e.requestId))).orderBy(drizzleOrm.desc($.requested_at),drizzleOrm.desc($.id)).limit(1).get();if(i)return {run:i,created:!1};let u=o.select().from($).where(drizzleOrm.and(drizzleOrm.eq($.thread_id,s.id),drizzleOrm.inArray($.status,kr))).orderBy(drizzleOrm.asc($.requested_at),drizzleOrm.asc($.id)).limit(1).get();if(u)throw new Go(u);let d=e.runId??yn("thr");o.insert($).values({id:d,thread_id:s.id,request_id:e.requestId,status:"queued",detector_version:e.detectorVersion,requested_at:n,started_at:null,completed_at:null,error_code:null,previous_auto_count:null,new_auto_count:null}).run();let c=o.select().from($).where(drizzleOrm.eq($.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(o){throw o instanceof f?o:new f("DB_ERROR","Failed to create highlight regeneration run",o)}finally{r.close();}}beginHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}queueHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}getHighlightRegenerationRun(e,n){if(P(e,"runId"),n!==void 0&&P(n,"workspaceId"),!fs.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read highlight regeneration run",o)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if(P(e,"threadId"),P(n,"workspaceId"),P(r,"requestId"),!fs.existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{return this.findThread(o.db,e,n)?o.db.select().from($).where(drizzleOrm.and(drizzleOrm.eq($.thread_id,e),drizzleOrm.eq($.request_id,r))).orderBy(drizzleOrm.desc($.requested_at),drizzleOrm.desc($.id)).limit(1).get()??null:null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read highlight regeneration request",s)}finally{o.close();}}findHighlightRegenerationRun(e,n,r){return this.getHighlightRegenerationRunByRequest(e,n,r)}startHighlightRegenerationRun(e,n){P(e,"runId"),n!==void 0&&P(n,"workspaceId");let r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let i=this.findRegenerationRun(s,e,n);if(i||Pe(`Highlight regeneration run ${e} not found`),jo(i.status)||j(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;s.update($).set({status:"running",started_at:r}).where(drizzleOrm.and(drizzleOrm.eq($.id,i.id),drizzleOrm.eq($.status,"queued"))).run();let u=s.select().from($).where(drizzleOrm.eq($.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(s){throw s instanceof f?s:new f("DB_ERROR","Failed to start highlight regeneration run",s)}finally{o.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){P(e.runId,"runId"),P(e.errorCode,"errorCode"),e.workspaceId!==void 0&&P(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>{let s=this.findRegenerationRun(o,e.runId,e.workspaceId);if(s||Pe(`Highlight regeneration run ${e.runId} not found`),jo(s.status)||j(`invalid highlight regeneration status: ${s.status}`),s.status==="completed"||s.status==="failed")return s;o.update($).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(drizzleOrm.and(drizzleOrm.eq($.id,s.id),drizzleOrm.inArray($.status,kr))).run();let i=o.select().from($).where(drizzleOrm.eq($.id,s.id)).get();if(!i)throw new f("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to fail highlight regeneration run",o)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=Wl){P(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>o.update($).set({status:"failed",completed_at:n,error_code:e}).where(drizzleOrm.inArray($.status,kr)).run().changes,{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to recover interrupted highlight runs",o)}finally{r.close();}}completeHighlightRegenerationRun(e){P(e.runId,"runId"),P(e.threadId,"threadId"),P(e.workspaceId,"workspaceId"),P(e.detectorVersion,"detectorVersion");let n=rp(e.candidates),r=Rn(e),o=this.openHandle(true),s=false;try{return o.db.transaction(i=>{let u=this.findRegenerationRun(i,e.runId,e.workspaceId);if((!u||u.thread_id!==e.threadId)&&Pe(`Highlight regeneration run ${e.runId} not found`),jo(u.status)||j(`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};s=!0;let d=this.findThread(i,e.threadId,e.workspaceId);d||Pe(`Thread ${e.threadId} not found`),u.detector_version!==e.detectorVersion&&j("detectorVersion does not match the regeneration run");let c=i.select().from(D).where(drizzleOrm.eq(D.thread_id,d.id)).orderBy(drizzleOrm.asc(D.created_at),drizzleOrm.asc(D.id)).all(),l=new Set(n.map(O=>O.contentFingerprint)),p=c.filter(O=>O.source==="auto"&&O.status==="active"&&O.revision===0&&!l.has(O.content_fingerprint??"")),g=c.filter(O=>O.source==="auto"&&O.status==="active").length,h=new Set(c.filter(O=>!p.includes(O)&&O.content_fingerprint).map(O=>O.content_fingerprint)),m=n.filter(O=>!h.has(O.contentFingerprint)),w=new Date().toISOString(),k=Sn(i,d.id)+1;In(i,d.id)||(An(i,d,r,w,k),k+=1);for(let O of p)i.delete(D).where(drizzleOrm.eq(D.id,O.id)).run(),sp(i,O,r,w,k,{runId:e.runId,reason:jl}),k+=1;let C=0,L=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let O of m){let X=yn("thl");i.insert(D).values({id:X,thread_id:d.id,source:"auto",kind:O.kind,status:"active",text:O.text,covers_from_task_id:O.coversFromTaskId,covers_to_task_id:O.coversToTaskId,revision:0,created_at:w,updated_at:w,agent_id:L,source_task_id:O.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:O.contentFingerprint,dismissed_at:null}).run();let de=i.select().from(D).where(drizzleOrm.eq(D.id,X)).get();if(!de)throw new f("DB_ERROR","Regenerated highlight insert did not return a row");Tr(i,de,r,w,"thread.highlight.created",k),k+=1,C+=1;}let E=i.select().from(D).where(drizzleOrm.eq(D.thread_id,d.id)).all().filter(O=>O.source==="auto"&&O.status==="active").length;kt(i,{threadId:d.id,seq:k,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:w,payload:{runId:u.id,detectorVersion:e.detectorVersion,previousAutoCount:g,newAutoCount:E,deletedCount:p.length,createdCount:C}}),i.update($).set({status:"completed",started_at:u.started_at??w,completed_at:w,error_code:null,previous_auto_count:g,new_auto_count:E}).where(drizzleOrm.and(drizzleOrm.eq($.id,u.id),drizzleOrm.inArray($.status,kr))).run();let v=i.select().from($).where(drizzleOrm.eq($.id,u.id)).get();if(!v)throw new f("DB_ERROR","Highlight regeneration completion did not return a row");return {run:v,deletedCount:p.length,createdCount:C,previousAutoCount:g,newAutoCount:E}},{behavior:"immediate"})}catch(i){if(s)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:Gl});}catch{}throw i instanceof f?i:new f("DB_ERROR","Failed to complete highlight regeneration",i)}finally{o.close();}}completeHighlightRegeneration(e){return this.completeHighlightRegenerationRun(e)}replaceAutoHighlightsAtomically(e){return this.completeHighlightRegenerationRun(e)}listTimeline(e,n,r={}){let o=typeof e=="string"?{...r,threadId:e,workspaceId:n}:e;P(o.threadId,"threadId"),P(o.workspaceId,"workspaceId");let s=Zl(o);if(!fs.existsSync(this.resolveDbPath()))return null;let i=this.openHandle(false);try{if(!this.findThread(i.db,o.threadId,o.workspaceId))return null;let u=i.db.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${B.seq}), 0)`}).from(B).where(drizzleOrm.eq(B.thread_id,o.threadId)).get()?.maxSeq??0,d;o.beforeSeq!==void 0?d=i.db.select().from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,o.threadId),drizzleOrm.lt(B.seq,o.beforeSeq))).orderBy(drizzleOrm.desc(B.seq)).limit(s+1).all().reverse():o.afterSeq!==void 0?d=i.db.select().from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,o.threadId),drizzleOrm.sql`${B.seq} > ${o.afterSeq}`)).orderBy(drizzleOrm.asc(B.seq)).limit(s+1).all():d=i.db.select().from(B).where(drizzleOrm.eq(B.thread_id,o.threadId)).orderBy(drizzleOrm.desc(B.seq)).limit(s+1).all().reverse();let c=d.length>s,l=o.afterSeq!==void 0?d.slice(0,s):c?d.slice(1):d,p=!1,g=l[0];return g&&(p=!!i.db.select({id:B.id}).from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,o.threadId),drizzleOrm.lt(B.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=tp(e),r=Rn(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);if(u||Pe(`Thread ${e.threadId} not found`),n.source==="auto"){let g=i.select().from(D).where(drizzleOrm.and(drizzleOrm.eq(D.thread_id,e.threadId),drizzleOrm.eq(D.source_task_id,n.sourceTaskId),drizzleOrm.eq(D.detector_version,n.detectorVersion),drizzleOrm.eq(D.content_fingerprint,n.contentFingerprint))).orderBy(drizzleOrm.asc(D.created_at),drizzleOrm.asc(D.id)).limit(1).get();if(g)return g}let d=e.id??yn("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:o,updated_at:o,agent_id:n.agentId,source_task_id:n.sourceTaskId,detector_version:n.detectorVersion,content_fingerprint:n.contentFingerprint,dismissed_at:null};i.insert(D).values(c).run();let l=i.select().from(D).where(drizzleOrm.eq(D.id,d)).get();if(!l)throw new f("DB_ERROR","Highlight insert did not return a row");let p=Sn(i,u.id)+1;return In(i,u.id)||(An(i,u,r,o,p),p+=1),Tr(i,l,r,o,"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{s.close();}}updateHighlight(e){P(e.threadId,"threadId"),P(e.workspaceId,"workspaceId"),P(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&j("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&j("highlight update requires at least one field"),e.kind!==void 0&&Ko(e.kind);let n=e.text===void 0?void 0:zo(e.text),r=Rn(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);u||Pe(`Thread ${e.threadId} not found`);let d=i.select().from(D).where(drizzleOrm.and(drizzleOrm.eq(D.id,e.highlightId),drizzleOrm.eq(D.thread_id,u.id))).limit(1).get();if(d||Pe(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new bn(u.id,d.id,e.expectedRevision,d.revision);if(d.status!=="active")throw new bn(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)&&j("highlight projection is incomplete");let h=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"&&h?"manual":d.source;if(!(h||m!==d.source))return d;let k=d.revision+1;i.update(D).set({source:m,kind:c,text:l,covers_from_task_id:p,covers_to_task_id:g,revision:k,updated_at:o}).where(drizzleOrm.and(drizzleOrm.eq(D.id,d.id),drizzleOrm.eq(D.revision,d.revision))).run();let C=i.select().from(D).where(drizzleOrm.eq(D.id,d.id)).get();if(!C)throw new f("DB_ERROR","Highlight update did not return a row");let L=Sn(i,u.id)+1;return In(i,u.id)||(An(i,u,r,o,L),L+=1),Tr(i,C,r,o,"thread.highlight.updated",L,d),C},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to update thread highlight",i)}finally{s.close();}}dismissHighlight(e){P(e.threadId,"threadId"),P(e.workspaceId,"workspaceId"),P(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&j("expectedRevision must be a non-negative integer");let n=Rn(e),r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let i=this.findThread(s,e.threadId,e.workspaceId);i||Pe(`Thread ${e.threadId} not found`);let u=s.select().from(D).where(drizzleOrm.and(drizzleOrm.eq(D.id,e.highlightId),drizzleOrm.eq(D.thread_id,i.id))).limit(1).get();if(u||Pe(`Highlight ${e.highlightId} not found`),u.revision!==e.expectedRevision)throw new bn(i.id,u.id,e.expectedRevision,u.revision);if(u.status==="dismissed")return u;let d=u.revision+1;s.update(D).set({status:"dismissed",text:null,revision:d,updated_at:r,dismissed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(D.id,u.id),drizzleOrm.eq(D.revision,u.revision))).run();let c=s.select().from(D).where(drizzleOrm.eq(D.id,u.id)).get();if(!c)throw new f("DB_ERROR","Highlight dismissal did not return a row");let l=Sn(s,i.id)+1;return In(s,i.id)||(An(s,i,n,r,l),l+=1),Tr(s,c,n,r,"thread.highlight.deleted",l,u),c},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to dismiss thread highlight",s)}finally{o.close();}}listActiveHighlights(e,n,r={}){if(P(e,"threadId"),P(n,"workspaceId"),r.taskId!==void 0&&P(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&P(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&P(r.coversToTaskId,"coversToTaskId"),!fs.existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{if(!this.findThread(o.db,e,n))return null;let i=o.db.select().from(D).where(drizzleOrm.and(drizzleOrm.eq(D.thread_id,e),drizzleOrm.eq(D.status,"active"))).orderBy(drizzleOrm.asc(D.created_at),drizzleOrm.asc(D.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return i;let u=o.db.all(drizzleOrm.sql`
387
388
  SELECT id, started_at FROM tasks WHERE thread_id = ${e}
388
389
  ORDER BY started_at ASC, id ASC
389
- `),d=new Map(u.map((g,h)=>[g.id,h])),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 h=d.get(g.covers_from_task_id),m=d.get(g.covers_to_task_id);if(h===void 0||m===void 0)return !1;let w=Math.min(h,m),k=Math.max(h,m);return !(c!==void 0&&(c<w||c>k)||l!==void 0&&k<l||p!==void 0&&w>p)})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to list active thread highlights",s)}finally{o.close();}}listHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}getActiveHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}};_();ot();yt();Et();nt();St();Mr();var J=class extends f{reason;constructor(e,n="VALIDATION",r=e,o){super(n,r,o),this.name="CommonCodeRepositoryError",this.reason=e;}},$a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function ip(){let t=crypto.randomBytes(16),e="";for(let n of t)e+=$a[n%$a.length];return e.slice(0,12)}function Ua(){return `c_${ip()}`}function ap(t){return typeof t=="string"&&Dr.includes(t)}function dp(t){return typeof t=="string"&&Lr.includes(t)}function Gt(t){if(!ap(t))throw new J("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function qa(t){if(!dp(t))throw new J("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function Fa(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new J("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function zt(t){if(typeof t!="string"||t.trim().length===0)throw new J("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 J("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function tt(t,e){return drizzleOrm.and(drizzleOrm.eq(S.code_group,t),drizzleOrm.or(drizzleOrm.isNull(S.workspace_id),drizzleOrm.eq(S.workspace_id,e)))}var yr=class extends we{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=pe.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!fs.existsSync(n))throw new f("NOT_FOUND","Database not found");e&&fs.mkdirSync(pe.dirname(n),{recursive:true});let r=U(n);if(e)try{Pe(r.db,n);}catch(o){throw r.close(),o}return r}listSelectable(e,n){if(Gt(e),zt(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(S).where(drizzleOrm.and(tt(e,n),drizzleOrm.eq(S.is_archived,0))).orderBy(drizzleOrm.asc(S.sort_order),drizzleOrm.asc(S.code)).all()}catch(o){throw new f("DB_ERROR","Failed to list selectable common codes",o)}finally{r.close();}}listForHistory(e,n){if(Gt(e),zt(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(S).where(tt(e,n)).orderBy(drizzleOrm.asc(S.sort_order),drizzleOrm.asc(S.code)).all()}catch(o){throw new f("DB_ERROR","Failed to list common-code history",o)}finally{r.close();}}reorder(e){let n=e.group;if(Gt(n),zt(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let o of e.codes)wr(o);if(new Set(e.codes).size!==e.codes.length)throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder scope does not exist");let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(S).where(tt(n,e.workspaceId)).all(),i=s.filter(h=>h.is_archived===0),u=new Set(s.map(h=>h.code)),d=new Set(i.map(h=>h.code)),c=e.codes.find(h=>!u.has(h));if(c)throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${c}`);if(e.codes.length!==i.length||e.codes.some(h=>!d.has(h)))throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let l=new Map(i.map(h=>[h.code,h])),p=e.codes.map(h=>{let m=l.get(h);if(!m)throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${h}`);return m}),g;for(let[h,m]of p.entries())m.sort_order!==h&&(g??=new Date().toISOString(),o.update(S).set({sort_order:h,updated_at:g}).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,n),drizzleOrm.eq(S.code,m.code))).run());return o.select().from(S).where(tt(n,e.workspaceId)).orderBy(drizzleOrm.asc(S.sort_order),drizzleOrm.asc(S.code)).all()},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to reorder common codes",o)}finally{r.close();}}resolve(e,n){if(Gt(e),wr(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.code,n))).limit(1).get()??null}catch(o){throw new f("DB_ERROR","Failed to resolve common code",o)}finally{r.close();}}createThreadState(e){zt(e.workspaceId);let n=Fa(e.name);qa(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{if(o.select({code:S.code}).from(S).where(drizzleOrm.and(tt("THREAD_STATE",e.workspaceId),drizzleOrm.eq(S.is_archived,0),drizzleOrm.eq(S.code_name,n))).limit(1).get())throw new J("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let i=o.select({maxSortOrder:drizzleOrm.sql`max(${S.sort_order})`}).from(S).where(tt("THREAD_STATE",e.workspaceId)).get(),u=new Date().toISOString(),d=Ua();for(;o.select({code:S.code}).from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,"THREAD_STATE"),drizzleOrm.eq(S.code,d))).limit(1).get();)d=Ua();o.insert(S).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=o.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,"THREAD_STATE"),drizzleOrm.eq(S.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(o){throw o instanceof f?o:new f("DB_ERROR","Failed to create thread state common code",o)}finally{r.close();}}updateDisplay(e){if(Gt(e.group),wr(e.code),zt(e.workspaceId),e.name===void 0&&e.color===void 0)throw new J("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:Fa(e.name);e.color!==void 0&&qa(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e.group),drizzleOrm.eq(S.code,e.code))).limit(1).get();if(!s)throw new J("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e.group}/${e.code}`);if(this.assertOwnership(s,e.workspaceId),n===null&&s.is_builtin!==1)throw new J("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&s.is_archived===0){let d=drizzleOrm.and(tt(e.group,e.workspaceId),drizzleOrm.eq(S.is_archived,0));if(o.select({code:S.code}).from(S).where(drizzleOrm.and(d,drizzleOrm.eq(S.code_name,n),drizzleOrm.sql`${S.code} <> ${e.code}`)).limit(1).get())throw new J("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`)}let i={updated_at:new Date().toISOString()};e.name!==void 0&&(i.code_name=n??null),e.color!==void 0&&(i.color=e.color),o.update(S).set(i).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e.group),drizzleOrm.eq(S.code,e.code))).run();let u=o.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e.group),drizzleOrm.eq(S.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(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update common-code display values",o)}finally{r.close();}}archive(e,n,r,o=true){if(Gt(e),wr(n),zt(r),typeof o!="boolean")throw new J("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let s=this.openHandle(true);try{return s.db.transaction(i=>{let u=i.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.code,n))).limit(1).get();if(!u)throw new J("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(u.is_builtin===1)throw new J("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(u,r),!o&&u.code_name!==null&&i.select({code:S.code}).from(S).where(drizzleOrm.and(tt(e,r),drizzleOrm.eq(S.is_archived,0),drizzleOrm.eq(S.code_name,u.code_name),drizzleOrm.ne(S.code,n))).limit(1).get())throw new J("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${u.code_name}`);i.update(S).set({is_archived:o?1:0,updated_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.code,n))).run();let d=i.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.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{s.close();}}assertOwnership(e,n){if(e.workspace_id!==null&&e.workspace_id!==n)throw new J("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};bt();_();var kt={threadContext:"crewx_thread_context",apps:"apps",crewxUiState:"crewx_ui_state"};function lp(t){return t.replace(new RegExp(`<${kt.threadContext}\\b[^>]*>[\\s\\S]*?<\\/${kt.threadContext}>`,"g"),"").replace(new RegExp(`<${kt.apps}\\b[^>]*>[\\s\\S]*?<\\/${kt.apps}>`,"g"),"").replace(new RegExp(`<${kt.crewxUiState}\\b[^>]*>[\\s\\S]*?<\\/${kt.crewxUiState}>`,"g"),"").replace(/<conversation_history[^>]*>[\s\S]*?<\/conversation_history>/g,"").split(`
390
+ `),d=new Map(u.map((g,h)=>[g.id,h])),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 h=d.get(g.covers_from_task_id),m=d.get(g.covers_to_task_id);if(h===void 0||m===void 0)return !1;let w=Math.min(h,m),k=Math.max(h,m);return !(c!==void 0&&(c<w||c>k)||l!==void 0&&k<l||p!==void 0&&w>p)})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to list active thread highlights",s)}finally{o.close();}}listHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}getActiveHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}};_();st();Et();Rt();rt();It();$r();var J=class extends f{reason;constructor(e,n="VALIDATION",r=e,o){super(n,r,o),this.name="CommonCodeRepositoryError",this.reason=e;}},za="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function gp(){let t=crypto.randomBytes(16),e="";for(let n of t)e+=za[n%za.length];return e.slice(0,12)}function Ka(){return `c_${gp()}`}function hp(t){return typeof t=="string"&&Mr.includes(t)}function _p(t){return typeof t=="string"&&Hr.includes(t)}function zt(t){if(!hp(t))throw new J("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function Va(t){if(!_p(t))throw new J("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function Ja(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new J("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function Kt(t){if(typeof t!="string"||t.trim().length===0)throw new J("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function Er(t){if(typeof t!="string"||t.trim().length===0)throw new J("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function nt(t,e){return drizzleOrm.and(drizzleOrm.eq(S.code_group,t),drizzleOrm.or(drizzleOrm.isNull(S.workspace_id),drizzleOrm.eq(S.workspace_id,e)))}var Rr=class extends we{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=pe.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!fs.existsSync(n))throw new f("NOT_FOUND","Database not found");e&&fs.mkdirSync(pe.dirname(n),{recursive:true});let r=U(n);if(e)try{De(r.db,n);}catch(o){throw r.close(),o}return r}listSelectable(e,n){if(zt(e),Kt(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(S).where(drizzleOrm.and(nt(e,n),drizzleOrm.eq(S.is_archived,0))).orderBy(drizzleOrm.asc(S.sort_order),drizzleOrm.asc(S.code)).all()}catch(o){throw new f("DB_ERROR","Failed to list selectable common codes",o)}finally{r.close();}}listForHistory(e,n){if(zt(e),Kt(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(S).where(nt(e,n)).orderBy(drizzleOrm.asc(S.sort_order),drizzleOrm.asc(S.code)).all()}catch(o){throw new f("DB_ERROR","Failed to list common-code history",o)}finally{r.close();}}reorder(e){let n=e.group;if(zt(n),Kt(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let o of e.codes)Er(o);if(new Set(e.codes).size!==e.codes.length)throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder scope does not exist");let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(S).where(nt(n,e.workspaceId)).all(),i=s.filter(h=>h.is_archived===0),u=new Set(s.map(h=>h.code)),d=new Set(i.map(h=>h.code)),c=e.codes.find(h=>!u.has(h));if(c)throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${c}`);if(e.codes.length!==i.length||e.codes.some(h=>!d.has(h)))throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let l=new Map(i.map(h=>[h.code,h])),p=e.codes.map(h=>{let m=l.get(h);if(!m)throw new J("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${h}`);return m}),g;for(let[h,m]of p.entries())m.sort_order!==h&&(g??=new Date().toISOString(),o.update(S).set({sort_order:h,updated_at:g}).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,n),drizzleOrm.eq(S.code,m.code))).run());return o.select().from(S).where(nt(n,e.workspaceId)).orderBy(drizzleOrm.asc(S.sort_order),drizzleOrm.asc(S.code)).all()},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to reorder common codes",o)}finally{r.close();}}resolve(e,n){if(zt(e),Er(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.code,n))).limit(1).get()??null}catch(o){throw new f("DB_ERROR","Failed to resolve common code",o)}finally{r.close();}}createThreadState(e){Kt(e.workspaceId);let n=Ja(e.name);Va(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{if(o.select({code:S.code}).from(S).where(drizzleOrm.and(nt("THREAD_STATE",e.workspaceId),drizzleOrm.eq(S.is_archived,0),drizzleOrm.eq(S.code_name,n))).limit(1).get())throw new J("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let i=o.select({maxSortOrder:drizzleOrm.sql`max(${S.sort_order})`}).from(S).where(nt("THREAD_STATE",e.workspaceId)).get(),u=new Date().toISOString(),d=Ka();for(;o.select({code:S.code}).from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,"THREAD_STATE"),drizzleOrm.eq(S.code,d))).limit(1).get();)d=Ka();o.insert(S).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=o.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,"THREAD_STATE"),drizzleOrm.eq(S.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(o){throw o instanceof f?o:new f("DB_ERROR","Failed to create thread state common code",o)}finally{r.close();}}updateDisplay(e){if(zt(e.group),Er(e.code),Kt(e.workspaceId),e.name===void 0&&e.color===void 0)throw new J("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:Ja(e.name);e.color!==void 0&&Va(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e.group),drizzleOrm.eq(S.code,e.code))).limit(1).get();if(!s)throw new J("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e.group}/${e.code}`);if(this.assertOwnership(s,e.workspaceId),n===null&&s.is_builtin!==1)throw new J("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&s.is_archived===0){let d=drizzleOrm.and(nt(e.group,e.workspaceId),drizzleOrm.eq(S.is_archived,0));if(o.select({code:S.code}).from(S).where(drizzleOrm.and(d,drizzleOrm.eq(S.code_name,n),drizzleOrm.sql`${S.code} <> ${e.code}`)).limit(1).get())throw new J("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`)}let i={updated_at:new Date().toISOString()};e.name!==void 0&&(i.code_name=n??null),e.color!==void 0&&(i.color=e.color),o.update(S).set(i).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e.group),drizzleOrm.eq(S.code,e.code))).run();let u=o.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e.group),drizzleOrm.eq(S.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(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update common-code display values",o)}finally{r.close();}}archive(e,n,r,o=true){if(zt(e),Er(n),Kt(r),typeof o!="boolean")throw new J("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let s=this.openHandle(true);try{return s.db.transaction(i=>{let u=i.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.code,n))).limit(1).get();if(!u)throw new J("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(u.is_builtin===1)throw new J("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(u,r),!o&&u.code_name!==null&&i.select({code:S.code}).from(S).where(drizzleOrm.and(nt(e,r),drizzleOrm.eq(S.is_archived,0),drizzleOrm.eq(S.code_name,u.code_name),drizzleOrm.ne(S.code,n))).limit(1).get())throw new J("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${u.code_name}`);i.update(S).set({is_archived:o?1:0,updated_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.code,n))).run();let d=i.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.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{s.close();}}assertOwnership(e,n){if(e.workspace_id!==null&&e.workspace_id!==n)throw new J("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};vt();_();var Tt={threadContext:"crewx_thread_context",apps:"apps",crewxUiState:"crewx_ui_state"};function Tp(t){return t.replace(new RegExp(`<${Tt.threadContext}\\b[^>]*>[\\s\\S]*?<\\/${Tt.threadContext}>`,"g"),"").replace(new RegExp(`<${Tt.apps}\\b[^>]*>[\\s\\S]*?<\\/${Tt.apps}>`,"g"),"").replace(new RegExp(`<${Tt.crewxUiState}\\b[^>]*>[\\s\\S]*?<\\/${Tt.crewxUiState}>`,"g"),"").replace(/<conversation_history[^>]*>[\s\S]*?<\/conversation_history>/g,"").split(`
390
391
  `).filter(o=>!(o.startsWith("Loaded ")&&o.includes("layouts from")||o.includes("[dotenv@")||o.includes("[Nest]")&&o.includes("DEBUG")||o.startsWith("Registered custom layout:")||o.startsWith("Updated custom layout:"))).join(`
391
- `).trim()}function pp(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 fp(t,e,n){if(!t||e==="failed"&&Ue(t,n))return "";let r=t;try{let o=JSON.parse(r);Array.isArray(o)?r=o.filter(s=>s?.type==="text"&&s?.text).map(s=>s.text).join(`
392
- `):o&&typeof o=="object"&&o.result!==void 0&&(r=o.result||"");}catch{r=lp(r);}return r}var Er=class{dbPath;constructor(e){this.dbPath=e??pe.join(ts.homedir(),".crewx","crewx.db");}getThreadRepo(){return new hr({dbPath:this.dbPath})}getThreadHistoryRepo(){return new Tr({dbPath:this.dbPath})}updateThread(e,n){this.getThreadRepo().updateThread(e,{title:n.title});}async ensureThread(e,n,r,o){let s=this.getThreadRepo(),i=s.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 s.ensureThread(e,n,r,o),{created:false}}return s.ensureThread(e,n,r,o),{created:true}}async fetchHistory(e,n){let r=n?.limit??100,o=this.getThreadRepo(),s=o.findThreadById(e),i=o.findTopLevelTasks(e,void 0,r),u=new Set(["queued","cancelled"]);i=i.filter(p=>(!p.status||!u.has(p.status))&&(!n?.currentTraceId||p.trace_id!==n.currentTraceId));let d=s?.platform??"cli",c=this.rowsToMessages(i),l=n?.includeHighlights===false?void 0:this.readActiveHighlights(e,s?.workspace_id??null);return {threadId:e,platform:d,messages:c,...l?{highlights:l}:{},metadata:{title:s?.title??void 0,firstMessage:s?.first_message??void 0,lastMessage:s?.last_message??void 0,messageCount:s?.message_count??0,updatedAt:s?.updated_at?new Date(s.updated_at).getTime():void 0}}}async fetchThreadState(e){try{let n=this.getThreadHistoryRepo().getSnapshot(e);if(!n)return;let r=new yr({dbPath:this.dbPath}),o=(s,i)=>{try{return r.resolve(s,i)?.code_name||i}catch{return i}};return {...n.title?{title:n.title}:{},...n.priority?{priority:{code:n.priority,name:o("THREAD_PRIORITY",n.priority)}}:{},...n.state?{state:{code:n.state,name:o("THREAD_STATE",n.state)}}:{}}}catch{return}}async fetchHighlights(e){let n=this.getThreadRepo().findThreadById(e);return this.readActiveHighlights(e,n?.workspace_id??null)}async saveUserMessage(e,n,r,o){let{firstMessage:s}=this.getThreadRepo().saveUserMessage(e,n);return {id:e,firstMessage:s}}async saveAssistantMessage(e,n,r,o){return this.getThreadRepo().saveAssistantMessage(e,n),{id:e}}close(){}normalizeStatus(e){if(e&&!["success","completed","done"].includes(e)){if(["failed","error"].includes(e))return "failed";if(e==="running")return "running"}}readActiveHighlights(e,n){if(!n)return [];try{return (this.getThreadHistoryRepo().listActiveHighlights(e,n)??[]).filter(o=>typeof o.text=="string"&&o.text.length>0).map(o=>({id:o.id,text:o.text,kind:o.kind,source:o.source,coversFromTaskId:o.covers_from_task_id,coversToTaskId:o.covers_to_task_id,createdAt:o.created_at}))}catch{return}}rowsToMessages(e){let n=[];for(let r of e){r.prompt&&n.push({id:`${r.id}-user`,text:r.prompt,isAssistant:false,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:{caller_agent_id:r.caller_agent_id,task_id:r.id}});let o=this.normalizeStatus(r.status),s=pp(r.metadata),i=fp(r.result,o??r.status??null,s);if(i||o==="running"||o==="failed"){let u={agent_id:r.agent_id,task_id:r.id};o&&(u.status=o),o==="failed"&&r.error&&(u.reason=r.error.split(`
393
- `)[0].slice(0,200)),n.push({id:`${r.id}-assistant`,text:i,isAssistant:true,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:u});}}return n}};var Wo=class extends Ve{name="conversation";_provider;unsubStart=null;unsubEnd=null;constructor(e){super(),this._provider=new Er(e?.dbPath);}get conversationProvider(){return this._provider}async afterUserMessage(e,n,r,o){}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 o=await this._provider.ensureThread(n.threadId,r,n.workspaceId,{createdByKind:n.actorKind??null,createdById:n.actorId??null,createdByTaskId:n.traceId}),s=await this._provider.saveUserMessage(n.threadId,n.message??"");await this.afterUserMessage(n.threadId,s.id,o.created||s.firstMessage,n);}catch{}}),this.unsubEnd=e.on("task:end",async n=>{if(!n.result)return;let r=n.metadata?.threadId;if(!r)return;let o=n.agentRef?.replace(/^@/,"")??"";try{let{id:s}=await this._provider.saveAssistantMessage(r,n.result,o);await this.afterAssistantMessage(r,s,n);}catch{}});}detach(e){this.unsubStart?.(),this.unsubStart=null,this.unsubEnd?.(),this.unsubEnd=null,this._provider.close?.();}};exports.ConversationPlugin=Wo;exports.FileLoggerPlugin=Ir;exports.SqliteTracingPlugin=Po;
392
+ `).trim()}function wp(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 yp(t,e,n){if(!t||e==="failed"&&Fe(t,n))return "";let r=t;try{let o=JSON.parse(r);Array.isArray(o)?r=o.filter(s=>s?.type==="text"&&s?.text).map(s=>s.text).join(`
393
+ `):o&&typeof o=="object"&&o.result!==void 0&&(r=o.result||"");}catch{r=Tp(r);}return r}var Sr=class{dbPath;constructor(e){this.dbPath=e??pe.join(ss.homedir(),".crewx","crewx.db");}getThreadRepo(){return new mr({dbPath:this.dbPath})}getThreadHistoryRepo(){return new yr({dbPath:this.dbPath})}updateThread(e,n){this.getThreadRepo().updateThread(e,{title:n.title});}async ensureThread(e,n,r,o){let s=this.getThreadRepo(),i=s.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 s.ensureThread(e,n,r,o),{created:false}}return s.ensureThread(e,n,r,o),{created:true}}async fetchHistory(e,n){let r=n?.limit??100,o=this.getThreadRepo(),s=o.findThreadById(e),i=o.findTopLevelTasks(e,void 0,r),u=new Set(["queued","cancelled"]);i=i.filter(p=>(!p.status||!u.has(p.status))&&(!n?.currentTraceId||p.trace_id!==n.currentTraceId));let d=s?.platform??"cli",c=this.rowsToMessages(i),l=n?.includeHighlights===false?void 0:this.readActiveHighlights(e,s?.workspace_id??null);return {threadId:e,platform:d,messages:c,...l?{highlights:l}:{},metadata:{title:s?.title??void 0,firstMessage:s?.first_message??void 0,lastMessage:s?.last_message??void 0,messageCount:s?.message_count??0,updatedAt:s?.updated_at?new Date(s.updated_at).getTime():void 0}}}async fetchThreadState(e){try{let n=this.getThreadHistoryRepo().getSnapshot(e);if(!n)return;let r=new Rr({dbPath:this.dbPath}),o=(s,i)=>{try{return r.resolve(s,i)?.code_name||i}catch{return i}};return {...n.title?{title:n.title}:{},...n.priority?{priority:{code:n.priority,name:o("THREAD_PRIORITY",n.priority)}}:{},...n.state?{state:{code:n.state,name:o("THREAD_STATE",n.state)}}:{}}}catch{return}}async fetchHighlights(e){let n=this.getThreadRepo().findThreadById(e);return this.readActiveHighlights(e,n?.workspace_id??null)}async saveUserMessage(e,n,r,o){let{firstMessage:s}=this.getThreadRepo().saveUserMessage(e,n);return {id:e,firstMessage:s}}async saveAssistantMessage(e,n,r,o){return this.getThreadRepo().saveAssistantMessage(e,n),{id:e}}close(){}normalizeStatus(e){if(e&&!["success","completed","done"].includes(e)){if(["failed","error"].includes(e))return "failed";if(e==="running")return "running"}}readActiveHighlights(e,n){if(!n)return [];try{return (this.getThreadHistoryRepo().listActiveHighlights(e,n)??[]).filter(o=>typeof o.text=="string"&&o.text.length>0).map(o=>({id:o.id,text:o.text,kind:o.kind,source:o.source,coversFromTaskId:o.covers_from_task_id,coversToTaskId:o.covers_to_task_id,createdAt:o.created_at}))}catch{return}}rowsToMessages(e){let n=[];for(let r of e){r.prompt&&n.push({id:`${r.id}-user`,text:r.prompt,isAssistant:false,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:{caller_agent_id:r.caller_agent_id,task_id:r.id}});let o=this.normalizeStatus(r.status),s=wp(r.metadata),i=yp(r.result,o??r.status??null,s);if(i||o==="running"||o==="failed"){let u={agent_id:r.agent_id,task_id:r.id};o&&(u.status=o),o==="failed"&&r.error&&(u.reason=r.error.split(`
394
+ `)[0].slice(0,200)),n.push({id:`${r.id}-assistant`,text:i,isAssistant:true,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:u});}}return n}};var Vo=class extends Ve{name="conversation";_provider;unsubStart=null;unsubEnd=null;constructor(e){super(),this._provider=new Sr(e?.dbPath);}get conversationProvider(){return this._provider}async afterUserMessage(e,n,r,o){}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 o=await this._provider.ensureThread(n.threadId,r,n.workspaceId,{createdByKind:n.actorKind??null,createdById:n.actorId??null,createdByTaskId:n.traceId}),s=await this._provider.saveUserMessage(n.threadId,n.message??"");await this.afterUserMessage(n.threadId,s.id,o.created||s.firstMessage,n);}catch{}}),this.unsubEnd=e.on("task:end",async n=>{if(!n.result)return;let r=n.metadata?.threadId;if(!r)return;let o=n.agentRef?.replace(/^@/,"")??"";try{let{id:s}=await this._provider.saveAssistantMessage(r,n.result,o);await this.afterAssistantMessage(r,s,n);}catch{}});}detach(e){this.unsubStart?.(),this.unsubStart=null,this.unsubEnd?.(),this.unsubEnd=null,this._provider.close?.();}};exports.ConversationPlugin=Vo;exports.FileLoggerPlugin=Or;exports.SqliteTracingPlugin=Ho;