@crewx/sdk 0.9.0-rc.127 → 0.9.0-rc.129

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,4 +1,4 @@
1
- 'use strict';var Oa=require('fs'),Se=require('path'),wi=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 Oa__namespace=/*#__PURE__*/_interopNamespace(Oa);var Se__namespace=/*#__PURE__*/_interopNamespace(Se);var wi__default=/*#__PURE__*/_interopDefault(wi);var bu=Object.defineProperty;var kt=(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 v=(t,e)=>()=>(t&&(e=t(t=0)),e);var Iu=(t,e)=>{for(var n in e)bu(t,n,{get:e[n],enumerable:true});};var h=v(()=>{});function ki(t){if(t===":memory:")return t;let e=Se.resolve(t),n=e,r=[];for(;!Oa.existsSync(n);){let s=Se.dirname(n);if(s===n)return e;r.unshift(n.slice(s.length+1)),n=s;}let o=Oa.realpathSync(n);for(let s of r)o=Se.join(o,s);return Se.resolve(o)}function Nu(t,e){let n=ki(t),r=ki(e);return process.platform==="win32"?n.toLowerCase()===r.toLowerCase():n===r}function Ke(t){if((process.env.NODE_ENV==="test"||process.env.VITEST!==void 0)&&Nu(t,Se.join(wi__default.default.homedir(),".crewx","crewx.db")))throw new Error(`${Ou}: ${t}. Set CREWX_DB to an isolated temporary path or :memory:.`);return t}var Ou;exports.BaseSqliteRepository=void 0;var se=v(()=>{h();Ou="[crewx] Refusing to open the real CrewX database from a test process";exports.BaseSqliteRepository=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||Se.join(wi__default.default.homedir(),".crewx","crewx.db");return Ke(e)}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return Oa.existsSync(e??this.resolveDbPath())}};});exports.RepositoryError=void 0;var pe=v(()=>{h();exports.RepositoryError=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 C(t,e={}){let n=Ke(t),r=kt("better-sqlite3"),{drizzle:o}=kt("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 = ${exports.CREWX_JOURNAL_SIZE_LIMIT_BYTES}`),s.exec("PRAGMA busy_timeout = 5000"),s.exec("PRAGMA foreign_keys = ON"),s.exec("PRAGMA analysis_limit = 400")),{db:o(s),runRaw:(i,d=[])=>s.prepare(i).run(...d),close:()=>s.close()}}function Cu(t,e="TRUNCATE"){if(e!=="PASSIVE"&&e!=="TRUNCATE")throw new Error(`Unsupported journal reclaim mode: ${e}`);let n=Ke(t),r=kt("better-sqlite3"),o=yi(n),s;try{s=new r(n),s.pragma("busy_timeout = 1000");let i=s.pragma(`wal_checkpoint(${e})`),d=yi(n);return {busy:i[0]?.busy===1,walBytesBefore:o,walBytesAfter:d}}finally{s?.close();}}var yi;exports.CREWX_JOURNAL_SIZE_LIMIT_BYTES=void 0;var fe=v(()=>{h();se();yi=t=>{try{return Oa__namespace.statSync(`${t}-wal`).size}catch{return 0}},exports.CREWX_JOURNAL_SIZE_LIMIT_BYTES=32*1024*1024;});function en(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Pu(t,e){if(e>0||!en(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(xu))r.has(o)||t.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}function Lu(t,e,n){if(!en(t,"__drizzle_migrations")||!en(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(Oa.readFileSync(Se__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let d=Du[i.tag];if(!d)continue;let c=Se__namespace.default.join(e,`${i.tag}.sql`);if(!Oa.existsSync(c))continue;let u=Oa.readFileSync(c,"utf-8"),f=crypto.createHash("sha256").update(u).digest("hex");if(o.has(f))continue;let p=t.all("PRAGMA table_info(tasks)"),g=new Set(p.map(_=>_.name));for(let[_,m]of Object.entries(d))g.has(_)||(t.run(`ALTER TABLE tasks ADD COLUMN ${_} ${m}`),g.add(_));}}function Ii(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 Ai(t){return t.split(/-->\s*statement-breakpoint/).map(e=>e.trim()).filter(Boolean)}function Mu(t,e,n){return t.all(`PRAGMA table_info("${e}")`).some(s=>s.name===n)}function Hu(t,e){return t.all(`SELECT name FROM sqlite_master WHERE type = 'index' AND name = '${e}'`).length>0}function kr(t,e){return e.kind==="add-column"?Mu(t,e.table,e.column):Hu(t,e.name)}function vi(t,e,n){let r=t;for(let o of Ai(e)){let s=Ii(o);s?.kind==="add-column"&&kr(r,s)||s?.kind==="create-index"&&kr(r,s)||s?.kind==="drop-index"&&!kr(r,s)||r.run(n.raw(o));}}function $u(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(Oa.readFileSync(Se__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let d=Se__namespace.default.join(e,`${i.tag}.sql`);if(!Oa.existsSync(d))continue;let c=Oa.readFileSync(d,"utf-8"),u=crypto.createHash("sha256").update(c).digest("hex");if(o.has(u))continue;let p=Ai(c).map(Ii);if(p.some(_=>!_))continue;let g=p;g.some(_=>_.kind==="add-column")&&g.some(_=>kr(t,_))&&(t.transaction(_=>{vi(_,c,n),_.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${u}, ${i.when})`);},{behavior:"immediate"}),o.add(u),console.error(`[crewx] Reconciled additive migration ${i.tag} from existing schema objects.`));}}function Uu(t,e){let{sql:n}=kt("drizzle-orm"),r=JSON.parse(Oa.readFileSync(Se__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 d=r.entries.find(u=>u.tag===i);if(!d)throw new Error(`Missing release/App compatibility migration: ${i}`);let c=Oa.readFileSync(Se__namespace.default.join(e,`${i}.sql`),"utf-8");return {entry:d,content:c,hash:crypto.createHash("sha256").update(c).digest("hex")}});t.transaction(i=>{let d=new Set(i.all(n`SELECT hash FROM __drizzle_migrations`).map(c=>c.hash));if(d.has(s[0].hash))for(let c of s.slice(1))d.has(c.hash)||(vi(i,c.content,n),i.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c.hash}, ${c.entry.when})`),d.add(c.hash),console.error(`[crewx] Replayed release/App migration ${c.entry.tag} safely.`));},{behavior:"immediate"});}function ju(t,e,n,r){let s=JSON.parse(Oa.readFileSync(Se__namespace.default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===Fu);if(!s)return;let i=Se__namespace.default.join(e,`${s.tag}.sql`);if(!Oa.existsSync(i))return;let d=crypto.createHash("sha256").update(Oa.readFileSync(i,"utf-8")).digest("hex");if(r&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===d))return;if(!en(t,"tasks"))return {hash:d,affectedRows:0};let c=t.all("PRAGMA table_info(tasks)"),u=new Set(c.map(p=>p.name));if(!u.has("stop_requested_at")||!u.has("stop_requested_epoch"))return {hash:d,affectedRows:0};let f=t.get(n`
1
+ 'use strict';var Oa=require('fs'),Se=require('path'),wi=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 Oa__namespace=/*#__PURE__*/_interopNamespace(Oa);var Se__namespace=/*#__PURE__*/_interopNamespace(Se);var wi__default=/*#__PURE__*/_interopDefault(wi);var bu=Object.defineProperty;var kt=(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 O=(t,e)=>()=>(t&&(e=t(t=0)),e);var Iu=(t,e)=>{for(var n in e)bu(t,n,{get:e[n],enumerable:true});};var h=O(()=>{});function ki(t){if(t===":memory:")return t;let e=Se.resolve(t),n=e,r=[];for(;!Oa.existsSync(n);){let s=Se.dirname(n);if(s===n)return e;r.unshift(n.slice(s.length+1)),n=s;}let o=Oa.realpathSync(n);for(let s of r)o=Se.join(o,s);return Se.resolve(o)}function Nu(t,e){let n=ki(t),r=ki(e);return process.platform==="win32"?n.toLowerCase()===r.toLowerCase():n===r}function Ke(t){if((process.env.NODE_ENV==="test"||process.env.VITEST!==void 0)&&Nu(t,Se.join(wi__default.default.homedir(),".crewx","crewx.db")))throw new Error(`${Ou}: ${t}. Set CREWX_DB to an isolated temporary path or :memory:.`);return t}var Ou;exports.BaseSqliteRepository=void 0;var se=O(()=>{h();Ou="[crewx] Refusing to open the real CrewX database from a test process";exports.BaseSqliteRepository=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||Se.join(wi__default.default.homedir(),".crewx","crewx.db");return Ke(e)}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return Oa.existsSync(e??this.resolveDbPath())}};});exports.RepositoryError=void 0;var pe=O(()=>{h();exports.RepositoryError=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 x(t,e={}){let n=Ke(t),r=kt("better-sqlite3"),{drizzle:o}=kt("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 = ${exports.CREWX_JOURNAL_SIZE_LIMIT_BYTES}`),s.exec("PRAGMA busy_timeout = 5000"),s.exec("PRAGMA foreign_keys = ON"),s.exec("PRAGMA analysis_limit = 400")),{db:o(s),runRaw:(i,d=[])=>s.prepare(i).run(...d),close:()=>s.close()}}function Cu(t,e="TRUNCATE"){if(e!=="PASSIVE"&&e!=="TRUNCATE")throw new Error(`Unsupported journal reclaim mode: ${e}`);let n=Ke(t),r=kt("better-sqlite3"),o=yi(n),s;try{s=new r(n),s.pragma("busy_timeout = 1000");let i=s.pragma(`wal_checkpoint(${e})`),d=yi(n);return {busy:i[0]?.busy===1,walBytesBefore:o,walBytesAfter:d}}finally{s?.close();}}var yi;exports.CREWX_JOURNAL_SIZE_LIMIT_BYTES=void 0;var fe=O(()=>{h();se();yi=t=>{try{return Oa__namespace.statSync(`${t}-wal`).size}catch{return 0}},exports.CREWX_JOURNAL_SIZE_LIMIT_BYTES=32*1024*1024;});function en(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Pu(t,e){if(e>0||!en(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(xu))r.has(o)||t.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}function Lu(t,e,n){if(!en(t,"__drizzle_migrations")||!en(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(Oa.readFileSync(Se__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let d=Du[i.tag];if(!d)continue;let c=Se__namespace.default.join(e,`${i.tag}.sql`);if(!Oa.existsSync(c))continue;let u=Oa.readFileSync(c,"utf-8"),f=crypto.createHash("sha256").update(u).digest("hex");if(o.has(f))continue;let p=t.all("PRAGMA table_info(tasks)"),g=new Set(p.map(_=>_.name));for(let[_,m]of Object.entries(d))g.has(_)||(t.run(`ALTER TABLE tasks ADD COLUMN ${_} ${m}`),g.add(_));}}function Ii(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 Ai(t){return t.split(/-->\s*statement-breakpoint/).map(e=>e.trim()).filter(Boolean)}function Mu(t,e,n){return t.all(`PRAGMA table_info("${e}")`).some(s=>s.name===n)}function Hu(t,e){return t.all(`SELECT name FROM sqlite_master WHERE type = 'index' AND name = '${e}'`).length>0}function kr(t,e){return e.kind==="add-column"?Mu(t,e.table,e.column):Hu(t,e.name)}function vi(t,e,n){let r=t;for(let o of Ai(e)){let s=Ii(o);s?.kind==="add-column"&&kr(r,s)||s?.kind==="create-index"&&kr(r,s)||s?.kind==="drop-index"&&!kr(r,s)||r.run(n.raw(o));}}function $u(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(Oa.readFileSync(Se__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let d=Se__namespace.default.join(e,`${i.tag}.sql`);if(!Oa.existsSync(d))continue;let c=Oa.readFileSync(d,"utf-8"),u=crypto.createHash("sha256").update(c).digest("hex");if(o.has(u))continue;let p=Ai(c).map(Ii);if(p.some(_=>!_))continue;let g=p;g.some(_=>_.kind==="add-column")&&g.some(_=>kr(t,_))&&(t.transaction(_=>{vi(_,c,n),_.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${u}, ${i.when})`);},{behavior:"immediate"}),o.add(u),console.error(`[crewx] Reconciled additive migration ${i.tag} from existing schema objects.`));}}function Uu(t,e){let{sql:n}=kt("drizzle-orm"),r=JSON.parse(Oa.readFileSync(Se__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 d=r.entries.find(u=>u.tag===i);if(!d)throw new Error(`Missing release/App compatibility migration: ${i}`);let c=Oa.readFileSync(Se__namespace.default.join(e,`${i}.sql`),"utf-8");return {entry:d,content:c,hash:crypto.createHash("sha256").update(c).digest("hex")}});t.transaction(i=>{let d=new Set(i.all(n`SELECT hash FROM __drizzle_migrations`).map(c=>c.hash));if(d.has(s[0].hash))for(let c of s.slice(1))d.has(c.hash)||(vi(i,c.content,n),i.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c.hash}, ${c.entry.when})`),d.add(c.hash),console.error(`[crewx] Replayed release/App migration ${c.entry.tag} safely.`));},{behavior:"immediate"});}function ju(t,e,n,r){let s=JSON.parse(Oa.readFileSync(Se__namespace.default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===Fu);if(!s)return;let i=Se__namespace.default.join(e,`${s.tag}.sql`);if(!Oa.existsSync(i))return;let d=crypto.createHash("sha256").update(Oa.readFileSync(i,"utf-8")).digest("hex");if(r&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===d))return;if(!en(t,"tasks"))return {hash:d,affectedRows:0};let c=t.all("PRAGMA table_info(tasks)"),u=new Set(c.map(p=>p.name));if(!u.has("stop_requested_at")||!u.has("stop_requested_epoch"))return {hash:d,affectedRows:0};let f=t.get(n`
2
2
  SELECT count(*) AS count
3
3
  FROM tasks
4
4
  WHERE status IN ('success', 'failed')
@@ -19,40 +19,40 @@
19
19
  )
20
20
  ${u}`);return {hash:d,markedPointers:f?.count??0}}function tn(t){let{migrate:e}=kt("drizzle-orm/better-sqlite3/migrator"),{sql:n}=kt("drizzle-orm"),r=[Se__namespace.default.join(__dirname,"../migrations"),Se__namespace.default.join(__dirname,"migrations"),Se__namespace.default.join(__dirname,"../../../../drizzle/migrations"),Se__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(p=>Oa.existsSync(Se__namespace.default.join(p,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
21
21
  ${r.join(`
22
- `)}`);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),Pu(t,i),s?.cnt&&(Uu(t,o),$u(t,o,n),Lu(t,o,n));let d=ju(t,o,n,!!s?.cnt),c=Wu(t,o,n,!!s?.cnt);e(t,{migrationsFolder:o});let f=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(f>0){let p=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${p} (${f} migration${f>1?"s":""} applied).`);}d&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===d.hash)&&console.error(`[crewx] Task stop-marker cleanup (${d.affectedRows} success/failed row(s) affected).`),c&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===c.hash)&&console.error(`[crewx] Thread creator pointer migration (${c.markedPointers} pointer(s) marked unverified).`);}function V(t,e){Si.has(e)||(tn(t),Si.add(e));}var Si,xu,Du,Fu,Bu,qu,bi,ce=v(()=>{h();Si=new Set,xu={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"};Du={"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"}};Fu="0027_task_stop_scope_cleanup",Bu="0033_thread_creator_boundary_guard",qu="trg_threads_creator_late_fill_guard",bi="thread_creator_unverified";});var x,So=v(()=>{h();x=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)});});exports.tasks=void 0;var Hn=v(()=>{h();exports.tasks=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_thread_creator:sqliteCore.index("idx_tasks_thread_creator").on(t.id,t.thread_id,t.actor_kind,t.actor_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 ct,Ci=v(()=>{h();Hn();ct=sqliteCore.sqliteTable("task_log_events",{id:sqliteCore.integer("id").primaryKey(),task_id:sqliteCore.text("task_id").notNull().references(()=>exports.tasks.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 el,tl,w,yr=v(()=>{h();So();el="json_extract(metadata, '$.threadTitle.state')",tl="json_extract(metadata, '$.threadTitle.priority')",w=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>x.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(el)),idx_threads_workspace_thread_priority:sqliteCore.index("idx_threads_workspace_thread_priority").on(t.workspace_id,drizzleOrm.sql.raw(tl))}));});var Di,Li=v(()=>{h();Di=sqliteCore.sqliteTable("thread_creator_unverified",{thread_id:sqliteCore.text("thread_id").notNull(),created_by_task_id:sqliteCore.text("created_by_task_id").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.thread_id,t.created_by_task_id]})}));});var Tt,Hi=v(()=>{h();Hn();Tt=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>exports.tasks.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>Tt.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 ut,$i=v(()=>{h();Hn();ut=sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>exports.tasks.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 We,Fi=v(()=>{h();yr();We=sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>w.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 nn,qi=v(()=>{h();nn=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 _e,Gi=v(()=>{h();_e=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 De,zi=v(()=>{h();De=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 F,ie,Vi=v(()=>{h();F=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`)})),ie=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 j,Yi=v(()=>{h();j=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 Xi=v(()=>{h();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("[]"),opened_by_json:sqliteCore.text("opened_by_json"),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'`),openedByJsonCheck:sqliteCore.check("ui_instances_opened_by_json_ck",drizzleOrm.sql`${t.opened_by_json} IS NULL OR (json_valid(${t.opened_by_json}) AND json_type(${t.opened_by_json}) = 'object')`),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 Zi=v(()=>{h();sqliteCore.sqliteTable("ui_action_receipts",{id:sqliteCore.text("id").primaryKey().notNull(),instance_id:sqliteCore.text("instance_id").notNull(),definition_id:sqliteCore.text("definition_id"),definition_version:sqliteCore.integer("definition_version"),definition_hash:sqliteCore.text("definition_hash"),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`(
22
+ `)}`);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),Pu(t,i),s?.cnt&&(Uu(t,o),$u(t,o,n),Lu(t,o,n));let d=ju(t,o,n,!!s?.cnt),c=Wu(t,o,n,!!s?.cnt);e(t,{migrationsFolder:o});let f=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(f>0){let p=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${p} (${f} migration${f>1?"s":""} applied).`);}d&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===d.hash)&&console.error(`[crewx] Task stop-marker cleanup (${d.affectedRows} success/failed row(s) affected).`),c&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===c.hash)&&console.error(`[crewx] Thread creator pointer migration (${c.markedPointers} pointer(s) marked unverified).`);}function V(t,e){Si.has(e)||(tn(t),Si.add(e));}var Si,xu,Du,Fu,Bu,qu,bi,ce=O(()=>{h();Si=new Set,xu={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"};Du={"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"}};Fu="0027_task_stop_scope_cleanup",Bu="0033_thread_creator_boundary_guard",qu="trg_threads_creator_late_fill_guard",bi="thread_creator_unverified";});var v,So=O(()=>{h();v=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)});});exports.tasks=void 0;var $n=O(()=>{h();exports.tasks=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_thread_creator:sqliteCore.index("idx_tasks_thread_creator").on(t.id,t.thread_id,t.actor_kind,t.actor_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 ct,Ci=O(()=>{h();$n();ct=sqliteCore.sqliteTable("task_log_events",{id:sqliteCore.integer("id").primaryKey(),task_id:sqliteCore.text("task_id").notNull().references(()=>exports.tasks.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 el,tl,w,yr=O(()=>{h();So();el="json_extract(metadata, '$.threadTitle.state')",tl="json_extract(metadata, '$.threadTitle.priority')",w=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>v.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(el)),idx_threads_workspace_thread_priority:sqliteCore.index("idx_threads_workspace_thread_priority").on(t.workspace_id,drizzleOrm.sql.raw(tl))}));});var Di,Li=O(()=>{h();Di=sqliteCore.sqliteTable("thread_creator_unverified",{thread_id:sqliteCore.text("thread_id").notNull(),created_by_task_id:sqliteCore.text("created_by_task_id").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.thread_id,t.created_by_task_id]})}));});var Tt,Hi=O(()=>{h();$n();Tt=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>exports.tasks.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>Tt.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 ut,$i=O(()=>{h();$n();ut=sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>exports.tasks.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 We,Fi=O(()=>{h();yr();We=sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>w.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 nn,qi=O(()=>{h();nn=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 _e,Gi=O(()=>{h();_e=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 De,zi=O(()=>{h();De=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 F,ie,Vi=O(()=>{h();F=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`)})),ie=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 j,Yi=O(()=>{h();j=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 Xi=O(()=>{h();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("[]"),opened_by_json:sqliteCore.text("opened_by_json"),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'`),openedByJsonCheck:sqliteCore.check("ui_instances_opened_by_json_ck",drizzleOrm.sql`${t.opened_by_json} IS NULL OR (json_valid(${t.opened_by_json}) AND json_type(${t.opened_by_json}) = 'object')`),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 Zi=O(()=>{h();sqliteCore.sqliteTable("ui_action_receipts",{id:sqliteCore.text("id").primaryKey().notNull(),instance_id:sqliteCore.text("instance_id").notNull(),definition_id:sqliteCore.text("definition_id"),definition_version:sqliteCore.integer("definition_version"),definition_hash:sqliteCore.text("definition_hash"),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`(
23
23
  (${t.status} = 'requested' AND ${t.after_revision} IS NULL AND ${t.outcome} IS NULL AND ${t.settled_at} IS NULL)
24
24
  OR
25
25
  (${t.status} = 'settled' AND ${t.after_revision} IS NOT NULL AND ${t.outcome} IS NOT NULL AND ${t.settled_at} IS NOT NULL)
26
- )`),instanceRequestUnique: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 ea=v(()=>{h();sqliteCore.sqliteTable("ui_instance_repins",{instance_id:sqliteCore.text("instance_id").notNull(),from_version:sqliteCore.integer("from_version").notNull(),from_hash:sqliteCore.text("from_hash").notNull(),to_version:sqliteCore.integer("to_version").notNull(),to_hash:sqliteCore.text("to_hash").notNull(),from_revision:sqliteCore.integer("from_revision").notNull(),to_revision:sqliteCore.integer("to_revision"),status:sqliteCore.text("status").notNull(),code:sqliteCore.text("code"),attempts:sqliteCore.integer("attempts").notNull().default(1),first_at:sqliteCore.integer("first_at").notNull(),last_at:sqliteCore.integer("last_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.instance_id,t.to_hash],name:"ui_instance_repins_pk"}),instanceIdCheck:sqliteCore.check("ui_instance_repins_instance_id_ck",drizzleOrm.sql`length(${t.instance_id}) BETWEEN 5 AND 128 AND ${t.instance_id} GLOB 'uic_*'`),fromVersionCheck:sqliteCore.check("ui_instance_repins_from_version_ck",drizzleOrm.sql`${t.from_version} >= 1`),toVersionCheck:sqliteCore.check("ui_instance_repins_to_version_ck",drizzleOrm.sql`${t.to_version} >= 1`),fromHashCheck:sqliteCore.check("ui_instance_repins_from_hash_ck",drizzleOrm.sql`length(${t.from_hash}) = 64 AND ${t.from_hash} NOT GLOB '*[^0-9a-f]*'`),toHashCheck:sqliteCore.check("ui_instance_repins_to_hash_ck",drizzleOrm.sql`length(${t.to_hash}) = 64 AND ${t.to_hash} NOT GLOB '*[^0-9a-f]*'`),fromRevisionCheck:sqliteCore.check("ui_instance_repins_from_revision_ck",drizzleOrm.sql`${t.from_revision} >= 0`),toRevisionCheck:sqliteCore.check("ui_instance_repins_to_revision_ck",drizzleOrm.sql`${t.to_revision} IS NULL OR ${t.to_revision} >= 0`),statusCheck:sqliteCore.check("ui_instance_repins_status_ck",drizzleOrm.sql`${t.status} IN ('applied', 'deferred', 'failed')`),attemptsCheck:sqliteCore.check("ui_instance_repins_attempts_ck",drizzleOrm.sql`${t.attempts} >= 1`),datesCheck:sqliteCore.check("ui_instance_repins_dates_ck",drizzleOrm.sql`${t.first_at} >= 0 AND ${t.last_at} >= ${t.first_at}`),resultCheck:sqliteCore.check("ui_instance_repins_result_ck",drizzleOrm.sql`(
26
+ )`),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 ea=O(()=>{h();sqliteCore.sqliteTable("ui_instance_repins",{instance_id:sqliteCore.text("instance_id").notNull(),from_version:sqliteCore.integer("from_version").notNull(),from_hash:sqliteCore.text("from_hash").notNull(),to_version:sqliteCore.integer("to_version").notNull(),to_hash:sqliteCore.text("to_hash").notNull(),from_revision:sqliteCore.integer("from_revision").notNull(),to_revision:sqliteCore.integer("to_revision"),status:sqliteCore.text("status").notNull(),code:sqliteCore.text("code"),attempts:sqliteCore.integer("attempts").notNull().default(1),first_at:sqliteCore.integer("first_at").notNull(),last_at:sqliteCore.integer("last_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.instance_id,t.to_hash],name:"ui_instance_repins_pk"}),instanceIdCheck:sqliteCore.check("ui_instance_repins_instance_id_ck",drizzleOrm.sql`length(${t.instance_id}) BETWEEN 5 AND 128 AND ${t.instance_id} GLOB 'uic_*'`),fromVersionCheck:sqliteCore.check("ui_instance_repins_from_version_ck",drizzleOrm.sql`${t.from_version} >= 1`),toVersionCheck:sqliteCore.check("ui_instance_repins_to_version_ck",drizzleOrm.sql`${t.to_version} >= 1`),fromHashCheck:sqliteCore.check("ui_instance_repins_from_hash_ck",drizzleOrm.sql`length(${t.from_hash}) = 64 AND ${t.from_hash} NOT GLOB '*[^0-9a-f]*'`),toHashCheck:sqliteCore.check("ui_instance_repins_to_hash_ck",drizzleOrm.sql`length(${t.to_hash}) = 64 AND ${t.to_hash} NOT GLOB '*[^0-9a-f]*'`),fromRevisionCheck:sqliteCore.check("ui_instance_repins_from_revision_ck",drizzleOrm.sql`${t.from_revision} >= 0`),toRevisionCheck:sqliteCore.check("ui_instance_repins_to_revision_ck",drizzleOrm.sql`${t.to_revision} IS NULL OR ${t.to_revision} >= 0`),statusCheck:sqliteCore.check("ui_instance_repins_status_ck",drizzleOrm.sql`${t.status} IN ('applied', 'deferred', 'failed')`),attemptsCheck:sqliteCore.check("ui_instance_repins_attempts_ck",drizzleOrm.sql`${t.attempts} >= 1`),datesCheck:sqliteCore.check("ui_instance_repins_dates_ck",drizzleOrm.sql`${t.first_at} >= 0 AND ${t.last_at} >= ${t.first_at}`),resultCheck:sqliteCore.check("ui_instance_repins_result_ck",drizzleOrm.sql`(
27
27
  (${t.status} = 'applied' AND ${t.code} IS NULL
28
28
  AND ${t.to_revision} = ${t.from_revision} + 1)
29
29
  OR
30
30
  (${t.status} IN ('deferred', 'failed') AND ${t.code} IS NOT NULL
31
31
  AND ${t.to_revision} IS NULL)
32
- )`)}));});var z,Me,Xe,na=v(()=>{h();z=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`)})),Me=sqliteCore.sqliteTable("project_criteria",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>z.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)})),Xe=sqliteCore.sqliteTable("project_events",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>z.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)}));});exports.COMMON_CODE_GROUPS=void 0;exports.COMMON_CODE_COLORS=void 0;var I,Co=v(()=>{h();exports.COMMON_CODE_GROUPS=["THREAD_STATE","THREAD_PRIORITY"],exports.COMMON_CODE_COLORS=["gray","blue","violet","green","amber","orange","red","pink"],I=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 ra,oa,sa,ia,aa,K,B,H,da=v(()=>{h();yr();ra=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],oa=["user","agent","system"],sa=["auto","manual"],ia=["decision","judgment","issue","result","pivot"],aa=["queued","running","completed","failed"],K=sqliteCore.sqliteTable("thread_events",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>w.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)})),B=sqliteCore.sqliteTable("thread_highlight_runs",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>w.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)})),H=sqliteCore.sqliteTable("thread_highlights",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>w.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 ua=v(()=>{h();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 ue=v(()=>{h();So();Hn();Ci();yr();Li();Hi();$i();Fi();qi();Gi();zi();Vi();Yi();Xi();Zi();ea();na();Co();da();ua();});var un,qo,Pa,jo=v(()=>{h();un={"claude-fable-5-1":{input:10,cachedInput:.25,output:50},"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5-5":{input:4,cachedInput:.2,output:20},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{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-6-sol":{input:2,cachedInput:.2,output:10},"gpt-6-luna":{input:.1,cachedInput:.01,output:.5},"gpt-5.6-sol":{input:4,cachedInput:.4,output:20},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.7":{input:2,cachedInput:.5,output:6},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},qo=new Set(["gpt-5.3-codex-spark"]),Pa=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-opus-5-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-6-luna","gpt-6-sol","gpt-oss-120b","grok-4.5","grok-4.6","grok-4.7"]);});function Wo(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 Rp(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),qn;let e=Wo(t),n=yp[e];if(n)return Dr[n]??un[n]??qn;if(Dr[e])return Dr[e];if(un[e])return un[e];if(qo.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),qn;if(Pa.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),qn;let r={...un,...Dr};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),qn}function Ep(t,e,n,r=0,o){let s=Rp(n),i=Math.min(r,t),c=(t-i)*s.input/1e6,u=i*s.cachedInput/1e6,f=e*s.output/1e6;return c+u+f}function Da(t,e,n,r,o,s){return t&&t>0?t:!e&&!n?0:Ep(e??0,n??0,o,r??0)}var yp,qn,Dr,Lr=v(()=>{h();jo();jo();yp={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"},qn={input:0,cachedInput:0,output:0},Dr={};});function $a(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function Ma(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function Ua(t){return Number.isSafeInteger(t)&&t>0}function vp(t,e){return new Promise(n=>{let r;try{r=child_process.spawn(t,e,{windowsHide:!0});}catch(u){n({status:null,stdout:"",stderr:"",error:$a(u)});return}let o="",s="",i=false,d,c=setTimeout(()=>{try{r.kill();}catch{}d({status:null,stdout:o,stderr:s,error:new Error(`Command timed out after ${La}ms`)});},La);d=u=>{i||(i=true,clearTimeout(c),n(u));},r.stdout?.setEncoding("utf8"),r.stderr?.setEncoding("utf8"),r.stdout?.on("data",u=>{o+=String(u);}),r.stderr?.on("data",u=>{s+=String(u);}),r.once("error",u=>{d({status:null,stdout:o,stderr:s,error:u});}),r.once("close",u=>{d({status:u,stdout:o,stderr:s});});})}async function Fa(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):vp(t,e)}function Op(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function Np(){return new Promise(t=>{setImmediate(t);})}function $t(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return Ma(n)==="ESRCH"?"not_found":Ma(n)==="EPERM"?"alive":"unknown"}}function Cp(t,e){let n=$t(-t,e),r=$t(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function Ba(t,e,n,r){let o=Math.max(0,n),s=Math.max(1,r.pollIntervalMs??Ip),i=Date.now()+o,d,c=o===0,u=r.sleep?Promise.resolve().then(()=>r.sleep(o)).then(()=>{},()=>{}):new Promise(f=>{d=setTimeout(f,o);});u.then(()=>{c=true;});try{for(await Np();;){let f=Cp(t,e);if(f==="not_found")return f;let p=i-Date.now();if(c||p<=0)return f;await Promise.race([u,Op(Math.min(s,p))]);}}finally{d!==void 0&&clearTimeout(d);}}async function Ha(t,e,n,r,o){let s=await Ba(t,e,o.hardConfirmMs??Ap,{...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 zo(t,e,n={}){if(!Ua(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 Fa(o,s,n);}catch{return "unknown"}if(i.error||i.status!==0)return "unknown";let d=i.stdout.trim();if(!d)return "not_found";let c=r==="win32"?d.toLowerCase():d;return e.filter(f=>f.trim().length>0).some(f=>{let p=r==="win32"?f.toLowerCase():f;return c.includes(p)})?"owned":"not_owned"}async function Ko(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(!Ua(t))return o("Invalid process ID");let s=e.kill??process.kill,i=$t(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 Fa("taskkill",["/PID",String(t),"/T","/F"],e);}catch(m){g={status:null,stdout:"",stderr:"",error:$a(m)};}let _=$t(t,s);return _==="not_found"?g.status===0&&!g.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:o(_==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let d,c=e.signal??"SIGKILL";try{s(-t,c);}catch(g){d=g;}if(c==="SIGKILL")return Ha(t,s,d,r,e);if(await Ba(t,s,e.graceMs??bp,e)==="not_found")return d?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r};let f;try{s(-t,"SIGKILL");}catch(g){f=g;}let p=await Ha(t,s,f,r,e);return p.status==="terminated"?p:p.status==="not_found"?d?p:{status:"terminated",pid:t,method:r}:o(p.error??"Process termination failed")}var La,Go,bp,Ip,Ap,Vo=v(()=>{h();La=3e3,Go="SIGINT",bp=2e3,Ip=25,Ap=100;});function za(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new exports.RepositoryError("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new exports.RepositoryError("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function Wa(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new exports.RepositoryError("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new exports.RepositoryError("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,o)=>za(r,o))}catch(r){throw r instanceof exports.RepositoryError?new exports.RepositoryError("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function Ka(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new exports.RepositoryError("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new exports.RepositoryError("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new exports.RepositoryError("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function Ga(t){return {taskId:t.id,source:Ka(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function Hp(t){if(!Number.isInteger(t)||t<0)throw new exports.RepositoryError("VALIDATION","Task log tail limit must be a non-negative integer")}exports.TaskLogRepository=void 0;var Mr=v(()=>{h();se();fe();ce();pe();ue();exports.TaskLogRepository=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?Ke(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}findStateRow(e,n){return e.db.select({id:exports.tasks.id,log_storage:exports.tasks.log_storage,last_log_seq:exports.tasks.last_log_seq,log_revision:exports.tasks.log_revision,logs:exports.tasks.logs}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,n)).limit(1).get()}findStateRowInTransaction(e,n){return e.select({id:exports.tasks.id,log_storage:exports.tasks.log_storage,last_log_seq:exports.tasks.last_log_seq,log_revision:exports.tasks.log_revision,logs:exports.tasks.logs}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,n)).limit(1).get()}requireStateRowInTransaction(e,n){let r=this.findStateRowInTransaction(e,n);if(!r)throw new exports.RepositoryError("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)=>za(s,i));if(r.length===0){let s=this.getLogState(e);if(!s)throw new exports.RepositoryError("NOT_FOUND",`Task not found: ${e}`);return s}let o=this.openHandle(true);try{return o.db.transaction(i=>{let d=this.requireStateRowInTransaction(i,e),c=Ka(d);if(c==="blob"){let g=Wa(e,d.logs);if(i.update(exports.tasks).set({logs:JSON.stringify([...g,...r]),log_revision:drizzleOrm.sql`${exports.tasks.log_revision} + 1`}).where(drizzleOrm.eq(exports.tasks.id,e)).run().changes!==1)throw new exports.RepositoryError("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:c,revision:d.log_revision+1,lastSeq:d.last_log_seq}}let u=d.last_log_seq+1,f=d.last_log_seq+r.length;if(i.insert(ct).values(r.map((g,_)=>({task_id:e,seq:u+_,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),i.update(exports.tasks).set({last_log_seq:f,log_revision:drizzleOrm.sql`${exports.tasks.log_revision} + 1`}).where(drizzleOrm.eq(exports.tasks.id,e)).run().changes!==1)throw new exports.RepositoryError("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:c,revision:d.log_revision+1,lastSeq:f}},{behavior:"immediate"})}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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?Ga(r):void 0}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return Hp(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=Ga(s);if(i.source==="blob"){let f=Wa(e,s.logs);return {...i,entries:n===void 0?f:f.slice(Math.max(0,f.length-n))}}let d=o.select({seq:ct.seq,timestamp:ct.timestamp,level:ct.level,message:ct.message}).from(ct).where(drizzleOrm.eq(ct.task_id,e)).orderBy(n===void 0?drizzleOrm.asc(ct.seq):drizzleOrm.desc(ct.seq)),u=(n===void 0?d.all():d.limit(n).all()).map(({timestamp:f,level:p,message:g})=>({timestamp:f,level:p,message:g}));return n!==void 0&&u.reverse(),{...i,entries:u}},{behavior:"deferred"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to read task logs",o)}finally{r.close();}}};});var Va=v(()=>{h();});var ne,Ft=v(()=>{h();ne=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 Bt,Jo=v(()=>{h();Ft();Bt=class extends ne{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Xo(t){if(!Hr(t)||t.type!=="item.started"||!Ya(t)||!Ja(t))return false;let e=t.item;return !Hr(e)||!Ya(e)||!Ja(e)||!Yo(e.id)?false:e.type==="web_search"?e.query===""&&Hr(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=>Hr(n)&&Yo(n.path)&&Yo(n.kind)):false}function Hr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Xa(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Yo(t){return typeof t=="string"&&t.trim().length>0}function Ja(t){return !Xa(t,"status")||t.status==="in_progress"}function Ya(t){for(let e of ["error","errors","isError","is_error"])if(Xa(t,e))return false;return true}var Qo=v(()=>{h();});function $p(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?zp[e]:void 0;return s?s(r,o):Object.values(Za).some(i=>i(r,o))}function ln(t,e){let n=t.split(`
33
- `).filter(r=>r.trim());return n.length===0?false:n.every(r=>$p(r,e))}function Ue(t){return typeof t=="object"&&t!==null}function Qa(t,e){if(e==="assistant"||e==="user"){let n=t.message;return Ue(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||Ue(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?Ue(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function Up(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:Qa(t,e)}function Fp(t,e){if(e==="error")return typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||Ue(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 Ue(n)&&typeof n.type=="string"}return false}function Bp(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||Ue(t.part):e==="text"||e==="tool_use"?Ue(t.part):e==="result"?typeof t.result=="string":false}function qp(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||Ue(t.part)||e==="result"&&typeof t.result=="string")}function jp(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?Ue(t.data):e==="result"?typeof t.result=="string":false}function Wp(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 Gp(t,e){return e==="available_commands"?Ue(t.tools)||Ue(t.commands):e==="usage"?Ue(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||Ue(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var Za,zp,$r=v(()=>{h();Qo();Za={claude:Qa,codex:Fp,opencode:Bp,copilot:jp,gemini:Wp},zp={...Za,claude:Up,opencode:qp,grok:Gp,antigravity:()=>false};});function gt(t){return /crewx\s+(q|query|x|execute)\s/.test(t)}function ht(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 pn=v(()=>{h();});function Jp(t){let e=Yp(t),n=e.map((s,i)=>({line:s,index:i})).filter(({line:s})=>Qp(s.value)),r=Xp(e);return {result:n.length===1&&n[0].index===r?Zp(n[0].line.value):null,resultPreview:nf(e,n),hasReservedLine:n.length>0}}function Ze(t,e){let n=Jp(t);return {resultPreview:n.resultPreview,isError:e||n.result?.isError===true,...n.hasReservedLine?{delegationResult:n.result}:{}}}function Yp(t){let e=[],n=0;for(let r=0;r<t.length;r++){let o=t[r];if(o!==`
32
+ )`)}));});var z,Me,Xe,na=O(()=>{h();z=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`)})),Me=sqliteCore.sqliteTable("project_criteria",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>z.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)})),Xe=sqliteCore.sqliteTable("project_events",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>z.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)}));});exports.COMMON_CODE_GROUPS=void 0;exports.COMMON_CODE_COLORS=void 0;var I,Co=O(()=>{h();exports.COMMON_CODE_GROUPS=["THREAD_STATE","THREAD_PRIORITY"],exports.COMMON_CODE_COLORS=["gray","blue","violet","green","amber","orange","red","pink"],I=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 ra,oa,sa,ia,aa,K,B,$,da=O(()=>{h();yr();ra=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],oa=["user","agent","system"],sa=["auto","manual"],ia=["decision","judgment","issue","result","pivot"],aa=["queued","running","completed","failed"],K=sqliteCore.sqliteTable("thread_events",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>w.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)})),B=sqliteCore.sqliteTable("thread_highlight_runs",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>w.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)})),$=sqliteCore.sqliteTable("thread_highlights",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>w.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 ua=O(()=>{h();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 ue=O(()=>{h();So();$n();Ci();yr();Li();Hi();$i();Fi();qi();Gi();zi();Vi();Yi();Xi();Zi();ea();na();Co();da();ua();});var un,qo,Pa,jo=O(()=>{h();un={"claude-fable-5-1":{input:10,cachedInput:.25,output:50},"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5-5":{input:4,cachedInput:.2,output:20},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{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-6-sol":{input:2,cachedInput:.2,output:10},"gpt-6-luna":{input:.1,cachedInput:.01,output:.5},"gpt-5.6-sol":{input:4,cachedInput:.4,output:20},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.7":{input:2,cachedInput:.5,output:6},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},qo=new Set(["gpt-5.3-codex-spark"]),Pa=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-opus-5-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-6-luna","gpt-6-sol","gpt-oss-120b","grok-4.5","grok-4.6","grok-4.7"]);});function Wo(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 Rp(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),jn;let e=Wo(t),n=yp[e];if(n)return Dr[n]??un[n]??jn;if(Dr[e])return Dr[e];if(un[e])return un[e];if(qo.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),jn;if(Pa.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),jn;let r={...un,...Dr};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),jn}function Ep(t,e,n,r=0,o){let s=Rp(n),i=Math.min(r,t),c=(t-i)*s.input/1e6,u=i*s.cachedInput/1e6,f=e*s.output/1e6;return c+u+f}function Da(t,e,n,r,o,s){return t&&t>0?t:!e&&!n?0:Ep(e??0,n??0,o,r??0)}var yp,jn,Dr,Lr=O(()=>{h();jo();jo();yp={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"},jn={input:0,cachedInput:0,output:0},Dr={};});function $a(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function Ma(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function Ua(t){return Number.isSafeInteger(t)&&t>0}function vp(t,e){return new Promise(n=>{let r;try{r=child_process.spawn(t,e,{windowsHide:!0});}catch(u){n({status:null,stdout:"",stderr:"",error:$a(u)});return}let o="",s="",i=false,d,c=setTimeout(()=>{try{r.kill();}catch{}d({status:null,stdout:o,stderr:s,error:new Error(`Command timed out after ${La}ms`)});},La);d=u=>{i||(i=true,clearTimeout(c),n(u));},r.stdout?.setEncoding("utf8"),r.stderr?.setEncoding("utf8"),r.stdout?.on("data",u=>{o+=String(u);}),r.stderr?.on("data",u=>{s+=String(u);}),r.once("error",u=>{d({status:null,stdout:o,stderr:s,error:u});}),r.once("close",u=>{d({status:u,stdout:o,stderr:s});});})}async function Fa(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):vp(t,e)}function Op(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function Np(){return new Promise(t=>{setImmediate(t);})}function $t(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return Ma(n)==="ESRCH"?"not_found":Ma(n)==="EPERM"?"alive":"unknown"}}function Cp(t,e){let n=$t(-t,e),r=$t(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function Ba(t,e,n,r){let o=Math.max(0,n),s=Math.max(1,r.pollIntervalMs??Ip),i=Date.now()+o,d,c=o===0,u=r.sleep?Promise.resolve().then(()=>r.sleep(o)).then(()=>{},()=>{}):new Promise(f=>{d=setTimeout(f,o);});u.then(()=>{c=true;});try{for(await Np();;){let f=Cp(t,e);if(f==="not_found")return f;let p=i-Date.now();if(c||p<=0)return f;await Promise.race([u,Op(Math.min(s,p))]);}}finally{d!==void 0&&clearTimeout(d);}}async function Ha(t,e,n,r,o){let s=await Ba(t,e,o.hardConfirmMs??Ap,{...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 zo(t,e,n={}){if(!Ua(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 Fa(o,s,n);}catch{return "unknown"}if(i.error||i.status!==0)return "unknown";let d=i.stdout.trim();if(!d)return "not_found";let c=r==="win32"?d.toLowerCase():d;return e.filter(f=>f.trim().length>0).some(f=>{let p=r==="win32"?f.toLowerCase():f;return c.includes(p)})?"owned":"not_owned"}async function Ko(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(!Ua(t))return o("Invalid process ID");let s=e.kill??process.kill,i=$t(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 Fa("taskkill",["/PID",String(t),"/T","/F"],e);}catch(m){g={status:null,stdout:"",stderr:"",error:$a(m)};}let _=$t(t,s);return _==="not_found"?g.status===0&&!g.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:o(_==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let d,c=e.signal??"SIGKILL";try{s(-t,c);}catch(g){d=g;}if(c==="SIGKILL")return Ha(t,s,d,r,e);if(await Ba(t,s,e.graceMs??bp,e)==="not_found")return d?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r};let f;try{s(-t,"SIGKILL");}catch(g){f=g;}let p=await Ha(t,s,f,r,e);return p.status==="terminated"?p:p.status==="not_found"?d?p:{status:"terminated",pid:t,method:r}:o(p.error??"Process termination failed")}var La,Go,bp,Ip,Ap,Vo=O(()=>{h();La=3e3,Go="SIGINT",bp=2e3,Ip=25,Ap=100;});function za(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new exports.RepositoryError("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new exports.RepositoryError("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function Wa(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new exports.RepositoryError("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new exports.RepositoryError("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,o)=>za(r,o))}catch(r){throw r instanceof exports.RepositoryError?new exports.RepositoryError("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function Ka(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new exports.RepositoryError("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new exports.RepositoryError("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new exports.RepositoryError("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function Ga(t){return {taskId:t.id,source:Ka(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function Hp(t){if(!Number.isInteger(t)||t<0)throw new exports.RepositoryError("VALIDATION","Task log tail limit must be a non-negative integer")}exports.TaskLogRepository=void 0;var Mr=O(()=>{h();se();fe();ce();pe();ue();exports.TaskLogRepository=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?Ke(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}findStateRow(e,n){return e.db.select({id:exports.tasks.id,log_storage:exports.tasks.log_storage,last_log_seq:exports.tasks.last_log_seq,log_revision:exports.tasks.log_revision,logs:exports.tasks.logs}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,n)).limit(1).get()}findStateRowInTransaction(e,n){return e.select({id:exports.tasks.id,log_storage:exports.tasks.log_storage,last_log_seq:exports.tasks.last_log_seq,log_revision:exports.tasks.log_revision,logs:exports.tasks.logs}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,n)).limit(1).get()}requireStateRowInTransaction(e,n){let r=this.findStateRowInTransaction(e,n);if(!r)throw new exports.RepositoryError("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)=>za(s,i));if(r.length===0){let s=this.getLogState(e);if(!s)throw new exports.RepositoryError("NOT_FOUND",`Task not found: ${e}`);return s}let o=this.openHandle(true);try{return o.db.transaction(i=>{let d=this.requireStateRowInTransaction(i,e),c=Ka(d);if(c==="blob"){let g=Wa(e,d.logs);if(i.update(exports.tasks).set({logs:JSON.stringify([...g,...r]),log_revision:drizzleOrm.sql`${exports.tasks.log_revision} + 1`}).where(drizzleOrm.eq(exports.tasks.id,e)).run().changes!==1)throw new exports.RepositoryError("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:c,revision:d.log_revision+1,lastSeq:d.last_log_seq}}let u=d.last_log_seq+1,f=d.last_log_seq+r.length;if(i.insert(ct).values(r.map((g,_)=>({task_id:e,seq:u+_,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),i.update(exports.tasks).set({last_log_seq:f,log_revision:drizzleOrm.sql`${exports.tasks.log_revision} + 1`}).where(drizzleOrm.eq(exports.tasks.id,e)).run().changes!==1)throw new exports.RepositoryError("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:c,revision:d.log_revision+1,lastSeq:f}},{behavior:"immediate"})}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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?Ga(r):void 0}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return Hp(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=Ga(s);if(i.source==="blob"){let f=Wa(e,s.logs);return {...i,entries:n===void 0?f:f.slice(Math.max(0,f.length-n))}}let d=o.select({seq:ct.seq,timestamp:ct.timestamp,level:ct.level,message:ct.message}).from(ct).where(drizzleOrm.eq(ct.task_id,e)).orderBy(n===void 0?drizzleOrm.asc(ct.seq):drizzleOrm.desc(ct.seq)),u=(n===void 0?d.all():d.limit(n).all()).map(({timestamp:f,level:p,message:g})=>({timestamp:f,level:p,message:g}));return n!==void 0&&u.reverse(),{...i,entries:u}},{behavior:"deferred"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to read task logs",o)}finally{r.close();}}};});var Va=O(()=>{h();});var ne,Ft=O(()=>{h();ne=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 Bt,Jo=O(()=>{h();Ft();Bt=class extends ne{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Xo(t){if(!Hr(t)||t.type!=="item.started"||!Ya(t)||!Ja(t))return false;let e=t.item;return !Hr(e)||!Ya(e)||!Ja(e)||!Yo(e.id)?false:e.type==="web_search"?e.query===""&&Hr(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=>Hr(n)&&Yo(n.path)&&Yo(n.kind)):false}function Hr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Xa(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Yo(t){return typeof t=="string"&&t.trim().length>0}function Ja(t){return !Xa(t,"status")||t.status==="in_progress"}function Ya(t){for(let e of ["error","errors","isError","is_error"])if(Xa(t,e))return false;return true}var Qo=O(()=>{h();});function $p(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?zp[e]:void 0;return s?s(r,o):Object.values(Za).some(i=>i(r,o))}function ln(t,e){let n=t.split(`
33
+ `).filter(r=>r.trim());return n.length===0?false:n.every(r=>$p(r,e))}function Ue(t){return typeof t=="object"&&t!==null}function Qa(t,e){if(e==="assistant"||e==="user"){let n=t.message;return Ue(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||Ue(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?Ue(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function Up(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:Qa(t,e)}function Fp(t,e){if(e==="error")return typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||Ue(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 Ue(n)&&typeof n.type=="string"}return false}function Bp(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||Ue(t.part):e==="text"||e==="tool_use"?Ue(t.part):e==="result"?typeof t.result=="string":false}function qp(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||Ue(t.part)||e==="result"&&typeof t.result=="string")}function jp(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?Ue(t.data):e==="result"?typeof t.result=="string":false}function Wp(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 Gp(t,e){return e==="available_commands"?Ue(t.tools)||Ue(t.commands):e==="usage"?Ue(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||Ue(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var Za,zp,$r=O(()=>{h();Qo();Za={claude:Qa,codex:Fp,opencode:Bp,copilot:jp,gemini:Wp},zp={...Za,claude:Up,opencode:qp,grok:Gp,antigravity:()=>false};});function gt(t){return /crewx\s+(q|query|x|execute)\s/.test(t)}function ht(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 pn=O(()=>{h();});function Jp(t){let e=Yp(t),n=e.map((s,i)=>({line:s,index:i})).filter(({line:s})=>Qp(s.value)),r=Xp(e);return {result:n.length===1&&n[0].index===r?Zp(n[0].line.value):null,resultPreview:nf(e,n),hasReservedLine:n.length>0}}function Ze(t,e){let n=Jp(t);return {resultPreview:n.resultPreview,isError:e||n.result?.isError===true,...n.hasReservedLine?{delegationResult:n.result}:{}}}function Yp(t){let e=[],n=0;for(let r=0;r<t.length;r++){let o=t[r];if(o!==`
34
34
  `&&o!=="\r")continue;let s=o==="\r"&&t[r+1]===`
35
35
  `?`\r
36
- `: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 Xp(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function Qp(t){return t.trimStart().startsWith(Kp)}function Zp(t){let e=t.trim();if(!e.startsWith(ed)||!e.endsWith("]]"))return null;let n=e.slice(ed.length,-2);if(!n)return null;try{return ef(JSON.parse(n))}catch{return null}}function ef(t){return tf(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function tf(t){if(!rf(t)||Object.keys(t).some(r=>!Vp.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?td(t.taskId)&&td(t.agentId):t.isError===true}function nf(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 td(t){return typeof t=="string"&&t.trim().length>0}function rf(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var ed,Kp,Vp,fn=v(()=>{h();ed="[[crewx:delegation-result ",Kp="[[crewx:delegation-result",Vp=new Set(["schema","taskId","agentId","isError"]);});function et(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 gn=v(()=>{h();});var nd,Ur,Zo,Fr=v(()=>{h();nd=["none","minimal","low","medium","high","xhigh","max","ultra"],Ur={claude:["low","medium","high","xhigh","max"],codex:["none","minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]},Zo={claude:{models:[{id:"claude-fable-5-1",name:"Claude Fable 5.1",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-5-5",name:"Claude Opus 5.5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-5",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-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"medium"},"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-6-sol",name:"GPT-6 Sol",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-6-luna",name:"GPT-6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed"},{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"],defaultEffort:"xhigh"},"gpt-6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"max"},"gpt-6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"medium"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{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.7",name:"Grok 4.7",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship"},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.7":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Object.fromEntries(Object.entries(Zo).map(([t,e])=>[t,e.models]));});function es(t){return sf[t]??t}function df(t){return af.get(t)??t}function ts(t){if(!t)return {};let e=uf.get(t);return e?{...e}:{model:t}}function ns(t,e){return t==="antigravity"||t==="cli/antigravity"?ts(e):e===void 0?{}:{model:df(e)}}var of,sf,af,cf,uf,Wn=v(()=>{h();of=[{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]"}],sf={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};af=new Map(of.map(({baseModelId:t,catalogModelId:e})=>[t,e]));cf=[{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"}],uf=new Map(cf.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function pf(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function At(t){return Br(t).models}function Br(t){return lf[t]??Zo[t]??pf()}function Gn(t,e){let n=Br(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=ns(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function rd(t){return Br(t).modelOverrides}function od(){return At("claude")}function sd(){return At("codex")}function id(){return At("copilot")}function ad(){return At("antigravity")}var lf,qt=v(()=>{h();Fr();Lr();Wn();lf={};});function dd(t){return ff[t]??t}var ff,cd=v(()=>{h();qt();Wn();ff={auto:"default"};});function qr(t,e){return (Ur[t]??[]).includes(e)}function vt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return gf.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function ud(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 ld(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 pd(t){return !t||!qr("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function fd(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=dd(t);return e.has(n)?["--permission-mode",n]:[]}function gd(t){return t?qr("claude",t)?["--effort",t]:[]:[]}function hd(t){return t==="default"?[]:t&&hf.has(t)?["--permission-mode",t]:[]}function _d(t){return t===true?["--always-approve"]:[]}function md(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 kd(t){return t?qr("grok",t)?["--effort",t]:[]:[]}function Td(t){if(!t)return [];switch(es(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function wd(t){return t?qr("antigravity",t)?["--effort",t]:[]:[]}var gf,hf,zn=v(()=>{h();cd();Wn();Fr();gf=new Set(nd);hf=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function _f(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 mf(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,d="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,c=i!==void 0?i:d??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:o,cachedInputTokens:c}}function kf(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 yd(t){let e=new Map,n;for(let s of t.split(`
36
+ `: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 Xp(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function Qp(t){return t.trimStart().startsWith(Kp)}function Zp(t){let e=t.trim();if(!e.startsWith(ed)||!e.endsWith("]]"))return null;let n=e.slice(ed.length,-2);if(!n)return null;try{return ef(JSON.parse(n))}catch{return null}}function ef(t){return tf(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function tf(t){if(!rf(t)||Object.keys(t).some(r=>!Vp.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?td(t.taskId)&&td(t.agentId):t.isError===true}function nf(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 td(t){return typeof t=="string"&&t.trim().length>0}function rf(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var ed,Kp,Vp,fn=O(()=>{h();ed="[[crewx:delegation-result ",Kp="[[crewx:delegation-result",Vp=new Set(["schema","taskId","agentId","isError"]);});function et(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 gn=O(()=>{h();});var nd,Ur,Zo,Fr=O(()=>{h();nd=["none","minimal","low","medium","high","xhigh","max","ultra"],Ur={claude:["low","medium","high","xhigh","max"],codex:["none","minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]},Zo={claude:{models:[{id:"claude-fable-5-1",name:"Claude Fable 5.1",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-5-5",name:"Claude Opus 5.5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-5",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-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"medium"},"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-6-sol",name:"GPT-6 Sol",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-6-luna",name:"GPT-6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed"},{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"],defaultEffort:"xhigh"},"gpt-6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"max"},"gpt-6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"medium"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{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.7",name:"Grok 4.7",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship"},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.7":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Object.fromEntries(Object.entries(Zo).map(([t,e])=>[t,e.models]));});function es(t){return sf[t]??t}function df(t){return af.get(t)??t}function ts(t){if(!t)return {};let e=uf.get(t);return e?{...e}:{model:t}}function ns(t,e){return t==="antigravity"||t==="cli/antigravity"?ts(e):e===void 0?{}:{model:df(e)}}var of,sf,af,cf,uf,Gn=O(()=>{h();of=[{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]"}],sf={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};af=new Map(of.map(({baseModelId:t,catalogModelId:e})=>[t,e]));cf=[{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"}],uf=new Map(cf.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function pf(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function At(t){return Br(t).models}function Br(t){return lf[t]??Zo[t]??pf()}function zn(t,e){let n=Br(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=ns(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function rd(t){return Br(t).modelOverrides}function od(){return At("claude")}function sd(){return At("codex")}function id(){return At("copilot")}function ad(){return At("antigravity")}var lf,qt=O(()=>{h();Fr();Lr();Gn();lf={};});function dd(t){return ff[t]??t}var ff,cd=O(()=>{h();qt();Gn();ff={auto:"default"};});function qr(t,e){return (Ur[t]??[]).includes(e)}function vt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return gf.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function ud(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 ld(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 pd(t){return !t||!qr("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function fd(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=dd(t);return e.has(n)?["--permission-mode",n]:[]}function gd(t){return t?qr("claude",t)?["--effort",t]:[]:[]}function hd(t){return t==="default"?[]:t&&hf.has(t)?["--permission-mode",t]:[]}function _d(t){return t===true?["--always-approve"]:[]}function md(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 kd(t){return t?qr("grok",t)?["--effort",t]:[]:[]}function Td(t){if(!t)return [];switch(es(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function wd(t){return t?qr("antigravity",t)?["--effort",t]:[]:[]}var gf,hf,Kn=O(()=>{h();cd();Gn();Fr();gf=new Set(nd);hf=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function _f(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 mf(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,d="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,c=i!==void 0?i:d??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:o,cachedInputTokens:c}}function kf(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 yd(t){let e=new Map,n;for(let s of t.split(`
37
37
  `))if(s.trim())try{let i=JSON.parse(s);if(i.type!=="assistant")continue;let d=i.message,c=d?.id,u=d?.usage;if(typeof c!="string"||!u)continue;let f=Number(u.input_tokens??0),p=Number(u.cache_read_input_tokens??0);e.set(c,{inputTokens:f+p,cachedInputTokens:p});let g=d?.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 hn(t){if(!t||!t.trim())return;let e=null,n=null;for(let r of t.split(`
38
- `))if(r.trim())try{let o=JSON.parse(r),s=kf(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=_f(o)??mf(o);i&&(e=i);}catch{}return n||(e??void 0)}var Kn=v(()=>{h();});function tt(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 jt=v(()=>{h();});function Rd(t){let e=t.split(`
38
+ `))if(r.trim())try{let o=JSON.parse(r),s=kf(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=_f(o)??mf(o);i&&(e=i);}catch{}return n||(e??void 0)}var Vn=O(()=>{h();});function tt(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 jt=O(()=>{h();});function Rd(t){let e=t.split(`
39
39
  `).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 yf(t){let e=t.split(`
40
40
  `).filter(n=>n.trim());for(let n of e.reverse())try{let r=JSON.parse(n);if(typeof r=="object"&&r!==null&&r.type==="result")return r}catch{}}function Rf(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Ed(t){let e=Rf(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=Sf(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(bf(n))return `Claude rate limit: ${n}`}}function Ef(t){let e=Ed(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 Sf(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
41
41
 
42
42
  `):""}function bf(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function If(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=et(s);return r==="Bash"&&gt(i)?ht(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(d=>d.type==="text"&&typeof d.text=="string").map(d=>d.text).join(`
43
- `):i=JSON.stringify(s),{timestamp:t,type:"tool_result",toolUseId:o,...Ze(i,r)}}return null}var Tf,wf,jr,rs=v(()=>{h();Jo();Ft();$r();pn();fn();gn();zn();qt();Kn();jt();Tf=new Set(["tool_progress"]),wf="cli/claude";jr={command:"claude",meta:{displayName:"Claude",models:od(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=vt(e.model),s=e.effort??o,i=fd(e.mode),d=gd(s),c=r?["--model",r]:[],u=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",...u,...i,...d,...c,...p],stdinMessage:t}:{args:["--output-format","stream-json","--verbose",...u,...i,...d,...c,...p],stdinMessage:t}}return {args:["-p","--output-format","stream-json","--verbose",...u,...i,...d,...c],stdinMessage:t}},extractText(t){let e=yf(t);if(e?.is_error===true){let o=jr.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 ne(`Claude ended without an answer (subtype=${s}, terminal_reason=${i})`,wf,{code:"EMPTY_OUTPUT",kind:"permanent"})}let n=Rd(t);if(n)return n;let r=t.trim();return ln(r,"claude")?"":r},extractPartialText(t){return Rd(t)},extractFailure(t){try{let e=JSON.parse(t),n=Ed(e);if(n)return new Bt(n)}catch{}return null},parseResultMeta(t){let e=t.split(`
43
+ `):i=JSON.stringify(s),{timestamp:t,type:"tool_result",toolUseId:o,...Ze(i,r)}}return null}var Tf,wf,jr,rs=O(()=>{h();Jo();Ft();$r();pn();fn();gn();Kn();qt();Vn();jt();Tf=new Set(["tool_progress"]),wf="cli/claude";jr={command:"claude",meta:{displayName:"Claude",models:od(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=vt(e.model),s=e.effort??o,i=fd(e.mode),d=gd(s),c=r?["--model",r]:[],u=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",...u,...i,...d,...c,...p],stdinMessage:t}:{args:["--output-format","stream-json","--verbose",...u,...i,...d,...c,...p],stdinMessage:t}}return {args:["-p","--output-format","stream-json","--verbose",...u,...i,...d,...c],stdinMessage:t}},extractText(t){let e=yf(t);if(e?.is_error===true){let o=jr.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 ne(`Claude ended without an answer (subtype=${s}, terminal_reason=${i})`,wf,{code:"EMPTY_OUTPUT",kind:"permanent"})}let n=Rd(t);if(n)return n;let r=t.trim();return ln(r,"claude")?"":r},extractPartialText(t){return Rd(t)},extractFailure(t){try{let e=JSON.parse(t),n=Ed(e);if(n)return new Bt(n)}catch{}return null},parseResultMeta(t){let e=t.split(`
44
44
  `);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,d=o.modelUsage,c=d?Object.keys(d)[0]??null:null;return {usage:i,model:c}}}catch{}let n=yd(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=tt(n,e??new Date().toISOString()),s=Ef(n);if(s)return [{timestamp:o,type:"error",content:s,errorMessage:s}];let i=n.output_file,d=n.summary;if(r==="system"&&n.subtype==="task_notification"&&n.status==="completed"&&typeof i=="string"&&i.trim().length>0&&typeof d=="string"&&d.trim().length>0)return [{timestamp:o,type:"text",content:d}];if(r!=="assistant"&&r!=="user")return [];let u=n.message?.content;if(!Array.isArray(u))return [];let f=[];for(let p of u){let g=If(o,p);g&&f.push(g);}return f},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Tf.has(r):!1}catch{return false}}};});function Sd(t){let e=t.split(`
45
- `).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 Af,os,ss=v(()=>{h();$r();Kn();pn();gn();fn();qt();Fr();jt();Af=new Set(["interactive","plan","autopilot"]);os={command:"copilot",meta:{displayName:"Copilot",models:id()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&Af.has(e.mode)&&r.push("--mode",e.mode),e.effort&&(Ur.copilot??[]).includes(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=Sd(t);if(e)return e;let n=t.trim();return ln(n,"copilot")?"":n},extractPartialText(t){return Sd(t)},parseResultMeta(t){let e=hn(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=tt(n,e??new Date().toISOString()),i=o.toolCallId;if(r==="tool.execution_start"){let d=String(o.toolName||""),c=o.arguments,u=et(c);return (d==="bash"||d==="Bash")&&gt(u)?[ht(s,u,i)]:[{timestamp:s,type:"tool_use",toolName:d,toolInput:u,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let d=o.error;if(d)return [{timestamp:s,type:"tool_result",...i&&{toolUseId:i},...Ze(String(d.message||""),true)}];let c=o.result,u=String(c?.content||"");return [{timestamp:s,type:"tool_result",...i&&{toolUseId:i},...Ze(u,false)}]}if(r==="assistant.message"){let d=String(o.content||"");return d?[{timestamp:s,type:"text",content:d}]:[]}return []}};});function Nf(t){let e=[],n=0,r=false,o=false,s=0;for(let d=0;d<t.length;d++){let c=t[d];if(o){o=false;continue}if(c==="\\"&&r){o=true;continue}if(c==='"'){r=!r;continue}if(!r){if(c==="{")n++;else if(c==="}"&&(n--,n===0)){let u=t.slice(s,d+1).trim();u&&e.push(u),s=d+1;}}}let i=t.slice(s).trim();return i&&e.push(i),e}function Cf(t){return t[0]==="exec"?t.slice(1):t}function bd(t){let e=t.split(`
45
+ `).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 Af,os,ss=O(()=>{h();$r();Vn();pn();gn();fn();qt();Fr();jt();Af=new Set(["interactive","plan","autopilot"]);os={command:"copilot",meta:{displayName:"Copilot",models:id()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&Af.has(e.mode)&&r.push("--mode",e.mode),e.effort&&(Ur.copilot??[]).includes(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=Sd(t);if(e)return e;let n=t.trim();return ln(n,"copilot")?"":n},extractPartialText(t){return Sd(t)},parseResultMeta(t){let e=hn(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=tt(n,e??new Date().toISOString()),i=o.toolCallId;if(r==="tool.execution_start"){let d=String(o.toolName||""),c=o.arguments,u=et(c);return (d==="bash"||d==="Bash")&&gt(u)?[ht(s,u,i)]:[{timestamp:s,type:"tool_use",toolName:d,toolInput:u,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let d=o.error;if(d)return [{timestamp:s,type:"tool_result",...i&&{toolUseId:i},...Ze(String(d.message||""),true)}];let c=o.result,u=String(c?.content||"");return [{timestamp:s,type:"tool_result",...i&&{toolUseId:i},...Ze(u,false)}]}if(r==="assistant.message"){let d=String(o.content||"");return d?[{timestamp:s,type:"text",content:d}]:[]}return []}};});function Nf(t){let e=[],n=0,r=false,o=false,s=0;for(let d=0;d<t.length;d++){let c=t[d];if(o){o=false;continue}if(c==="\\"&&r){o=true;continue}if(c==='"'){r=!r;continue}if(!r){if(c==="{")n++;else if(c==="}"&&(n--,n===0)){let u=t.slice(s,d+1).trim();u&&e.push(u),s=d+1;}}}let i=t.slice(s).trim();return i&&e.push(i),e}function Cf(t){return t[0]==="exec"?t.slice(1):t}function bd(t){let e=t.split(`
46
46
  `).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 Ot(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ad(t){return t.type==="turn.failed"?true:t.type!=="error"?false:typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||Ot(t.error)}function vd(t){let e=Ot(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 xf(t){for(let e of t.split(/\r?\n/)){if(!e.trim())continue;let n;try{n=JSON.parse(e);}catch{continue}if(Ot(n)&&Ad(n))return vd(n)}}function Id(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 c=`codex:${JSON.stringify(t.id)}#${n.rowIndex}:${r}`,u=o.get(s)??[];return u.push(c),o.set(s,u),c}let i=o.get(s),d=i?.pop();return i?.length||o.delete(s),d}function Pf(t,e,n){let r=e.type;if(r==="command_execution"){let o=String(e.command||"");return gt(o)?[ht(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:et(e.arguments),...n?{toolUseId:n}:{}}]:[]}function Df(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=Lf(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",...Ze(o,s),...n?{toolUseId:n}:{}}}if(r==="mcp_tool_call"){let o=Ot(e.result)?e.result:void 0,i=(Array.isArray(o?.content)?o.content:[]).filter(c=>Ot(c)&&c.type==="text"&&typeof c.text=="string").map(c=>c.text).join(`
47
- `),d=typeof e.error=="string"?e.error:Ot(e.error)&&typeof e.error.message=="string"?e.error.message:"";return {timestamp:t,type:"tool_result",resultPreview:i||d,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=et(s);return o==="Bash"&&gt(i)?ht(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",...Ze(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&&!(Ot(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(d=>String(d.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 Lf(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=et(o);return r==="Bash"&&gt(s)?ht(t,s):{timestamp:t,type:"tool_use",toolName:r,toolInput:s}}return null}var vf,Of,is,as=v(()=>{h();Ft();$r();Kn();pn();gn();Qo();fn();zn();qt();jt();vf=new Set(["turn.started","turn.completed","item.updated"]),Of="cli/codex";is={command:"codex",meta:{displayName:"Codex",models:sd(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=vt(e.model),s=e.effort??o,i=e.resumeSessionId?ld(e.mode):ud(e.mode),d=pd(s),c=r?["-m",r]:[],u=Cf(e.additionalArgs??[]),p=u.includes("--json")||u.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...p,...i,...d,...c,...u,e.resumeSessionId,"-"],stdinMessage:t}:{args:["exec",...p,...i,...d,...c,...u],stdinMessage:t}},extractText(t){let e=xf(t);if(e)throw new ne(e,Of);let n=bd(t);if(n)return n;let r=t.trim();return ln(r,"codex")?"":r},extractPartialText(t){return bd(t)},parseResultMeta(t){let e=hn(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=Nf(t),s.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let[i,d]of s.entries()){let c;try{c=JSON.parse(d);}catch{continue}if(!Ot(c))continue;let u=c.type;if(!u)continue;let f=tt(c,r);if(Ad(c)){let g=vd(c);o.push({timestamp:f,type:"error",content:g,errorMessage:g});continue}if(!u.startsWith("item.")&&!u.startsWith("turn.")&&!u.startsWith("thread.")||Xo(c))continue;u==="thread.started"&&n&&n.state.delete("codex.pending");let p=c.item;if(p){if(u==="item.started"){o.push(...Pf(f,p,Id(p,u,n,i)));continue}if(u==="item.completed"){let g=Df(f,p,Id(p,u,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?vf.has(r):!1}catch{return false}}};});function $f(t){return t?Hf[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Wr(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Pd(t){let e=[],n=0,r=false,o=false,s=0;for(let d=0;d<t.length;d++){let c=t[d];if(o){o=false;continue}if(c==="\\"&&r){o=true;continue}if(c==='"'){r=!r;continue}if(!r){if(c==="{")n++;else if(c==="}"&&(n--,n===0)){let u=t.slice(s,d+1).trim();u&&e.push(u),s=d+1;}}}let i=t.slice(s).trim();return i&&e.push(i),e}function mn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Uf(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);mn(i)?e.push(i):n=!0;continue}catch{}let s=Pd(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 d=JSON.parse(i);mn(d)?e.push(d):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function Wt(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,xd).trim()}function Dd(t){let e=mn(t.error)?t.error:void 0,n=e&&mn(e.data)?e.data:void 0,r=Wt(e?.name),o=Wt(n?.message)??Wt(e?.message)??Wt(t.message)??Wt(t.errorMessage)??Wt(t.error),s=Wt(t.ref),i=r&&o&&r!==o?`${r}: ${o}`:r??o??Cd;return (s?`${i} (ref: ${s})`:i).slice(0,xd)}function Od(t){let e=Uf(t),n=[],r=null,o=0,s=[],i,d=false;for(let c of e.events){let u=typeof c.type=="string"?c.type:void 0;if(u){if(u==="text"){let f=mn(c.part)?c.part:void 0,p=typeof f?.text=="string"?f.text:void 0;p?.trim()&&n.push(p.trim());continue}if(u==="result"){typeof c.result=="string"&&(r=c.result);continue}if(u==="tool_use"){o++;continue}if(u==="error"){s.push(Dd(c));continue}if(u==="step_finish"){d=true;let f=mn(c.part)?c.part:void 0;i=typeof f?.reason=="string"?f.reason:void 0;}}}return {...e,texts:n,resultText:r,toolUseCount:o,errorMessages:s,terminalReason:i,hasTerminal:d}}function Ld(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function Gr(){return new ne("OpenCode returned no assistant output.",_n,{code:"EMPTY_OUTPUT",kind:"transient"})}function Ff(){return new ne("OpenCode emitted malformed JSON output.",_n,{code:"PROVIDER_CRASHED",kind:"transient"})}function Nd(t,e){switch(Ld(t)){case "length":return new ne("OpenCode stopped because the context window was exceeded.",_n,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new ne("OpenCode stopped because the content filter blocked the response.",_n,{code:"UNKNOWN",kind:"permanent"});case "error":return new ne(e?`OpenCode error: ${e}`:`${Cd} while generating a response.`,_n,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var Mf,_n,Cd,xd,Hf,ds,cs=v(()=>{h();Ft();Kn();gn();jt();Mf=new Set(["step_start","step_finish"]),_n="cli/opencode",Cd="OpenCode provider error",xd=240,Hf={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};ds={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];Wr(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,autoApprove:i}=$f(e.mode);Wr(o,"--agent")||s!==void 0&&o.push("--agent",s),i&&!Wr(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!Wr(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let d;return !n&&!i&&!e.env?.OPENCODE_PERMISSION&&(d={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:t,env:d}},extractText(t){let e=Od(t),n=e.errorMessages[0];if(n){let i=Nd("error",n);if(i)throw i}let r=Nd(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 Gr();return o}if(e.resultText?.trim()){if(!e.hasTerminal)throw Gr();return e.resultText}if(e.malformed)throw Ff();if(!e.hasTerminal)throw Gr();let s=Ld(e.terminalReason);if((s==="stop"||s==="tool-calls")&&e.toolUseCount>0)return "";throw Gr()},interpretExit(t,e,n=""){if(t===0)return null;let o=Od(n).errorMessages[0];return o?new ne(`OpenCode error: ${o}`,_n,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=hn(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=Pd(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 d=tt(i,n),c=i.type;if(c){if(c==="text"){let f=i.part?.text;f&&r.push({timestamp:d,type:"text",content:f});continue}if(c==="tool_use"){let u=i.part;if(!u)continue;let f=String(u.tool||""),p=String(u.callID||""),g=u.state,_=String(g?.status||""),m=g?.input,k=et(m);if(r.push({timestamp:d,type:"tool_use",toolName:f,toolUseId:p,toolInput:k}),_==="completed"&&g?.output!==void 0){let T=g.output,E=typeof T=="string"?T:JSON.stringify(T);r.push({timestamp:d,type:"tool_result",toolUseId:p,resultPreview:E,isError:false});}else _==="error"&&r.push({timestamp:d,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}if(c==="error"){let u=Dd(i);r.push({timestamp:d,type:"error",content:u,errorMessage:u});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?Mf.has(r):!1}catch{return false}}};});function Vn(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Bf(t,e){if(!(t?At(us).some(s=>s.id===t):false)||!t)return e;let r=Gn(us,t),o=rd(us)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:o&&r.includes(o)?o:void 0:o}var us,ls,ps=v(()=>{h();Ft();Wn();qt();zn();us="antigravity";ls={command:"agy",meta:{displayName:"Antigravity",models:ad(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:o}=vt(e.model),s=ts(r),i=s.model,d=e.effort??o??s.effort,c=Bf(i,d),u=e.additionalArgs??[],f=i&&!Vn(u,"--model")?["--model",i]:[],p=Vn(u,"--effort")?[]:wd(c),g=Vn(u,"--mode")||Vn(u,"--dangerously-skip-permissions")?[]:Td(e.mode),_=Vn(u,"--print")?[]:["--print",t];return {args:[...f,...p,...g,...u,..._]}},extractText(t){let e=t.trim();if(!e)throw new ne("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 Md=v(()=>{h();pn();gn();fn();jt();});function kn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Tn(t){return kn(t)?t:void 0}function Ne(t){return typeof t=="string"?t:void 0}function zt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function zf(t){let e=[],n=-1,r=0,o=false,s=false;for(let i=0;i<t.length;i+=1){let d=t[i];if(n===-1){(d==="{"||d==="[")&&(n=i,r=1);continue}if(s){s=false;continue}if(d==="\\"&&o){s=true;continue}if(d==='"'){o=!o;continue}o||(d==="{"||d==="["?r+=1:(d==="}"||d==="]")&&(r-=1,r===0&&(e.push(t.slice(n,i+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function Jn(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return kn(n)?[n]:[]}catch{return zf(e).flatMap(n=>{try{let r=JSON.parse(n);return kn(r)?[r]:[]}catch{return []}})}}function Bd(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function Gt(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(Gt).filter(n=>n!==void 0);return e.length>0?e.join(`
47
+ `),d=typeof e.error=="string"?e.error:Ot(e.error)&&typeof e.error.message=="string"?e.error.message:"";return {timestamp:t,type:"tool_result",resultPreview:i||d,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=et(s);return o==="Bash"&&gt(i)?ht(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",...Ze(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&&!(Ot(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(d=>String(d.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 Lf(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=et(o);return r==="Bash"&&gt(s)?ht(t,s):{timestamp:t,type:"tool_use",toolName:r,toolInput:s}}return null}var vf,Of,is,as=O(()=>{h();Ft();$r();Vn();pn();gn();Qo();fn();Kn();qt();jt();vf=new Set(["turn.started","turn.completed","item.updated"]),Of="cli/codex";is={command:"codex",meta:{displayName:"Codex",models:sd(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=vt(e.model),s=e.effort??o,i=e.resumeSessionId?ld(e.mode):ud(e.mode),d=pd(s),c=r?["-m",r]:[],u=Cf(e.additionalArgs??[]),p=u.includes("--json")||u.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...p,...i,...d,...c,...u,e.resumeSessionId,"-"],stdinMessage:t}:{args:["exec",...p,...i,...d,...c,...u],stdinMessage:t}},extractText(t){let e=xf(t);if(e)throw new ne(e,Of);let n=bd(t);if(n)return n;let r=t.trim();return ln(r,"codex")?"":r},extractPartialText(t){return bd(t)},parseResultMeta(t){let e=hn(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=Nf(t),s.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let[i,d]of s.entries()){let c;try{c=JSON.parse(d);}catch{continue}if(!Ot(c))continue;let u=c.type;if(!u)continue;let f=tt(c,r);if(Ad(c)){let g=vd(c);o.push({timestamp:f,type:"error",content:g,errorMessage:g});continue}if(!u.startsWith("item.")&&!u.startsWith("turn.")&&!u.startsWith("thread.")||Xo(c))continue;u==="thread.started"&&n&&n.state.delete("codex.pending");let p=c.item;if(p){if(u==="item.started"){o.push(...Pf(f,p,Id(p,u,n,i)));continue}if(u==="item.completed"){let g=Df(f,p,Id(p,u,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?vf.has(r):!1}catch{return false}}};});function $f(t){return t?Hf[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Wr(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Pd(t){let e=[],n=0,r=false,o=false,s=0;for(let d=0;d<t.length;d++){let c=t[d];if(o){o=false;continue}if(c==="\\"&&r){o=true;continue}if(c==='"'){r=!r;continue}if(!r){if(c==="{")n++;else if(c==="}"&&(n--,n===0)){let u=t.slice(s,d+1).trim();u&&e.push(u),s=d+1;}}}let i=t.slice(s).trim();return i&&e.push(i),e}function mn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Uf(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);mn(i)?e.push(i):n=!0;continue}catch{}let s=Pd(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 d=JSON.parse(i);mn(d)?e.push(d):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function Wt(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,xd).trim()}function Dd(t){let e=mn(t.error)?t.error:void 0,n=e&&mn(e.data)?e.data:void 0,r=Wt(e?.name),o=Wt(n?.message)??Wt(e?.message)??Wt(t.message)??Wt(t.errorMessage)??Wt(t.error),s=Wt(t.ref),i=r&&o&&r!==o?`${r}: ${o}`:r??o??Cd;return (s?`${i} (ref: ${s})`:i).slice(0,xd)}function Od(t){let e=Uf(t),n=[],r=null,o=0,s=[],i,d=false;for(let c of e.events){let u=typeof c.type=="string"?c.type:void 0;if(u){if(u==="text"){let f=mn(c.part)?c.part:void 0,p=typeof f?.text=="string"?f.text:void 0;p?.trim()&&n.push(p.trim());continue}if(u==="result"){typeof c.result=="string"&&(r=c.result);continue}if(u==="tool_use"){o++;continue}if(u==="error"){s.push(Dd(c));continue}if(u==="step_finish"){d=true;let f=mn(c.part)?c.part:void 0;i=typeof f?.reason=="string"?f.reason:void 0;}}}return {...e,texts:n,resultText:r,toolUseCount:o,errorMessages:s,terminalReason:i,hasTerminal:d}}function Ld(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function Gr(){return new ne("OpenCode returned no assistant output.",_n,{code:"EMPTY_OUTPUT",kind:"transient"})}function Ff(){return new ne("OpenCode emitted malformed JSON output.",_n,{code:"PROVIDER_CRASHED",kind:"transient"})}function Nd(t,e){switch(Ld(t)){case "length":return new ne("OpenCode stopped because the context window was exceeded.",_n,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new ne("OpenCode stopped because the content filter blocked the response.",_n,{code:"UNKNOWN",kind:"permanent"});case "error":return new ne(e?`OpenCode error: ${e}`:`${Cd} while generating a response.`,_n,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var Mf,_n,Cd,xd,Hf,ds,cs=O(()=>{h();Ft();Vn();gn();jt();Mf=new Set(["step_start","step_finish"]),_n="cli/opencode",Cd="OpenCode provider error",xd=240,Hf={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};ds={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];Wr(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,autoApprove:i}=$f(e.mode);Wr(o,"--agent")||s!==void 0&&o.push("--agent",s),i&&!Wr(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!Wr(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let d;return !n&&!i&&!e.env?.OPENCODE_PERMISSION&&(d={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:t,env:d}},extractText(t){let e=Od(t),n=e.errorMessages[0];if(n){let i=Nd("error",n);if(i)throw i}let r=Nd(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 Gr();return o}if(e.resultText?.trim()){if(!e.hasTerminal)throw Gr();return e.resultText}if(e.malformed)throw Ff();if(!e.hasTerminal)throw Gr();let s=Ld(e.terminalReason);if((s==="stop"||s==="tool-calls")&&e.toolUseCount>0)return "";throw Gr()},interpretExit(t,e,n=""){if(t===0)return null;let o=Od(n).errorMessages[0];return o?new ne(`OpenCode error: ${o}`,_n,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=hn(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=Pd(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 d=tt(i,n),c=i.type;if(c){if(c==="text"){let f=i.part?.text;f&&r.push({timestamp:d,type:"text",content:f});continue}if(c==="tool_use"){let u=i.part;if(!u)continue;let f=String(u.tool||""),p=String(u.callID||""),g=u.state,_=String(g?.status||""),m=g?.input,k=et(m);if(r.push({timestamp:d,type:"tool_use",toolName:f,toolUseId:p,toolInput:k}),_==="completed"&&g?.output!==void 0){let T=g.output,E=typeof T=="string"?T:JSON.stringify(T);r.push({timestamp:d,type:"tool_result",toolUseId:p,resultPreview:E,isError:false});}else _==="error"&&r.push({timestamp:d,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}if(c==="error"){let u=Dd(i);r.push({timestamp:d,type:"error",content:u,errorMessage:u});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?Mf.has(r):!1}catch{return false}}};});function Jn(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Bf(t,e){if(!(t?At(us).some(s=>s.id===t):false)||!t)return e;let r=zn(us,t),o=rd(us)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:o&&r.includes(o)?o:void 0:o}var us,ls,ps=O(()=>{h();Ft();Gn();qt();Kn();us="antigravity";ls={command:"agy",meta:{displayName:"Antigravity",models:ad(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:o}=vt(e.model),s=ts(r),i=s.model,d=e.effort??o??s.effort,c=Bf(i,d),u=e.additionalArgs??[],f=i&&!Jn(u,"--model")?["--model",i]:[],p=Jn(u,"--effort")?[]:wd(c),g=Jn(u,"--mode")||Jn(u,"--dangerously-skip-permissions")?[]:Td(e.mode),_=Jn(u,"--print")?[]:["--print",t];return {args:[...f,...p,...g,...u,..._]}},extractText(t){let e=t.trim();if(!e)throw new ne("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 Md=O(()=>{h();pn();gn();fn();jt();});function kn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Tn(t){return kn(t)?t:void 0}function Ne(t){return typeof t=="string"?t:void 0}function zt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function zf(t){let e=[],n=-1,r=0,o=false,s=false;for(let i=0;i<t.length;i+=1){let d=t[i];if(n===-1){(d==="{"||d==="[")&&(n=i,r=1);continue}if(s){s=false;continue}if(d==="\\"&&o){s=true;continue}if(d==='"'){o=!o;continue}o||(d==="{"||d==="["?r+=1:(d==="}"||d==="]")&&(r-=1,r===0&&(e.push(t.slice(n,i+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function Yn(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return kn(n)?[n]:[]}catch{return zf(e).flatMap(n=>{try{let r=JSON.parse(n);return kn(r)?[r]:[]}catch{return []}})}}function Bd(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function Gt(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(Gt).filter(n=>n!==void 0);return e.length>0?e.join(`
48
48
  `):void 0}if(kn(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=Gt(t[e]);if(n!==void 0)return n}}}function Kf(t){let e=i=>Array.isArray(i)&&i.every(d=>Number.isInteger(d)&&d>=0&&d<=255),n=i=>typeof i=="string"&&i.trim().length>0?i:void 0,r=i=>new TextDecoder("utf-8",{fatal:false}).decode(Uint8Array.from(i)),o=i=>{let d=JSON.stringify(i,(c,u)=>e(u)?`<bytes:${u.length}>`:u);return d===void 0?String(i):d},s=t.rawOutput;if(s!=null){let i=Tn(s);if(!i)return n(Gt(s))??o(s);let d;if(e(i.output)&&i.output.length>0&&(d=n(r(i.output))),!d&&e(i.stdout)&&i.stdout.length>0&&(d=n(r(i.stdout))),!d){let f=Tn(i.Result);d=n(i.output)??n(f?.output)??n(Gt(s));}let c=e(i.stderr)&&i.stderr.length>0?r(i.stderr):void 0;if(c!==void 0)if(d){let f=d.endsWith(`
49
49
  `)||d.endsWith("\r")?"":`
50
50
  `;d=`${d}${f}${c}`;}else d=n(c);if(d)return d;let u=n(i.summary)??n(Gt(t.content))??n(i.output_for_prompt);return u!==void 0?u:o(s)}if(t.content!==null&&t.content!==void 0)return Gt(t.content)??o(t.content);if(t.result!==null&&t.result!==void 0)return Gt(t.result)??o(t.result)}function qd(t){let e=Tn(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?jd(n):"Grok CLI reported an error."}function jd(t){return (t.replace(Gf,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function Fd(t){return Wf.test(t)}function Vf(t){let e=Tn(t.modelUsage);return e?Object.keys(e)[0]??null:null}function Jf(t){let e=Tn(t.usage);if(!e)return null;let n=zt(e.cache_read_input_tokens);return {inputTokens:zt(e.input_tokens)+n,cachedInputTokens:n,outputTokens:zt(e.output_tokens),costUsd:zt(t.total_cost_usd)}}function Yf(t){let e=0,n=0,r=0,o=false,s=new Set;for(let i of t.split(`
51
- `).flatMap(Jn)){if(i.type!=="usage")continue;let d=Tn(i.usage);if(!d)continue;let c=Ne(i.signature);if(c&&c.length>0){let f=`signature:${c}`;if(s.has(f))continue;s.add(f);}let u=zt(d.cache_read_input_tokens);e+=zt(d.input_tokens)+u,n+=u,r+=zt(d.output_tokens),o=true;}return o?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function Xf(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let s of e.entries.slice(0,Hd)){if(!kn(s))continue;let i=Ne(s.content)?.trim();if(!i)continue;let d=Ne(s.status)?.trim(),c=Ne(s.priority)?.trim(),u=[d?`status=${d}`:void 0,c?`priority=${c}`:void 0].filter(p=>!!p),f=u.length>0?` (${u.join(", ")})`:"";n.push(`- ${i}${f}`);}if(n.length===0)return [];e.entries.length>Hd&&n.push(Ud);let r=n.join(`
52
- `),o=r.length>$d?`${r.slice(0,$d-1)}${Ud}`:r;return [{timestamp:t,type:"info",content:o}]}function Qf(t,e){let n=Ne(e.type);if(n==="thought"){let r=Ne(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=Ne(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return Xf(t,e);if(n==="tool_call"){let r=Ne(e.toolCallId),o=Ne(e.toolName)??Ne(e.title),s=e.rawInput===void 0?void 0:Bd(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:o,toolInput:s}]}if(n==="tool_call_update"){let r=Ne(e.status);if(r!=="completed"&&r!=="failed"&&r!=="error")return [];let o=Kf(e),s=r!=="completed"||e.isError===true;return [{timestamp:t,type:"tool_result",toolUseId:Ne(e.toolCallId),toolName:Ne(e.toolName)??Ne(e.title),...o!==void 0?Ze(o,s):{isError:s}}]}if(n==="error"){let r=qd(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var zr,jf,Wf,Gf,Hd,$d,Ud,fs,gs=v(()=>{h();Ft();Jo();qt();fn();zn();jt();zr="cli/grok",jf=new Set(["available_commands","usage","end"]),Wf=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,Gf=/\u001b\[[0-?]*[ -/]*[@-~]/g,Hd=20,$d=4e3,Ud="\u2026";fs={command:"grok",createSessionId:()=>crypto.randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=vt(e.model),o=e.effort??r,s=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],i=n?["--model",n]:[],d=n?At("grok").some(L=>L.id===n):false,c=n&&d?Gn("grok",n):[],u=!o||c.length===0||c.includes(o)?o:void 0,f=kd(u),p=e.additionalArgs??[],g=L=>p.some(y=>y===L||y.startsWith(`${L}=`)),_=e.providerOptions,m=_?.alwaysApprove,k=_?.sandbox,T=g("--permission-mode")?[]:hd(e.mode),E=g("--always-approve")?[]:_d(m),b=g("--sandbox")?[]:md(k);return {args:["--no-auto-update",...s,"--single",t,"--output-format","streaming-json","--no-alt-screen",...i,...f,...T,...E,...b,...p]}},extractText(t){let e=[],n=false;for(let r of t.split(`
53
- `).flatMap(Jn))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 Jn(t))if(e.type==="error"){let n=qd(e);return Fd(Bd(e))?new Bt(n,zr):new ne(n,zr)}return null},interpretExit(t,e){if(t===0)return null;let n=jd(e)||`Grok CLI exited with code ${t}.`;return Fd(e)?new Bt(n,zr):new ne(n,zr)},parseResultMeta(t){let n=t.split(`
54
- `).flatMap(Jn).find(r=>r.type==="end");return n?{usage:Jf(n),model:Vf(n)}:{usage:Yf(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return Jn(t).flatMap(r=>Qf(tt(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return kn(n)&&typeof n.type=="string"?jf.has(n.type):!1}catch{return false}}};});var Wd,Gd=v(()=>{h();rs();ss();as();cs();ps();Md();gs();rs();ss();as();cs();ps();gs();pn();Wd={codex:is,claude:jr,opencode:ds,antigravity:ls,copilot:os,grok:fs};});function zd(t){if(t.startsWith("cli/"))return Wd[t.slice(4)]}var Kd=v(()=>{h();Va();Gd();});function Kr(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function Zf(t,e){return typeof t=="string"&&t.length>0?t:typeof e=="string"&&e.length>0?e:null}function Vr(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(`
55
- `)??"";if(!n.trim())return;let r=zd(t.provider);if(!r)return;let o;try{o=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let s=Zf(o?.model,t.model),i=o?.usage;if(!i)return {stdout:n,adapter:r};let d=Kr(i.inputTokens),c=Kr(i.outputTokens),u=Kr(i.cachedInputTokens),f=Da(Kr(i.costUsd),d,c,u,s);return d!==0||c!==0||u!==0||f!==0?{stdout:n,adapter:r,usage:{inputTokens:d,outputTokens:c,cachedInputTokens:u,costUsd:f,model:s}}:{stdout:n,adapter:r}}var hs=v(()=>{h();Kd();Lr();});function tg(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"&&eg.has(n)?n:void 0}catch{return}}function Nt(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=tg(t.metadata);return e==="user_stop"?"stopped":e==="runner_lost"?"runner_lost":e==="launch_failed"?"failed":typeof t.error=="string"&&exports.LEGACY_TASK_TERMINAL_ERROR_PATTERNS.stopped.test(t.error)?"stopped":typeof t.error=="string"&&exports.LEGACY_TASK_TERMINAL_ERROR_PATTERNS.runnerLost.test(t.error)?"runner_lost":"failed"}default:return t.status}}exports.TASK_TERMINAL_STATUSES=void 0;exports.LEGACY_TASK_TERMINAL_ERROR_PATTERNS=void 0;var eg,Yn=v(()=>{h();exports.TASK_TERMINAL_STATUSES=["success","failed","stopped","runner_lost"],exports.LEGACY_TASK_TERMINAL_ERROR_PATTERNS={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},eg=new Set(["user_stop","runner_lost","launch_failed"]);});function Rs(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 Yr(){return Rs("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function Kt(){return Rs("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function Xn(){return Rs("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function yn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Jr(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 rg(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 Vd(t,e){return !!t.stop_requested_at&&yn(t.stop_requested_epoch)===yn(e)}function ks(t,e){let n=yn(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let o=rg(t.getTask(e.taskId));return !o||o.status!=="running"||yn(o.run_epoch)!==n?{accepted:false,row:o}:{accepted:true,row:o}}function Jd(t,e){let n=exports.taskHeartbeatRegistry.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),exports.taskHeartbeatRegistry.delete(t),true)}function Yd(t,e){let n=exports.taskHeartbeatRegistry.get(t);return !n||e!==void 0&&n.runEpoch!==yn(e)?false:Jd(t,n)}function og(t,e){let n=yn(e.runEpoch);Yd(e.taskId);let r=true,o=null;try{let u=ks(t,{...e,runEpoch:n});r=u.accepted,o=u.row;}catch(u){Jr(u);}if(!r)return false;let s=Yr(),i=Math.min(s,1e3),d=setInterval(()=>{let u=exports.taskHeartbeatRegistry.get(e.taskId);if(!(!u||u.timer!==d))try{u.heartbeatElapsedMs+=i;let f=u.heartbeatElapsedMs>=s,p=ks(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:f});if(!p.accepted){Jd(e.taskId,u);return}f&&(u.heartbeatElapsedMs%=s,u.lastHeartbeatAt=Date.now()),p.row&&Vd(p.row,n)&&!u.stopRequested&&(u.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(Jr));}catch(f){Jr(f);}},i),c={timer:d,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return exports.taskHeartbeatRegistry.set(e.taskId,c),typeof d=="object"&&d!==null&&"unref"in d&&d.unref(),o&&Vd(o,n)&&e.onStopRequested&&(c.stopRequested=true,Promise.resolve(e.onStopRequested(o)).catch(Jr)),true}exports.TASK_HEARTBEAT_INTERVAL_MS=void 0;exports.TASK_HEARTBEAT_STALE_MS=void 0;exports.TASK_HEARTBEAT_HARD_STALE_MS=void 0;exports.TASK_STOP_POLL_INTERVAL_MS=void 0;exports.taskHeartbeatRegistry=void 0;var Qn=v(()=>{h();exports.TASK_HEARTBEAT_INTERVAL_MS=1e4,exports.TASK_HEARTBEAT_STALE_MS=3e4,exports.TASK_HEARTBEAT_HARD_STALE_MS=18e5,exports.TASK_STOP_POLL_INTERVAL_MS=1e3;exports.taskHeartbeatRegistry=new Map;});function vs(t,e=Date.now(),n=exports.TASK_STOP_DEFAULT_GRACE_MS){let r=t?Date.parse(t):Number.NaN,o=typeof e=="number"?e:Date.parse(e),s=As(n,exports.TASK_STOP_DEFAULT_GRACE_MS,0);return Number.isFinite(r)&&Number.isFinite(o)&&o-r>s?"forced":"cooperative"}function As(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function oc(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function sg(t){if(!t)return;let e=oc(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function _t(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=sg(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function sc(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 ye(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 Es(t,e){return ye(t,exports.INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED,e)}function ig(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=Kt():false}function ag(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function dg(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=oc(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 cg(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return _t(r,n)}async function ug(t,e,n,r){let o=Date.now()+n;for(;;){let s=cg(t,e);if(s)return s;let i=o-Date.now();if(i<=0)return;await new Promise(d=>{setTimeout(d,Math.min(r,i));});}}async function Xd(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 L=t.stopPendingTask(e,void 0,void 0,{...o,at:r}),y=t.getTask(e);if(L||!y||y.status!=="running")return _t(y);if(s=t.requestTaskStop({id:e,requestedAt:r,...o}),!s.accepted&&s.status!=="running"||!s.accepted&&!s.alreadyRequestedAt)return _t(t.getTask(e))}else if(!(s.status==="running"&&s.alreadyRequestedAt))return _t(i)}let d=s.runEpoch,c=As(n.graceMs,exports.TASK_STOP_DEFAULT_GRACE_MS,0),u=As(n.pollMs,exports.TASK_STOP_DEFAULT_POLL_MS,1),f=await ug(t,e,c,u);if(f)return f;let p=t.getTask(e);if(!p||p.status!=="running")return _t(p);let g=dg(p),_=g[0];if(!_){let L=t.finalizeTaskStop({id:e,runEpoch:d,method:"forced"}),y=t.getTask(e);return L||y?.status!=="running"?_t(y):ye(y,"Failed to finalize task stop")}let m=ag(n),k="unknown";if(!ig(p,Date.now())){let L=n.processControl?.checkProcessOwnershipAsync??zo;try{k=await L(_,n.ownershipMarkers??exports.TASK_STOP_OWNED_PROCESS_MARKERS,m);}catch{k="unknown";}if(k!=="owned")return sc(p)}let T=n.processControl?.terminateProcessTree??Ko;for(let L of g){let y;try{y=await T(L,{...m,signal:Go});}catch(N){y={status:"failed",pid:L,method:m.platform==="win32"?"taskkill":"process-group",error:N instanceof Error?N.message:String(N)};}if(y.status==="failed")return ye(t.getTask(e),y.error??"Failed to terminate process tree")}let E=t.finalizeTaskStop({id:e,runEpoch:d,method:"forced"}),b=t.getTask(e);return E||b?.status!=="running"?_t(b,_):ye(b,"Task changed before stop was finalized")}function Qd(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function Zd(t){return Number.isSafeInteger(t)&&t>=0}function Ss(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function lg(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}async function ic(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Es(n,Qd(e.targetPid)?e.targetPid:void 0);if(!Zd(e.sourceRunEpoch)||!Zd(e.settleRunEpoch)||Ss(n.run_epoch)!==e.settleRunEpoch)return ye(n,exports.INSTRUCTION_STOP_EPOCH_MISMATCH,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return ye(n,exports.INSTRUCTION_STOP_WORKSPACE_MISMATCH,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 ye(n,exports.INSTRUCTION_STOP_REQUEST_FAILED,e.targetPid)}let s=t.getTask(e.taskId);if(!s||s.status!=="running")return Es(s,e.targetPid);if(o.runEpoch!==e.settleRunEpoch||Ss(s.run_epoch)!==e.settleRunEpoch)return ye(s,exports.INSTRUCTION_STOP_EPOCH_MISMATCH,e.targetPid);if(e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId)return ye(s,exports.INSTRUCTION_STOP_WORKSPACE_MISMATCH,e.targetPid);if(!Qd(e.targetPid))return ye(s,exports.INSTRUCTION_STOP_TARGET_PID_MISSING);let i=lg(e),d=e.processControl?.checkProcessOwnershipAsync??zo,c="unknown";try{c=await d(e.targetPid,e.ownershipMarkers??exports.TASK_STOP_OWNED_PROCESS_MARKERS,i);}catch{c="unknown";}if(c!=="owned")return sc(s,e.targetPid);let u=t.getTask(e.taskId);if(!u||u.status!=="running")return Es(u,e.targetPid);if(Ss(u.run_epoch)!==e.settleRunEpoch)return ye(u,exports.INSTRUCTION_STOP_EPOCH_MISMATCH,e.targetPid);if(e.workspaceId!==void 0&&u.workspace_id!==e.workspaceId)return ye(u,exports.INSTRUCTION_STOP_WORKSPACE_MISMATCH,e.targetPid);let f=e.processControl?.terminateProcessTree??Ko,p;try{p=await f(e.targetPid,{...i,signal:Go});}catch{return ye(t.getTask(e.taskId),exports.INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED,e.targetPid)}if(p.status==="failed")return ye(t.getTask(e.taskId),exports.INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED,e.targetPid);let g;try{g=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return ye(t.getTask(e.taskId),exports.INSTRUCTION_STOP_SETTLE_CAS_FAILED,e.targetPid)}return g?_t(t.getTask(e.taskId),e.targetPid):ye(t.getTask(e.taskId),exports.INSTRUCTION_STOP_SETTLE_CAS_FAILED,e.targetPid)}function Ns(t,e,n={}){if(typeof t=="string"){let r=t,o=e??{};return Promise.resolve().then(()=>(Zn(),ac)).then(({TaskRepository:s})=>Xd(new s,r,o))}return Xd(t,e,n)}exports.TASK_STOP_DEFAULT_GRACE_MS=void 0;exports.TASK_STOP_DEFAULT_POLL_MS=void 0;exports.TASK_STOP_OWNED_PROCESS_MARKERS=void 0;exports.INSTRUCTION_STOP_TARGET_PID_MISSING=void 0;exports.INSTRUCTION_STOP_EPOCH_MISMATCH=void 0;exports.INSTRUCTION_STOP_WORKSPACE_MISMATCH=void 0;exports.INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED=void 0;exports.INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED=void 0;exports.INSTRUCTION_STOP_SETTLE_CAS_FAILED=void 0;exports.INSTRUCTION_STOP_REQUEST_FAILED=void 0;var Cs=v(()=>{h();Vo();Qn();exports.TASK_STOP_DEFAULT_GRACE_MS=5e3,exports.TASK_STOP_DEFAULT_POLL_MS=250;exports.TASK_STOP_OWNED_PROCESS_MARKERS=["crewx","claude","codex","opencode","grok","node"],exports.INSTRUCTION_STOP_TARGET_PID_MISSING="INSTRUCTION_STOP_TARGET_PID_MISSING",exports.INSTRUCTION_STOP_EPOCH_MISMATCH="INSTRUCTION_STOP_EPOCH_MISMATCH",exports.INSTRUCTION_STOP_WORKSPACE_MISMATCH="INSTRUCTION_STOP_WORKSPACE_MISMATCH",exports.INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",exports.INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",exports.INSTRUCTION_STOP_SETTLE_CAS_FAILED="INSTRUCTION_STOP_SETTLE_CAS_FAILED",exports.INSTRUCTION_STOP_REQUEST_FAILED="INSTRUCTION_STOP_REQUEST_FAILED";});var ac={};Iu(ac,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>exports.DEFAULT_TASK_REAPER_TICK_INTERVAL_MS,HOST_SHUTDOWN_TERMINAL_ERROR:()=>lc,PENDING_ADOPT_GRACE_MS:()=>fc,PID_NULL_REAP_GRACE_MS:()=>Fs,TASK_HEARTBEAT_HARD_STALE_MS:()=>exports.TASK_HEARTBEAT_HARD_STALE_MS,TASK_HEARTBEAT_INTERVAL_MS:()=>exports.TASK_HEARTBEAT_INTERVAL_MS,TASK_HEARTBEAT_STALE_MS:()=>exports.TASK_HEARTBEAT_STALE_MS,TaskRepository:()=>exports.TaskRepository,hasRecordedUsage:()=>In,mergeTerminalReason:()=>oo,resolveTaskHeartbeatHardStaleMs:()=>Xn,resolveTaskHeartbeatIntervalMs:()=>Yr,resolveTaskHeartbeatStaleMs:()=>Kt});function rt(t){return {...t,status:Nt(t)}}function Ps(t){return {...t,status:Nt(t)}}function Ls(t=exports.tasks.model,e=exports.tasks.metadata){let n=drizzleOrm.sql`
51
+ `).flatMap(Yn)){if(i.type!=="usage")continue;let d=Tn(i.usage);if(!d)continue;let c=Ne(i.signature);if(c&&c.length>0){let f=`signature:${c}`;if(s.has(f))continue;s.add(f);}let u=zt(d.cache_read_input_tokens);e+=zt(d.input_tokens)+u,n+=u,r+=zt(d.output_tokens),o=true;}return o?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function Xf(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let s of e.entries.slice(0,Hd)){if(!kn(s))continue;let i=Ne(s.content)?.trim();if(!i)continue;let d=Ne(s.status)?.trim(),c=Ne(s.priority)?.trim(),u=[d?`status=${d}`:void 0,c?`priority=${c}`:void 0].filter(p=>!!p),f=u.length>0?` (${u.join(", ")})`:"";n.push(`- ${i}${f}`);}if(n.length===0)return [];e.entries.length>Hd&&n.push(Ud);let r=n.join(`
52
+ `),o=r.length>$d?`${r.slice(0,$d-1)}${Ud}`:r;return [{timestamp:t,type:"info",content:o}]}function Qf(t,e){let n=Ne(e.type);if(n==="thought"){let r=Ne(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=Ne(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return Xf(t,e);if(n==="tool_call"){let r=Ne(e.toolCallId),o=Ne(e.toolName)??Ne(e.title),s=e.rawInput===void 0?void 0:Bd(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:o,toolInput:s}]}if(n==="tool_call_update"){let r=Ne(e.status);if(r!=="completed"&&r!=="failed"&&r!=="error")return [];let o=Kf(e),s=r!=="completed"||e.isError===true;return [{timestamp:t,type:"tool_result",toolUseId:Ne(e.toolCallId),toolName:Ne(e.toolName)??Ne(e.title),...o!==void 0?Ze(o,s):{isError:s}}]}if(n==="error"){let r=qd(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var zr,jf,Wf,Gf,Hd,$d,Ud,fs,gs=O(()=>{h();Ft();Jo();qt();fn();Kn();jt();zr="cli/grok",jf=new Set(["available_commands","usage","end"]),Wf=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,Gf=/\u001b\[[0-?]*[ -/]*[@-~]/g,Hd=20,$d=4e3,Ud="\u2026";fs={command:"grok",createSessionId:()=>crypto.randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=vt(e.model),o=e.effort??r,s=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],i=n?["--model",n]:[],d=n?At("grok").some(L=>L.id===n):false,c=n&&d?zn("grok",n):[],u=!o||c.length===0||c.includes(o)?o:void 0,f=kd(u),p=e.additionalArgs??[],g=L=>p.some(y=>y===L||y.startsWith(`${L}=`)),_=e.providerOptions,m=_?.alwaysApprove,k=_?.sandbox,T=g("--permission-mode")?[]:hd(e.mode),E=g("--always-approve")?[]:_d(m),b=g("--sandbox")?[]:md(k);return {args:["--no-auto-update",...s,"--single",t,"--output-format","streaming-json","--no-alt-screen",...i,...f,...T,...E,...b,...p]}},extractText(t){let e=[],n=false;for(let r of t.split(`
53
+ `).flatMap(Yn))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 Yn(t))if(e.type==="error"){let n=qd(e);return Fd(Bd(e))?new Bt(n,zr):new ne(n,zr)}return null},interpretExit(t,e){if(t===0)return null;let n=jd(e)||`Grok CLI exited with code ${t}.`;return Fd(e)?new Bt(n,zr):new ne(n,zr)},parseResultMeta(t){let n=t.split(`
54
+ `).flatMap(Yn).find(r=>r.type==="end");return n?{usage:Jf(n),model:Vf(n)}:{usage:Yf(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return Yn(t).flatMap(r=>Qf(tt(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return kn(n)&&typeof n.type=="string"?jf.has(n.type):!1}catch{return false}}};});var Wd,Gd=O(()=>{h();rs();ss();as();cs();ps();Md();gs();rs();ss();as();cs();ps();gs();pn();Wd={codex:is,claude:jr,opencode:ds,antigravity:ls,copilot:os,grok:fs};});function zd(t){if(t.startsWith("cli/"))return Wd[t.slice(4)]}var Kd=O(()=>{h();Va();Gd();});function Kr(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function Zf(t,e){return typeof t=="string"&&t.length>0?t:typeof e=="string"&&e.length>0?e:null}function Vr(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(`
55
+ `)??"";if(!n.trim())return;let r=zd(t.provider);if(!r)return;let o;try{o=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let s=Zf(o?.model,t.model),i=o?.usage;if(!i)return {stdout:n,adapter:r};let d=Kr(i.inputTokens),c=Kr(i.outputTokens),u=Kr(i.cachedInputTokens),f=Da(Kr(i.costUsd),d,c,u,s);return d!==0||c!==0||u!==0||f!==0?{stdout:n,adapter:r,usage:{inputTokens:d,outputTokens:c,cachedInputTokens:u,costUsd:f,model:s}}:{stdout:n,adapter:r}}var hs=O(()=>{h();Kd();Lr();});function tg(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"&&eg.has(n)?n:void 0}catch{return}}function Nt(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=tg(t.metadata);return e==="user_stop"?"stopped":e==="runner_lost"?"runner_lost":e==="launch_failed"?"failed":typeof t.error=="string"&&exports.LEGACY_TASK_TERMINAL_ERROR_PATTERNS.stopped.test(t.error)?"stopped":typeof t.error=="string"&&exports.LEGACY_TASK_TERMINAL_ERROR_PATTERNS.runnerLost.test(t.error)?"runner_lost":"failed"}default:return t.status}}exports.TASK_TERMINAL_STATUSES=void 0;exports.LEGACY_TASK_TERMINAL_ERROR_PATTERNS=void 0;var eg,Xn=O(()=>{h();exports.TASK_TERMINAL_STATUSES=["success","failed","stopped","runner_lost"],exports.LEGACY_TASK_TERMINAL_ERROR_PATTERNS={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},eg=new Set(["user_stop","runner_lost","launch_failed"]);});function Rs(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 Yr(){return Rs("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function Kt(){return Rs("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function Qn(){return Rs("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function yn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Jr(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 rg(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 Vd(t,e){return !!t.stop_requested_at&&yn(t.stop_requested_epoch)===yn(e)}function ks(t,e){let n=yn(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let o=rg(t.getTask(e.taskId));return !o||o.status!=="running"||yn(o.run_epoch)!==n?{accepted:false,row:o}:{accepted:true,row:o}}function Jd(t,e){let n=exports.taskHeartbeatRegistry.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),exports.taskHeartbeatRegistry.delete(t),true)}function Yd(t,e){let n=exports.taskHeartbeatRegistry.get(t);return !n||e!==void 0&&n.runEpoch!==yn(e)?false:Jd(t,n)}function og(t,e){let n=yn(e.runEpoch);Yd(e.taskId);let r=true,o=null;try{let u=ks(t,{...e,runEpoch:n});r=u.accepted,o=u.row;}catch(u){Jr(u);}if(!r)return false;let s=Yr(),i=Math.min(s,1e3),d=setInterval(()=>{let u=exports.taskHeartbeatRegistry.get(e.taskId);if(!(!u||u.timer!==d))try{u.heartbeatElapsedMs+=i;let f=u.heartbeatElapsedMs>=s,p=ks(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:f});if(!p.accepted){Jd(e.taskId,u);return}f&&(u.heartbeatElapsedMs%=s,u.lastHeartbeatAt=Date.now()),p.row&&Vd(p.row,n)&&!u.stopRequested&&(u.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(Jr));}catch(f){Jr(f);}},i),c={timer:d,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return exports.taskHeartbeatRegistry.set(e.taskId,c),typeof d=="object"&&d!==null&&"unref"in d&&d.unref(),o&&Vd(o,n)&&e.onStopRequested&&(c.stopRequested=true,Promise.resolve(e.onStopRequested(o)).catch(Jr)),true}exports.TASK_HEARTBEAT_INTERVAL_MS=void 0;exports.TASK_HEARTBEAT_STALE_MS=void 0;exports.TASK_HEARTBEAT_HARD_STALE_MS=void 0;exports.TASK_STOP_POLL_INTERVAL_MS=void 0;exports.taskHeartbeatRegistry=void 0;var Zn=O(()=>{h();exports.TASK_HEARTBEAT_INTERVAL_MS=1e4,exports.TASK_HEARTBEAT_STALE_MS=3e4,exports.TASK_HEARTBEAT_HARD_STALE_MS=18e5,exports.TASK_STOP_POLL_INTERVAL_MS=1e3;exports.taskHeartbeatRegistry=new Map;});function vs(t,e=Date.now(),n=exports.TASK_STOP_DEFAULT_GRACE_MS){let r=t?Date.parse(t):Number.NaN,o=typeof e=="number"?e:Date.parse(e),s=As(n,exports.TASK_STOP_DEFAULT_GRACE_MS,0);return Number.isFinite(r)&&Number.isFinite(o)&&o-r>s?"forced":"cooperative"}function As(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function oc(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function sg(t){if(!t)return;let e=oc(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function _t(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=sg(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function sc(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 ye(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 Es(t,e){return ye(t,exports.INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED,e)}function ig(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=Kt():false}function ag(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function dg(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=oc(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 cg(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return _t(r,n)}async function ug(t,e,n,r){let o=Date.now()+n;for(;;){let s=cg(t,e);if(s)return s;let i=o-Date.now();if(i<=0)return;await new Promise(d=>{setTimeout(d,Math.min(r,i));});}}async function Xd(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 L=t.stopPendingTask(e,void 0,void 0,{...o,at:r}),y=t.getTask(e);if(L||!y||y.status!=="running")return _t(y);if(s=t.requestTaskStop({id:e,requestedAt:r,...o}),!s.accepted&&s.status!=="running"||!s.accepted&&!s.alreadyRequestedAt)return _t(t.getTask(e))}else if(!(s.status==="running"&&s.alreadyRequestedAt))return _t(i)}let d=s.runEpoch,c=As(n.graceMs,exports.TASK_STOP_DEFAULT_GRACE_MS,0),u=As(n.pollMs,exports.TASK_STOP_DEFAULT_POLL_MS,1),f=await ug(t,e,c,u);if(f)return f;let p=t.getTask(e);if(!p||p.status!=="running")return _t(p);let g=dg(p),_=g[0];if(!_){let L=t.finalizeTaskStop({id:e,runEpoch:d,method:"forced"}),y=t.getTask(e);return L||y?.status!=="running"?_t(y):ye(y,"Failed to finalize task stop")}let m=ag(n),k="unknown";if(!ig(p,Date.now())){let L=n.processControl?.checkProcessOwnershipAsync??zo;try{k=await L(_,n.ownershipMarkers??exports.TASK_STOP_OWNED_PROCESS_MARKERS,m);}catch{k="unknown";}if(k!=="owned")return sc(p)}let T=n.processControl?.terminateProcessTree??Ko;for(let L of g){let y;try{y=await T(L,{...m,signal:Go});}catch(C){y={status:"failed",pid:L,method:m.platform==="win32"?"taskkill":"process-group",error:C instanceof Error?C.message:String(C)};}if(y.status==="failed")return ye(t.getTask(e),y.error??"Failed to terminate process tree")}let E=t.finalizeTaskStop({id:e,runEpoch:d,method:"forced"}),b=t.getTask(e);return E||b?.status!=="running"?_t(b,_):ye(b,"Task changed before stop was finalized")}function Qd(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function Zd(t){return Number.isSafeInteger(t)&&t>=0}function Ss(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function lg(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}async function ic(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Es(n,Qd(e.targetPid)?e.targetPid:void 0);if(!Zd(e.sourceRunEpoch)||!Zd(e.settleRunEpoch)||Ss(n.run_epoch)!==e.settleRunEpoch)return ye(n,exports.INSTRUCTION_STOP_EPOCH_MISMATCH,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return ye(n,exports.INSTRUCTION_STOP_WORKSPACE_MISMATCH,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 ye(n,exports.INSTRUCTION_STOP_REQUEST_FAILED,e.targetPid)}let s=t.getTask(e.taskId);if(!s||s.status!=="running")return Es(s,e.targetPid);if(o.runEpoch!==e.settleRunEpoch||Ss(s.run_epoch)!==e.settleRunEpoch)return ye(s,exports.INSTRUCTION_STOP_EPOCH_MISMATCH,e.targetPid);if(e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId)return ye(s,exports.INSTRUCTION_STOP_WORKSPACE_MISMATCH,e.targetPid);if(!Qd(e.targetPid))return ye(s,exports.INSTRUCTION_STOP_TARGET_PID_MISSING);let i=lg(e),d=e.processControl?.checkProcessOwnershipAsync??zo,c="unknown";try{c=await d(e.targetPid,e.ownershipMarkers??exports.TASK_STOP_OWNED_PROCESS_MARKERS,i);}catch{c="unknown";}if(c!=="owned")return sc(s,e.targetPid);let u=t.getTask(e.taskId);if(!u||u.status!=="running")return Es(u,e.targetPid);if(Ss(u.run_epoch)!==e.settleRunEpoch)return ye(u,exports.INSTRUCTION_STOP_EPOCH_MISMATCH,e.targetPid);if(e.workspaceId!==void 0&&u.workspace_id!==e.workspaceId)return ye(u,exports.INSTRUCTION_STOP_WORKSPACE_MISMATCH,e.targetPid);let f=e.processControl?.terminateProcessTree??Ko,p;try{p=await f(e.targetPid,{...i,signal:Go});}catch{return ye(t.getTask(e.taskId),exports.INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED,e.targetPid)}if(p.status==="failed")return ye(t.getTask(e.taskId),exports.INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED,e.targetPid);let g;try{g=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return ye(t.getTask(e.taskId),exports.INSTRUCTION_STOP_SETTLE_CAS_FAILED,e.targetPid)}return g?_t(t.getTask(e.taskId),e.targetPid):ye(t.getTask(e.taskId),exports.INSTRUCTION_STOP_SETTLE_CAS_FAILED,e.targetPid)}function Ns(t,e,n={}){if(typeof t=="string"){let r=t,o=e??{};return Promise.resolve().then(()=>(er(),ac)).then(({TaskRepository:s})=>Xd(new s,r,o))}return Xd(t,e,n)}exports.TASK_STOP_DEFAULT_GRACE_MS=void 0;exports.TASK_STOP_DEFAULT_POLL_MS=void 0;exports.TASK_STOP_OWNED_PROCESS_MARKERS=void 0;exports.INSTRUCTION_STOP_TARGET_PID_MISSING=void 0;exports.INSTRUCTION_STOP_EPOCH_MISMATCH=void 0;exports.INSTRUCTION_STOP_WORKSPACE_MISMATCH=void 0;exports.INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED=void 0;exports.INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED=void 0;exports.INSTRUCTION_STOP_SETTLE_CAS_FAILED=void 0;exports.INSTRUCTION_STOP_REQUEST_FAILED=void 0;var Cs=O(()=>{h();Vo();Zn();exports.TASK_STOP_DEFAULT_GRACE_MS=5e3,exports.TASK_STOP_DEFAULT_POLL_MS=250;exports.TASK_STOP_OWNED_PROCESS_MARKERS=["crewx","claude","codex","opencode","grok","node"],exports.INSTRUCTION_STOP_TARGET_PID_MISSING="INSTRUCTION_STOP_TARGET_PID_MISSING",exports.INSTRUCTION_STOP_EPOCH_MISMATCH="INSTRUCTION_STOP_EPOCH_MISMATCH",exports.INSTRUCTION_STOP_WORKSPACE_MISMATCH="INSTRUCTION_STOP_WORKSPACE_MISMATCH",exports.INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",exports.INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",exports.INSTRUCTION_STOP_SETTLE_CAS_FAILED="INSTRUCTION_STOP_SETTLE_CAS_FAILED",exports.INSTRUCTION_STOP_REQUEST_FAILED="INSTRUCTION_STOP_REQUEST_FAILED";});var ac={};Iu(ac,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>exports.DEFAULT_TASK_REAPER_TICK_INTERVAL_MS,HOST_SHUTDOWN_TERMINAL_ERROR:()=>lc,PENDING_ADOPT_GRACE_MS:()=>fc,PID_NULL_REAP_GRACE_MS:()=>Fs,TASK_HEARTBEAT_HARD_STALE_MS:()=>exports.TASK_HEARTBEAT_HARD_STALE_MS,TASK_HEARTBEAT_INTERVAL_MS:()=>exports.TASK_HEARTBEAT_INTERVAL_MS,TASK_HEARTBEAT_STALE_MS:()=>exports.TASK_HEARTBEAT_STALE_MS,TaskRepository:()=>exports.TaskRepository,hasRecordedUsage:()=>In,mergeTerminalReason:()=>oo,resolveTaskHeartbeatHardStaleMs:()=>Qn,resolveTaskHeartbeatIntervalMs:()=>Yr,resolveTaskHeartbeatStaleMs:()=>Kt});function rt(t){return {...t,status:Nt(t)}}function Ps(t){return {...t,status:Nt(t)}}function Ls(t=exports.tasks.model,e=exports.tasks.metadata){let n=drizzleOrm.sql`
56
56
  CASE
57
57
  WHEN ${t} LIKE 'claude-%' OR ${t} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
58
58
  WHEN ${t} LIKE 'gpt-%' OR ${t} LIKE 'codex-%' THEN 'codex'
@@ -81,7 +81,7 @@ ${r.join(`
81
81
  WHEN trim(${i}) = '' THEN 'unknown'
82
82
  ELSE ${i}
83
83
  END
84
- `}function rr(t){return drizzleOrm.sql`${t} NOT IN (${drizzleOrm.sql.join(wg.map(e=>drizzleOrm.sql`${e}`),drizzleOrm.sql`, `)})`}function eo(t){let e=drizzleOrm.sql`
84
+ `}function or(t){return drizzleOrm.sql`${t} NOT IN (${drizzleOrm.sql.join(wg.map(e=>drizzleOrm.sql`${e}`),drizzleOrm.sql`, `)})`}function eo(t){let e=drizzleOrm.sql`
85
85
  CASE
86
86
  WHEN json_valid(${t}) = 1
87
87
  THEN json_extract(${t}, '$.usageAccounting')
@@ -91,13 +91,13 @@ ${r.join(`
91
91
  COALESCE(SUM(
92
92
  CASE WHEN ${e} = 'unavailable' THEN 1 ELSE 0 END
93
93
  ), 0)
94
- `}function bn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function le(t){if(!t)return {};try{let e=JSON.parse(t);return bn(e)?{...e}:{}}catch{return {}}}function ro(t){return t==null||t===""}function Hs(t,e){return ro(t)&&!ro(e)?e:t}function yg(t,e){let n=le(t);if(!e)return n;for(let[r,o]of Object.entries(e))ro(n[r])&&!ro(o)&&(n[r]=o);return n}function to(t,e){let n=t.origin&&pc.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 Rg(t){let e=le(t).stopRequest;if(bn(e)&&!(typeof e.origin!="string"||!pc.has(e.origin)||typeof e.at!="string"||typeof e.callerPid!="number"))return {...e}}function cc(){return drizzleOrm.or(drizzleOrm.isNull(exports.tasks.stop_requested_at),drizzleOrm.ne(drizzleOrm.sql`COALESCE(${exports.tasks.stop_requested_epoch}, 0)`,drizzleOrm.sql`COALESCE(${exports.tasks.run_epoch}, 0)`))}function oo(t,e){let n=le(t??null);return n.terminalReason=e,JSON.stringify(n)}function $s(t,e){let n={...t,terminalReason:"user_stop"},r=e?.trim();return r&&r!==dc&&(n[kg]=e),{error:dc,metadata:n}}function Re(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function In(t){return Re(t.input_tokens)!==0||Re(t.output_tokens)!==0||Re(t.cached_input_tokens)!==0||Re(t.cost_usd)!==0}function Z(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function uc(t){return {inputTokens:Re(t.inputTokens??0),outputTokens:Re(t.outputTokens??0),cachedInputTokens:Re(t.cachedInputTokens??0),costUsd:Re(t.costUsd??0)}}function Eg(t){if(bn(t))return {inputTokens:Re(t.inputTokens),outputTokens:Re(t.outputTokens),cachedInputTokens:Re(t.cachedInputTokens),costUsd:Re(t.costUsd)}}function Sg(t){let e={inputTokens:0,outputTokens:0,cachedInputTokens:0,costUsd:0};for(let n of Object.values(t)){let r=Eg(n);r&&(e.inputTokens+=r.inputTokens,e.outputTokens+=r.outputTokens,e.cachedInputTokens+=r.cachedInputTokens,e.costUsd+=r.costUsd);}return e}function no(t,e,n){let r=Date.parse(t),o=Date.parse(e);return Number.isFinite(r)&&Number.isFinite(o)?o-r:n??null}var Ds,Rn,_g,En,Sn,mg,Ms,nr,ot,dc,lc,kg,Tg,wg,pc,Fs,fc;exports.DEFAULT_TASK_REAPER_TICK_INTERVAL_MS=void 0;exports.TaskRepository=void 0;var Zn=v(()=>{h();se();fe();ce();pe();ue();Lr();Vo();Mr();hs();Yn();Qn();Cs();Qn();Ds=40,Rn="2026-05-09",_g="0.8.9-rc.13",En=10,Sn=parseInt(_g.split("rc.")[1]);mg=new Set(["workflow","mcp"]),Ms="usageByEpoch",nr="lateUsage",ot="usageAccounting",dc="Stopped by user",lc="Stopped by app shutdown",kg="terminalErrorOriginal",Tg=new Set(["stopped","runner_lost"]),wg=["pending","running"];pc=new Set(["http","cli","instruction","workflow","internal"]);Fs=600*1e3,fc=600*1e3,exports.DEFAULT_TASK_REAPER_TICK_INTERVAL_MS=300*1e3,exports.TaskRepository=class extends exports.BaseSqliteRepository{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=Se.join(e.dbRoot,".crewx","crewx.db")),this.taskLogRepository=new exports.TaskLogRepository({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?Ke(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=Z(e.runEpoch),o=r===0?drizzleOrm.or(drizzleOrm.eq(exports.tasks.run_epoch,0),drizzleOrm.isNull(exports.tasks.run_epoch)):drizzleOrm.eq(exports.tasks.run_epoch,r);return n.db.update(exports.tasks).set({heartbeat_at:new Date(this.clock()).toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),o,drizzleOrm.eq(exports.tasks.status,"running"))).run().changes>0}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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:exports.tasks.id,status:exports.tasks.status,run_epoch:exports.tasks.run_epoch,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!s)return;let i=Z(s.run_epoch);if(s.status!=="running"){r={accepted:!1,status:s.status,runEpoch:i};return}let d=s.stop_requested_at!==null&&Z(s.stop_requested_epoch)===i,c=d?s.stop_requested_at:e.requestedAt,u=le(s.metadata),f=d?Rg(s.metadata)??to({origin:e.origin,at:c,callerPid:e.callerPid,callerTaskId:e.callerTaskId},c):to({origin:e.origin,at:c,callerPid:e.callerPid,callerTaskId:e.callerTaskId},c);if(o.update(exports.tasks).set({stop_requested_at:e.requestedAt,stop_requested_epoch:drizzleOrm.sql`${exports.tasks.run_epoch}`,metadata:JSON.stringify({...u,stopRequest:f})}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.status,"running"),cc())).run().changes===0){let m=o.select({status:exports.tasks.status,run_epoch:exports.tasks.run_epoch,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:Z(m?.run_epoch)};return}r={accepted:!1,status:m.status,runEpoch:Z(m.run_epoch),...m.stop_requested_at&&Z(m.stop_requested_epoch)===Z(m.run_epoch)?{alreadyRequestedAt:m.stop_requested_at}:{}};}else r={accepted:!0,status:s.status,runEpoch:i};let g=new Set([e.id]),_=(m,k)=>{if(k>=8)return;let T=o.select({id:exports.tasks.id,status:exports.tasks.status,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.parent_task_id,m),drizzleOrm.eq(exports.tasks.status,"running"))).all();for(let E of T)g.has(E.id)||(g.add(E.id),o.update(exports.tasks).set({stop_requested_at:c,stop_requested_epoch:drizzleOrm.sql`${exports.tasks.run_epoch}`,metadata:JSON.stringify({...le(E.metadata),stopRequest:f})}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,E.id),drizzleOrm.eq(exports.tasks.status,"running"),cc())).run(),_(E.id,k+1));};_(e.id,0);},{behavior:"immediate"}),r}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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:exports.tasks.id,status:exports.tasks.status,run_epoch:exports.tasks.run_epoch,workspace_id:exports.tasks.workspace_id,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!s)return;let i=Z(s.run_epoch),d=Z(e.sourceRunEpoch),c=Z(e.settleRunEpoch);if(s.status!=="running"||i!==c||e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId){r={accepted:!1,status:s.status,runEpoch:i};return}let u=c===0?drizzleOrm.or(drizzleOrm.eq(exports.tasks.run_epoch,0),drizzleOrm.isNull(exports.tasks.run_epoch)):drizzleOrm.eq(exports.tasks.run_epoch,c),f=drizzleOrm.or(drizzleOrm.isNull(exports.tasks.stop_requested_at),drizzleOrm.isNull(exports.tasks.stop_requested_epoch),drizzleOrm.ne(exports.tasks.stop_requested_epoch,d)),p=to({origin:"instruction",at:e.requestedAt,callerPid:e.callerPid,callerTaskId:e.callerTaskId},e.requestedAt),g=T=>o.update(exports.tasks).set({stop_requested_at:e.requestedAt,stop_requested_epoch:d,metadata:JSON.stringify({...le(s.metadata),stopRequest:p})}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.status,"running"),u,T,f)).run();if((e.workspaceId===void 0?g():e.workspaceId===null?g(drizzleOrm.isNull(exports.tasks.workspace_id)):g(drizzleOrm.eq(exports.tasks.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:s.status,runEpoch:c};return}let m=o.select({status:exports.tasks.status,run_epoch:exports.tasks.run_epoch,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:Z(m?.run_epoch)};return}let k=Z(m.run_epoch);r={accepted:!1,status:m.status,runEpoch:k,...m.stop_requested_at&&Z(m.stop_requested_epoch)===d?{alreadyRequestedAt:m.stop_requested_at}:{}};},{behavior:"immediate"}),r}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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:exports.tasks.status,run_epoch:exports.tasks.run_epoch,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch,started_at:exports.tasks.started_at,duration_ms:exports.tasks.duration_ms,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!i||i.status!=="running"||Z(i.run_epoch)!==Z(e.runEpoch))return;let d=i.stop_requested_at!==null&&Z(i.stop_requested_epoch)===Z(e.runEpoch),c=le(i.metadata),u=d?$s(c,e.error):{error:e.error??null,metadata:e.terminalReason===void 0?{...c}:{...c,terminalReason:e.terminalReason}},f={...u.metadata,stopMethod:e.method},p=i.duration_ms??e.durationMs??no(i.started_at,r,void 0),g=i.run_epoch===null?drizzleOrm.isNull(exports.tasks.run_epoch):drizzleOrm.eq(exports.tasks.run_epoch,i.run_epoch);o=s.update(exports.tasks).set({status:"stopped",error:u.error,completed_at:r,duration_ms:p,metadata:JSON.stringify(f)}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.status,"running"),g)).run().changes>0;},{behavior:"immediate"}),o}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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=Z(e.expectedRunEpoch),s="not_running";return n.db.transaction(i=>{let d=i.select({status:exports.tasks.status,run_epoch:exports.tasks.run_epoch,workspace_id:exports.tasks.workspace_id,started_at:exports.tasks.started_at,duration_ms:exports.tasks.duration_ms,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!d||d.status!=="running"){s="not_running";return}if(Z(d.run_epoch)!==o){s="epoch_mismatch";return}if(e.workspaceId!==void 0&&d.workspace_id!==e.workspaceId){s="workspace_mismatch";return}let u=d.run_epoch===null?drizzleOrm.isNull(exports.tasks.run_epoch):drizzleOrm.eq(exports.tasks.run_epoch,d.run_epoch),f=e.workspaceId===void 0?void 0:e.workspaceId===null?drizzleOrm.isNull(exports.tasks.workspace_id):drizzleOrm.eq(exports.tasks.workspace_id,e.workspaceId),p={...le(d.metadata),terminalReason:"runner_lost"},g=d.duration_ms??no(d.started_at,r,void 0);s=i.update(exports.tasks).set({status:"runner_lost",error:lc,completed_at:r,duration_ms:g,metadata:JSON.stringify(p)}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.status,"running"),u,f)).run().changes>0?"settled":"not_running";},{behavior:"immediate"}),s}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to finalize task for host shutdown",r)}finally{n.close();}}async stopTask(e,n={}){return Ns(this,e,n)}async stopTaskGenerationForInstruction(e){return ic({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(exports.tasks).values(s).onConflictDoUpdate({target:exports.tasks.id,set:{status:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN 'running' ELSE ${exports.tasks.status} END`,pid:drizzleOrm.sql`COALESCE(excluded.pid, ${exports.tasks.pid})`,actor_kind:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} IN ('pending', 'running') AND ${exports.tasks.pid} IS NULL AND ${exports.tasks.actor_kind} IS NULL AND COALESCE(${exports.tasks.run_epoch}, 0) = 0 THEN excluded.actor_kind ELSE ${exports.tasks.actor_kind} END`,actor_id:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} IN ('pending', 'running') AND ${exports.tasks.pid} IS NULL AND ${exports.tasks.actor_kind} IS NULL AND COALESCE(${exports.tasks.run_epoch}, 0) = 0 THEN excluded.actor_id ELSE ${exports.tasks.actor_id} END`,command:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.command ELSE ${exports.tasks.command} END`,metadata:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.metadata ELSE ${exports.tasks.metadata} END`,workspace_id:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN COALESCE(${exports.tasks.workspace_id}, excluded.workspace_id) ELSE ${exports.tasks.workspace_id} END`,cwd:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN COALESCE(${exports.tasks.cwd}, excluded.cwd) ELSE ${exports.tasks.cwd} END`,project_id:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN COALESCE(${exports.tasks.project_id}, excluded.project_id) ELSE ${exports.tasks.project_id} END`,crewx_version:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.crewx_version ELSE ${exports.tasks.crewx_version} END`,model:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.model ELSE ${exports.tasks.model} END`,rendered_prompt:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.rendered_prompt ELSE ${exports.tasks.rendered_prompt} END`,coding_agent_command:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.coding_agent_command ELSE ${exports.tasks.coding_agent_command} END`},setWhere:drizzleOrm.or(drizzleOrm.eq(exports.tasks.status,"running"),drizzleOrm.and(drizzleOrm.eq(exports.tasks.status,"pending"),drizzleOrm.isNull(exports.tasks.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 d=new Set(n.db.all("PRAGMA table_info(tasks)").map(Su=>Su.name)),c=d.has("cwd"),u=d.has("user_id"),f=d.has("actor_kind"),p=d.has("actor_id"),g=d.has("log_storage"),_=c?", cwd":"",m=c?", ?":"",k=c?", cwd = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.cwd, excluded.cwd) ELSE tasks.cwd END":"",T=g?", log_storage":"",E=g?", ?":"",b=u?", user_id":"",L=u?", ?":"",y=f?", actor_kind":"",N=f?", ?":"",P=p?", actor_id":"",oe=p?", ?":"",Pe=g?`,
94
+ `}function bn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function le(t){if(!t)return {};try{let e=JSON.parse(t);return bn(e)?{...e}:{}}catch{return {}}}function ro(t){return t==null||t===""}function Hs(t,e){return ro(t)&&!ro(e)?e:t}function yg(t,e){let n=le(t);if(!e)return n;for(let[r,o]of Object.entries(e))ro(n[r])&&!ro(o)&&(n[r]=o);return n}function to(t,e){let n=t.origin&&pc.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 Rg(t){let e=le(t).stopRequest;if(bn(e)&&!(typeof e.origin!="string"||!pc.has(e.origin)||typeof e.at!="string"||typeof e.callerPid!="number"))return {...e}}function cc(){return drizzleOrm.or(drizzleOrm.isNull(exports.tasks.stop_requested_at),drizzleOrm.ne(drizzleOrm.sql`COALESCE(${exports.tasks.stop_requested_epoch}, 0)`,drizzleOrm.sql`COALESCE(${exports.tasks.run_epoch}, 0)`))}function oo(t,e){let n=le(t??null);return n.terminalReason=e,JSON.stringify(n)}function $s(t,e){let n={...t,terminalReason:"user_stop"},r=e?.trim();return r&&r!==dc&&(n[kg]=e),{error:dc,metadata:n}}function Re(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function In(t){return Re(t.input_tokens)!==0||Re(t.output_tokens)!==0||Re(t.cached_input_tokens)!==0||Re(t.cost_usd)!==0}function Z(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function uc(t){return {inputTokens:Re(t.inputTokens??0),outputTokens:Re(t.outputTokens??0),cachedInputTokens:Re(t.cachedInputTokens??0),costUsd:Re(t.costUsd??0)}}function Eg(t){if(bn(t))return {inputTokens:Re(t.inputTokens),outputTokens:Re(t.outputTokens),cachedInputTokens:Re(t.cachedInputTokens),costUsd:Re(t.costUsd)}}function Sg(t){let e={inputTokens:0,outputTokens:0,cachedInputTokens:0,costUsd:0};for(let n of Object.values(t)){let r=Eg(n);r&&(e.inputTokens+=r.inputTokens,e.outputTokens+=r.outputTokens,e.cachedInputTokens+=r.cachedInputTokens,e.costUsd+=r.costUsd);}return e}function no(t,e,n){let r=Date.parse(t),o=Date.parse(e);return Number.isFinite(r)&&Number.isFinite(o)?o-r:n??null}var Ds,Rn,_g,En,Sn,mg,Ms,rr,ot,dc,lc,kg,Tg,wg,pc,Fs,fc;exports.DEFAULT_TASK_REAPER_TICK_INTERVAL_MS=void 0;exports.TaskRepository=void 0;var er=O(()=>{h();se();fe();ce();pe();ue();Lr();Vo();Mr();hs();Xn();Zn();Cs();Zn();Ds=40,Rn="2026-05-09",_g="0.8.9-rc.13",En=10,Sn=parseInt(_g.split("rc.")[1]);mg=new Set(["workflow","mcp"]),Ms="usageByEpoch",rr="lateUsage",ot="usageAccounting",dc="Stopped by user",lc="Stopped by app shutdown",kg="terminalErrorOriginal",Tg=new Set(["stopped","runner_lost"]),wg=["pending","running"];pc=new Set(["http","cli","instruction","workflow","internal"]);Fs=600*1e3,fc=600*1e3,exports.DEFAULT_TASK_REAPER_TICK_INTERVAL_MS=300*1e3,exports.TaskRepository=class extends exports.BaseSqliteRepository{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=Se.join(e.dbRoot,".crewx","crewx.db")),this.taskLogRepository=new exports.TaskLogRepository({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?Ke(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=Z(e.runEpoch),o=r===0?drizzleOrm.or(drizzleOrm.eq(exports.tasks.run_epoch,0),drizzleOrm.isNull(exports.tasks.run_epoch)):drizzleOrm.eq(exports.tasks.run_epoch,r);return n.db.update(exports.tasks).set({heartbeat_at:new Date(this.clock()).toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),o,drizzleOrm.eq(exports.tasks.status,"running"))).run().changes>0}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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:exports.tasks.id,status:exports.tasks.status,run_epoch:exports.tasks.run_epoch,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!s)return;let i=Z(s.run_epoch);if(s.status!=="running"){r={accepted:!1,status:s.status,runEpoch:i};return}let d=s.stop_requested_at!==null&&Z(s.stop_requested_epoch)===i,c=d?s.stop_requested_at:e.requestedAt,u=le(s.metadata),f=d?Rg(s.metadata)??to({origin:e.origin,at:c,callerPid:e.callerPid,callerTaskId:e.callerTaskId},c):to({origin:e.origin,at:c,callerPid:e.callerPid,callerTaskId:e.callerTaskId},c);if(o.update(exports.tasks).set({stop_requested_at:e.requestedAt,stop_requested_epoch:drizzleOrm.sql`${exports.tasks.run_epoch}`,metadata:JSON.stringify({...u,stopRequest:f})}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.status,"running"),cc())).run().changes===0){let m=o.select({status:exports.tasks.status,run_epoch:exports.tasks.run_epoch,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:Z(m?.run_epoch)};return}r={accepted:!1,status:m.status,runEpoch:Z(m.run_epoch),...m.stop_requested_at&&Z(m.stop_requested_epoch)===Z(m.run_epoch)?{alreadyRequestedAt:m.stop_requested_at}:{}};}else r={accepted:!0,status:s.status,runEpoch:i};let g=new Set([e.id]),_=(m,k)=>{if(k>=8)return;let T=o.select({id:exports.tasks.id,status:exports.tasks.status,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.parent_task_id,m),drizzleOrm.eq(exports.tasks.status,"running"))).all();for(let E of T)g.has(E.id)||(g.add(E.id),o.update(exports.tasks).set({stop_requested_at:c,stop_requested_epoch:drizzleOrm.sql`${exports.tasks.run_epoch}`,metadata:JSON.stringify({...le(E.metadata),stopRequest:f})}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,E.id),drizzleOrm.eq(exports.tasks.status,"running"),cc())).run(),_(E.id,k+1));};_(e.id,0);},{behavior:"immediate"}),r}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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:exports.tasks.id,status:exports.tasks.status,run_epoch:exports.tasks.run_epoch,workspace_id:exports.tasks.workspace_id,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!s)return;let i=Z(s.run_epoch),d=Z(e.sourceRunEpoch),c=Z(e.settleRunEpoch);if(s.status!=="running"||i!==c||e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId){r={accepted:!1,status:s.status,runEpoch:i};return}let u=c===0?drizzleOrm.or(drizzleOrm.eq(exports.tasks.run_epoch,0),drizzleOrm.isNull(exports.tasks.run_epoch)):drizzleOrm.eq(exports.tasks.run_epoch,c),f=drizzleOrm.or(drizzleOrm.isNull(exports.tasks.stop_requested_at),drizzleOrm.isNull(exports.tasks.stop_requested_epoch),drizzleOrm.ne(exports.tasks.stop_requested_epoch,d)),p=to({origin:"instruction",at:e.requestedAt,callerPid:e.callerPid,callerTaskId:e.callerTaskId},e.requestedAt),g=T=>o.update(exports.tasks).set({stop_requested_at:e.requestedAt,stop_requested_epoch:d,metadata:JSON.stringify({...le(s.metadata),stopRequest:p})}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.status,"running"),u,T,f)).run();if((e.workspaceId===void 0?g():e.workspaceId===null?g(drizzleOrm.isNull(exports.tasks.workspace_id)):g(drizzleOrm.eq(exports.tasks.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:s.status,runEpoch:c};return}let m=o.select({status:exports.tasks.status,run_epoch:exports.tasks.run_epoch,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:Z(m?.run_epoch)};return}let k=Z(m.run_epoch);r={accepted:!1,status:m.status,runEpoch:k,...m.stop_requested_at&&Z(m.stop_requested_epoch)===d?{alreadyRequestedAt:m.stop_requested_at}:{}};},{behavior:"immediate"}),r}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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:exports.tasks.status,run_epoch:exports.tasks.run_epoch,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch,started_at:exports.tasks.started_at,duration_ms:exports.tasks.duration_ms,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!i||i.status!=="running"||Z(i.run_epoch)!==Z(e.runEpoch))return;let d=i.stop_requested_at!==null&&Z(i.stop_requested_epoch)===Z(e.runEpoch),c=le(i.metadata),u=d?$s(c,e.error):{error:e.error??null,metadata:e.terminalReason===void 0?{...c}:{...c,terminalReason:e.terminalReason}},f={...u.metadata,stopMethod:e.method},p=i.duration_ms??e.durationMs??no(i.started_at,r,void 0),g=i.run_epoch===null?drizzleOrm.isNull(exports.tasks.run_epoch):drizzleOrm.eq(exports.tasks.run_epoch,i.run_epoch);o=s.update(exports.tasks).set({status:"stopped",error:u.error,completed_at:r,duration_ms:p,metadata:JSON.stringify(f)}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.status,"running"),g)).run().changes>0;},{behavior:"immediate"}),o}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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=Z(e.expectedRunEpoch),s="not_running";return n.db.transaction(i=>{let d=i.select({status:exports.tasks.status,run_epoch:exports.tasks.run_epoch,workspace_id:exports.tasks.workspace_id,started_at:exports.tasks.started_at,duration_ms:exports.tasks.duration_ms,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!d||d.status!=="running"){s="not_running";return}if(Z(d.run_epoch)!==o){s="epoch_mismatch";return}if(e.workspaceId!==void 0&&d.workspace_id!==e.workspaceId){s="workspace_mismatch";return}let u=d.run_epoch===null?drizzleOrm.isNull(exports.tasks.run_epoch):drizzleOrm.eq(exports.tasks.run_epoch,d.run_epoch),f=e.workspaceId===void 0?void 0:e.workspaceId===null?drizzleOrm.isNull(exports.tasks.workspace_id):drizzleOrm.eq(exports.tasks.workspace_id,e.workspaceId),p={...le(d.metadata),terminalReason:"runner_lost"},g=d.duration_ms??no(d.started_at,r,void 0);s=i.update(exports.tasks).set({status:"runner_lost",error:lc,completed_at:r,duration_ms:g,metadata:JSON.stringify(p)}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.status,"running"),u,f)).run().changes>0?"settled":"not_running";},{behavior:"immediate"}),s}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to finalize task for host shutdown",r)}finally{n.close();}}async stopTask(e,n={}){return Ns(this,e,n)}async stopTaskGenerationForInstruction(e){return ic({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(exports.tasks).values(s).onConflictDoUpdate({target:exports.tasks.id,set:{status:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN 'running' ELSE ${exports.tasks.status} END`,pid:drizzleOrm.sql`COALESCE(excluded.pid, ${exports.tasks.pid})`,actor_kind:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} IN ('pending', 'running') AND ${exports.tasks.pid} IS NULL AND ${exports.tasks.actor_kind} IS NULL AND COALESCE(${exports.tasks.run_epoch}, 0) = 0 THEN excluded.actor_kind ELSE ${exports.tasks.actor_kind} END`,actor_id:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} IN ('pending', 'running') AND ${exports.tasks.pid} IS NULL AND ${exports.tasks.actor_kind} IS NULL AND COALESCE(${exports.tasks.run_epoch}, 0) = 0 THEN excluded.actor_id ELSE ${exports.tasks.actor_id} END`,command:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.command ELSE ${exports.tasks.command} END`,metadata:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.metadata ELSE ${exports.tasks.metadata} END`,workspace_id:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN COALESCE(${exports.tasks.workspace_id}, excluded.workspace_id) ELSE ${exports.tasks.workspace_id} END`,cwd:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN COALESCE(${exports.tasks.cwd}, excluded.cwd) ELSE ${exports.tasks.cwd} END`,project_id:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN COALESCE(${exports.tasks.project_id}, excluded.project_id) ELSE ${exports.tasks.project_id} END`,crewx_version:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.crewx_version ELSE ${exports.tasks.crewx_version} END`,model:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.model ELSE ${exports.tasks.model} END`,rendered_prompt:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.rendered_prompt ELSE ${exports.tasks.rendered_prompt} END`,coding_agent_command:drizzleOrm.sql`CASE WHEN ${exports.tasks.status} = 'pending' AND ${exports.tasks.pid} IS NULL THEN excluded.coding_agent_command ELSE ${exports.tasks.coding_agent_command} END`},setWhere:drizzleOrm.or(drizzleOrm.eq(exports.tasks.status,"running"),drizzleOrm.and(drizzleOrm.eq(exports.tasks.status,"pending"),drizzleOrm.isNull(exports.tasks.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 d=new Set(n.db.all("PRAGMA table_info(tasks)").map(Su=>Su.name)),c=d.has("cwd"),u=d.has("user_id"),f=d.has("actor_kind"),p=d.has("actor_id"),g=d.has("log_storage"),_=c?", cwd":"",m=c?", ?":"",k=c?", cwd = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.cwd, excluded.cwd) ELSE tasks.cwd END":"",T=g?", log_storage":"",E=g?", ?":"",b=u?", user_id":"",L=u?", ?":"",y=f?", actor_kind":"",C=f?", ?":"",P=p?", actor_id":"",oe=p?", ?":"",Pe=g?`,
95
95
  log_storage = CASE WHEN tasks.status = 'pending' THEN excluded.log_storage ELSE tasks.log_storage END`:"";n.runRaw(`INSERT INTO tasks (
96
96
  id, agent_id, prompt, mode, status, started_at, pid,
97
97
  parent_task_id, caller_agent_id, trace_id, command, metadata,
98
98
  workspace_id${_}, project_id, platform, crewx_version, thread_id,
99
99
  model, rendered_prompt, coding_agent_command${b}${y}${P}${T}
100
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?${m}${L}${N}${oe}${E})
100
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?${m}${L}${C}${oe}${E})
101
101
  ON CONFLICT(id) DO UPDATE SET
102
102
  status = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN 'running' ELSE tasks.status END,
103
103
  pid = COALESCE(excluded.pid, tasks.pid),
@@ -110,8 +110,8 @@ ${r.join(`
110
110
  rendered_prompt = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.rendered_prompt ELSE tasks.rendered_prompt END,
111
111
  coding_agent_command = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.coding_agent_command ELSE tasks.coding_agent_command END${Pe}
112
112
  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,...c?[r.cwd]:[],r.project_id,r.platform,r.crewx_version,r.thread_id,r.model,r.rendered_prompt,r.coding_agent_command,...u?[r.user_id]:[],...f?[r.actor_kind]:[],...p?[r.actor_id]:[],...g?[r.log_storage]:[]]);}}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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:exports.tasks.status,run_epoch:exports.tasks.run_epoch,metadata:exports.tasks.metadata,model:exports.tasks.model,rendered_prompt:exports.tasks.rendered_prompt,coding_agent_command:exports.tasks.coding_agent_command}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!r||r.status!=="running"||Z(r.run_epoch)!==Z(e.runEpoch))return !1;let o=yg(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(exports.tasks.run_epoch):drizzleOrm.eq(exports.tasks.run_epoch,r.run_epoch),i=n.db.update(exports.tasks).set({metadata:JSON.stringify(o),model:Hs(r.model,e.runtime?.model),rendered_prompt:Hs(r.rendered_prompt,e.runtime?.renderedPrompt),coding_agent_command:Hs(r.coding_agent_command,e.runtime?.codingAgentCommand)}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.status,"running"),s)).run();return i.changes>0&&Z(e.runEpoch)>0&&n.db.update(exports.tasks).set({stop_requested_at:null,stop_requested_epoch:null}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.status,"running"),s,drizzleOrm.sql`${exports.tasks.stop_requested_at} IS NOT NULL
113
- AND COALESCE(${exports.tasks.stop_requested_epoch}, 0) <> COALESCE(${exports.tasks.run_epoch}, 0)`)).run(),i.changes>0}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to update task ownership",r)}finally{n.close();}}adoptPendingTask(e){let n=this.openHandle(true);try{return n.db.update(exports.tasks).set({status:"running"}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"pending"),drizzleOrm.isNull(exports.tasks.pid))).run().changes===1}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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(exports.tasks).set({status:"failed",error:n,completed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"pending"))).run().changes>0}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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(d=>{let c=d.select({metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"pending"))).limit(1).get();if(!c)return;let u=$s(le(c.metadata),n),f={...u.metadata,stopMethod:"cooperative",stopRequest:to(o,r)};i=d.update(exports.tasks).set({status:"stopped",error:u.error,completed_at:r,metadata:JSON.stringify(f)}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"pending"))).run().changes===1;},{behavior:"immediate"}),i}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("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(exports.tasks).where(drizzleOrm.eq(exports.tasks.project_id,e)).orderBy(drizzleOrm.desc(exports.tasks.started_at)).all().map(rt)}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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:exports.tasks.status,run_epoch:exports.tasks.run_epoch,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch,started_at:exports.tasks.started_at,duration_ms:exports.tasks.duration_ms,result:exports.tasks.result,exit_code:exports.tasks.exit_code,error:exports.tasks.error,metadata:exports.tasks.metadata,model:exports.tasks.model,input_tokens:exports.tasks.input_tokens,output_tokens:exports.tasks.output_tokens,cached_input_tokens:exports.tasks.cached_input_tokens,cost_usd:exports.tasks.cost_usd}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!i)return;let d=Z(i.run_epoch),c=Z(e.runEpoch),u=i.status==="running"&&d===c,f=i.stop_requested_at!==null&&Z(i.stop_requested_epoch)===d,p=u&&f,g=i.status==="stopped"&&d===c&&f,_=le(i.metadata),m=bn(_[nr])?_[nr]:{},k=String(c),T=Tg.has(i.status),E=T&&d===c&&!In(i)&&!Object.prototype.hasOwnProperty.call(m,k),b=T&&d===c&&!Object.prototype.hasOwnProperty.call(m,k),L=d>0||c>0||e.runEpoch!==void 0&&e.runEpoch!==null||d!==c,y={},N;if(i.status!=="running"&&(r=i.status,o=e.result?.trim()||e.error?.trim()||`task:end status=${e.status}`),L&&(i.status==="running"||b)){N=le(i.metadata);let P=bn(N[Ms])?{...N[Ms]}:{};P[String(c)]=uc(e),N[Ms]=P;let oe=Sg(P),Pe=oe.inputTokens!==0||oe.outputTokens!==0||oe.cachedInputTokens!==0||oe.costUsd!==0;Pe&&_[ot]==="unavailable"?N[ot]="recorded":i.status!=="running"&&!Pe&&_[ot]===void 0&&(N[ot]="unavailable"),y.metadata=JSON.stringify(N),y.input_tokens=oe.inputTokens,y.output_tokens=oe.outputTokens,y.cached_input_tokens=oe.cachedInputTokens,y.cost_usd=oe.costUsd;}else if(u||E)if(u)y.input_tokens=Re(e.inputTokens??0),y.output_tokens=Re(e.outputTokens??0),y.cached_input_tokens=Re(e.cachedInputTokens??0),y.cost_usd=Re(e.costUsd??0);else {let P=uc(e),oe=P.inputTokens!==0||P.outputTokens!==0||P.cachedInputTokens!==0||P.costUsd!==0;oe&&(y.input_tokens=P.inputTokens,y.output_tokens=P.outputTokens,y.cached_input_tokens=P.cachedInputTokens,y.cost_usd=P.costUsd),N={..._};let Pe=bn(_[nr])?{..._[nr]}:{};Pe[k]={at:e.completedAt},N[nr]=Pe,N[ot]===void 0?N[ot]=oe?"recorded":"unavailable":oe&&N[ot]==="unavailable"&&(N[ot]="recorded"),y.metadata=JSON.stringify(N);}if((u||E)&&e.model!==void 0&&e.model!==null&&(!E||i.model===null)&&(y.model=e.model),p){N??=le(i.metadata);let P=$s(N,e.error);N={...P.metadata,...e.partialResultRecovered===!0?{partialResultRecovered:!0}:{},stopMethod:vs(i.stop_requested_at,e.completedAt)},y.status="stopped",y.result=e.result??i.result,y.error=P.error,y.completed_at=e.completedAt,y.duration_ms=i.duration_ms??e.durationMs??no(i.started_at,e.completedAt,void 0),y.exit_code=e.exitCode??i.exit_code,y.metadata=JSON.stringify(N);}else if(u)e.partialResultRecovered===!0&&(N??=le(i.metadata),N.partialResultRecovered=!0,y.metadata=JSON.stringify(N)),y.status=e.status,y.result=e.result??null,y.error=e.error??null,y.completed_at=e.completedAt,y.duration_ms=d>0?no(i.started_at,e.completedAt,e.durationMs):e.durationMs??null,y.exit_code=e.exitCode??null;else if(g){let P=!1;i.result===null&&e.result!==void 0&&e.result!==null&&(y.result=e.result,P=!0),i.exit_code===null&&e.exitCode!==void 0&&e.exitCode!==null&&(y.exit_code=e.exitCode),e.partialResultRecovered===!0&&(N??=le(i.metadata),N.partialResultRecovered=!0,y.metadata=JSON.stringify(N)),P&&(r=void 0,o=void 0);}Object.keys(y).length>0&&s.update(exports.tasks).set(y).where(drizzleOrm.eq(exports.tasks.id,e.id)).run();},{behavior:"immediate"});}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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
114
- `);}}updateTaskLifecycle(e){let n=this.openHandle(true);try{let r=drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.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:exports.tasks.metadata}).from(exports.tasks).where(r).limit(1).get(),i=le(s?.metadata??null);i.terminalReason=e.terminalReason,o.metadata=JSON.stringify(i);}n.db.update(exports.tasks).set(o).where(r).run();}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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(exports.tasks).where(drizzleOrm.eq(exports.tasks.status,"running")).orderBy(drizzleOrm.desc(exports.tasks.started_at)).all().map(rt)}catch(n){throw new exports.RepositoryError("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(exports.tasks).where(drizzleOrm.inArray(exports.tasks.status,["pending","running"])).orderBy(drizzleOrm.desc(exports.tasks.started_at)).all().map(rt)}catch(n){throw new exports.RepositoryError("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(exports.tasks).orderBy(drizzleOrm.desc(exports.tasks.started_at)).limit(100).all().map(rt)}catch(n){throw new exports.RepositoryError("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(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e)).limit(1).get();return r?rt(r):void 0}catch(r){throw new exports.RepositoryError("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:exports.tasks.id,status:exports.tasks.status,pid:exports.tasks.pid,platform:exports.tasks.platform,run_epoch:exports.tasks.run_epoch,heartbeat_at:exports.tasks.heartbeat_at,started_at:exports.tasks.started_at,metadata:exports.tasks.metadata,model:exports.tasks.model,input_tokens:exports.tasks.input_tokens,output_tokens:exports.tasks.output_tokens,cached_input_tokens:exports.tasks.cached_input_tokens,cost_usd:exports.tasks.cost_usd}).from(exports.tasks).where(drizzleOrm.or(drizzleOrm.eq(exports.tasks.status,"running"),drizzleOrm.eq(exports.tasks.status,"pending"))).all(),o=this.clock(),s=Math.max(1,Math.trunc(e.tickIntervalMs??exports.DEFAULT_TASK_REAPER_TICK_INTERVAL_MS)),i=this.lastReaperTickAt,d=i===void 0?Number.POSITIVE_INFINITY:o-i,c=i!==void 0&&d>=0&&d<=s*2;this.lastReaperTickAt=o;let u=Kt(),f=Xn(),p=new Date(o-fc).toISOString(),g=new Date(o).toISOString(),_=new Set,m=0,k=(T,E)=>{let b=le(oo(T.metadata,"runner_lost")),L=typeof b.provider=="string"?b.provider:void 0,y;try{y=Vr({taskLogRepository:this.taskLogRepository,taskId:T.id,provider:L,model:T.model})?.usage;}catch{}let N={status:"runner_lost",error:E,completed_at:g};y?(N.input_tokens=y.inputTokens,N.output_tokens=y.outputTokens,N.cached_input_tokens=y.cachedInputTokens,N.cost_usd=y.costUsd,T.model===null&&y.model!==null&&(N.model=y.model),b[ot]="recorded"):!In(T)&&b[ot]!=="recorded"&&(b[ot]="unavailable"),N.metadata=JSON.stringify(b);let P=T.run_epoch===null?drizzleOrm.isNull(exports.tasks.run_epoch):drizzleOrm.eq(exports.tasks.run_epoch,T.run_epoch),oe=T.heartbeat_at===null?drizzleOrm.isNull(exports.tasks.heartbeat_at):drizzleOrm.eq(exports.tasks.heartbeat_at,T.heartbeat_at),Pe=n.db.update(exports.tasks).set(N).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,T.id),drizzleOrm.eq(exports.tasks.status,"running"),P,oe)).run();return Pe.changes>0&&m++,Pe.changes>0};for(let T of r){if(T.status==="pending"){if(T.pid!==null||T.started_at>=p)continue;let y=oo(T.metadata,"launch_failed");n.db.update(exports.tasks).set({status:"failed",error:"Reaped: runner never adopted task (pending timeout)",completed_at:g,metadata:y}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,T.id),drizzleOrm.eq(exports.tasks.status,"pending"),drizzleOrm.isNull(exports.tasks.pid),drizzleOrm.lt(exports.tasks.started_at,p))).run().changes>0&&m++;continue}if(mg.has(T.platform??"cli"))continue;if(T.pid===null){let y=`${T.id}:${T.run_epoch??0}`;_.add(y);let N=this.pidNullObservedSince.get(y);if(N===void 0){this.pidNullObservedSince.set(y,o);continue}o-N>=Fs&&k(T,"Reaped: pid never recorded after resume (stale running_instruction)")&&this.pidNullObservedSince.delete(y);continue}if(T.heartbeat_at===null){$t(T.pid)==="not_found"&&k(T,"Reaped: process not found (orphaned task)");continue}let E=Date.parse(T.heartbeat_at),b=Number.isFinite(E)?o-E:Number.POSITIVE_INFINITY;if(b<=u)continue;$t(T.pid)==="not_found"?k(T,"Reaped: process not found (orphaned task)"):b>f&&c&&k(T,"Reaped: heartbeat stale beyond hard limit (orphaned task)");}for(let T of Array.from(this.pidNullObservedSince.keys()))_.has(T)||this.pidNullObservedSince.delete(T);return m}finally{n.close();}}reapRunningWorkflowTasks(e=Fs){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString(),o=drizzleOrm.and(drizzleOrm.eq(exports.tasks.status,"running"),drizzleOrm.eq(exports.tasks.platform,"workflow"),drizzleOrm.isNull(exports.tasks.pid),drizzleOrm.lt(exports.tasks.started_at,r),drizzleOrm.or(drizzleOrm.isNull(exports.tasks.metadata),drizzleOrm.and(drizzleOrm.notLike(exports.tasks.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(exports.tasks.metadata,'%"kind":"workflow_ui_instance"%')))),s=n.db.select({id:exports.tasks.id,metadata:exports.tasks.metadata}).from(exports.tasks).where(o).all(),i=new Date().toISOString(),d=0;for(let c of s){let u=le(c.metadata);u.terminalReason="runner_lost";let f=n.db.update(exports.tasks).set({status:"runner_lost",error:"Reaped: stale workflow run (finally not executed)",completed_at:i,metadata:JSON.stringify(u)}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,c.id),drizzleOrm.eq(exports.tasks.status,"running"))).run();d+=f.changes??0;}return d}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=C(o);try{let i=n?drizzleOrm.eq(exports.tasks.workspace_id,n):void 0,d=i?drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),i):drizzleOrm.eq(exports.tasks.id,e),c=s.db.select().from(exports.tasks).where(d).limit(1).get()??void 0;if(!c){let u=i?drizzleOrm.and(drizzleOrm.eq(exports.tasks.thread_id,e),i):drizzleOrm.eq(exports.tasks.thread_id,e);c=s.db.select().from(exports.tasks).where(u).orderBy(drizzleOrm.desc(exports.tasks.started_at)).limit(1).get()??void 0;}if(c)return rt(c)}catch(i){throw new exports.RepositoryError("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(!Oa.existsSync(i))continue;let d=C(i);try{let c=n?drizzleOrm.and(drizzleOrm.eq(exports.tasks.parent_task_id,e),drizzleOrm.eq(exports.tasks.workspace_id,n)):drizzleOrm.eq(exports.tasks.parent_task_id,e),u=d.db.select().from(exports.tasks).where(c).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all();for(let f of u)o.has(f.id)||(o.add(f.id),s.push(rt(f)));}catch(c){throw new exports.RepositoryError("DB_ERROR","Failed to find child tasks",c)}finally{d.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?drizzleOrm.sql`
113
+ AND COALESCE(${exports.tasks.stop_requested_epoch}, 0) <> COALESCE(${exports.tasks.run_epoch}, 0)`)).run(),i.changes>0}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to update task ownership",r)}finally{n.close();}}adoptPendingTask(e){let n=this.openHandle(true);try{return n.db.update(exports.tasks).set({status:"running"}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"pending"),drizzleOrm.isNull(exports.tasks.pid))).run().changes===1}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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(exports.tasks).set({status:"failed",error:n,completed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"pending"))).run().changes>0}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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(d=>{let c=d.select({metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"pending"))).limit(1).get();if(!c)return;let u=$s(le(c.metadata),n),f={...u.metadata,stopMethod:"cooperative",stopRequest:to(o,r)};i=d.update(exports.tasks).set({status:"stopped",error:u.error,completed_at:r,metadata:JSON.stringify(f)}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"pending"))).run().changes===1;},{behavior:"immediate"}),i}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("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(exports.tasks).where(drizzleOrm.eq(exports.tasks.project_id,e)).orderBy(drizzleOrm.desc(exports.tasks.started_at)).all().map(rt)}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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:exports.tasks.status,run_epoch:exports.tasks.run_epoch,stop_requested_at:exports.tasks.stop_requested_at,stop_requested_epoch:exports.tasks.stop_requested_epoch,started_at:exports.tasks.started_at,duration_ms:exports.tasks.duration_ms,result:exports.tasks.result,exit_code:exports.tasks.exit_code,error:exports.tasks.error,metadata:exports.tasks.metadata,model:exports.tasks.model,input_tokens:exports.tasks.input_tokens,output_tokens:exports.tasks.output_tokens,cached_input_tokens:exports.tasks.cached_input_tokens,cost_usd:exports.tasks.cost_usd}).from(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e.id)).limit(1).get();if(!i)return;let d=Z(i.run_epoch),c=Z(e.runEpoch),u=i.status==="running"&&d===c,f=i.stop_requested_at!==null&&Z(i.stop_requested_epoch)===d,p=u&&f,g=i.status==="stopped"&&d===c&&f,_=le(i.metadata),m=bn(_[rr])?_[rr]:{},k=String(c),T=Tg.has(i.status),E=T&&d===c&&!In(i)&&!Object.prototype.hasOwnProperty.call(m,k),b=T&&d===c&&!Object.prototype.hasOwnProperty.call(m,k),L=d>0||c>0||e.runEpoch!==void 0&&e.runEpoch!==null||d!==c,y={},C;if(i.status!=="running"&&(r=i.status,o=e.result?.trim()||e.error?.trim()||`task:end status=${e.status}`),L&&(i.status==="running"||b)){C=le(i.metadata);let P=bn(C[Ms])?{...C[Ms]}:{};P[String(c)]=uc(e),C[Ms]=P;let oe=Sg(P),Pe=oe.inputTokens!==0||oe.outputTokens!==0||oe.cachedInputTokens!==0||oe.costUsd!==0;Pe&&_[ot]==="unavailable"?C[ot]="recorded":i.status!=="running"&&!Pe&&_[ot]===void 0&&(C[ot]="unavailable"),y.metadata=JSON.stringify(C),y.input_tokens=oe.inputTokens,y.output_tokens=oe.outputTokens,y.cached_input_tokens=oe.cachedInputTokens,y.cost_usd=oe.costUsd;}else if(u||E)if(u)y.input_tokens=Re(e.inputTokens??0),y.output_tokens=Re(e.outputTokens??0),y.cached_input_tokens=Re(e.cachedInputTokens??0),y.cost_usd=Re(e.costUsd??0);else {let P=uc(e),oe=P.inputTokens!==0||P.outputTokens!==0||P.cachedInputTokens!==0||P.costUsd!==0;oe&&(y.input_tokens=P.inputTokens,y.output_tokens=P.outputTokens,y.cached_input_tokens=P.cachedInputTokens,y.cost_usd=P.costUsd),C={..._};let Pe=bn(_[rr])?{..._[rr]}:{};Pe[k]={at:e.completedAt},C[rr]=Pe,C[ot]===void 0?C[ot]=oe?"recorded":"unavailable":oe&&C[ot]==="unavailable"&&(C[ot]="recorded"),y.metadata=JSON.stringify(C);}if((u||E)&&e.model!==void 0&&e.model!==null&&(!E||i.model===null)&&(y.model=e.model),p){C??=le(i.metadata);let P=$s(C,e.error);C={...P.metadata,...e.partialResultRecovered===!0?{partialResultRecovered:!0}:{},stopMethod:vs(i.stop_requested_at,e.completedAt)},y.status="stopped",y.result=e.result??i.result,y.error=P.error,y.completed_at=e.completedAt,y.duration_ms=i.duration_ms??e.durationMs??no(i.started_at,e.completedAt,void 0),y.exit_code=e.exitCode??i.exit_code,y.metadata=JSON.stringify(C);}else if(u)e.partialResultRecovered===!0&&(C??=le(i.metadata),C.partialResultRecovered=!0,y.metadata=JSON.stringify(C)),y.status=e.status,y.result=e.result??null,y.error=e.error??null,y.completed_at=e.completedAt,y.duration_ms=d>0?no(i.started_at,e.completedAt,e.durationMs):e.durationMs??null,y.exit_code=e.exitCode??null;else if(g){let P=!1;i.result===null&&e.result!==void 0&&e.result!==null&&(y.result=e.result,P=!0),i.exit_code===null&&e.exitCode!==void 0&&e.exitCode!==null&&(y.exit_code=e.exitCode),e.partialResultRecovered===!0&&(C??=le(i.metadata),C.partialResultRecovered=!0,y.metadata=JSON.stringify(C)),P&&(r=void 0,o=void 0);}Object.keys(y).length>0&&s.update(exports.tasks).set(y).where(drizzleOrm.eq(exports.tasks.id,e.id)).run();},{behavior:"immediate"});}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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
114
+ `);}}updateTaskLifecycle(e){let n=this.openHandle(true);try{let r=drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e.id),drizzleOrm.eq(exports.tasks.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:exports.tasks.metadata}).from(exports.tasks).where(r).limit(1).get(),i=le(s?.metadata??null);i.terminalReason=e.terminalReason,o.metadata=JSON.stringify(i);}n.db.update(exports.tasks).set(o).where(r).run();}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("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(exports.tasks).where(drizzleOrm.eq(exports.tasks.status,"running")).orderBy(drizzleOrm.desc(exports.tasks.started_at)).all().map(rt)}catch(n){throw new exports.RepositoryError("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(exports.tasks).where(drizzleOrm.inArray(exports.tasks.status,["pending","running"])).orderBy(drizzleOrm.desc(exports.tasks.started_at)).all().map(rt)}catch(n){throw new exports.RepositoryError("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(exports.tasks).orderBy(drizzleOrm.desc(exports.tasks.started_at)).limit(100).all().map(rt)}catch(n){throw new exports.RepositoryError("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(exports.tasks).where(drizzleOrm.eq(exports.tasks.id,e)).limit(1).get();return r?rt(r):void 0}catch(r){throw new exports.RepositoryError("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:exports.tasks.id,status:exports.tasks.status,pid:exports.tasks.pid,platform:exports.tasks.platform,run_epoch:exports.tasks.run_epoch,heartbeat_at:exports.tasks.heartbeat_at,started_at:exports.tasks.started_at,metadata:exports.tasks.metadata,model:exports.tasks.model,input_tokens:exports.tasks.input_tokens,output_tokens:exports.tasks.output_tokens,cached_input_tokens:exports.tasks.cached_input_tokens,cost_usd:exports.tasks.cost_usd}).from(exports.tasks).where(drizzleOrm.or(drizzleOrm.eq(exports.tasks.status,"running"),drizzleOrm.eq(exports.tasks.status,"pending"))).all(),o=this.clock(),s=Math.max(1,Math.trunc(e.tickIntervalMs??exports.DEFAULT_TASK_REAPER_TICK_INTERVAL_MS)),i=this.lastReaperTickAt,d=i===void 0?Number.POSITIVE_INFINITY:o-i,c=i!==void 0&&d>=0&&d<=s*2;this.lastReaperTickAt=o;let u=Kt(),f=Qn(),p=new Date(o-fc).toISOString(),g=new Date(o).toISOString(),_=new Set,m=0,k=(T,E)=>{let b=le(oo(T.metadata,"runner_lost")),L=typeof b.provider=="string"?b.provider:void 0,y;try{y=Vr({taskLogRepository:this.taskLogRepository,taskId:T.id,provider:L,model:T.model})?.usage;}catch{}let C={status:"runner_lost",error:E,completed_at:g};y?(C.input_tokens=y.inputTokens,C.output_tokens=y.outputTokens,C.cached_input_tokens=y.cachedInputTokens,C.cost_usd=y.costUsd,T.model===null&&y.model!==null&&(C.model=y.model),b[ot]="recorded"):!In(T)&&b[ot]!=="recorded"&&(b[ot]="unavailable"),C.metadata=JSON.stringify(b);let P=T.run_epoch===null?drizzleOrm.isNull(exports.tasks.run_epoch):drizzleOrm.eq(exports.tasks.run_epoch,T.run_epoch),oe=T.heartbeat_at===null?drizzleOrm.isNull(exports.tasks.heartbeat_at):drizzleOrm.eq(exports.tasks.heartbeat_at,T.heartbeat_at),Pe=n.db.update(exports.tasks).set(C).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,T.id),drizzleOrm.eq(exports.tasks.status,"running"),P,oe)).run();return Pe.changes>0&&m++,Pe.changes>0};for(let T of r){if(T.status==="pending"){if(T.pid!==null||T.started_at>=p)continue;let y=oo(T.metadata,"launch_failed");n.db.update(exports.tasks).set({status:"failed",error:"Reaped: runner never adopted task (pending timeout)",completed_at:g,metadata:y}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,T.id),drizzleOrm.eq(exports.tasks.status,"pending"),drizzleOrm.isNull(exports.tasks.pid),drizzleOrm.lt(exports.tasks.started_at,p))).run().changes>0&&m++;continue}if(mg.has(T.platform??"cli"))continue;if(T.pid===null){let y=`${T.id}:${T.run_epoch??0}`;_.add(y);let C=this.pidNullObservedSince.get(y);if(C===void 0){this.pidNullObservedSince.set(y,o);continue}o-C>=Fs&&k(T,"Reaped: pid never recorded after resume (stale running_instruction)")&&this.pidNullObservedSince.delete(y);continue}if(T.heartbeat_at===null){$t(T.pid)==="not_found"&&k(T,"Reaped: process not found (orphaned task)");continue}let E=Date.parse(T.heartbeat_at),b=Number.isFinite(E)?o-E:Number.POSITIVE_INFINITY;if(b<=u)continue;$t(T.pid)==="not_found"?k(T,"Reaped: process not found (orphaned task)"):b>f&&c&&k(T,"Reaped: heartbeat stale beyond hard limit (orphaned task)");}for(let T of Array.from(this.pidNullObservedSince.keys()))_.has(T)||this.pidNullObservedSince.delete(T);return m}finally{n.close();}}reapRunningWorkflowTasks(e=Fs){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString(),o=drizzleOrm.and(drizzleOrm.eq(exports.tasks.status,"running"),drizzleOrm.eq(exports.tasks.platform,"workflow"),drizzleOrm.isNull(exports.tasks.pid),drizzleOrm.lt(exports.tasks.started_at,r),drizzleOrm.or(drizzleOrm.isNull(exports.tasks.metadata),drizzleOrm.and(drizzleOrm.notLike(exports.tasks.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(exports.tasks.metadata,'%"kind":"workflow_ui_instance"%')))),s=n.db.select({id:exports.tasks.id,metadata:exports.tasks.metadata}).from(exports.tasks).where(o).all(),i=new Date().toISOString(),d=0;for(let c of s){let u=le(c.metadata);u.terminalReason="runner_lost";let f=n.db.update(exports.tasks).set({status:"runner_lost",error:"Reaped: stale workflow run (finally not executed)",completed_at:i,metadata:JSON.stringify(u)}).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,c.id),drizzleOrm.eq(exports.tasks.status,"running"))).run();d+=f.changes??0;}return d}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=x(o);try{let i=n?drizzleOrm.eq(exports.tasks.workspace_id,n):void 0,d=i?drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),i):drizzleOrm.eq(exports.tasks.id,e),c=s.db.select().from(exports.tasks).where(d).limit(1).get()??void 0;if(!c){let u=i?drizzleOrm.and(drizzleOrm.eq(exports.tasks.thread_id,e),i):drizzleOrm.eq(exports.tasks.thread_id,e);c=s.db.select().from(exports.tasks).where(u).orderBy(drizzleOrm.desc(exports.tasks.started_at)).limit(1).get()??void 0;}if(c)return rt(c)}catch(i){throw new exports.RepositoryError("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(!Oa.existsSync(i))continue;let d=x(i);try{let c=n?drizzleOrm.and(drizzleOrm.eq(exports.tasks.parent_task_id,e),drizzleOrm.eq(exports.tasks.workspace_id,n)):drizzleOrm.eq(exports.tasks.parent_task_id,e),u=d.db.select().from(exports.tasks).where(c).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all();for(let f of u)o.has(f.id)||(o.add(f.id),s.push(rt(f)));}catch(c){throw new exports.RepositoryError("DB_ERROR","Failed to find child tasks",c)}finally{d.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?drizzleOrm.sql`
115
115
  SELECT
116
116
  COALESCE(workspace_id, 'unknown') AS workspace_id,
117
117
  COALESCE(SUM(input_tokens), 0) AS input_tokens,
@@ -132,7 +132,7 @@ ${r.join(`
132
132
  FROM tasks
133
133
  GROUP BY workspace_id
134
134
  ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
135
- `)}catch(r){throw new exports.RepositoryError("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,d=0;for(let c of r){if(!Oa.existsSync(c))continue;let u=C(c);try{let f=drizzleOrm.eq(exports.tasks.thread_id,e),p=n?drizzleOrm.and(f,drizzleOrm.eq(exports.tasks.workspace_id,n)):f,g=u.db.select({id:exports.tasks.id,input_tokens:exports.tasks.input_tokens,output_tokens:exports.tasks.output_tokens,cost_usd:exports.tasks.cost_usd}).from(exports.tasks).where(p).all();for(let _ of g)o.has(_.id)||(o.add(_.id),s+=_.input_tokens??0,i+=_.output_tokens??0,d+=_.cost_usd??0);}catch(f){throw new exports.RepositoryError("DB_ERROR","Failed to get thread token usage",f)}finally{u.close();}}return {inputTokens:s,outputTokens:i,costUsd:d}}findTasksByThread(e,n,r){let o=this.resolveDbPaths(),s=new Set,i=[],d=r?.projection==="activity-log";for(let c of o){if(!Oa.existsSync(c))continue;let u=C(c);try{let f=drizzleOrm.eq(exports.tasks.thread_id,e),p=n?drizzleOrm.and(f,drizzleOrm.eq(exports.tasks.workspace_id,n)):f,g=d?u.db.select({id:exports.tasks.id,thread_id:exports.tasks.thread_id,agent_id:exports.tasks.agent_id,parent_task_id:exports.tasks.parent_task_id,started_at:exports.tasks.started_at,completed_at:exports.tasks.completed_at}).from(exports.tasks).where(p).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all():u.db.select().from(exports.tasks).where(p).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all().map(rt);for(let _ of g)s.has(_.id)||(s.add(_.id),i.push(_));}catch(f){throw new exports.RepositoryError("DB_ERROR","Failed to find tasks by thread",f)}finally{u.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(!Oa.existsSync(n))continue;let r=C(n);try{e.push(...r.db.select({id:exports.tasks.id,agent_id:exports.tasks.agent_id,thread_id:exports.tasks.thread_id,workspace_id:exports.tasks.workspace_id,platform:exports.tasks.platform,status:exports.tasks.status,error:exports.tasks.error,completed_at:exports.tasks.completed_at,duration_ms:exports.tasks.duration_ms,started_at:exports.tasks.started_at,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.platform,"workflow"),drizzleOrm.inArray(exports.tasks.status,["running","pending"]),drizzleOrm.or(drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(drizzleOrm.desc(exports.tasks.started_at)).all().map(Ps));}catch(o){throw new exports.RepositoryError("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(!Oa.existsSync(o))continue;let s=C(o);try{let i=s.db.select({id:exports.tasks.id,agent_id:exports.tasks.agent_id,thread_id:exports.tasks.thread_id,workspace_id:exports.tasks.workspace_id,platform:exports.tasks.platform,status:exports.tasks.status,error:exports.tasks.error,completed_at:exports.tasks.completed_at,duration_ms:exports.tasks.duration_ms,started_at:exports.tasks.started_at,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.platform,"workflow"),drizzleOrm.eq(exports.tasks.workspace_id,e))).orderBy(drizzleOrm.desc(exports.tasks.started_at),drizzleOrm.desc(exports.tasks.id)).all();for(let d of i){let c=this.parseWorkflowCardMetadata(d.metadata);if(c.kind!=="workflow_card"&&c.kind!=="workflow_ui_instance"||typeof c.workflowRunId!="string")continue;let u=c.kind,f=r.get(u)??new Set;f.has(c.workflowRunId)||(f.add(c.workflowRunId),r.set(u,f),n.push(Ps(d)));}}catch(i){throw new exports.RepositoryError("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(!Oa.existsSync(n))continue;let r=C(n);try{let o=r.db.select({id:exports.tasks.id,agent_id:exports.tasks.agent_id,thread_id:exports.tasks.thread_id,workspace_id:exports.tasks.workspace_id,platform:exports.tasks.platform,status:exports.tasks.status,error:exports.tasks.error,completed_at:exports.tasks.completed_at,duration_ms:exports.tasks.duration_ms,started_at:exports.tasks.started_at,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.platform,"workflow"),drizzleOrm.eq(exports.tasks.workspace_id,e.workspaceId))).orderBy(drizzleOrm.desc(exports.tasks.started_at),drizzleOrm.desc(exports.tasks.id)).all();for(let s of o){let i=this.parseWorkflowCardMetadata(s.metadata);if(i.kind===e.kind&&i.workflowRunId===e.workflowRunId)return Ps(s)}}catch(o){throw new exports.RepositoryError("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(exports.tasks.workspace_id,n):void 0,d=(c,u)=>{if(!c)return;let f=s.get(c);if(f&&u.started_at<=f)return;let p=this.parseWorkflowCardMetadata(u.metadata);p.kind!=="workflow_card"&&p.kind!=="workflow_ui_instance"||(s.set(c,u.started_at),r.set(c,{taskId:u.id,workflowRunId:p.workflowRunId,raw:u.result??void 0}));};for(let c of this.resolveDbPaths()){if(!Oa.existsSync(c))continue;let u=C(c);try{let f=drizzleOrm.and(drizzleOrm.inArray(exports.tasks.thread_id,e),drizzleOrm.or(drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_ui_instance"%'))),p=u.db.select({id:exports.tasks.id,thread_id:exports.tasks.thread_id,metadata:exports.tasks.metadata,result:exports.tasks.result,started_at:exports.tasks.started_at}).from(exports.tasks).where(i?drizzleOrm.and(f,i):f).all();for(let m of p)d(m.thread_id,m);let g=drizzleOrm.and(drizzleOrm.isNull(exports.tasks.thread_id),drizzleOrm.or(drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_ui_instance"%'))),_=u.db.select({id:exports.tasks.id,command:exports.tasks.command,metadata:exports.tasks.metadata,result:exports.tasks.result,started_at:exports.tasks.started_at}).from(exports.tasks).where(i?drizzleOrm.and(g,i):g).all();for(let m of _){let k=this.extractThreadIdFromCommand(m.command);!k||!o.has(k)||d(k,m);}}catch(f){throw new exports.RepositoryError("DB_ERROR","Failed to batch fetch workflow cards",f)}finally{u.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(exports.tasks.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(exports.tasks.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(exports.tasks.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(exports.tasks.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(exports.tasks.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(exports.tasks.started_at,e.to));let d=r.length>0?drizzleOrm.and(...r):void 0,c=n.db.select({count:drizzleOrm.sql`count(*)`}).from(exports.tasks).where(d).get(),u=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(exports.tasks.started_at):drizzleOrm.desc(exports.tasks.started_at);return {rows:n.db.select().from(exports.tasks).where(d).orderBy(u).limit(e.limit).offset(e.offset).all().map(rt),total:c?.count??0}}catch(r){throw new exports.RepositoryError("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=Ls(drizzleOrm.sql.raw("t.model"),drizzleOrm.sql.raw("t.metadata")),i=rr(drizzleOrm.sql.raw("t.status")),d=eo(drizzleOrm.sql.raw("t.metadata")),c=drizzleOrm.sql`
135
+ `)}catch(r){throw new exports.RepositoryError("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,d=0;for(let c of r){if(!Oa.existsSync(c))continue;let u=x(c);try{let f=drizzleOrm.eq(exports.tasks.thread_id,e),p=n?drizzleOrm.and(f,drizzleOrm.eq(exports.tasks.workspace_id,n)):f,g=u.db.select({id:exports.tasks.id,input_tokens:exports.tasks.input_tokens,output_tokens:exports.tasks.output_tokens,cost_usd:exports.tasks.cost_usd}).from(exports.tasks).where(p).all();for(let _ of g)o.has(_.id)||(o.add(_.id),s+=_.input_tokens??0,i+=_.output_tokens??0,d+=_.cost_usd??0);}catch(f){throw new exports.RepositoryError("DB_ERROR","Failed to get thread token usage",f)}finally{u.close();}}return {inputTokens:s,outputTokens:i,costUsd:d}}findTasksByThread(e,n,r){let o=this.resolveDbPaths(),s=new Set,i=[],d=r?.projection==="activity-log";for(let c of o){if(!Oa.existsSync(c))continue;let u=x(c);try{let f=drizzleOrm.eq(exports.tasks.thread_id,e),p=n?drizzleOrm.and(f,drizzleOrm.eq(exports.tasks.workspace_id,n)):f,g=d?u.db.select({id:exports.tasks.id,thread_id:exports.tasks.thread_id,agent_id:exports.tasks.agent_id,parent_task_id:exports.tasks.parent_task_id,started_at:exports.tasks.started_at,completed_at:exports.tasks.completed_at}).from(exports.tasks).where(p).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all():u.db.select().from(exports.tasks).where(p).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all().map(rt);for(let _ of g)s.has(_.id)||(s.add(_.id),i.push(_));}catch(f){throw new exports.RepositoryError("DB_ERROR","Failed to find tasks by thread",f)}finally{u.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(!Oa.existsSync(n))continue;let r=x(n);try{e.push(...r.db.select({id:exports.tasks.id,agent_id:exports.tasks.agent_id,thread_id:exports.tasks.thread_id,workspace_id:exports.tasks.workspace_id,platform:exports.tasks.platform,status:exports.tasks.status,error:exports.tasks.error,completed_at:exports.tasks.completed_at,duration_ms:exports.tasks.duration_ms,started_at:exports.tasks.started_at,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.platform,"workflow"),drizzleOrm.inArray(exports.tasks.status,["running","pending"]),drizzleOrm.or(drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(drizzleOrm.desc(exports.tasks.started_at)).all().map(Ps));}catch(o){throw new exports.RepositoryError("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(!Oa.existsSync(o))continue;let s=x(o);try{let i=s.db.select({id:exports.tasks.id,agent_id:exports.tasks.agent_id,thread_id:exports.tasks.thread_id,workspace_id:exports.tasks.workspace_id,platform:exports.tasks.platform,status:exports.tasks.status,error:exports.tasks.error,completed_at:exports.tasks.completed_at,duration_ms:exports.tasks.duration_ms,started_at:exports.tasks.started_at,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.platform,"workflow"),drizzleOrm.eq(exports.tasks.workspace_id,e))).orderBy(drizzleOrm.desc(exports.tasks.started_at),drizzleOrm.desc(exports.tasks.id)).all();for(let d of i){let c=this.parseWorkflowCardMetadata(d.metadata);if(c.kind!=="workflow_card"&&c.kind!=="workflow_ui_instance"||typeof c.workflowRunId!="string")continue;let u=c.kind,f=r.get(u)??new Set;f.has(c.workflowRunId)||(f.add(c.workflowRunId),r.set(u,f),n.push(Ps(d)));}}catch(i){throw new exports.RepositoryError("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(!Oa.existsSync(n))continue;let r=x(n);try{let o=r.db.select({id:exports.tasks.id,agent_id:exports.tasks.agent_id,thread_id:exports.tasks.thread_id,workspace_id:exports.tasks.workspace_id,platform:exports.tasks.platform,status:exports.tasks.status,error:exports.tasks.error,completed_at:exports.tasks.completed_at,duration_ms:exports.tasks.duration_ms,started_at:exports.tasks.started_at,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.platform,"workflow"),drizzleOrm.eq(exports.tasks.workspace_id,e.workspaceId))).orderBy(drizzleOrm.desc(exports.tasks.started_at),drizzleOrm.desc(exports.tasks.id)).all();for(let s of o){let i=this.parseWorkflowCardMetadata(s.metadata);if(i.kind===e.kind&&i.workflowRunId===e.workflowRunId)return Ps(s)}}catch(o){throw new exports.RepositoryError("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(exports.tasks.workspace_id,n):void 0,d=(c,u)=>{if(!c)return;let f=s.get(c);if(f&&u.started_at<=f)return;let p=this.parseWorkflowCardMetadata(u.metadata);p.kind!=="workflow_card"&&p.kind!=="workflow_ui_instance"||(s.set(c,u.started_at),r.set(c,{taskId:u.id,workflowRunId:p.workflowRunId,raw:u.result??void 0}));};for(let c of this.resolveDbPaths()){if(!Oa.existsSync(c))continue;let u=x(c);try{let f=drizzleOrm.and(drizzleOrm.inArray(exports.tasks.thread_id,e),drizzleOrm.or(drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_ui_instance"%'))),p=u.db.select({id:exports.tasks.id,thread_id:exports.tasks.thread_id,metadata:exports.tasks.metadata,result:exports.tasks.result,started_at:exports.tasks.started_at}).from(exports.tasks).where(i?drizzleOrm.and(f,i):f).all();for(let m of p)d(m.thread_id,m);let g=drizzleOrm.and(drizzleOrm.isNull(exports.tasks.thread_id),drizzleOrm.or(drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(exports.tasks.metadata,'%"kind":"workflow_ui_instance"%'))),_=u.db.select({id:exports.tasks.id,command:exports.tasks.command,metadata:exports.tasks.metadata,result:exports.tasks.result,started_at:exports.tasks.started_at}).from(exports.tasks).where(i?drizzleOrm.and(g,i):g).all();for(let m of _){let k=this.extractThreadIdFromCommand(m.command);!k||!o.has(k)||d(k,m);}}catch(f){throw new exports.RepositoryError("DB_ERROR","Failed to batch fetch workflow cards",f)}finally{u.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(exports.tasks.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(exports.tasks.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(exports.tasks.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(exports.tasks.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(exports.tasks.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(exports.tasks.started_at,e.to));let d=r.length>0?drizzleOrm.and(...r):void 0,c=n.db.select({count:drizzleOrm.sql`count(*)`}).from(exports.tasks).where(d).get(),u=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(exports.tasks.started_at):drizzleOrm.desc(exports.tasks.started_at);return {rows:n.db.select().from(exports.tasks).where(d).orderBy(u).limit(e.limit).offset(e.offset).all().map(rt),total:c?.count??0}}catch(r){throw new exports.RepositoryError("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=Ls(drizzleOrm.sql.raw("t.model"),drizzleOrm.sql.raw("t.metadata")),i=or(drizzleOrm.sql.raw("t.status")),d=eo(drizzleOrm.sql.raw("t.metadata")),c=drizzleOrm.sql`
136
136
  COALESCE(t.input_tokens, 0)
137
137
  + CASE
138
138
  WHEN t.started_at >= ${Rn}
@@ -158,7 +158,7 @@ ${r.join(`
158
158
  FROM tasks t
159
159
  ${u}
160
160
  GROUP BY t.agent_id, t.workspace_id, ${s}
161
- `),p=new Map;for(let m of f){let k=typeof m.provider=="string"&&m.provider.trim()!==""?m.provider:"unknown",T={provider:k,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},E=m.workspace_id??null,b=JSON.stringify([m.agent_id,E]),L=p.get(b);if(!L){p.set(b,{agentId:m.agent_id,workspaceId:E,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:[T]});continue}L.totalTasks+=m.total_tasks,L.unavailableTaskCount=(L.unavailableTaskCount??0)+m.unavailable_task_count,L.inputTokens+=m.input_tokens,L.outputTokens+=m.output_tokens,L.cachedInputTokens+=m.cached_input_tokens,L.costUsd+=m.cost_usd,L.totalTokens+=m.input_tokens+m.output_tokens;let y=L.providers.find(N=>N.provider===k);y?(y.inputTokens+=T.inputTokens,y.outputTokens+=T.outputTokens,y.cachedInputTokens+=T.cachedInputTokens,y.totalTokens+=T.totalTokens,y.costUsd+=T.costUsd,y.totalTasks+=T.totalTasks,y.unavailableTaskCount+=T.unavailableTaskCount):L.providers.push(T);}let g=[...p.values()];for(let m of g)m.providers.sort((k,T)=>k.provider===T.provider?0:k.provider==="unknown"?1:T.provider==="unknown"?-1:k.totalTokens!==T.totalTokens?T.totalTokens-k.totalTokens:k.provider<T.provider?-1:1);let _=(m,k)=>m===k?0:m<k?-1:1;return g.sort((m,k)=>{if(m.totalTokens!==k.totalTokens)return k.totalTokens-m.totalTokens;let T=_(m.agentId,k.agentId);return T!==0?T:m.workspaceId===k.workspaceId?0:m.workspaceId===null?1:k.workspaceId===null?-1:_(m.workspaceId,k.workspaceId)}),g}catch(s){throw new exports.RepositoryError("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=rr(drizzleOrm.sql.raw("t.status")),i=eo(drizzleOrm.sql.raw("t.metadata"));return o.db.all(r?drizzleOrm.sql`
161
+ `),p=new Map;for(let m of f){let k=typeof m.provider=="string"&&m.provider.trim()!==""?m.provider:"unknown",T={provider:k,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},E=m.workspace_id??null,b=JSON.stringify([m.agent_id,E]),L=p.get(b);if(!L){p.set(b,{agentId:m.agent_id,workspaceId:E,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:[T]});continue}L.totalTasks+=m.total_tasks,L.unavailableTaskCount=(L.unavailableTaskCount??0)+m.unavailable_task_count,L.inputTokens+=m.input_tokens,L.outputTokens+=m.output_tokens,L.cachedInputTokens+=m.cached_input_tokens,L.costUsd+=m.cost_usd,L.totalTokens+=m.input_tokens+m.output_tokens;let y=L.providers.find(C=>C.provider===k);y?(y.inputTokens+=T.inputTokens,y.outputTokens+=T.outputTokens,y.cachedInputTokens+=T.cachedInputTokens,y.totalTokens+=T.totalTokens,y.costUsd+=T.costUsd,y.totalTasks+=T.totalTasks,y.unavailableTaskCount+=T.unavailableTaskCount):L.providers.push(T);}let g=[...p.values()];for(let m of g)m.providers.sort((k,T)=>k.provider===T.provider?0:k.provider==="unknown"?1:T.provider==="unknown"?-1:k.totalTokens!==T.totalTokens?T.totalTokens-k.totalTokens:k.provider<T.provider?-1:1);let _=(m,k)=>m===k?0:m<k?-1:1;return g.sort((m,k)=>{if(m.totalTokens!==k.totalTokens)return k.totalTokens-m.totalTokens;let T=_(m.agentId,k.agentId);return T!==0?T:m.workspaceId===k.workspaceId?0:m.workspaceId===null?1:k.workspaceId===null?-1:_(m.workspaceId,k.workspaceId)}),g}catch(s){throw new exports.RepositoryError("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=or(drizzleOrm.sql.raw("t.status")),i=eo(drizzleOrm.sql.raw("t.metadata"));return o.db.all(r?drizzleOrm.sql`
162
162
  SELECT
163
163
  date(t.started_at) AS date,
164
164
  t.agent_id,
@@ -213,7 +213,7 @@ ${r.join(`
213
213
  AND t.started_at < ${n}
214
214
  GROUP BY date(t.started_at), t.agent_id
215
215
  ORDER BY date(t.started_at) ASC
216
- `).map(c=>({date:c.date,agentId:c.agent_id,unavailableTaskCount:c.unavailable_task_count,inputTokens:c.input_tokens,outputTokens:c.output_tokens,cachedInputTokens:c.cached_input_tokens,costUsd:c.cost_usd,totalTokens:c.input_tokens+c.output_tokens}))}catch(s){throw new exports.RepositoryError("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(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.workspace_id,n))).limit(1).get();return o?rt(o):void 0}catch(o){throw new exports.RepositoryError("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:exports.tasks.id,thread_id:exports.tasks.thread_id,status:exports.tasks.status,result:exports.tasks.result,error:exports.tasks.error,started_at:exports.tasks.started_at,completed_at:exports.tasks.completed_at,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.agent_id,e.agentId),drizzleOrm.eq(exports.tasks.workspace_id,e.workspaceId),drizzleOrm.sql`${exports.tasks.metadata} IS NOT NULL AND json_valid(${exports.tasks.metadata}) AND json_extract(${exports.tasks.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(exports.tasks.started_at)).limit(1).get()??null}catch(r){throw new exports.RepositoryError("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 d=new Date().toISOString(),c=r?drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"running"),drizzleOrm.eq(exports.tasks.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"running")),u=i.db.select({metadata:exports.tasks.metadata}).from(exports.tasks).where(c).limit(1).get();if(!u)return;let f={status:o,error:n,completed_at:d};if(s){let p=le(u.metadata);p.terminalReason=s,f.metadata=JSON.stringify(p);}i.db.update(exports.tasks).set(f).where(c).run();}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to mark task failed",d)}finally{i.close();}}findTasksByPromptHint(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Oa.existsSync(i))continue;let d=C(i);try{let c=n?drizzleOrm.and(drizzleOrm.like(exports.tasks.prompt,`%${e}%`),drizzleOrm.eq(exports.tasks.workspace_id,n)):drizzleOrm.like(exports.tasks.prompt,`%${e}%`),u=d.db.select().from(exports.tasks).where(c).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all();for(let f of u)o.has(f.id)||(o.add(f.id),s.push(rt(f)));}catch(c){throw new exports.RepositoryError("DB_ERROR","Failed to find tasks by prompt hint",c)}finally{d.close();}}return s}getProviderUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=Ls(),i=rr(exports.tasks.status),d=eo(exports.tasks.metadata),c=drizzleOrm.sql`
216
+ `).map(c=>({date:c.date,agentId:c.agent_id,unavailableTaskCount:c.unavailable_task_count,inputTokens:c.input_tokens,outputTokens:c.output_tokens,cachedInputTokens:c.cached_input_tokens,costUsd:c.cost_usd,totalTokens:c.input_tokens+c.output_tokens}))}catch(s){throw new exports.RepositoryError("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(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.workspace_id,n))).limit(1).get();return o?rt(o):void 0}catch(o){throw new exports.RepositoryError("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:exports.tasks.id,thread_id:exports.tasks.thread_id,status:exports.tasks.status,result:exports.tasks.result,error:exports.tasks.error,started_at:exports.tasks.started_at,completed_at:exports.tasks.completed_at,metadata:exports.tasks.metadata}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.agent_id,e.agentId),drizzleOrm.eq(exports.tasks.workspace_id,e.workspaceId),drizzleOrm.sql`${exports.tasks.metadata} IS NOT NULL AND json_valid(${exports.tasks.metadata}) AND json_extract(${exports.tasks.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(exports.tasks.started_at)).limit(1).get()??null}catch(r){throw new exports.RepositoryError("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 d=new Date().toISOString(),c=r?drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"running"),drizzleOrm.eq(exports.tasks.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,e),drizzleOrm.eq(exports.tasks.status,"running")),u=i.db.select({metadata:exports.tasks.metadata}).from(exports.tasks).where(c).limit(1).get();if(!u)return;let f={status:o,error:n,completed_at:d};if(s){let p=le(u.metadata);p.terminalReason=s,f.metadata=JSON.stringify(p);}i.db.update(exports.tasks).set(f).where(c).run();}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to mark task failed",d)}finally{i.close();}}findTasksByPromptHint(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Oa.existsSync(i))continue;let d=x(i);try{let c=n?drizzleOrm.and(drizzleOrm.like(exports.tasks.prompt,`%${e}%`),drizzleOrm.eq(exports.tasks.workspace_id,n)):drizzleOrm.like(exports.tasks.prompt,`%${e}%`),u=d.db.select().from(exports.tasks).where(c).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all();for(let f of u)o.has(f.id)||(o.add(f.id),s.push(rt(f)));}catch(c){throw new exports.RepositoryError("DB_ERROR","Failed to find tasks by prompt hint",c)}finally{d.close();}}return s}getProviderUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=Ls(),i=or(exports.tasks.status),d=eo(exports.tasks.metadata),c=drizzleOrm.sql`
217
217
  COALESCE(${exports.tasks.input_tokens}, 0)
218
218
  + CASE
219
219
  WHEN ${exports.tasks.started_at} >= ${Rn}
@@ -240,7 +240,7 @@ ${r.join(`
240
240
  ${u}
241
241
  GROUP BY ${s}
242
242
  ORDER BY (COALESCE(SUM(${c}), 0) + COALESCE(SUM(${exports.tasks.output_tokens}), 0)) DESC
243
- `).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 exports.RepositoryError("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=Ls(),i=rr(exports.tasks.status),d=eo(exports.tasks.metadata),c=drizzleOrm.sql`
243
+ `).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 exports.RepositoryError("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=Ls(),i=or(exports.tasks.status),d=eo(exports.tasks.metadata),c=drizzleOrm.sql`
244
244
  COALESCE(${exports.tasks.input_tokens}, 0)
245
245
  + CASE
246
246
  WHEN ${exports.tasks.started_at} >= ${Rn}
@@ -290,7 +290,7 @@ ${r.join(`
290
290
  THEN COALESCE(${exports.tasks.cached_input_tokens}, 0)
291
291
  ELSE 0
292
292
  END
293
- `,i=rr(exports.tasks.status),d=r?drizzleOrm.sql`WHERE ${i} AND ${exports.tasks.started_at} >= ${e} AND ${exports.tasks.started_at} < ${n} AND ${exports.tasks.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${i} AND ${exports.tasks.started_at} >= ${e} AND ${exports.tasks.started_at} < ${n}`,c=o.db.all(drizzleOrm.sql`
293
+ `,i=or(exports.tasks.status),d=r?drizzleOrm.sql`WHERE ${i} AND ${exports.tasks.started_at} >= ${e} AND ${exports.tasks.started_at} < ${n} AND ${exports.tasks.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${i} AND ${exports.tasks.started_at} >= ${e} AND ${exports.tasks.started_at} < ${n}`,c=o.db.all(drizzleOrm.sql`
294
294
  SELECT
295
295
  ${exports.tasks.caller_agent_id} AS caller_agent_id,
296
296
  ${exports.tasks.agent_id} AS agent_id,
@@ -302,14 +302,14 @@ ${r.join(`
302
302
  GROUP BY ${exports.tasks.caller_agent_id}, ${exports.tasks.agent_id}
303
303
  ORDER BY task_count DESC, ${exports.tasks.caller_agent_id} ASC, ${exports.tasks.agent_id} ASC
304
304
  LIMIT ${Ds+1}
305
- `),u=c.length>Ds;return {edges:c.slice(0,Ds).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:u}}catch(s){throw new exports.RepositoryError("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(exports.tasks.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(exports.tasks.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(exports.tasks.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(exports.tasks.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(exports.tasks.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(exports.tasks.started_at):drizzleOrm.desc(exports.tasks.started_at),i={id:exports.tasks.id,agent_id:exports.tasks.agent_id,status:exports.tasks.status,prompt:exports.tasks.prompt,started_at:exports.tasks.started_at,completed_at:exports.tasks.completed_at,thread_id:exports.tasks.thread_id,error:exports.tasks.error,metadata:exports.tasks.metadata};return (e.limit?n.db.select(i).from(exports.tasks).where(o).orderBy(s).limit(e.limit).all():n.db.select(i).from(exports.tasks).where(o).orderBy(s).all()).map(({error:c,metadata:u,...f})=>({...f,status:Nt({status:f.status,error:c,metadata:u})}))}catch(r){throw new exports.RepositoryError("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(exports.tasks.thread_id),drizzleOrm.isNull(exports.tasks.parent_task_id),drizzleOrm.isNull(exports.tasks.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(exports.tasks.platform),drizzleOrm.ne(exports.tasks.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(exports.tasks.metadata),drizzleOrm.and(drizzleOrm.notLike(exports.tasks.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(exports.tasks.metadata,'%"kind":"workflow_ui_instance"%'))),drizzleOrm.or(drizzleOrm.isNull(exports.tasks.metadata),drizzleOrm.notLike(exports.tasks.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(exports.tasks.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(exports.tasks.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(exports.tasks.started_at,e.to));let i=n.db.select({id:exports.tasks.id,agent_id:exports.tasks.agent_id,status:exports.tasks.status,prompt:exports.tasks.prompt,started_at:exports.tasks.started_at,completed_at:exports.tasks.completed_at,thread_id:exports.tasks.thread_id}).from(exports.tasks).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(exports.tasks.started_at),drizzleOrm.asc(exports.tasks.id)).all(),d=new Map;for(let u of i){if(!u.thread_id)continue;let f={id:u.id,agentId:u.agent_id,status:u.status,prompt:u.prompt,startedAt:u.started_at,completedAt:u.completed_at},p=d.get(u.thread_id);p?p.push(f):d.set(u.thread_id,[f]);}let c=[];for(let[u,f]of d){let p=f.filter(g=>g.agentId===e.targetAgentId).length;p<2||c.push({threadId:u,targetAgentTurnCount:p,turns:f});}return c.sort((u,f)=>{let p=u.turns[u.turns.length-1].startedAt,g=f.turns[f.turns.length-1].startedAt;return p<g?1:p>g?-1:0}),c.slice(0,r).map(u=>({threadId:u.threadId,targetAgentTurnCount:u.targetAgentTurnCount,turns:u.turns.slice(-o)}))}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}};});h();se();pe();h();se();fe();ce();pe();ue();Co();var ee=class extends exports.RepositoryError{reason;constructor(e,n="VALIDATION",r=e,o){super(n,r,o),this.name="CommonCodeRepositoryError",this.reason=e;}},pa="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function jl(){let t=crypto.randomBytes(16),e="";for(let n of t)e+=pa[n%pa.length];return e.slice(0,12)}function Po(){return `c_${jl()}`}function Wl(t){return typeof t=="string"&&exports.COMMON_CODE_GROUPS.includes(t)}function Gl(t){return typeof t=="string"&&exports.COMMON_CODE_COLORS.includes(t)}function sn(t){if(!Wl(t))throw new ee("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function fa(t){if(!Gl(t))throw new ee("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function ga(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new ee("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function an(t){if(typeof t!="string"||t.trim().length===0)throw new ee("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function Nr(t){if(typeof t!="string"||t.trim().length===0)throw new ee("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function It(t,e){return drizzleOrm.and(drizzleOrm.eq(I.code_group,t),drizzleOrm.or(drizzleOrm.isNull(I.workspace_id),drizzleOrm.eq(I.workspace_id,e)))}var Do=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");e&&Oa.mkdirSync(Se.dirname(n),{recursive:true});let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}listSelectable(e,n){if(sn(e),an(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(I).where(drizzleOrm.and(It(e,n),drizzleOrm.eq(I.is_archived,0))).orderBy(drizzleOrm.asc(I.sort_order),drizzleOrm.asc(I.code)).all()}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to list selectable common codes",o)}finally{r.close();}}listForHistory(e,n){if(sn(e),an(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(I).where(It(e,n)).orderBy(drizzleOrm.asc(I.sort_order),drizzleOrm.asc(I.code)).all()}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to list common-code history",o)}finally{r.close();}}reorder(e){let n=e.group;if(sn(n),an(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new ee("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let o of e.codes)Nr(o);if(new Set(e.codes).size!==e.codes.length)throw new ee("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new ee("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(I).where(It(n,e.workspaceId)).all(),i=s.filter(_=>_.is_archived===0),d=new Set(s.map(_=>_.code)),c=new Set(i.map(_=>_.code)),u=e.codes.find(_=>!d.has(_));if(u)throw new ee("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${u}`);if(e.codes.length!==i.length||e.codes.some(_=>!c.has(_)))throw new ee("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let f=new Map(i.map(_=>[_.code,_])),p=e.codes.map(_=>{let m=f.get(_);if(!m)throw new ee("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${_}`);return m}),g;for(let[_,m]of p.entries())m.sort_order!==_&&(g??=new Date().toISOString(),o.update(I).set({sort_order:_,updated_at:g}).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,n),drizzleOrm.eq(I.code,m.code))).run());return o.select().from(I).where(It(n,e.workspaceId)).orderBy(drizzleOrm.asc(I.sort_order),drizzleOrm.asc(I.code)).all()},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to reorder common codes",o)}finally{r.close();}}resolve(e,n){if(sn(e),Nr(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e),drizzleOrm.eq(I.code,n))).limit(1).get()??null}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to resolve common code",o)}finally{r.close();}}createThreadState(e){an(e.workspaceId);let n=ga(e.name);fa(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{if(o.select({code:I.code}).from(I).where(drizzleOrm.and(It("THREAD_STATE",e.workspaceId),drizzleOrm.eq(I.is_archived,0),drizzleOrm.eq(I.code_name,n))).limit(1).get())throw new ee("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let i=o.select({maxSortOrder:drizzleOrm.sql`max(${I.sort_order})`}).from(I).where(It("THREAD_STATE",e.workspaceId)).get(),d=new Date().toISOString(),c=Po();for(;o.select({code:I.code}).from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,"THREAD_STATE"),drizzleOrm.eq(I.code,c))).limit(1).get();)c=Po();o.insert(I).values({code_group:"THREAD_STATE",code:c,code_name:n,color:e.color,sort_order:(i?.maxSortOrder??-1)+1,workspace_id:e.workspaceId,is_builtin:0,is_archived:0,metadata:null,created_at:d,updated_at:d}).run();let u=o.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,"THREAD_STATE"),drizzleOrm.eq(I.code,c))).limit(1).get();if(!u)throw new exports.RepositoryError("DB_ERROR","Created common code could not be read back");return u},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to create thread state common code",o)}finally{r.close();}}updateDisplay(e){if(sn(e.group),Nr(e.code),an(e.workspaceId),e.name===void 0&&e.color===void 0)throw new ee("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:ga(e.name);e.color!==void 0&&fa(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e.group),drizzleOrm.eq(I.code,e.code))).limit(1).get();if(!s)throw new ee("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 ee("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&s.is_archived===0){let c=drizzleOrm.and(It(e.group,e.workspaceId),drizzleOrm.eq(I.is_archived,0));if(o.select({code:I.code}).from(I).where(drizzleOrm.and(c,drizzleOrm.eq(I.code_name,n),drizzleOrm.sql`${I.code} <> ${e.code}`)).limit(1).get())throw new ee("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(I).set(i).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e.group),drizzleOrm.eq(I.code,e.code))).run();let d=o.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e.group),drizzleOrm.eq(I.code,e.code))).limit(1).get();if(!d)throw new exports.RepositoryError("DB_ERROR","Updated common code could not be read back");return d},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to update common-code display values",o)}finally{r.close();}}archive(e,n,r,o=true){if(sn(e),Nr(n),an(r),typeof o!="boolean")throw new ee("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let s=this.openHandle(true);try{return s.db.transaction(i=>{let d=i.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e),drizzleOrm.eq(I.code,n))).limit(1).get();if(!d)throw new ee("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(d.is_builtin===1)throw new ee("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(d,r),!o&&d.code_name!==null&&i.select({code:I.code}).from(I).where(drizzleOrm.and(It(e,r),drizzleOrm.eq(I.is_archived,0),drizzleOrm.eq(I.code_name,d.code_name),drizzleOrm.ne(I.code,n))).limit(1).get())throw new ee("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${d.code_name}`);i.update(I).set({is_archived:o?1:0,updated_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e),drizzleOrm.eq(I.code,n))).run();let c=i.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e),drizzleOrm.eq(I.code,n))).limit(1).get();if(!c)throw new exports.RepositoryError("DB_ERROR","Archived common code could not be read back");return c},{behavior:"immediate"})}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("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 ee("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};h();se();fe();ce();pe();ue();h();function Lo(t){let e=Se__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 ha(t){let e=Lo(t);return crypto.createHash("sha256").update(e).digest("hex")}function Cr(t){return t.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}var $o=class extends exports.BaseSqliteRepository{dbRoot;constructor(e={}){super(),this.dbRoot=e.dbRoot;}resolveDbPath(){return this.dbRoot?Se.join(this.dbRoot,".crewx","crewx.db"):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{tn(r.db);}catch(o){throw r.close(),o}return r}resolveSlug(e,n,r){let o=Cr(Se.basename(r)),i=`${Cr(Se.basename(Se.dirname(r)))}-${o}`,d=[o,i];try{let c=u=>e.select({id:x.id}).from(x).where(drizzleOrm.and(drizzleOrm.eq(x.slug,u),drizzleOrm.ne(x.id,n))).limit(1).all().length>0;for(let u of d)if(!c(u))return u;for(let u=2;u<1e3;u+=1){let f=`${i}-${u}`;if(!c(f))return f}}catch{}return o}normalizeLegacySlugs(){if(!this.dbExists())return {updated:0,checked:0};let e=this.openHandle(true);try{let n=e.db.select({id:x.id,slug:x.slug}).from(x).all(),r=0;for(let o of n)if(o.slug.includes("/")){let s=Cr(o.slug.replace(/\//g,"-"));e.db.update(x).set({slug:s,updated_at:new Date().toISOString()}).where(drizzleOrm.eq(x.id,o.id)).run(),r+=1;}return {updated:r,checked:n.length}}catch(n){throw new exports.RepositoryError("DB_ERROR","Failed to normalize legacy slugs",n)}finally{e.close();}}ensureRow(e,n){let{id:r,slug:o,name:s,workspacePath:i}=n,d=new Date().toISOString();e.insert(x).values({id:r,slug:o,name:s,workspace_path:i,is_active:1,created_at:d,updated_at:d}).onConflictDoNothing().run(),e.update(x).set({workspace_path:i,updated_at:d}).where(drizzleOrm.and(drizzleOrm.eq(x.id,r),drizzleOrm.isNull(x.workspace_path))).run();}registerWorkspace(e){let n=Lo(e),r=this.openHandle(true);try{let o=ha(n),s=Se.basename(n),i=this.resolveSlug(r.db,o,n);return this.ensureRow(r.db,{id:o,slug:i,name:s,workspacePath:n}),{id:o,slug:i}}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to register workspace",o)}finally{r.close();}}listProjects(e){if(!this.dbExists())return {rows:[],total:0};let n=this.openHandle(false);try{let r=e.isActive!==void 0?drizzleOrm.eq(x.is_active,e.isActive?1:0):void 0,o=n.db.select({count:drizzleOrm.sql`count(*)`}).from(x).where(r).get();return {rows:n.db.select().from(x).where(r).orderBy(drizzleOrm.desc(x.updated_at)).limit(e.limit).offset(e.offset).all(),total:o?.count??0}}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to list projects",r)}finally{n.close();}}findById(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(x).where(drizzleOrm.eq(x.id,e)).limit(1).get()??void 0}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find workspace",r)}finally{n.close();}}toggleStar(e){let n=this.openHandle(true);try{let r=n.db.select({starred:x.starred}).from(x).where(drizzleOrm.eq(x.id,e)).get();if(!r)return null;let o=r.starred?0:1;return n.db.update(x).set({starred:o}).where(drizzleOrm.eq(x.id,e)).run(),{starred:!!o}}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to toggle workspace star",r)}finally{n.close();}}findAgentsByProject(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(drizzleOrm.sql`SELECT DISTINCT agent_id FROM tasks WHERE workspace_id = ${e} AND agent_id IS NOT NULL ORDER BY agent_id`).map(o=>o.agent_id)}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find agents by project",r)}finally{n.close();}}findThreadsByProject(e,n){if(!this.dbExists())return {rows:[],total:0};let r=this.openHandle(false);try{let o=r.db.get(drizzleOrm.sql`SELECT COUNT(*) as count FROM threads WHERE workspace_id = ${e}`);return {rows:r.db.all(drizzleOrm.sql`SELECT t.*,
305
+ `),u=c.length>Ds;return {edges:c.slice(0,Ds).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:u}}catch(s){throw new exports.RepositoryError("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(exports.tasks.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(exports.tasks.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(exports.tasks.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(exports.tasks.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(exports.tasks.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(exports.tasks.started_at):drizzleOrm.desc(exports.tasks.started_at),i={id:exports.tasks.id,agent_id:exports.tasks.agent_id,status:exports.tasks.status,prompt:exports.tasks.prompt,started_at:exports.tasks.started_at,completed_at:exports.tasks.completed_at,thread_id:exports.tasks.thread_id,error:exports.tasks.error,metadata:exports.tasks.metadata};return (e.limit?n.db.select(i).from(exports.tasks).where(o).orderBy(s).limit(e.limit).all():n.db.select(i).from(exports.tasks).where(o).orderBy(s).all()).map(({error:c,metadata:u,...f})=>({...f,status:Nt({status:f.status,error:c,metadata:u})}))}catch(r){throw new exports.RepositoryError("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(exports.tasks.thread_id),drizzleOrm.isNull(exports.tasks.parent_task_id),drizzleOrm.isNull(exports.tasks.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(exports.tasks.platform),drizzleOrm.ne(exports.tasks.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(exports.tasks.metadata),drizzleOrm.and(drizzleOrm.notLike(exports.tasks.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(exports.tasks.metadata,'%"kind":"workflow_ui_instance"%'))),drizzleOrm.or(drizzleOrm.isNull(exports.tasks.metadata),drizzleOrm.notLike(exports.tasks.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(exports.tasks.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(exports.tasks.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(exports.tasks.started_at,e.to));let i=n.db.select({id:exports.tasks.id,agent_id:exports.tasks.agent_id,status:exports.tasks.status,prompt:exports.tasks.prompt,started_at:exports.tasks.started_at,completed_at:exports.tasks.completed_at,thread_id:exports.tasks.thread_id}).from(exports.tasks).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(exports.tasks.started_at),drizzleOrm.asc(exports.tasks.id)).all(),d=new Map;for(let u of i){if(!u.thread_id)continue;let f={id:u.id,agentId:u.agent_id,status:u.status,prompt:u.prompt,startedAt:u.started_at,completedAt:u.completed_at},p=d.get(u.thread_id);p?p.push(f):d.set(u.thread_id,[f]);}let c=[];for(let[u,f]of d){let p=f.filter(g=>g.agentId===e.targetAgentId).length;p<2||c.push({threadId:u,targetAgentTurnCount:p,turns:f});}return c.sort((u,f)=>{let p=u.turns[u.turns.length-1].startedAt,g=f.turns[f.turns.length-1].startedAt;return p<g?1:p>g?-1:0}),c.slice(0,r).map(u=>({threadId:u.threadId,targetAgentTurnCount:u.targetAgentTurnCount,turns:u.turns.slice(-o)}))}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}};});h();se();pe();h();se();fe();ce();pe();ue();Co();var ee=class extends exports.RepositoryError{reason;constructor(e,n="VALIDATION",r=e,o){super(n,r,o),this.name="CommonCodeRepositoryError",this.reason=e;}},pa="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function jl(){let t=crypto.randomBytes(16),e="";for(let n of t)e+=pa[n%pa.length];return e.slice(0,12)}function Po(){return `c_${jl()}`}function Wl(t){return typeof t=="string"&&exports.COMMON_CODE_GROUPS.includes(t)}function Gl(t){return typeof t=="string"&&exports.COMMON_CODE_COLORS.includes(t)}function sn(t){if(!Wl(t))throw new ee("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function fa(t){if(!Gl(t))throw new ee("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function ga(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new ee("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function an(t){if(typeof t!="string"||t.trim().length===0)throw new ee("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function Nr(t){if(typeof t!="string"||t.trim().length===0)throw new ee("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function It(t,e){return drizzleOrm.and(drizzleOrm.eq(I.code_group,t),drizzleOrm.or(drizzleOrm.isNull(I.workspace_id),drizzleOrm.eq(I.workspace_id,e)))}var Do=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");e&&Oa.mkdirSync(Se.dirname(n),{recursive:true});let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}listSelectable(e,n){if(sn(e),an(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(I).where(drizzleOrm.and(It(e,n),drizzleOrm.eq(I.is_archived,0))).orderBy(drizzleOrm.asc(I.sort_order),drizzleOrm.asc(I.code)).all()}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to list selectable common codes",o)}finally{r.close();}}listForHistory(e,n){if(sn(e),an(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(I).where(It(e,n)).orderBy(drizzleOrm.asc(I.sort_order),drizzleOrm.asc(I.code)).all()}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to list common-code history",o)}finally{r.close();}}reorder(e){let n=e.group;if(sn(n),an(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new ee("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let o of e.codes)Nr(o);if(new Set(e.codes).size!==e.codes.length)throw new ee("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new ee("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(I).where(It(n,e.workspaceId)).all(),i=s.filter(_=>_.is_archived===0),d=new Set(s.map(_=>_.code)),c=new Set(i.map(_=>_.code)),u=e.codes.find(_=>!d.has(_));if(u)throw new ee("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${u}`);if(e.codes.length!==i.length||e.codes.some(_=>!c.has(_)))throw new ee("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let f=new Map(i.map(_=>[_.code,_])),p=e.codes.map(_=>{let m=f.get(_);if(!m)throw new ee("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${_}`);return m}),g;for(let[_,m]of p.entries())m.sort_order!==_&&(g??=new Date().toISOString(),o.update(I).set({sort_order:_,updated_at:g}).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,n),drizzleOrm.eq(I.code,m.code))).run());return o.select().from(I).where(It(n,e.workspaceId)).orderBy(drizzleOrm.asc(I.sort_order),drizzleOrm.asc(I.code)).all()},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to reorder common codes",o)}finally{r.close();}}resolve(e,n){if(sn(e),Nr(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e),drizzleOrm.eq(I.code,n))).limit(1).get()??null}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to resolve common code",o)}finally{r.close();}}createThreadState(e){an(e.workspaceId);let n=ga(e.name);fa(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{if(o.select({code:I.code}).from(I).where(drizzleOrm.and(It("THREAD_STATE",e.workspaceId),drizzleOrm.eq(I.is_archived,0),drizzleOrm.eq(I.code_name,n))).limit(1).get())throw new ee("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let i=o.select({maxSortOrder:drizzleOrm.sql`max(${I.sort_order})`}).from(I).where(It("THREAD_STATE",e.workspaceId)).get(),d=new Date().toISOString(),c=Po();for(;o.select({code:I.code}).from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,"THREAD_STATE"),drizzleOrm.eq(I.code,c))).limit(1).get();)c=Po();o.insert(I).values({code_group:"THREAD_STATE",code:c,code_name:n,color:e.color,sort_order:(i?.maxSortOrder??-1)+1,workspace_id:e.workspaceId,is_builtin:0,is_archived:0,metadata:null,created_at:d,updated_at:d}).run();let u=o.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,"THREAD_STATE"),drizzleOrm.eq(I.code,c))).limit(1).get();if(!u)throw new exports.RepositoryError("DB_ERROR","Created common code could not be read back");return u},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to create thread state common code",o)}finally{r.close();}}updateDisplay(e){if(sn(e.group),Nr(e.code),an(e.workspaceId),e.name===void 0&&e.color===void 0)throw new ee("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:ga(e.name);e.color!==void 0&&fa(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e.group),drizzleOrm.eq(I.code,e.code))).limit(1).get();if(!s)throw new ee("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 ee("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&s.is_archived===0){let c=drizzleOrm.and(It(e.group,e.workspaceId),drizzleOrm.eq(I.is_archived,0));if(o.select({code:I.code}).from(I).where(drizzleOrm.and(c,drizzleOrm.eq(I.code_name,n),drizzleOrm.sql`${I.code} <> ${e.code}`)).limit(1).get())throw new ee("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(I).set(i).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e.group),drizzleOrm.eq(I.code,e.code))).run();let d=o.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e.group),drizzleOrm.eq(I.code,e.code))).limit(1).get();if(!d)throw new exports.RepositoryError("DB_ERROR","Updated common code could not be read back");return d},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to update common-code display values",o)}finally{r.close();}}archive(e,n,r,o=true){if(sn(e),Nr(n),an(r),typeof o!="boolean")throw new ee("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let s=this.openHandle(true);try{return s.db.transaction(i=>{let d=i.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e),drizzleOrm.eq(I.code,n))).limit(1).get();if(!d)throw new ee("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(d.is_builtin===1)throw new ee("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(d,r),!o&&d.code_name!==null&&i.select({code:I.code}).from(I).where(drizzleOrm.and(It(e,r),drizzleOrm.eq(I.is_archived,0),drizzleOrm.eq(I.code_name,d.code_name),drizzleOrm.ne(I.code,n))).limit(1).get())throw new ee("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${d.code_name}`);i.update(I).set({is_archived:o?1:0,updated_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e),drizzleOrm.eq(I.code,n))).run();let c=i.select().from(I).where(drizzleOrm.and(drizzleOrm.eq(I.code_group,e),drizzleOrm.eq(I.code,n))).limit(1).get();if(!c)throw new exports.RepositoryError("DB_ERROR","Archived common code could not be read back");return c},{behavior:"immediate"})}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("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 ee("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};h();se();fe();ce();pe();ue();h();function Lo(t){let e=Se__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 ha(t){let e=Lo(t);return crypto.createHash("sha256").update(e).digest("hex")}function Cr(t){return t.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}var $o=class extends exports.BaseSqliteRepository{dbRoot;constructor(e={}){super(),this.dbRoot=e.dbRoot;}resolveDbPath(){return this.dbRoot?Se.join(this.dbRoot,".crewx","crewx.db"):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{tn(r.db);}catch(o){throw r.close(),o}return r}resolveSlug(e,n,r){let o=Cr(Se.basename(r)),i=`${Cr(Se.basename(Se.dirname(r)))}-${o}`,d=[o,i];try{let c=u=>e.select({id:v.id}).from(v).where(drizzleOrm.and(drizzleOrm.eq(v.slug,u),drizzleOrm.ne(v.id,n))).limit(1).all().length>0;for(let u of d)if(!c(u))return u;for(let u=2;u<1e3;u+=1){let f=`${i}-${u}`;if(!c(f))return f}}catch{}return o}normalizeLegacySlugs(){if(!this.dbExists())return {updated:0,checked:0};let e=this.openHandle(true);try{let n=e.db.select({id:v.id,slug:v.slug}).from(v).all(),r=0;for(let o of n)if(o.slug.includes("/")){let s=Cr(o.slug.replace(/\//g,"-"));e.db.update(v).set({slug:s,updated_at:new Date().toISOString()}).where(drizzleOrm.eq(v.id,o.id)).run(),r+=1;}return {updated:r,checked:n.length}}catch(n){throw new exports.RepositoryError("DB_ERROR","Failed to normalize legacy slugs",n)}finally{e.close();}}ensureRow(e,n){let{id:r,slug:o,name:s,workspacePath:i}=n,d=new Date().toISOString();e.insert(v).values({id:r,slug:o,name:s,workspace_path:i,is_active:1,created_at:d,updated_at:d}).onConflictDoNothing().run(),e.update(v).set({workspace_path:i,updated_at:d}).where(drizzleOrm.and(drizzleOrm.eq(v.id,r),drizzleOrm.isNull(v.workspace_path))).run();}registerWorkspace(e){let n=Lo(e),r=this.openHandle(true);try{let o=ha(n),s=Se.basename(n),i=this.resolveSlug(r.db,o,n);return this.ensureRow(r.db,{id:o,slug:i,name:s,workspacePath:n}),{id:o,slug:i}}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to register workspace",o)}finally{r.close();}}listProjects(e){if(!this.dbExists())return {rows:[],total:0};let n=this.openHandle(false);try{let r=e.isActive!==void 0?drizzleOrm.eq(v.is_active,e.isActive?1:0):void 0,o=n.db.select({count:drizzleOrm.sql`count(*)`}).from(v).where(r).get();return {rows:n.db.select().from(v).where(r).orderBy(drizzleOrm.desc(v.updated_at)).limit(e.limit).offset(e.offset).all(),total:o?.count??0}}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to list projects",r)}finally{n.close();}}findById(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(v).where(drizzleOrm.eq(v.id,e)).limit(1).get()??void 0}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find workspace",r)}finally{n.close();}}toggleStar(e){let n=this.openHandle(true);try{let r=n.db.select({starred:v.starred}).from(v).where(drizzleOrm.eq(v.id,e)).get();if(!r)return null;let o=r.starred?0:1;return n.db.update(v).set({starred:o}).where(drizzleOrm.eq(v.id,e)).run(),{starred:!!o}}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to toggle workspace star",r)}finally{n.close();}}findAgentsByProject(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(drizzleOrm.sql`SELECT DISTINCT agent_id FROM tasks WHERE workspace_id = ${e} AND agent_id IS NOT NULL ORDER BY agent_id`).map(o=>o.agent_id)}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find agents by project",r)}finally{n.close();}}findThreadsByProject(e,n){if(!this.dbExists())return {rows:[],total:0};let r=this.openHandle(false);try{let o=r.db.get(drizzleOrm.sql`SELECT COUNT(*) as count FROM threads WHERE workspace_id = ${e}`);return {rows:r.db.all(drizzleOrm.sql`SELECT t.*,
306
306
  (SELECT agent_id FROM tasks tk WHERE tk.thread_id = t.id AND tk.agent_id IS NOT NULL ORDER BY tk.started_at ASC LIMIT 1) AS agent_id
307
307
  FROM threads t
308
308
  WHERE t.workspace_id = ${e}
309
309
  ORDER BY t.updated_at DESC
310
- LIMIT ${n.limit} OFFSET ${n.offset}`),total:o?.count??0}}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to find threads by project",o)}finally{r.close();}}findBySlug(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(x).where(drizzleOrm.eq(x.slug,e)).limit(1).get()??void 0}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find workspace by slug",r)}finally{n.close();}}slugExists(e,n){if(!this.dbExists())return false;let r=this.openHandle(false);try{let o=n?drizzleOrm.and(drizzleOrm.eq(x.slug,e),drizzleOrm.ne(x.id,n)):drizzleOrm.eq(x.slug,e);return !!r.db.select({id:x.id}).from(x).where(o).limit(1).get()}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to check slug",o)}finally{r.close();}}insert(e,n,r,o){let s=this.openHandle(true);try{let i=new Date().toISOString();s.db.insert(x).values({id:e,slug:n,name:r,workspace_path:o,is_active:1,created_at:i,updated_at:i}).run();let d=s.db.select().from(x).where(drizzleOrm.eq(x.id,e)).limit(1).get();if(!d)throw new exports.RepositoryError("DB_ERROR","Insert did not return a row");return d}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("DB_ERROR","Failed to insert workspace",i)}finally{s.close();}}update(e,n,r){let o=this.openHandle(true);try{o.runRaw(`UPDATE workspaces SET ${n.join(", ")} WHERE id = ?`,r);let s=o.db.select().from(x).where(drizzleOrm.eq(x.id,e)).limit(1).get();if(!s)throw new exports.RepositoryError("NOT_FOUND",`Workspace ${e} not found`);return s}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("DB_ERROR","Failed to update workspace",s)}finally{o.close();}}cleanupOrphanWorkspaces(){if(!this.dbExists())return {softDeleted:0,checked:0};let e=this.openHandle(true);try{let n=e.db.select({id:x.id,workspace_path:x.workspace_path}).from(x).where(drizzleOrm.and(drizzleOrm.eq(x.is_active,1),drizzleOrm.isNotNull(x.workspace_path))).all(),r=0;for(let o of n){let s=o.workspace_path;Oa.existsSync(Se.join(s,"crewx.yaml"))||Oa.existsSync(Se.join(s,"crewx.yml"))||(e.db.update(x).set({is_active:0,updated_at:new Date().toISOString()}).where(drizzleOrm.eq(x.id,o.id)).run(),r+=1);}return {softDeleted:r,checked:n.length}}catch(n){throw new exports.RepositoryError("DB_ERROR","Failed to cleanup orphan workspaces",n)}finally{e.close();}}delete(e){let n=this.openHandle(true);try{n.db.run(drizzleOrm.sql`UPDATE threads SET workspace_id = NULL WHERE workspace_id = ${e}`),n.db.delete(x).where(drizzleOrm.eq(x.id,e)).run();}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to delete workspace",r)}finally{n.close();}}};h();se();fe();ce();pe();h();var Uo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Xl(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+=Uo[o%62]);}for(;n.length<t;)n+=Uo[crypto.randomBytes(1)[0]%62];return n}function $e(t){return `${t}_${Xl(8)}`}function Ta(t,e){let{createHash:n}=kt("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+=Uo[i%62];return `${t}_${s}`}ue();var Bo=["outcome_plan","contract_check","feature_link","use_verify","result_review"],op=new Set(Bo),ba=Object.freeze(Bo.map(t=>({key:t,labelOverride:null}))),sp=new Set(["created","plan_proposed","plan_approved","decision_requested","decision_answered","replanned","stage_advanced","criterion_verified","scene_changed","result_submitted","accepted"]),ip=new Set(["planning","plan_review","running","human_wait","limit_wait","failed_stop","analyzing_feedback","replanned","awaiting_review","accepted"]),ap=new Set(["pending","verifying","passed","failed"]),dp=new Set(["user","project_manager","system"]),cp=new Set(["task","wi","url"]),up=/^\d{4}-\d{2}-\d{2}$/;function Q(t){throw new exports.RepositoryError("VALIDATION",t)}function ze(t){throw new exports.RepositoryError("NOT_FOUND",t)}function ge(t,e){(typeof t!="string"||t.trim().length===0)&&Q(`${e} is required`);}function lp(t){if(t==null)return;up.test(t)||Q("dueDate must use YYYY-MM-DD");let e=new Date(`${t}T00:00:00.000Z`);(Number.isNaN(e.getTime())||e.toISOString().slice(0,10)!==t)&&Q("dueDate must be a valid calendar date");}function Ia(t){let e=t??ba;(!Array.isArray(e)||e.length===0)&&Q("stages must contain at least one stage");let n=new Set;return e.map(r=>{(!r||typeof r!="object"||Array.isArray(r))&&Q("stage must be an object");let o=r;return ge(o.key,"stage.key"),o.labelOverride!==null&&typeof o.labelOverride!="string"&&Q("stage.labelOverride must be a string or null"),o.labelOverride!==null&&ge(o.labelOverride,"stage.labelOverride"),typeof o.key!="string"&&Q("stage.key is required"),!op.has(o.key)&&o.labelOverride===null&&Q(`custom stage requires a labelOverride: ${o.key}`),n.has(o.key)&&Q(`duplicate stage key: ${o.key}`),n.add(o.key),{key:o.key,labelOverride:o.labelOverride}})}function pp(t){Array.isArray(t)||Q("criteria must be an array");for(let e of t)ge(e,"criterion.statement");}function cn(t={}){let e=t.actorType??"system";dp.has(e)||Q(`invalid actorType: ${String(e)}`);let n=t.actorId??null;return (e==="user"||e==="project_manager")&&(!n||n.trim().length===0)&&Q(`actorId is required for ${e}`),{actorType:e,actorId:n}}function Aa(t,e){let n=t??{};if((n===null||typeof n!="object"||Array.isArray(n))&&Q("event payload must be a JSON object"),e==="accepted")for(let r of ["remainingRisks","nextPlan","lessons","evidenceRefs"])(!Object.prototype.hasOwnProperty.call(n,r)||n[r]===void 0)&&Q(`accepted payload requires ${r}`);try{return JSON.stringify(n)}catch(r){throw new exports.RepositoryError("VALIDATION","event payload must be JSON serializable",r)}}function fp(t){return Array.isArray(t)||Q("evidence must be an array"),t.map(e=>((!e||typeof e!="object")&&Q("evidence item must be an object"),cp.has(e.kind)||Q(`invalid evidence kind: ${String(e.kind)}`),ge(e.ref,"evidence.ref"),e.label!==void 0&&typeof e.label!="string"&&Q("evidence.label must be a string"),e.label===void 0?{kind:e.kind,ref:e.ref}:{kind:e.kind,ref:e.ref,label:e.label}))}function Sa(t){let e;try{e=JSON.parse(t);}catch(n){throw new exports.RepositoryError("DB_ERROR","Project stages JSON is invalid",n)}try{if(!Array.isArray(e))throw new exports.RepositoryError("DB_ERROR","Project stages JSON is invalid");return Ia(e)}catch(n){throw new exports.RepositoryError("DB_ERROR","Project stages JSON is invalid",n)}}function va(t){return ge(t.projectId,"projectId"),ge(t.title,"title"),sp.has(t.type)||Q(`invalid project event type: ${String(t.type)}`),{...cn(t),payloadJson:Aa(t.payload,t.type)}}function Ht(t,e,n){let r=va(e);t.select({id:z.id}).from(z).where(drizzleOrm.eq(z.id,e.projectId)).get()||ze(`Project ${e.projectId} not found`);let s=t.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${Xe.seq}), 0)`}).from(Xe).where(drizzleOrm.eq(Xe.project_id,e.projectId)).get()?.maxSeq??0,i=$e("pje");t.insert(Xe).values({id:i,project_id:e.projectId,seq:s+1,actor_type:r.actorType,actor_id:r.actorId,type:e.type,title:e.title,summary:e.summary??null,payload_json:r.payloadJson,created_at:n}).run();let d=t.select().from(Xe).where(drizzleOrm.eq(Xe.id,i)).get();if(!d)throw new exports.RepositoryError("DB_ERROR","Event insert did not return a row");return d}var Fo=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}getDetailFromHandle(e,n){let r=e.db.select().from(z).where(drizzleOrm.eq(z.id,n)).get();if(!r)return;let o=e.db.select().from(Me).where(drizzleOrm.eq(Me.project_id,n)).orderBy(drizzleOrm.asc(Me.position)).all();return {...r,stages:Sa(r.stages_json),criteria:o}}getDetailOrThrow(e){let n=this.getProject(e);return n||ze(`Project ${e} not found`),n}createProject(e){ge(e.workspaceId,"workspaceId"),ge(e.name,"name"),ge(e.outcome,"outcome"),lp(e.dueDate);let n=Ia(e.stages);pp(e.criteria);let r=$e("prj"),o=new Date().toISOString(),s=this.openHandle(true);try{s.db.transaction(i=>{i.insert(z).values({id:r,workspace_id:e.workspaceId,name:e.name,outcome:e.outcome,due_date:e.dueDate??null,scene:"planning",stages_json:JSON.stringify(n),stage_index:1,created_at:o,updated_at:o,accepted_at:null,archived_at:null}).run(),e.criteria.forEach((d,c)=>{i.insert(Me).values({id:$e("pjc"),project_id:r,position:c+1,statement:d,verify_status:"pending",verified_at:null,evidence_json:"[]",created_at:o,updated_at:o}).run();}),Ht(i,{projectId:r,actorType:"system",type:"created",title:"Project created",payload:{}},o);});}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("DB_ERROR","Failed to create project",i)}finally{s.close();}return this.getDetailOrThrow(r)}getProject(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return this.getDetailFromHandle(n,e)}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to get project",r)}finally{n.close();}}listProjectsByWorkspace(e,n={}){if(ge(e,"workspaceId"),!this.dbExists())return [];let r=this.openHandle(false);try{let o=n.includeArchived?drizzleOrm.eq(z.workspace_id,e):drizzleOrm.and(drizzleOrm.eq(z.workspace_id,e),drizzleOrm.isNull(z.archived_at));return r.db.select({id:z.id}).from(z).where(o).orderBy(drizzleOrm.desc(z.updated_at),drizzleOrm.desc(z.created_at)).all().map(i=>this.getDetailFromHandle(r,i.id)).filter(i=>i!==void 0)}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to list projects",o)}finally{r.close();}}archiveProject(e){ge(e,"projectId");let n=this.openHandle(true);try{n.db.update(z).set({archived_at:new Date().toISOString()}).where(drizzleOrm.eq(z.id,e)).run().changes===0&&ze(`Project ${e} not found`);}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to archive project",r)}finally{n.close();}return this.getDetailOrThrow(e)}setScene(e,n,r={}){ge(e,"projectId"),ip.has(n)||Q(`invalid project scene: ${String(n)}`);let o=cn(r),s=new Date().toISOString(),i=this.openHandle(true);try{i.db.transaction(d=>{let c=d.select().from(z).where(drizzleOrm.eq(z.id,e)).get();c||ze(`Project ${e} not found`),d.update(z).set({scene:n,updated_at:s}).where(drizzleOrm.eq(z.id,e)).run(),Ht(d,{projectId:e,...o,type:"scene_changed",title:"Project scene changed",payload:{before:c.scene,after:n}},s);});}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to set project scene",d)}finally{i.close();}return this.getDetailOrThrow(e)}setStageIndex(e,n,r={}){ge(e,"projectId"),Number.isInteger(n)||Q("stage index must be an integer");let o=cn(r),s=new Date().toISOString(),i=this.openHandle(true);try{i.db.transaction(d=>{let c=d.select().from(z).where(drizzleOrm.eq(z.id,e)).get();c||ze(`Project ${e} not found`);let u=Sa(c.stages_json);(n<1||n>u.length)&&Q("stage index is outside the project stages"),d.update(z).set({stage_index:n,updated_at:s}).where(drizzleOrm.eq(z.id,e)).run(),Ht(d,{projectId:e,...o,type:"stage_advanced",title:"Project stage advanced",payload:{before:c.stage_index,after:n}},s);});}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to set project stage",d)}finally{i.close();}return this.getDetailOrThrow(e)}setCriterionVerify(e,n,r,o={}){let s=typeof e=="string"?{projectId:typeof r=="string"?e:void 0,criterionId:typeof r=="string"?n:e,verifyStatus:typeof r=="string"?r:n,...typeof r=="string"?o:r}:e,i=s.verifyStatus??s.status;(!i||!ap.has(i))&&Q(`invalid criterion status: ${String(i)}`),ge(s.criterionId,"criterionId");let d=cn(s),c=new Date().toISOString(),u=this.openHandle(true),f;try{u.db.transaction(g=>{let _=g.select().from(Me).where(drizzleOrm.eq(Me.id,s.criterionId)).get();_||ze(`Criterion ${s.criterionId} not found`),f=_.project_id,s.projectId&&s.projectId!==_.project_id&&ze(`Criterion ${s.criterionId} not found in project ${s.projectId}`),g.update(Me).set({verify_status:i,verified_at:i==="passed"?c:null,updated_at:c}).where(drizzleOrm.eq(Me.id,s.criterionId)).run(),Ht(g,{projectId:_.project_id,...d,type:"criterion_verified",title:"Criterion verification updated",payload:{criterionId:s.criterionId,status:i}},c);});}catch(g){throw g instanceof exports.RepositoryError?g:new exports.RepositoryError("DB_ERROR","Failed to set criterion verification",g)}finally{u.close();}let p=f?this.getProject(f)?.criteria.find(g=>g.id===s.criterionId):void 0;return p||ze(`Criterion ${s.criterionId} not found`),p}setCriterionEvidence(e,n,r,o={}){let s=typeof e=="string"?{projectId:Array.isArray(r)?e:void 0,criterionId:Array.isArray(r)?n:e,evidence:Array.isArray(r)?r:n,...Array.isArray(r)?o:r}:e;ge(s.criterionId,"criterionId");let i=fp(s.evidence),d=cn(s),c=new Date().toISOString(),u=this.openHandle(true),f;try{u.db.transaction(g=>{let _=g.select().from(Me).where(drizzleOrm.eq(Me.id,s.criterionId)).get();_||ze(`Criterion ${s.criterionId} not found`),f=_.project_id,s.projectId&&s.projectId!==_.project_id&&ze(`Criterion ${s.criterionId} not found in project ${s.projectId}`),g.update(Me).set({evidence_json:JSON.stringify(i),updated_at:c}).where(drizzleOrm.eq(Me.id,s.criterionId)).run(),Ht(g,{projectId:_.project_id,...d,type:"criterion_verified",title:"Criterion evidence updated",payload:{criterionId:s.criterionId,evidence:i}},c);});}catch(g){throw g instanceof exports.RepositoryError?g:new exports.RepositoryError("DB_ERROR","Failed to set criterion evidence",g)}finally{u.close();}let p=f?this.getProject(f)?.criteria.find(g=>g.id===s.criterionId):void 0;return p||ze(`Criterion ${s.criterionId} not found`),p}appendEvent(e,n){let r=typeof e=="string"?{...n,projectId:e}:e;va(r);let o=new Date().toISOString(),s=this.openHandle(true),i;try{s.db.transaction(d=>{i=Ht(d,r,o);});}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to append project event",d)}finally{s.close();}if(!i)throw new exports.RepositoryError("DB_ERROR","Event append did not return a row");return i}listEvents(e,n={}){if(ge(e,"projectId"),n.afterSeq!==void 0&&(!Number.isInteger(n.afterSeq)||n.afterSeq<0)&&Q("afterSeq must be a non-negative integer"),n.limit!==void 0&&(!Number.isInteger(n.limit)||n.limit<1)&&Q("limit must be a positive integer"),!this.dbExists())return [];let r=this.openHandle(false);try{let o=[drizzleOrm.eq(Xe.project_id,e)];n.afterSeq!==void 0&&o.push(drizzleOrm.gt(Xe.seq,n.afterSeq));let s=r.db.select().from(Xe).where(drizzleOrm.and(...o)).orderBy(drizzleOrm.asc(Xe.seq));return n.limit!==void 0&&(s=s.limit(n.limit)),s.all()}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to list project events",o)}finally{r.close();}}acceptProject(e,n){ge(e,"projectId");let r=cn(n),o={remainingRisks:n.remainingRisks,nextPlan:n.nextPlan,lessons:n.lessons,evidenceRefs:n.evidenceRefs};Aa(o,"accepted");let s=new Date().toISOString(),i=this.openHandle(true);try{i.db.transaction(d=>{d.select({id:z.id}).from(z).where(drizzleOrm.eq(z.id,e)).get()||ze(`Project ${e} not found`),d.update(z).set({scene:"accepted",accepted_at:s,updated_at:s}).where(drizzleOrm.eq(z.id,e)).run(),Ht(d,{projectId:e,...r,type:"accepted",title:"Project accepted",payload:o},s);});}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to accept project",d)}finally{i.close();}return this.getDetailOrThrow(e)}};fe();ce();h();ce();ue();var Ca=[x,exports.tasks,w,Di,Tt,ut,We,nn];function _p(){return Se__namespace.default.join(wi__default.default.homedir(),".crewx","crewx.db")}function mp(t){if(!Oa__namespace.default.existsSync(t))return null;let e=Math.floor(Date.now()/1e3),n=`${t}.bak-${e}`;return Oa__namespace.default.copyFileSync(t,n),n}function xa(t){let e=t.all("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'");return new Set(e.map(n=>n.name))}function kp(t){return t==null||typeof t=="object"&&"queryChunks"in t?null:typeof t=="number"?String(t):typeof t=="boolean"?t?"1":"0":typeof t=="string"?`'${t.replace(/'/g,"''")}'`:String(t)}function Tp(t){let e=t.getSQLType(),n=`"${t.name}" ${e}`,r=kp(t.default);return r!==null&&(n+=` DEFAULT ${r}`),t.notNull&&(n+=" NOT NULL"),n}function wp(t,e){let n=e?.dbPath??_p(),r=e?.force??false,o=e?.dryRun??false,s=o?null:mp(n);if(r&&!o)try{t.run("DELETE FROM __drizzle_migrations");}catch{}let i=xa(t);if(!o)try{tn(t);}catch(p){let g=p instanceof Error?`${p.message} ${p.cause?.message??""}`:"";if(!r||!g.includes("duplicate column"))throw p}let d,c;o?(d=Ca.map(g=>sqliteCore.getTableConfig(g).name).filter(g=>!i.has(g)),c=i):(c=xa(t),d=[...c].filter(p=>!i.has(p)));let u=[],f=[];for(let p of Ca){let g=sqliteCore.getTableConfig(p),_=g.name;if(!c.has(_))continue;let m=t.all(`PRAGMA table_info("${_}")`),k=new Set(m.map(E=>E.name)),T=new Set(g.columns.map(E=>E.name));for(let E of g.columns)if(!k.has(E.name)){if(!o){let b=Tp(E);t.run(`ALTER TABLE "${_}" ADD COLUMN ${b}`);}u.push({table:_,column:E.name});}for(let E of m)T.has(E.name)||f.push(`${_}.${E.name} exists in DB but not in schema (untouched)`);}return {created:d,altered:u,warnings:f,backupPath:s}}ue();Zn();Cs();Qn();Yn();Zn();h();se();h();var mc=["success","failed","completed"],co=10*1024*1024*1024,kc=256,xg=new Set(mc),Ee=class extends Error{constructor(n,r,o="metadata"){super(r);this.taskId=n;this.kind=o;this.name="MigrationTaskError";}taskId;kind};function uo(t){return t||(process.env.CREWX_DB?process.env.CREWX_DB:Se.join(wi.homedir(),".crewx","crewx.db"))}function Pg(){return kt("better-sqlite3")}function Tc(t,e){let n=t===":memory:";if(!n&&!Oa.existsSync(t))throw new Error(`Database not found: ${t}`);let r=new(Pg())(t,{readonly:e,fileMustExist:!n,timeout:5e3});return r.pragma("foreign_keys = ON"),r.pragma("busy_timeout = 5000"),r}function vn(t,e,n=[]){return t.prepare(e).all(...n)}function An(t,e,n=[]){return t.prepare(e).get(...n)}function Dg(t,e,n=[]){return t.prepare(e).run(...n)}function Lg(t,e,n=[]){return t.prepare(e).iterate(...n)}function Mg(t){return typeof t=="string"&&t.length>0?t:"<unknown>"}function wc(t){return typeof t=="string"&&xg.has(t)}function gc(t,e){t.set(e,(t.get(e)??0)+1);}function hc(t){return Object.fromEntries([...t.entries()].sort(([e],[n])=>e.localeCompare(n)))}function Hg(t){let e=new Set(vn(t,"SELECT name FROM sqlite_master WHERE type = 'table' AND name IN ('tasks', 'task_log_events')").map(i=>i.name)),n=["tasks","task_log_events"].filter(i=>!e.has(i));if(n.length>0)throw new Error(`Database schema is missing required table(s): ${n.join(", ")}`);let r=new Set(vn(t,"PRAGMA table_info('tasks')").map(i=>i.name)),s=["id","status","logs","log_storage","last_log_seq","log_revision"].filter(i=>!r.has(i));if(s.length>0)throw new Error(`Database schema is missing required tasks column(s): ${s.join(", ")}`)}function yc(t,e){if(e==null)return {entries:[]};if(typeof e!="string")throw new Ee(t,"Malformed task logs: tasks.logs must be JSON text or null","malformed");if(e.trim()==="")return {entries:[]};let n;try{n=JSON.parse(e);}catch(o){let s=o instanceof Error?o.message:String(o);throw new Ee(t,`Malformed JSON in tasks.logs (${s})`,"malformed")}if(!Array.isArray(n))throw new Ee(t,"Malformed task logs: expected a JSON array","malformed");let r=[];for(let[o,s]of n.entries()){if(s===null||typeof s!="object"||typeof s.timestamp!="string"||typeof s.level!="string"||typeof s.message!="string")throw new Ee(t,`Malformed task logs: entry ${o} must contain string timestamp, level, and message fields`,"malformed");let i=s;r.push({timestamp:i.timestamp,level:i.level,message:i.message});}return {entries:r}}function Ws(t,e){if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new Ee(t.id,"Invalid last_log_seq metadata","metadata");if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new Ee(t.id,"Invalid log_revision metadata","metadata");if(e==="blob"&&t.last_log_seq!==0)throw new Ee(t.id,"Blob source must have last_log_seq=0","metadata")}function $g(t){let e=vn(t,`SELECT task_id, COUNT(*) AS event_count
310
+ LIMIT ${n.limit} OFFSET ${n.offset}`),total:o?.count??0}}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to find threads by project",o)}finally{r.close();}}findBySlug(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(v).where(drizzleOrm.eq(v.slug,e)).limit(1).get()??void 0}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find workspace by slug",r)}finally{n.close();}}slugExists(e,n){if(!this.dbExists())return false;let r=this.openHandle(false);try{let o=n?drizzleOrm.and(drizzleOrm.eq(v.slug,e),drizzleOrm.ne(v.id,n)):drizzleOrm.eq(v.slug,e);return !!r.db.select({id:v.id}).from(v).where(o).limit(1).get()}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to check slug",o)}finally{r.close();}}insert(e,n,r,o){let s=this.openHandle(true);try{let i=new Date().toISOString();s.db.insert(v).values({id:e,slug:n,name:r,workspace_path:o,is_active:1,created_at:i,updated_at:i}).run();let d=s.db.select().from(v).where(drizzleOrm.eq(v.id,e)).limit(1).get();if(!d)throw new exports.RepositoryError("DB_ERROR","Insert did not return a row");return d}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("DB_ERROR","Failed to insert workspace",i)}finally{s.close();}}update(e,n,r){let o=this.openHandle(true);try{o.runRaw(`UPDATE workspaces SET ${n.join(", ")} WHERE id = ?`,r);let s=o.db.select().from(v).where(drizzleOrm.eq(v.id,e)).limit(1).get();if(!s)throw new exports.RepositoryError("NOT_FOUND",`Workspace ${e} not found`);return s}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("DB_ERROR","Failed to update workspace",s)}finally{o.close();}}cleanupOrphanWorkspaces(){if(!this.dbExists())return {softDeleted:0,checked:0};let e=this.openHandle(true);try{let n=e.db.select({id:v.id,workspace_path:v.workspace_path}).from(v).where(drizzleOrm.and(drizzleOrm.eq(v.is_active,1),drizzleOrm.isNotNull(v.workspace_path))).all(),r=0;for(let o of n){let s=o.workspace_path;Oa.existsSync(Se.join(s,"crewx.yaml"))||Oa.existsSync(Se.join(s,"crewx.yml"))||(e.db.update(v).set({is_active:0,updated_at:new Date().toISOString()}).where(drizzleOrm.eq(v.id,o.id)).run(),r+=1);}return {softDeleted:r,checked:n.length}}catch(n){throw new exports.RepositoryError("DB_ERROR","Failed to cleanup orphan workspaces",n)}finally{e.close();}}delete(e){let n=this.openHandle(true);try{n.db.run(drizzleOrm.sql`UPDATE threads SET workspace_id = NULL WHERE workspace_id = ${e}`),n.db.delete(v).where(drizzleOrm.eq(v.id,e)).run();}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to delete workspace",r)}finally{n.close();}}};h();se();fe();ce();pe();h();var Uo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Xl(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+=Uo[o%62]);}for(;n.length<t;)n+=Uo[crypto.randomBytes(1)[0]%62];return n}function $e(t){return `${t}_${Xl(8)}`}function Ta(t,e){let{createHash:n}=kt("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+=Uo[i%62];return `${t}_${s}`}ue();var Bo=["outcome_plan","contract_check","feature_link","use_verify","result_review"],op=new Set(Bo),ba=Object.freeze(Bo.map(t=>({key:t,labelOverride:null}))),sp=new Set(["created","plan_proposed","plan_approved","decision_requested","decision_answered","replanned","stage_advanced","criterion_verified","scene_changed","result_submitted","accepted"]),ip=new Set(["planning","plan_review","running","human_wait","limit_wait","failed_stop","analyzing_feedback","replanned","awaiting_review","accepted"]),ap=new Set(["pending","verifying","passed","failed"]),dp=new Set(["user","project_manager","system"]),cp=new Set(["task","wi","url"]),up=/^\d{4}-\d{2}-\d{2}$/;function Q(t){throw new exports.RepositoryError("VALIDATION",t)}function ze(t){throw new exports.RepositoryError("NOT_FOUND",t)}function ge(t,e){(typeof t!="string"||t.trim().length===0)&&Q(`${e} is required`);}function lp(t){if(t==null)return;up.test(t)||Q("dueDate must use YYYY-MM-DD");let e=new Date(`${t}T00:00:00.000Z`);(Number.isNaN(e.getTime())||e.toISOString().slice(0,10)!==t)&&Q("dueDate must be a valid calendar date");}function Ia(t){let e=t??ba;(!Array.isArray(e)||e.length===0)&&Q("stages must contain at least one stage");let n=new Set;return e.map(r=>{(!r||typeof r!="object"||Array.isArray(r))&&Q("stage must be an object");let o=r;return ge(o.key,"stage.key"),o.labelOverride!==null&&typeof o.labelOverride!="string"&&Q("stage.labelOverride must be a string or null"),o.labelOverride!==null&&ge(o.labelOverride,"stage.labelOverride"),typeof o.key!="string"&&Q("stage.key is required"),!op.has(o.key)&&o.labelOverride===null&&Q(`custom stage requires a labelOverride: ${o.key}`),n.has(o.key)&&Q(`duplicate stage key: ${o.key}`),n.add(o.key),{key:o.key,labelOverride:o.labelOverride}})}function pp(t){Array.isArray(t)||Q("criteria must be an array");for(let e of t)ge(e,"criterion.statement");}function cn(t={}){let e=t.actorType??"system";dp.has(e)||Q(`invalid actorType: ${String(e)}`);let n=t.actorId??null;return (e==="user"||e==="project_manager")&&(!n||n.trim().length===0)&&Q(`actorId is required for ${e}`),{actorType:e,actorId:n}}function Aa(t,e){let n=t??{};if((n===null||typeof n!="object"||Array.isArray(n))&&Q("event payload must be a JSON object"),e==="accepted")for(let r of ["remainingRisks","nextPlan","lessons","evidenceRefs"])(!Object.prototype.hasOwnProperty.call(n,r)||n[r]===void 0)&&Q(`accepted payload requires ${r}`);try{return JSON.stringify(n)}catch(r){throw new exports.RepositoryError("VALIDATION","event payload must be JSON serializable",r)}}function fp(t){return Array.isArray(t)||Q("evidence must be an array"),t.map(e=>((!e||typeof e!="object")&&Q("evidence item must be an object"),cp.has(e.kind)||Q(`invalid evidence kind: ${String(e.kind)}`),ge(e.ref,"evidence.ref"),e.label!==void 0&&typeof e.label!="string"&&Q("evidence.label must be a string"),e.label===void 0?{kind:e.kind,ref:e.ref}:{kind:e.kind,ref:e.ref,label:e.label}))}function Sa(t){let e;try{e=JSON.parse(t);}catch(n){throw new exports.RepositoryError("DB_ERROR","Project stages JSON is invalid",n)}try{if(!Array.isArray(e))throw new exports.RepositoryError("DB_ERROR","Project stages JSON is invalid");return Ia(e)}catch(n){throw new exports.RepositoryError("DB_ERROR","Project stages JSON is invalid",n)}}function va(t){return ge(t.projectId,"projectId"),ge(t.title,"title"),sp.has(t.type)||Q(`invalid project event type: ${String(t.type)}`),{...cn(t),payloadJson:Aa(t.payload,t.type)}}function Ht(t,e,n){let r=va(e);t.select({id:z.id}).from(z).where(drizzleOrm.eq(z.id,e.projectId)).get()||ze(`Project ${e.projectId} not found`);let s=t.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${Xe.seq}), 0)`}).from(Xe).where(drizzleOrm.eq(Xe.project_id,e.projectId)).get()?.maxSeq??0,i=$e("pje");t.insert(Xe).values({id:i,project_id:e.projectId,seq:s+1,actor_type:r.actorType,actor_id:r.actorId,type:e.type,title:e.title,summary:e.summary??null,payload_json:r.payloadJson,created_at:n}).run();let d=t.select().from(Xe).where(drizzleOrm.eq(Xe.id,i)).get();if(!d)throw new exports.RepositoryError("DB_ERROR","Event insert did not return a row");return d}var Fo=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}getDetailFromHandle(e,n){let r=e.db.select().from(z).where(drizzleOrm.eq(z.id,n)).get();if(!r)return;let o=e.db.select().from(Me).where(drizzleOrm.eq(Me.project_id,n)).orderBy(drizzleOrm.asc(Me.position)).all();return {...r,stages:Sa(r.stages_json),criteria:o}}getDetailOrThrow(e){let n=this.getProject(e);return n||ze(`Project ${e} not found`),n}createProject(e){ge(e.workspaceId,"workspaceId"),ge(e.name,"name"),ge(e.outcome,"outcome"),lp(e.dueDate);let n=Ia(e.stages);pp(e.criteria);let r=$e("prj"),o=new Date().toISOString(),s=this.openHandle(true);try{s.db.transaction(i=>{i.insert(z).values({id:r,workspace_id:e.workspaceId,name:e.name,outcome:e.outcome,due_date:e.dueDate??null,scene:"planning",stages_json:JSON.stringify(n),stage_index:1,created_at:o,updated_at:o,accepted_at:null,archived_at:null}).run(),e.criteria.forEach((d,c)=>{i.insert(Me).values({id:$e("pjc"),project_id:r,position:c+1,statement:d,verify_status:"pending",verified_at:null,evidence_json:"[]",created_at:o,updated_at:o}).run();}),Ht(i,{projectId:r,actorType:"system",type:"created",title:"Project created",payload:{}},o);});}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("DB_ERROR","Failed to create project",i)}finally{s.close();}return this.getDetailOrThrow(r)}getProject(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return this.getDetailFromHandle(n,e)}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to get project",r)}finally{n.close();}}listProjectsByWorkspace(e,n={}){if(ge(e,"workspaceId"),!this.dbExists())return [];let r=this.openHandle(false);try{let o=n.includeArchived?drizzleOrm.eq(z.workspace_id,e):drizzleOrm.and(drizzleOrm.eq(z.workspace_id,e),drizzleOrm.isNull(z.archived_at));return r.db.select({id:z.id}).from(z).where(o).orderBy(drizzleOrm.desc(z.updated_at),drizzleOrm.desc(z.created_at)).all().map(i=>this.getDetailFromHandle(r,i.id)).filter(i=>i!==void 0)}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to list projects",o)}finally{r.close();}}archiveProject(e){ge(e,"projectId");let n=this.openHandle(true);try{n.db.update(z).set({archived_at:new Date().toISOString()}).where(drizzleOrm.eq(z.id,e)).run().changes===0&&ze(`Project ${e} not found`);}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to archive project",r)}finally{n.close();}return this.getDetailOrThrow(e)}setScene(e,n,r={}){ge(e,"projectId"),ip.has(n)||Q(`invalid project scene: ${String(n)}`);let o=cn(r),s=new Date().toISOString(),i=this.openHandle(true);try{i.db.transaction(d=>{let c=d.select().from(z).where(drizzleOrm.eq(z.id,e)).get();c||ze(`Project ${e} not found`),d.update(z).set({scene:n,updated_at:s}).where(drizzleOrm.eq(z.id,e)).run(),Ht(d,{projectId:e,...o,type:"scene_changed",title:"Project scene changed",payload:{before:c.scene,after:n}},s);});}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to set project scene",d)}finally{i.close();}return this.getDetailOrThrow(e)}setStageIndex(e,n,r={}){ge(e,"projectId"),Number.isInteger(n)||Q("stage index must be an integer");let o=cn(r),s=new Date().toISOString(),i=this.openHandle(true);try{i.db.transaction(d=>{let c=d.select().from(z).where(drizzleOrm.eq(z.id,e)).get();c||ze(`Project ${e} not found`);let u=Sa(c.stages_json);(n<1||n>u.length)&&Q("stage index is outside the project stages"),d.update(z).set({stage_index:n,updated_at:s}).where(drizzleOrm.eq(z.id,e)).run(),Ht(d,{projectId:e,...o,type:"stage_advanced",title:"Project stage advanced",payload:{before:c.stage_index,after:n}},s);});}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to set project stage",d)}finally{i.close();}return this.getDetailOrThrow(e)}setCriterionVerify(e,n,r,o={}){let s=typeof e=="string"?{projectId:typeof r=="string"?e:void 0,criterionId:typeof r=="string"?n:e,verifyStatus:typeof r=="string"?r:n,...typeof r=="string"?o:r}:e,i=s.verifyStatus??s.status;(!i||!ap.has(i))&&Q(`invalid criterion status: ${String(i)}`),ge(s.criterionId,"criterionId");let d=cn(s),c=new Date().toISOString(),u=this.openHandle(true),f;try{u.db.transaction(g=>{let _=g.select().from(Me).where(drizzleOrm.eq(Me.id,s.criterionId)).get();_||ze(`Criterion ${s.criterionId} not found`),f=_.project_id,s.projectId&&s.projectId!==_.project_id&&ze(`Criterion ${s.criterionId} not found in project ${s.projectId}`),g.update(Me).set({verify_status:i,verified_at:i==="passed"?c:null,updated_at:c}).where(drizzleOrm.eq(Me.id,s.criterionId)).run(),Ht(g,{projectId:_.project_id,...d,type:"criterion_verified",title:"Criterion verification updated",payload:{criterionId:s.criterionId,status:i}},c);});}catch(g){throw g instanceof exports.RepositoryError?g:new exports.RepositoryError("DB_ERROR","Failed to set criterion verification",g)}finally{u.close();}let p=f?this.getProject(f)?.criteria.find(g=>g.id===s.criterionId):void 0;return p||ze(`Criterion ${s.criterionId} not found`),p}setCriterionEvidence(e,n,r,o={}){let s=typeof e=="string"?{projectId:Array.isArray(r)?e:void 0,criterionId:Array.isArray(r)?n:e,evidence:Array.isArray(r)?r:n,...Array.isArray(r)?o:r}:e;ge(s.criterionId,"criterionId");let i=fp(s.evidence),d=cn(s),c=new Date().toISOString(),u=this.openHandle(true),f;try{u.db.transaction(g=>{let _=g.select().from(Me).where(drizzleOrm.eq(Me.id,s.criterionId)).get();_||ze(`Criterion ${s.criterionId} not found`),f=_.project_id,s.projectId&&s.projectId!==_.project_id&&ze(`Criterion ${s.criterionId} not found in project ${s.projectId}`),g.update(Me).set({evidence_json:JSON.stringify(i),updated_at:c}).where(drizzleOrm.eq(Me.id,s.criterionId)).run(),Ht(g,{projectId:_.project_id,...d,type:"criterion_verified",title:"Criterion evidence updated",payload:{criterionId:s.criterionId,evidence:i}},c);});}catch(g){throw g instanceof exports.RepositoryError?g:new exports.RepositoryError("DB_ERROR","Failed to set criterion evidence",g)}finally{u.close();}let p=f?this.getProject(f)?.criteria.find(g=>g.id===s.criterionId):void 0;return p||ze(`Criterion ${s.criterionId} not found`),p}appendEvent(e,n){let r=typeof e=="string"?{...n,projectId:e}:e;va(r);let o=new Date().toISOString(),s=this.openHandle(true),i;try{s.db.transaction(d=>{i=Ht(d,r,o);});}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to append project event",d)}finally{s.close();}if(!i)throw new exports.RepositoryError("DB_ERROR","Event append did not return a row");return i}listEvents(e,n={}){if(ge(e,"projectId"),n.afterSeq!==void 0&&(!Number.isInteger(n.afterSeq)||n.afterSeq<0)&&Q("afterSeq must be a non-negative integer"),n.limit!==void 0&&(!Number.isInteger(n.limit)||n.limit<1)&&Q("limit must be a positive integer"),!this.dbExists())return [];let r=this.openHandle(false);try{let o=[drizzleOrm.eq(Xe.project_id,e)];n.afterSeq!==void 0&&o.push(drizzleOrm.gt(Xe.seq,n.afterSeq));let s=r.db.select().from(Xe).where(drizzleOrm.and(...o)).orderBy(drizzleOrm.asc(Xe.seq));return n.limit!==void 0&&(s=s.limit(n.limit)),s.all()}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to list project events",o)}finally{r.close();}}acceptProject(e,n){ge(e,"projectId");let r=cn(n),o={remainingRisks:n.remainingRisks,nextPlan:n.nextPlan,lessons:n.lessons,evidenceRefs:n.evidenceRefs};Aa(o,"accepted");let s=new Date().toISOString(),i=this.openHandle(true);try{i.db.transaction(d=>{d.select({id:z.id}).from(z).where(drizzleOrm.eq(z.id,e)).get()||ze(`Project ${e} not found`),d.update(z).set({scene:"accepted",accepted_at:s,updated_at:s}).where(drizzleOrm.eq(z.id,e)).run(),Ht(d,{projectId:e,...r,type:"accepted",title:"Project accepted",payload:o},s);});}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to accept project",d)}finally{i.close();}return this.getDetailOrThrow(e)}};fe();ce();h();ce();ue();var Ca=[v,exports.tasks,w,Di,Tt,ut,We,nn];function _p(){return Se__namespace.default.join(wi__default.default.homedir(),".crewx","crewx.db")}function mp(t){if(!Oa__namespace.default.existsSync(t))return null;let e=Math.floor(Date.now()/1e3),n=`${t}.bak-${e}`;return Oa__namespace.default.copyFileSync(t,n),n}function xa(t){let e=t.all("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'");return new Set(e.map(n=>n.name))}function kp(t){return t==null||typeof t=="object"&&"queryChunks"in t?null:typeof t=="number"?String(t):typeof t=="boolean"?t?"1":"0":typeof t=="string"?`'${t.replace(/'/g,"''")}'`:String(t)}function Tp(t){let e=t.getSQLType(),n=`"${t.name}" ${e}`,r=kp(t.default);return r!==null&&(n+=` DEFAULT ${r}`),t.notNull&&(n+=" NOT NULL"),n}function wp(t,e){let n=e?.dbPath??_p(),r=e?.force??false,o=e?.dryRun??false,s=o?null:mp(n);if(r&&!o)try{t.run("DELETE FROM __drizzle_migrations");}catch{}let i=xa(t);if(!o)try{tn(t);}catch(p){let g=p instanceof Error?`${p.message} ${p.cause?.message??""}`:"";if(!r||!g.includes("duplicate column"))throw p}let d,c;o?(d=Ca.map(g=>sqliteCore.getTableConfig(g).name).filter(g=>!i.has(g)),c=i):(c=xa(t),d=[...c].filter(p=>!i.has(p)));let u=[],f=[];for(let p of Ca){let g=sqliteCore.getTableConfig(p),_=g.name;if(!c.has(_))continue;let m=t.all(`PRAGMA table_info("${_}")`),k=new Set(m.map(E=>E.name)),T=new Set(g.columns.map(E=>E.name));for(let E of g.columns)if(!k.has(E.name)){if(!o){let b=Tp(E);t.run(`ALTER TABLE "${_}" ADD COLUMN ${b}`);}u.push({table:_,column:E.name});}for(let E of m)T.has(E.name)||f.push(`${_}.${E.name} exists in DB but not in schema (untouched)`);}return {created:d,altered:u,warnings:f,backupPath:s}}ue();er();Cs();Zn();Xn();er();h();se();h();var mc=["success","failed","completed"],co=10*1024*1024*1024,kc=256,xg=new Set(mc),Ee=class extends Error{constructor(n,r,o="metadata"){super(r);this.taskId=n;this.kind=o;this.name="MigrationTaskError";}taskId;kind};function uo(t){return t||(process.env.CREWX_DB?process.env.CREWX_DB:Se.join(wi.homedir(),".crewx","crewx.db"))}function Pg(){return kt("better-sqlite3")}function Tc(t,e){let n=t===":memory:";if(!n&&!Oa.existsSync(t))throw new Error(`Database not found: ${t}`);let r=new(Pg())(t,{readonly:e,fileMustExist:!n,timeout:5e3});return r.pragma("foreign_keys = ON"),r.pragma("busy_timeout = 5000"),r}function vn(t,e,n=[]){return t.prepare(e).all(...n)}function An(t,e,n=[]){return t.prepare(e).get(...n)}function Dg(t,e,n=[]){return t.prepare(e).run(...n)}function Lg(t,e,n=[]){return t.prepare(e).iterate(...n)}function Mg(t){return typeof t=="string"&&t.length>0?t:"<unknown>"}function wc(t){return typeof t=="string"&&xg.has(t)}function gc(t,e){t.set(e,(t.get(e)??0)+1);}function hc(t){return Object.fromEntries([...t.entries()].sort(([e],[n])=>e.localeCompare(n)))}function Hg(t){let e=new Set(vn(t,"SELECT name FROM sqlite_master WHERE type = 'table' AND name IN ('tasks', 'task_log_events')").map(i=>i.name)),n=["tasks","task_log_events"].filter(i=>!e.has(i));if(n.length>0)throw new Error(`Database schema is missing required table(s): ${n.join(", ")}`);let r=new Set(vn(t,"PRAGMA table_info('tasks')").map(i=>i.name)),s=["id","status","logs","log_storage","last_log_seq","log_revision"].filter(i=>!r.has(i));if(s.length>0)throw new Error(`Database schema is missing required tasks column(s): ${s.join(", ")}`)}function yc(t,e){if(e==null)return {entries:[]};if(typeof e!="string")throw new Ee(t,"Malformed task logs: tasks.logs must be JSON text or null","malformed");if(e.trim()==="")return {entries:[]};let n;try{n=JSON.parse(e);}catch(o){let s=o instanceof Error?o.message:String(o);throw new Ee(t,`Malformed JSON in tasks.logs (${s})`,"malformed")}if(!Array.isArray(n))throw new Ee(t,"Malformed task logs: expected a JSON array","malformed");let r=[];for(let[o,s]of n.entries()){if(s===null||typeof s!="object"||typeof s.timestamp!="string"||typeof s.level!="string"||typeof s.message!="string")throw new Ee(t,`Malformed task logs: entry ${o} must contain string timestamp, level, and message fields`,"malformed");let i=s;r.push({timestamp:i.timestamp,level:i.level,message:i.message});}return {entries:r}}function Ws(t,e){if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new Ee(t.id,"Invalid last_log_seq metadata","metadata");if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new Ee(t.id,"Invalid log_revision metadata","metadata");if(e==="blob"&&t.last_log_seq!==0)throw new Ee(t.id,"Blob source must have last_log_seq=0","metadata")}function $g(t){let e=vn(t,`SELECT task_id, COUNT(*) AS event_count
311
311
  FROM task_log_events GROUP BY task_id`);return new Map(e.map(n=>[n.task_id,n.event_count]))}function Ug(t){let e=$g(t),n=new Map,r=[],o=[],s=[],i=new Map,d=new Map,c=0,u=0,f=0,p=0,g=0,_=0;for(let m of Lg(t,`SELECT id, status, logs, log_storage, last_log_seq, log_revision
312
- FROM tasks ORDER BY id`)){let k=m,T=Mg(k.status);if(gc(i,T),n.set(k.id,{id:k.id,status:k.status,log_storage:k.log_storage,last_log_seq:k.last_log_seq,log_revision:k.log_revision}),c+=1,k.log_storage==="events"){p+=1;try{Ws(k,"events");}catch(y){s.push(Gs(y,k.id));}k.logs!==null&&s.push({taskId:k.id,reason:"Event source still has a non-null tasks.logs blob",kind:"mixed-source"});continue}if(k.log_storage!=="blob"){s.push({taskId:k.id,reason:`Unknown log_storage value: ${k.log_storage}`,kind:"invalid-source"});continue}u+=1;let E=wc(k.status);E||(f+=1,gc(d,T)),typeof k.logs=="string"?_+=Buffer.byteLength(k.logs,"utf8"):Buffer.isBuffer(k.logs)&&(_+=k.logs.byteLength);let b=e.get(k.id)??0;b>0&&s.push({taskId:k.id,reason:`Blob source already has ${b} task_log_events row(s)`,kind:"mixed-source"});let L;try{L=yc(k.id,k.logs),g+=L.entries.length,Ws(k,"blob");}catch(y){let N=Gs(y,k.id);s.push(N),N.kind==="malformed"&&o.push(N);continue}b>0||E&&r.push(k.id);}return {taskCount:c,candidateTaskCount:u,eligibleTaskCount:r.length,eventSourceTasks:p,statusCounts:hc(i),deferredTaskCount:f,deferredStatusCounts:hc(d),entryCount:g,sourceBytes:_,candidateIds:r,malformedRows:o,failures:s,tasks:n}}function Gs(t,e){return t instanceof Ee?{taskId:t.taskId,reason:t.message,kind:t.kind}:{taskId:e,reason:t instanceof Error?t.message:String(t),kind:"metadata"}}function Fg(t){return An(t,"SELECT COUNT(*) AS count FROM tasks WHERE status IN ('pending', 'running')")?.count??0}function Bg(t){return An(t,"SELECT COUNT(*) AS count FROM tasks WHERE log_storage = 'blob'")?.count??0}function qg(t){if(t===":memory:")return 0;let e=n=>{try{return Oa.statSync(n).size}catch{return 0}};return e(t)+e(`${t}-wal`)}function jg(t,e){return qg(t)+e*kc}function Rc(t,e){return Number.isFinite(t)&&Number.isFinite(e)&&t>=e+co}function _c(t){let e=Se.dirname(Se.resolve(t));for(;!Oa.existsSync(e);){let n=Se.dirname(e);if(n===e)break;e=n;}return e}function Ec(t,e,n){let r=[...new Set([_c(t),...n?[_c(n)]:[]])],o=[],s=Number.POSITIVE_INFINITY;for(let c of r)try{let u=Oa.statfsSync(c);s=Math.min(s,u.bavail*u.bsize);}catch(u){s=0,o.push(`Unable to inspect free space for ${c}: ${u instanceof Error?u.message:String(u)}`);}let i=jg(t,e),d=i+co;return {estimatedFreeSpaceBytes:i,requiredFreeSpaceBytes:d,availableFreeSpaceBytes:Number.isFinite(s)?Math.floor(s):0,minimumFreeSpaceReserveBytes:co,freeSpaceGatePassed:Rc(Number.isFinite(s)?Math.floor(s):0,i),warnings:o}}function Sc(t){return new Set(t.map(e=>e.taskId)).size}function or(t){try{let e=t.pragma("wal_checkpoint(TRUNCATE)"),n=Array.isArray(e)?e[0]:e,r=n!==null&&typeof n=="object"&&"busy"in n?Number(n.busy):0;return r>0?`WAL checkpoint(TRUNCATE) busy (${r}); continuing without failing migration`:void 0}catch(e){return `WAL checkpoint(TRUNCATE) warning; continuing without failing migration: ${e instanceof Error?e.message:String(e)}`}}function io(t,e,n,r,o=Ec(e,n.entryCount)){let s=r.failures??n.failures,i=r.malformedRows??n.malformedRows,{ok:d,...c}=r;return {mode:t,ok:d,dbPath:e,activeTaskCount:r.activeTaskCount??0,taskCount:n.taskCount,candidateTaskCount:n.candidateTaskCount,eligibleTaskCount:n.eligibleTaskCount,statusCounts:n.statusCounts,deferredTaskCount:n.deferredTaskCount,deferredStatusCounts:n.deferredStatusCounts,entryCount:n.entryCount,sourceBytes:n.sourceBytes,estimatedFreeSpaceBytes:o.estimatedFreeSpaceBytes,requiredFreeSpaceBytes:o.requiredFreeSpaceBytes,availableFreeSpaceBytes:o.availableFreeSpaceBytes,minimumFreeSpaceReserveBytes:o.minimumFreeSpaceReserveBytes,freeSpaceGatePassed:o.freeSpaceGatePassed,migratedTasks:r.migratedTasks??0,migratedEntries:r.migratedEntries??0,skippedTasks:r.skippedTasks??n.eventSourceTasks,failedTasks:r.failedTasks??Sc(s),malformedRows:i,failures:s,logicalSourceBytesRemoved:r.logicalSourceBytesRemoved??0,warnings:r.warnings??o.warnings,remainingTaskCount:r.remainingTaskCount??n.candidateTaskCount,...c}}function Wg(t,e){return t.length!==e.length?false:t.every((n,r)=>{let o=e[r];return n.seq===r+1&&n.timestamp===o.timestamp&&n.level===o.level&&n.message===o.message})}function Gg(t,e){return t.transaction(()=>{let r=An(t,`SELECT id, status, logs, log_storage, last_log_seq, log_revision
312
+ FROM tasks ORDER BY id`)){let k=m,T=Mg(k.status);if(gc(i,T),n.set(k.id,{id:k.id,status:k.status,log_storage:k.log_storage,last_log_seq:k.last_log_seq,log_revision:k.log_revision}),c+=1,k.log_storage==="events"){p+=1;try{Ws(k,"events");}catch(y){s.push(Gs(y,k.id));}k.logs!==null&&s.push({taskId:k.id,reason:"Event source still has a non-null tasks.logs blob",kind:"mixed-source"});continue}if(k.log_storage!=="blob"){s.push({taskId:k.id,reason:`Unknown log_storage value: ${k.log_storage}`,kind:"invalid-source"});continue}u+=1;let E=wc(k.status);E||(f+=1,gc(d,T)),typeof k.logs=="string"?_+=Buffer.byteLength(k.logs,"utf8"):Buffer.isBuffer(k.logs)&&(_+=k.logs.byteLength);let b=e.get(k.id)??0;b>0&&s.push({taskId:k.id,reason:`Blob source already has ${b} task_log_events row(s)`,kind:"mixed-source"});let L;try{L=yc(k.id,k.logs),g+=L.entries.length,Ws(k,"blob");}catch(y){let C=Gs(y,k.id);s.push(C),C.kind==="malformed"&&o.push(C);continue}b>0||E&&r.push(k.id);}return {taskCount:c,candidateTaskCount:u,eligibleTaskCount:r.length,eventSourceTasks:p,statusCounts:hc(i),deferredTaskCount:f,deferredStatusCounts:hc(d),entryCount:g,sourceBytes:_,candidateIds:r,malformedRows:o,failures:s,tasks:n}}function Gs(t,e){return t instanceof Ee?{taskId:t.taskId,reason:t.message,kind:t.kind}:{taskId:e,reason:t instanceof Error?t.message:String(t),kind:"metadata"}}function Fg(t){return An(t,"SELECT COUNT(*) AS count FROM tasks WHERE status IN ('pending', 'running')")?.count??0}function Bg(t){return An(t,"SELECT COUNT(*) AS count FROM tasks WHERE log_storage = 'blob'")?.count??0}function qg(t){if(t===":memory:")return 0;let e=n=>{try{return Oa.statSync(n).size}catch{return 0}};return e(t)+e(`${t}-wal`)}function jg(t,e){return qg(t)+e*kc}function Rc(t,e){return Number.isFinite(t)&&Number.isFinite(e)&&t>=e+co}function _c(t){let e=Se.dirname(Se.resolve(t));for(;!Oa.existsSync(e);){let n=Se.dirname(e);if(n===e)break;e=n;}return e}function Ec(t,e,n){let r=[...new Set([_c(t),...n?[_c(n)]:[]])],o=[],s=Number.POSITIVE_INFINITY;for(let c of r)try{let u=Oa.statfsSync(c);s=Math.min(s,u.bavail*u.bsize);}catch(u){s=0,o.push(`Unable to inspect free space for ${c}: ${u instanceof Error?u.message:String(u)}`);}let i=jg(t,e),d=i+co;return {estimatedFreeSpaceBytes:i,requiredFreeSpaceBytes:d,availableFreeSpaceBytes:Number.isFinite(s)?Math.floor(s):0,minimumFreeSpaceReserveBytes:co,freeSpaceGatePassed:Rc(Number.isFinite(s)?Math.floor(s):0,i),warnings:o}}function Sc(t){return new Set(t.map(e=>e.taskId)).size}function sr(t){try{let e=t.pragma("wal_checkpoint(TRUNCATE)"),n=Array.isArray(e)?e[0]:e,r=n!==null&&typeof n=="object"&&"busy"in n?Number(n.busy):0;return r>0?`WAL checkpoint(TRUNCATE) busy (${r}); continuing without failing migration`:void 0}catch(e){return `WAL checkpoint(TRUNCATE) warning; continuing without failing migration: ${e instanceof Error?e.message:String(e)}`}}function io(t,e,n,r,o=Ec(e,n.entryCount)){let s=r.failures??n.failures,i=r.malformedRows??n.malformedRows,{ok:d,...c}=r;return {mode:t,ok:d,dbPath:e,activeTaskCount:r.activeTaskCount??0,taskCount:n.taskCount,candidateTaskCount:n.candidateTaskCount,eligibleTaskCount:n.eligibleTaskCount,statusCounts:n.statusCounts,deferredTaskCount:n.deferredTaskCount,deferredStatusCounts:n.deferredStatusCounts,entryCount:n.entryCount,sourceBytes:n.sourceBytes,estimatedFreeSpaceBytes:o.estimatedFreeSpaceBytes,requiredFreeSpaceBytes:o.requiredFreeSpaceBytes,availableFreeSpaceBytes:o.availableFreeSpaceBytes,minimumFreeSpaceReserveBytes:o.minimumFreeSpaceReserveBytes,freeSpaceGatePassed:o.freeSpaceGatePassed,migratedTasks:r.migratedTasks??0,migratedEntries:r.migratedEntries??0,skippedTasks:r.skippedTasks??n.eventSourceTasks,failedTasks:r.failedTasks??Sc(s),malformedRows:i,failures:s,logicalSourceBytesRemoved:r.logicalSourceBytesRemoved??0,warnings:r.warnings??o.warnings,remainingTaskCount:r.remainingTaskCount??n.candidateTaskCount,...c}}function Wg(t,e){return t.length!==e.length?false:t.every((n,r)=>{let o=e[r];return n.seq===r+1&&n.timestamp===o.timestamp&&n.level===o.level&&n.message===o.message})}function Gg(t,e){return t.transaction(()=>{let r=An(t,`SELECT id, status, logs, log_storage, last_log_seq, log_revision
313
313
  FROM tasks WHERE id = ?`,[e]);if(!r)throw new Ee(e,"Task disappeared before migration","metadata");if(r.log_storage==="events")return {status:"skipped",entryCount:0,sourceBytes:0};if(r.log_storage!=="blob")throw new Ee(e,`Unknown log_storage value: ${r.log_storage}`,"invalid-source");if(!wc(r.status))return {status:"deferred",entryCount:0,sourceBytes:0};let o=r.logs,s=yc(e,o);Ws(r,"blob");let i=An(t,"SELECT COUNT(*) AS count FROM task_log_events WHERE task_id = ?",[e])?.count??0;if(i!==0)throw new Ee(e,`Blob source already has ${i} task_log_events row(s)`,"mixed-source");let d=t.prepare(`INSERT INTO task_log_events (task_id, seq, timestamp, level, message)
314
314
  VALUES (?, ?, ?, ?, ?)`);for(let[p,g]of s.entries.entries())d.run(e,p+1,g.timestamp,g.level,g.message);let c=vn(t,`SELECT seq, timestamp, level, message
315
315
  FROM task_log_events WHERE task_id = ? ORDER BY seq`,[e]);if(!Wg(c,s.entries))throw new Ee(e,"Event parity check failed before source clear","metadata");if(Dg(t,`UPDATE tasks
@@ -322,11 +322,11 @@ ${r.join(`
322
322
  MAX(seq) AS maxSeq
323
323
  FROM task_log_events GROUP BY task_id`),n=e.reduce((r,o)=>r+o.eventCount,0);return {rows:e,eventCount:n}}function Rt(t,e,n,r={}){return {taskId:t,kind:e,reason:n,...r}}function Vg(t,e,n){let r=[];for(let p of n.failures)p.kind==="malformed"?r.push(Rt(p.taskId,"malformed-blob",p.reason)):p.kind==="mixed-source"?r.push(Rt(p.taskId,"mixed-source",p.reason)):r.push(Rt(p.taskId,"source-invariant",p.reason));let o=Kg(t),s=new Map(o.rows.map(p=>[p.taskId,p]));for(let p of o.rows){let g=n.tasks.get(p.taskId);if(!g){r.push(Rt(null,"orphan-event",`Event rows reference missing task ${p.taskId}`,{actual:p.eventCount}));continue}(p.minSeq===null||p.minSeq<1||p.distinctSeqCount!==p.maxSeq)&&r.push(Rt(g.id,"seq-gap","Task event sequence has a gap or invalid starting sequence",{expected:p.maxSeq??0,actual:p.distinctSeqCount})),g.log_storage==="events"&&g.last_log_seq!==p.eventCount&&r.push(Rt(g.id,"count-mismatch","last_log_seq does not match task_log_events row count",{expected:g.last_log_seq??0,actual:p.eventCount}));}for(let p of n.tasks.values())p.log_storage==="events"&&!s.has(p.id)&&p.last_log_seq!==0&&r.push(Rt(p.id,"count-mismatch","Event-source task has no rows for its last_log_seq",{expected:p.last_log_seq??0,actual:0}));for(let p of vn(t,`SELECT task_id AS taskId, seq, COUNT(*) AS duplicateCount
324
324
  FROM task_log_events GROUP BY task_id, seq HAVING COUNT(*) > 1`))r.push(Rt(p.taskId,"duplicate-seq",`Duplicate task event sequence ${p.seq}`,{actual:p.duplicateCount,seq:p.seq}));let i=An(t,`SELECT COUNT(*) AS count FROM task_log_events
325
- WHERE seq IS NULL OR seq < 1 OR timestamp IS NULL OR level IS NULL OR message IS NULL`)?.count??0;i>0&&r.push(Rt(null,"invalid-event","Event rows contain invalid sequence or null payload fields",{actual:i}));let d=new Set(r.flatMap(p=>p.taskId?[p.taskId]:[])),c=r.map(p=>({taskId:p.taskId??"(orphan)",reason:p.reason,kind:p.kind==="malformed-blob"?"malformed":p.kind==="mixed-source"?"mixed-source":"metadata"})),u=c.filter(p=>p.kind==="malformed"),f={checkedTasks:n.taskCount,eventSourceTasks:n.eventSourceTasks,blobSourceTasks:n.candidateTaskCount,eventCount:o.eventCount,orphanEventCount:r.filter(p=>p.kind==="orphan-event").length,failedTasks:d.size,issues:r};return io("verify",e,n,{ok:r.length===0,migratedTasks:n.eventSourceTasks,migratedEntries:o.eventCount,skippedTasks:n.candidateTaskCount,failedTasks:d.size,malformedRows:u,failures:c,remainingTaskCount:n.candidateTaskCount,verification:f})}function Jg(t){if(t.mode!=="apply"&&t.batchTasks!==void 0)throw new Error("--batch-tasks is only valid with --apply");if(t.batchTasks!==void 0&&(!Number.isInteger(t.batchTasks)||t.batchTasks<1))throw new Error("--batch-tasks must be a positive integer")}async function Yg(t){Jg(t);let e=uo(t.dbPath),n=Tc(e,t.mode!=="apply");try{Hg(n);let r=Ug(n),o=Fg(n);if(t.mode==="verify")return {...Vg(n,e,r),activeTaskCount:o};if(t.mode==="dry-run")return io("dry-run",e,r,{ok:r.failures.length===0,activeTaskCount:o,skippedTasks:r.eventSourceTasks,remainingTaskCount:r.candidateTaskCount});let s=t.backupPath??bc(e),i=Ec(e,r.entryCount,s);if(!i.freeSpaceGatePassed)return io("apply",e,r,{ok:!1,activeTaskCount:o,blockedReason:`Apply blocked: available free space (${i.availableFreeSpaceBytes} bytes) is below the required ${i.requiredFreeSpaceBytes} bytes (including a ${i.minimumFreeSpaceReserveBytes} byte reserve)`,skippedTasks:r.eventSourceTasks,remainingTaskCount:r.candidateTaskCount},i);let d=await zg(n,e,s),c=[...r.failures],u=t.batchTasks===void 0?r.candidateIds:r.candidateIds.slice(0,t.batchTasks),f=t.batchTasks??Math.max(u.length,1),p=0,g=0,_=0,m=[...i.warnings];for(let[k,T]of u.entries()){try{let E=Gg(n,T);E.status==="migrated"&&(p+=1,g+=E.entryCount,_+=E.sourceBytes);}catch(E){c.push(Gs(E,T));}if((k+1)%f===0||k===u.length-1){let E=or(n);E&&m.push(E);}}return io("apply",e,r,{ok:c.length===0,activeTaskCount:o,backupPath:d,backupMethod:"sqlite-online-backup",migratedTasks:p,migratedEntries:g,logicalSourceBytesRemoved:_,failedTasks:Sc(c),failures:c,malformedRows:r.malformedRows,remainingTaskCount:Bg(n),skippedTasks:r.eventSourceTasks,warnings:m},i)}finally{n.close();}}function Xg(t){return Se.basename(t)}Mr();Zn();hs();var po=["success","failed","completed"],Oc=1440*60*1e3,Nc=1,th=2048,zs=64*1024*1024,Ys=[{key:"usageBackfill",field:"metadata.usageBackfill",before:"before_usage_backfill",after:"after_usage_backfill"},{key:"usageAccounting",field:"metadata.usageAccounting",before:"before_usage_accounting",after:"after_usage_accounting"},{key:"usageAccountingReason",field:"metadata.usageAccountingReason",before:"before_usage_accounting_reason",after:"after_usage_accounting_reason"}],Ic=["run_epoch","completed_at","input_tokens","output_tokens","cached_input_tokens","cost_usd","model",...Ys.map(t=>t.field)],nh=20,rh=["pre-instrumentation","provider-no-usage","suppressed-by-adapter","not-captured"];function Cc(){return kt("better-sqlite3")}function Xs(t,e){let n=Ke(t),r=t===":memory:";if(!r&&!Oa.existsSync(n))throw new Error(`Database not found: ${n}`);let o=new(Cc())(n,{readonly:e,fileMustExist:!r,timeout:5e3});return o.pragma("foreign_keys = ON"),o.pragma("busy_timeout = 5000"),o}function sr(t,e,n=[]){return t.prepare(e).all(...n)}function Yt(t,e,n=[]){return t.prepare(e).get(...n)}function xt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Xt(t){if(!t)return {};try{let e=JSON.parse(t);return xt(e)?{...e}:{}}catch{return {}}}function xc(t){let e=t.provider;if(!(typeof e!="string"||e.trim().length===0))return e.trim()}function Pc(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function oh(t){return t??"unknown"}function sh(t){return po.includes(t)}function ih(t){return t==="plugin/mock"}function Dc(t,e,n){return sh(t.status)&&!In(t)&&t.agent_id!=="workflow"&&t.platform!=="workflow"&&t.platform!=="mcp"&&t.agent_id!=="direct"&&n.direct_call!==true&&!ih(e)}function ah(t,e){let n=t.usageBackfill;return xt(n)&&Object.prototype.hasOwnProperty.call(n,String(e))}function dh(t){return typeof t=="string"&&rh.includes(t)}function Lc(t,e){return t.usageAccounting==="recorded"||t.usageAccounting==="unavailable"&&dh(t.usageAccountingReason)?true:ah(t,e)}function ch(t){return sr(t,`SELECT id, agent_id, status, completed_at, metadata, model, platform, run_epoch,
325
+ WHERE seq IS NULL OR seq < 1 OR timestamp IS NULL OR level IS NULL OR message IS NULL`)?.count??0;i>0&&r.push(Rt(null,"invalid-event","Event rows contain invalid sequence or null payload fields",{actual:i}));let d=new Set(r.flatMap(p=>p.taskId?[p.taskId]:[])),c=r.map(p=>({taskId:p.taskId??"(orphan)",reason:p.reason,kind:p.kind==="malformed-blob"?"malformed":p.kind==="mixed-source"?"mixed-source":"metadata"})),u=c.filter(p=>p.kind==="malformed"),f={checkedTasks:n.taskCount,eventSourceTasks:n.eventSourceTasks,blobSourceTasks:n.candidateTaskCount,eventCount:o.eventCount,orphanEventCount:r.filter(p=>p.kind==="orphan-event").length,failedTasks:d.size,issues:r};return io("verify",e,n,{ok:r.length===0,migratedTasks:n.eventSourceTasks,migratedEntries:o.eventCount,skippedTasks:n.candidateTaskCount,failedTasks:d.size,malformedRows:u,failures:c,remainingTaskCount:n.candidateTaskCount,verification:f})}function Jg(t){if(t.mode!=="apply"&&t.batchTasks!==void 0)throw new Error("--batch-tasks is only valid with --apply");if(t.batchTasks!==void 0&&(!Number.isInteger(t.batchTasks)||t.batchTasks<1))throw new Error("--batch-tasks must be a positive integer")}async function Yg(t){Jg(t);let e=uo(t.dbPath),n=Tc(e,t.mode!=="apply");try{Hg(n);let r=Ug(n),o=Fg(n);if(t.mode==="verify")return {...Vg(n,e,r),activeTaskCount:o};if(t.mode==="dry-run")return io("dry-run",e,r,{ok:r.failures.length===0,activeTaskCount:o,skippedTasks:r.eventSourceTasks,remainingTaskCount:r.candidateTaskCount});let s=t.backupPath??bc(e),i=Ec(e,r.entryCount,s);if(!i.freeSpaceGatePassed)return io("apply",e,r,{ok:!1,activeTaskCount:o,blockedReason:`Apply blocked: available free space (${i.availableFreeSpaceBytes} bytes) is below the required ${i.requiredFreeSpaceBytes} bytes (including a ${i.minimumFreeSpaceReserveBytes} byte reserve)`,skippedTasks:r.eventSourceTasks,remainingTaskCount:r.candidateTaskCount},i);let d=await zg(n,e,s),c=[...r.failures],u=t.batchTasks===void 0?r.candidateIds:r.candidateIds.slice(0,t.batchTasks),f=t.batchTasks??Math.max(u.length,1),p=0,g=0,_=0,m=[...i.warnings];for(let[k,T]of u.entries()){try{let E=Gg(n,T);E.status==="migrated"&&(p+=1,g+=E.entryCount,_+=E.sourceBytes);}catch(E){c.push(Gs(E,T));}if((k+1)%f===0||k===u.length-1){let E=sr(n);E&&m.push(E);}}return io("apply",e,r,{ok:c.length===0,activeTaskCount:o,backupPath:d,backupMethod:"sqlite-online-backup",migratedTasks:p,migratedEntries:g,logicalSourceBytesRemoved:_,failedTasks:Sc(c),failures:c,malformedRows:r.malformedRows,remainingTaskCount:Bg(n),skippedTasks:r.eventSourceTasks,warnings:m},i)}finally{n.close();}}function Xg(t){return Se.basename(t)}Mr();er();hs();var po=["success","failed","completed"],Oc=1440*60*1e3,Nc=1,th=2048,zs=64*1024*1024,Ys=[{key:"usageBackfill",field:"metadata.usageBackfill",before:"before_usage_backfill",after:"after_usage_backfill"},{key:"usageAccounting",field:"metadata.usageAccounting",before:"before_usage_accounting",after:"after_usage_accounting"},{key:"usageAccountingReason",field:"metadata.usageAccountingReason",before:"before_usage_accounting_reason",after:"after_usage_accounting_reason"}],Ic=["run_epoch","completed_at","input_tokens","output_tokens","cached_input_tokens","cost_usd","model",...Ys.map(t=>t.field)],nh=20,rh=["pre-instrumentation","provider-no-usage","suppressed-by-adapter","not-captured"];function Cc(){return kt("better-sqlite3")}function Xs(t,e){let n=Ke(t),r=t===":memory:";if(!r&&!Oa.existsSync(n))throw new Error(`Database not found: ${n}`);let o=new(Cc())(n,{readonly:e,fileMustExist:!r,timeout:5e3});return o.pragma("foreign_keys = ON"),o.pragma("busy_timeout = 5000"),o}function ir(t,e,n=[]){return t.prepare(e).all(...n)}function Yt(t,e,n=[]){return t.prepare(e).get(...n)}function xt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Xt(t){if(!t)return {};try{let e=JSON.parse(t);return xt(e)?{...e}:{}}catch{return {}}}function xc(t){let e=t.provider;if(!(typeof e!="string"||e.trim().length===0))return e.trim()}function Pc(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function oh(t){return t??"unknown"}function sh(t){return po.includes(t)}function ih(t){return t==="plugin/mock"}function Dc(t,e,n){return sh(t.status)&&!In(t)&&t.agent_id!=="workflow"&&t.platform!=="workflow"&&t.platform!=="mcp"&&t.agent_id!=="direct"&&n.direct_call!==true&&!ih(e)}function ah(t,e){let n=t.usageBackfill;return xt(n)&&Object.prototype.hasOwnProperty.call(n,String(e))}function dh(t){return typeof t=="string"&&rh.includes(t)}function Lc(t,e){return t.usageAccounting==="recorded"||t.usageAccounting==="unavailable"&&dh(t.usageAccountingReason)?true:ah(t,e)}function ch(t){return ir(t,`SELECT id, agent_id, status, completed_at, metadata, model, platform, run_epoch,
326
326
  input_tokens, output_tokens, cached_input_tokens, cost_usd
327
327
  FROM tasks
328
328
  WHERE status IN (?, ?, ?)
329
- ORDER BY completed_at ASC, id ASC`,[...po])}function Ks(t){let e=ch(t),n=e.flatMap(d=>{let c=Xt(d.metadata),u=xc(c);return Dc(d,u,c)?[{...d,metadataObject:c,provider:u,epoch:Pc(d.run_epoch)}]:[]}),r=n.filter(d=>!Lc(d.metadataObject,d.epoch)),o=sr(t,`SELECT COUNT(*) AS count
329
+ ORDER BY completed_at ASC, id ASC`,[...po])}function Ks(t){let e=ch(t),n=e.flatMap(d=>{let c=Xt(d.metadata),u=xc(c);return Dc(d,u,c)?[{...d,metadataObject:c,provider:u,epoch:Pc(d.run_epoch)}]:[]}),r=n.filter(d=>!Lc(d.metadataObject,d.epoch)),o=ir(t,`SELECT COUNT(*) AS count
330
330
  FROM tasks
331
331
  WHERE json_valid(metadata) = 1
332
332
  AND json_type(metadata, '$') = 'object'
@@ -374,7 +374,7 @@ ${r.join(`
374
374
  before_model, after_model, before_usage_backfill, after_usage_backfill,
375
375
  before_usage_accounting, after_usage_accounting,
376
376
  before_usage_accounting_reason, after_usage_accounting_reason
377
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(e.id,e.before_run_epoch,e.after_run_epoch,e.before_completed_at,e.after_completed_at,e.before_input_tokens,e.after_input_tokens,e.before_output_tokens,e.after_output_tokens,e.before_cached_input_tokens,e.after_cached_input_tokens,e.before_cost_usd,e.after_cost_usd,e.before_model,e.after_model,e.before_usage_backfill,e.after_usage_backfill,e.before_usage_accounting,e.after_usage_accounting,e.before_usage_accounting_reason,e.after_usage_accounting_reason);}function bh(t){let e=sr(t,"SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name").map(n=>n.name);if(e.length!==2||e[0]!=="usage_undo_meta"||e[1]!=="usage_undo_rows")throw new Error("Invalid usage undo snapshot: expected usage_undo_meta and usage_undo_rows tables")}function $c(t){let e=Xs(t,true);try{let n=e.pragma("integrity_check",{simple:!0});if(n!=="ok")throw new Error(`Undo snapshot integrity check failed: ${n}`);bh(e);}finally{e.close();}}function Ih(t,e){if(!Oa.existsSync(t))throw new Error(`Usage undo snapshot not found: ${t}`);$c(t);let n=Xs(t,true);try{let r=Yt(n,"SELECT source_db_path, created_at, schema_version, plan_summary FROM usage_undo_meta WHERE id = 1");if(!r)throw new Error("Usage undo snapshot metadata is missing");if(Se.resolve(r.source_db_path)!==Se.resolve(e))throw new Error(`Usage undo snapshot source database ${r.source_db_path} does not match restore target ${Se.resolve(e)}`);if(r.schema_version!==Nc)throw new Error(`Unsupported usage undo snapshot schema version: ${r.schema_version}`);try{let o=JSON.parse(r.plan_summary);if(!xt(o))throw new Error("plan summary is not an object")}catch(o){throw new Error(`Usage undo snapshot plan summary is invalid: ${o instanceof Error?o.message:String(o)}`)}return {path:t,rows:sr(n,`SELECT id, before_run_epoch, after_run_epoch, before_completed_at, after_completed_at,
377
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(e.id,e.before_run_epoch,e.after_run_epoch,e.before_completed_at,e.after_completed_at,e.before_input_tokens,e.after_input_tokens,e.before_output_tokens,e.after_output_tokens,e.before_cached_input_tokens,e.after_cached_input_tokens,e.before_cost_usd,e.after_cost_usd,e.before_model,e.after_model,e.before_usage_backfill,e.after_usage_backfill,e.before_usage_accounting,e.after_usage_accounting,e.before_usage_accounting_reason,e.after_usage_accounting_reason);}function bh(t){let e=ir(t,"SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name").map(n=>n.name);if(e.length!==2||e[0]!=="usage_undo_meta"||e[1]!=="usage_undo_rows")throw new Error("Invalid usage undo snapshot: expected usage_undo_meta and usage_undo_rows tables")}function $c(t){let e=Xs(t,true);try{let n=e.pragma("integrity_check",{simple:!0});if(n!=="ok")throw new Error(`Undo snapshot integrity check failed: ${n}`);bh(e);}finally{e.close();}}function Ih(t,e){if(!Oa.existsSync(t))throw new Error(`Usage undo snapshot not found: ${t}`);$c(t);let n=Xs(t,true);try{let r=Yt(n,"SELECT source_db_path, created_at, schema_version, plan_summary FROM usage_undo_meta WHERE id = 1");if(!r)throw new Error("Usage undo snapshot metadata is missing");if(Se.resolve(r.source_db_path)!==Se.resolve(e))throw new Error(`Usage undo snapshot source database ${r.source_db_path} does not match restore target ${Se.resolve(e)}`);if(r.schema_version!==Nc)throw new Error(`Unsupported usage undo snapshot schema version: ${r.schema_version}`);try{let o=JSON.parse(r.plan_summary);if(!xt(o))throw new Error("plan summary is not an object")}catch(o){throw new Error(`Usage undo snapshot plan summary is invalid: ${o instanceof Error?o.message:String(o)}`)}return {path:t,rows:ir(n,`SELECT id, before_run_epoch, after_run_epoch, before_completed_at, after_completed_at,
378
378
  before_input_tokens, after_input_tokens, before_output_tokens, after_output_tokens,
379
379
  before_cached_input_tokens, after_cached_input_tokens, before_cost_usd, after_cost_usd,
380
380
  before_model, after_model, before_usage_backfill, after_usage_backfill,
@@ -385,21 +385,23 @@ ${r.join(`
385
385
  FROM tasks WHERE id = ?`,[e.id]);if(!r)return {taskId:e.id,fields:[...Ic]};let o=vh(r,e);if(o.length>0)return {taskId:e.id,fields:o};let s=Oh(r.metadata,e);return t.prepare(`UPDATE tasks
386
386
  SET run_epoch = ?, completed_at = ?, input_tokens = ?, output_tokens = ?,
387
387
  cached_input_tokens = ?, cost_usd = ?, model = ?, metadata = ?
388
- WHERE id = ?`).run(e.before_run_epoch,e.before_completed_at,e.before_input_tokens,e.before_output_tokens,e.before_cached_input_tokens,e.before_cost_usd,e.before_model,s,e.id).changes===1?void 0:{taskId:e.id,fields:[...Ic]}}).immediate()}function Ch(t){if(!Yt(t,"SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'tasks'"))throw new Error("Usage backfill requires the tasks table");let n=new Set(sr(t,"PRAGMA table_info(tasks)").map(i=>i.name)),o=["id","agent_id","status","completed_at","metadata","model","platform","run_epoch","input_tokens","output_tokens","cached_input_tokens","cost_usd"].filter(i=>!n.has(i));if(o.length>0)throw new Error(`Usage backfill requires task columns: ${o.join(", ")}`);if(!Yt(t,"SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'task_log_events'"))throw new Error("Usage backfill requires the task_log_events table")}function xh(t,e,n,r){return {mode:t,ok:true,dbPath:e,scannedTasks:n.scannedTasks,terminalTasks:n.terminalTasks,rawTargetTasks:n.rawTargetRows.length,candidateTasks:n.candidates.length,recoveredTasks:0,unavailableTasks:0,deferredTasks:0,changedTasks:0,wouldChangeTasks:0,restored:0,skippedConflict:0,conflictSamples:[],accountingTasks:n.accountingTasks,remainingTargetTasks:n.candidates.length,providerDistribution:{},reasonCounts:hh(),estimatedFreeSpaceBytes:r.estimatedFreeSpaceBytes,requiredFreeSpaceBytes:r.requiredFreeSpaceBytes,availableFreeSpaceBytes:r.availableFreeSpaceBytes,minimumFreeSpaceReserveBytes:r.minimumFreeSpaceReserveBytes,freeSpaceGatePassed:r.freeSpaceGatePassed,failures:[],warnings:[...r.warnings]}}function Ph(t,e){for(let n of e)fh(t.providerDistribution,n.candidate.provider,n.outcome),gh(t.reasonCounts,n.outcome==="unavailable"?n.reason:void 0),n.outcome==="recovered"&&(t.recoveredTasks+=1),n.outcome==="unavailable"&&(t.unavailableTasks+=1),n.outcome==="deferred"&&(t.deferredTasks+=1);t.providerDistribution=_h(t.providerDistribution),t.wouldChangeTasks=t.recoveredTasks+t.unavailableTasks;}function Dh(t){if(!["dry-run","apply","verify","restore"].includes(t.mode))throw new Error(`Unsupported usage backfill mode: ${t.mode}`);if(t.backupPath&&t.mode!=="apply")throw new Error("--backup is only valid with --apply");if(t.restorePath&&t.mode!=="restore")throw new Error("--restore is only valid with restore mode");if(t.mode==="restore"&&!t.restorePath)throw new Error("Restore mode requires a usage undo snapshot path")}async function Lh(t){Dh(t);let e=uo(t.dbPath),n=uh(t.now),r=new Date(n).toISOString(),o=t.mode==="restore"?Ih(t.restorePath,e):void 0,s=Xs(e,t.mode!=="apply"&&t.mode!=="restore"),i;try{Ch(s);let d=Ks(s),c=t.mode==="apply"&&d.candidates.length>0?t.backupPath??Hc(e):void 0,u=wh(e,d.candidates.length,c),f=xh(t.mode,e,d,u);if(o){f.backupPath=o.path,f.snapshotPath=o.path;for(let T of o.rows)try{let E=Nh(s,T);E?(f.skippedConflict+=1,f.conflictSamples.length<nh&&f.conflictSamples.push(E)):f.restored+=1;}catch(E){f.failures.push({taskId:T.id,reason:E instanceof Error?E.message:String(E)});}let m=Ks(s);f.accountingTasks=m.accountingTasks,f.remainingTargetTasks=m.candidates.length,f.ok=f.failures.length===0;let k=or(s);return k&&f.warnings.push(k),f}if(t.mode==="verify")return f;if(t.mode==="apply"&&!u.freeSpaceGatePassed&&d.candidates.length>0)return f.ok=!1,f.blockedReason=`Apply blocked: available free space (${u.availableFreeSpaceBytes} bytes) is below the required ${u.requiredFreeSpaceBytes} bytes (including a ${u.minimumFreeSpaceReserveBytes} byte reserve)`,f;if(d.candidates.length===0)return f;let p=new exports.TaskLogRepository({dbPath:e}),g=[];for(let m of d.candidates){let k=ph(m,p,n);g.push(k);}if(Ph(f,g),t.mode==="dry-run"&&(f.changedTasks=0),t.mode==="apply"){i=Eh(e,c,r,{candidates:g.length,recovered:f.recoveredTasks,unavailable:f.unavailableTasks,deferred:f.deferredTasks}),f.backupPath=i.path,f.snapshotPath=i.path,f.backupMethod="row-undo-snapshot";for(let k of g)if(k.outcome!=="deferred")try{Th(s,i,k,r)==="changed"&&(f.changedTasks+=1);}catch(T){f.failures.push({taskId:k.candidate.id,reason:T instanceof Error?T.message:String(T)});}let m=i.path;i.db.close(),i=void 0,$c(m);}let _=Ks(s);if(f.accountingTasks=_.accountingTasks,f.remainingTargetTasks=_.candidates.length,f.ok=f.failures.length===0,t.mode==="apply"){let m=or(s);m&&f.warnings.push(m);}return f}finally{i&&i.db.close(),s.close();}}Mr();h();se();fe();ce();pe();ue();Yn();h();function fo(t){return t!==null&&t!==""}function Mh(t){return t.schedule_id!==null&&t.schedule_id!==void 0?"system":fo(t.parent_task_id)||fo(t.caller_agent_id)?"agent":t.platform==="workflow"?"system":"human"}function Fc(t,e){return {origin:t==="human"?"direct":"delegated",delegatedByAgentId:t==="agent"&&fo(e)?e:null}}function go(t){let e=Mh(t),n=fo(t.caller_agent_id)?t.caller_agent_id:null,r=t.parent_thread_id!==null&&t.parent_thread_id!==t.thread_id;return {origin:e==="human"?"direct":"delegated",delegatedByAgentId:e==="agent"?n??(r&&t.parent_agent_id||null):null}}function Bc(t,e,n){return t.creator_task_id!==null&&t.creator_pointer_unverified===0?t.creator_actor_kind!==null?Fc(t.creator_actor_kind,t.creator_actor_id):e?go(e):{origin:"direct",delegatedByAgentId:null}:t.created_by_kind!==null?Fc(t.created_by_kind,t.created_by_id):n?go(n):void 0}function ho(t){return {...t,status:Nt(t)}}function qh({metadata:t,...e}){return {...e,status:Nt({...e,metadata:t})}}var _o=900,jc=20;function Wc(t,e){return (t?.origin??"direct")===e}function Gc(t,e){let n=new Date(e.updated_at).getTime()-new Date(t.updated_at).getTime();return n!==0?n:t.id.localeCompare(e.id)}var Qt=class extends exports.RepositoryError{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function ir(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function jh(t){let n=ir(t).threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {priority:null,state:null};let r=n;return {priority:typeof r.priority=="string"?r.priority:null,state:typeof r.state=="string"?r.state:null}}function zc(t,e,n){return t.get(drizzleOrm.sql`
388
+ WHERE id = ?`).run(e.before_run_epoch,e.before_completed_at,e.before_input_tokens,e.before_output_tokens,e.before_cached_input_tokens,e.before_cost_usd,e.before_model,s,e.id).changes===1?void 0:{taskId:e.id,fields:[...Ic]}}).immediate()}function Ch(t){if(!Yt(t,"SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'tasks'"))throw new Error("Usage backfill requires the tasks table");let n=new Set(ir(t,"PRAGMA table_info(tasks)").map(i=>i.name)),o=["id","agent_id","status","completed_at","metadata","model","platform","run_epoch","input_tokens","output_tokens","cached_input_tokens","cost_usd"].filter(i=>!n.has(i));if(o.length>0)throw new Error(`Usage backfill requires task columns: ${o.join(", ")}`);if(!Yt(t,"SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'task_log_events'"))throw new Error("Usage backfill requires the task_log_events table")}function xh(t,e,n,r){return {mode:t,ok:true,dbPath:e,scannedTasks:n.scannedTasks,terminalTasks:n.terminalTasks,rawTargetTasks:n.rawTargetRows.length,candidateTasks:n.candidates.length,recoveredTasks:0,unavailableTasks:0,deferredTasks:0,changedTasks:0,wouldChangeTasks:0,restored:0,skippedConflict:0,conflictSamples:[],accountingTasks:n.accountingTasks,remainingTargetTasks:n.candidates.length,providerDistribution:{},reasonCounts:hh(),estimatedFreeSpaceBytes:r.estimatedFreeSpaceBytes,requiredFreeSpaceBytes:r.requiredFreeSpaceBytes,availableFreeSpaceBytes:r.availableFreeSpaceBytes,minimumFreeSpaceReserveBytes:r.minimumFreeSpaceReserveBytes,freeSpaceGatePassed:r.freeSpaceGatePassed,failures:[],warnings:[...r.warnings]}}function Ph(t,e){for(let n of e)fh(t.providerDistribution,n.candidate.provider,n.outcome),gh(t.reasonCounts,n.outcome==="unavailable"?n.reason:void 0),n.outcome==="recovered"&&(t.recoveredTasks+=1),n.outcome==="unavailable"&&(t.unavailableTasks+=1),n.outcome==="deferred"&&(t.deferredTasks+=1);t.providerDistribution=_h(t.providerDistribution),t.wouldChangeTasks=t.recoveredTasks+t.unavailableTasks;}function Dh(t){if(!["dry-run","apply","verify","restore"].includes(t.mode))throw new Error(`Unsupported usage backfill mode: ${t.mode}`);if(t.backupPath&&t.mode!=="apply")throw new Error("--backup is only valid with --apply");if(t.restorePath&&t.mode!=="restore")throw new Error("--restore is only valid with restore mode");if(t.mode==="restore"&&!t.restorePath)throw new Error("Restore mode requires a usage undo snapshot path")}async function Lh(t){Dh(t);let e=uo(t.dbPath),n=uh(t.now),r=new Date(n).toISOString(),o=t.mode==="restore"?Ih(t.restorePath,e):void 0,s=Xs(e,t.mode!=="apply"&&t.mode!=="restore"),i;try{Ch(s);let d=Ks(s),c=t.mode==="apply"&&d.candidates.length>0?t.backupPath??Hc(e):void 0,u=wh(e,d.candidates.length,c),f=xh(t.mode,e,d,u);if(o){f.backupPath=o.path,f.snapshotPath=o.path;for(let T of o.rows)try{let E=Nh(s,T);E?(f.skippedConflict+=1,f.conflictSamples.length<nh&&f.conflictSamples.push(E)):f.restored+=1;}catch(E){f.failures.push({taskId:T.id,reason:E instanceof Error?E.message:String(E)});}let m=Ks(s);f.accountingTasks=m.accountingTasks,f.remainingTargetTasks=m.candidates.length,f.ok=f.failures.length===0;let k=sr(s);return k&&f.warnings.push(k),f}if(t.mode==="verify")return f;if(t.mode==="apply"&&!u.freeSpaceGatePassed&&d.candidates.length>0)return f.ok=!1,f.blockedReason=`Apply blocked: available free space (${u.availableFreeSpaceBytes} bytes) is below the required ${u.requiredFreeSpaceBytes} bytes (including a ${u.minimumFreeSpaceReserveBytes} byte reserve)`,f;if(d.candidates.length===0)return f;let p=new exports.TaskLogRepository({dbPath:e}),g=[];for(let m of d.candidates){let k=ph(m,p,n);g.push(k);}if(Ph(f,g),t.mode==="dry-run"&&(f.changedTasks=0),t.mode==="apply"){i=Eh(e,c,r,{candidates:g.length,recovered:f.recoveredTasks,unavailable:f.unavailableTasks,deferred:f.deferredTasks}),f.backupPath=i.path,f.snapshotPath=i.path,f.backupMethod="row-undo-snapshot";for(let k of g)if(k.outcome!=="deferred")try{Th(s,i,k,r)==="changed"&&(f.changedTasks+=1);}catch(T){f.failures.push({taskId:k.candidate.id,reason:T instanceof Error?T.message:String(T)});}let m=i.path;i.db.close(),i=void 0,$c(m);}let _=Ks(s);if(f.accountingTasks=_.accountingTasks,f.remainingTargetTasks=_.candidates.length,f.ok=f.failures.length===0,t.mode==="apply"){let m=sr(s);m&&f.warnings.push(m);}return f}finally{i&&i.db.close(),s.close();}}Mr();h();se();fe();ce();pe();ue();Xn();h();function fo(t){return t!==null&&t!==""}function Mh(t){return t.schedule_id!==null&&t.schedule_id!==void 0?"system":fo(t.parent_task_id)||fo(t.caller_agent_id)?"agent":t.platform==="workflow"?"system":"human"}function Fc(t,e){return {origin:t==="human"?"direct":"delegated",delegatedByAgentId:t==="agent"&&fo(e)?e:null}}function go(t){let e=Mh(t),n=fo(t.caller_agent_id)?t.caller_agent_id:null,r=t.parent_thread_id!==null&&t.parent_thread_id!==t.thread_id;return {origin:e==="human"?"direct":"delegated",delegatedByAgentId:e==="agent"?n??(r&&t.parent_agent_id||null):null}}function Bc(t,e,n){return t.creator_task_id!==null&&t.creator_pointer_unverified===0?t.creator_actor_kind!==null?Fc(t.creator_actor_kind,t.creator_actor_id):e?go(e):{origin:"direct",delegatedByAgentId:null}:t.created_by_kind!==null?Fc(t.created_by_kind,t.created_by_id):n?go(n):void 0}function ho(t){return {...t,status:Nt(t)}}function qh({metadata:t,...e}){return {...e,status:Nt({...e,metadata:t})}}var _o=900,jc=20;function Wc(t,e){return (t?.origin??"direct")===e}function Gc(t,e){let n=new Date(e.updated_at).getTime()-new Date(t.updated_at).getTime();return n!==0?n:t.id.localeCompare(e.id)}var Qt=class extends exports.RepositoryError{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function Nn(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function jh(t){let n=Nn(t).threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {priority:null,state:null};let r=n;return {priority:typeof r.priority=="string"?r.priority:null,state:typeof r.state=="string"?r.state:null}}function zc(t,e,n){return t.get(drizzleOrm.sql`
389
389
  SELECT id
390
390
  FROM tasks INDEXED BY idx_tasks_thread_id
391
391
  WHERE thread_id = ${e}
392
392
  AND id <> ${n}
393
393
  LIMIT 1
394
- `)!==void 0}var Zs=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}topLevelTaskPredicateSql(e="child",n){let r=n?`tasks parent INDEXED BY ${n}`:"tasks parent";return drizzleOrm.sql.raw(`NOT EXISTS (
394
+ `)!==void 0}var Zs=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}topLevelTaskPredicateSql(e="child",n){let r=n?`tasks parent INDEXED BY ${n}`:"tasks parent";return drizzleOrm.sql.raw(`NOT EXISTS (
395
395
  SELECT 1 FROM ${r}
396
396
  WHERE parent.id = ${e}.parent_task_id
397
397
  AND parent.thread_id = ${e}.thread_id
398
398
  )`)}findAllThreadsQuery(e,n){let r=[];e&&r.push(drizzleOrm.sql`workspace_id = ${e}`),n&&r.push(drizzleOrm.sql`created_by_kind = ${n}`);let o=r.length>0?drizzleOrm.sql` WHERE ${drizzleOrm.sql.join(r,drizzleOrm.sql` AND `)}`:drizzleOrm.sql``;return drizzleOrm.sql`SELECT * FROM threads${o} ORDER BY updated_at DESC`}findThreadIdsQuery(e){return e?drizzleOrm.sql`SELECT id FROM threads INDEXED BY idx_threads_ws_updated
399
399
  WHERE workspace_id = ${e}
400
- ORDER BY updated_at DESC`:drizzleOrm.sql`SELECT id FROM threads`}readThreadIds(e,n="Failed to find thread ids"){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Oa.existsSync(i))continue;let d=C(i);try{let c=d.db.all(this.findThreadIdsQuery(e));for(let u of c)o.has(u.id)||(o.add(u.id),s.push(u.id));}catch(c){throw new exports.RepositoryError("DB_ERROR",n,c)}finally{d.close();}}return s}findThreadSortKeysQuery(e){return drizzleOrm.sql`SELECT id, updated_at
400
+ ORDER BY updated_at DESC`:drizzleOrm.sql`SELECT id FROM threads`}readThreadIds(e,n="Failed to find thread ids"){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Oa.existsSync(i))continue;let d=x(i);try{let c=d.db.all(this.findThreadIdsQuery(e));for(let u of c)o.has(u.id)||(o.add(u.id),s.push(u.id));}catch(c){throw new exports.RepositoryError("DB_ERROR",n,c)}finally{d.close();}}return s}findThreadSortKeysQuery(e){return drizzleOrm.sql`SELECT id, updated_at
401
401
  FROM threads INDEXED BY idx_threads_ws_updated
402
- WHERE workspace_id = ${e}`}readThreadSortKeys(e){let n=this.resolveDbPaths(),r=new Set,o=[];for(let s of n){if(!Oa.existsSync(s))continue;let i=C(s);try{let d=i.db.all(this.findThreadSortKeysQuery(e));for(let c of d)r.has(c.id)||(r.add(c.id),o.push(c));}catch(d){throw new exports.RepositoryError("DB_ERROR","Failed to find recent direct threads",d)}finally{i.close();}}return o}readThreadRowsByIds(e,n,r="Failed to find threads by ids"){if(e.length===0)return [];let o=this.resolveDbPaths(),s=new Set,i=[];for(let d of o){if(!Oa.existsSync(d))continue;let c=C(d);try{for(let u=0;u<e.length;u+=_o){let f=e.slice(u,u+_o),p=drizzleOrm.inArray(w.id,f),g=n?drizzleOrm.and(p,drizzleOrm.eq(w.workspace_id,n)):p,_=c.db.select().from(w).where(g).all();for(let m of _)s.has(m.id)||(s.add(m.id),i.push(m));}}catch(u){throw new exports.RepositoryError("DB_ERROR",r,u)}finally{c.close();}}return i}readThreadRows(e,n,r="Failed to find all threads"){let o=this.resolveDbPaths(),s=new Set,i=[];for(let d of o){if(!Oa.existsSync(d))continue;let c=C(d);try{let u=c.db.all(this.findAllThreadsQuery(e,n));for(let f of u)s.has(f.id)||(s.add(f.id),i.push(f));}catch(u){throw new exports.RepositoryError("DB_ERROR",r,u)}finally{c.close();}}return i}findAllThreads(e,n){return this.readThreadRows(e,n)}explainFindAllThreadsPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=C(o);try{return s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findAllThreadsQuery(e,n)}`).map(d=>d.detail)}finally{s.close();}}return []}findThreadsByIdsOrTitles(e,n){if(e.length===0)return [];let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Oa.existsSync(i))continue;let d=C(i);try{let c=drizzleOrm.or(drizzleOrm.inArray(w.id,e),drizzleOrm.inArray(w.title,e)),u=n?drizzleOrm.and(c,drizzleOrm.eq(w.workspace_id,n)):c,f=d.db.select().from(w).where(u).orderBy(drizzleOrm.desc(w.updated_at)).all();for(let p of f)o.has(p.id)||(o.add(p.id),s.push(p));}catch(c){throw new exports.RepositoryError("DB_ERROR","Failed to find threads by ids or titles",c)}finally{d.close();}}return s}findThreadById(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=C(o);try{let i=drizzleOrm.eq(w.id,e),d=n?drizzleOrm.and(i,drizzleOrm.eq(w.workspace_id,n)):i,c=s.db.select().from(w).where(d).limit(1).get()??void 0;if(c)return c}catch(i){throw new exports.RepositoryError("DB_ERROR","Failed to find thread by id",i)}finally{s.close();}}}threadExists(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=C(o);try{let i=drizzleOrm.eq(w.id,e),d=n?drizzleOrm.and(i,drizzleOrm.eq(w.workspace_id,n)):i;if(s.db.select({id:w.id}).from(w).where(d).limit(1).get())return !0}catch(i){throw new exports.RepositoryError("DB_ERROR","Failed to check thread existence",i)}finally{s.close();}}return false}aggregateTaskStats(e,n){let r=this.resolveDbPaths(),o=0,s=0,i=0,d=0,c=0,u=new Set;for(let f of r){if(!Oa.existsSync(f))continue;let p=C(f);try{let g=p.db.get(drizzleOrm.sql`
402
+ WHERE workspace_id = ${e}`}readThreadSortKeys(e){let n=this.resolveDbPaths(),r=new Set,o=[];for(let s of n){if(!Oa.existsSync(s))continue;let i=x(s);try{let d=i.db.all(this.findThreadSortKeysQuery(e));for(let c of d)r.has(c.id)||(r.add(c.id),o.push(c));}catch(d){throw new exports.RepositoryError("DB_ERROR","Failed to find recent direct threads",d)}finally{i.close();}}return o}readThreadRowsByIds(e,n,r="Failed to find threads by ids"){if(e.length===0)return [];let o=this.resolveDbPaths(),s=new Set,i=[];for(let d of o){if(!Oa.existsSync(d))continue;let c=x(d);try{for(let u=0;u<e.length;u+=_o){let f=e.slice(u,u+_o),p=drizzleOrm.inArray(w.id,f),g=n?drizzleOrm.and(p,drizzleOrm.eq(w.workspace_id,n)):p,_=c.db.select().from(w).where(g).all();for(let m of _)s.has(m.id)||(s.add(m.id),i.push(m));}}catch(u){throw new exports.RepositoryError("DB_ERROR",r,u)}finally{c.close();}}return i}readThreadRows(e,n,r="Failed to find all threads"){let o=this.resolveDbPaths(),s=new Set,i=[];for(let d of o){if(!Oa.existsSync(d))continue;let c=x(d);try{let u=c.db.all(this.findAllThreadsQuery(e,n));for(let f of u)s.has(f.id)||(s.add(f.id),i.push(f));}catch(u){throw new exports.RepositoryError("DB_ERROR",r,u)}finally{c.close();}}return i}findAllThreads(e,n){return this.readThreadRows(e,n)}explainFindAllThreadsPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=x(o);try{return s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findAllThreadsQuery(e,n)}`).map(d=>d.detail)}finally{s.close();}}return []}findThreadsByIdsOrTitles(e,n){if(e.length===0)return [];let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Oa.existsSync(i))continue;let d=x(i);try{let c=drizzleOrm.or(drizzleOrm.inArray(w.id,e),drizzleOrm.inArray(w.title,e)),u=n?drizzleOrm.and(c,drizzleOrm.eq(w.workspace_id,n)):c,f=d.db.select().from(w).where(u).orderBy(drizzleOrm.desc(w.updated_at)).all();for(let p of f)o.has(p.id)||(o.add(p.id),s.push(p));}catch(c){throw new exports.RepositoryError("DB_ERROR","Failed to find threads by ids or titles",c)}finally{d.close();}}return s}findThreadById(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=x(o);try{let i=drizzleOrm.eq(w.id,e),d=n?drizzleOrm.and(i,drizzleOrm.eq(w.workspace_id,n)):i,c=s.db.select().from(w).where(d).limit(1).get()??void 0;if(c)return c}catch(i){throw new exports.RepositoryError("DB_ERROR","Failed to find thread by id",i)}finally{s.close();}}}createAppLaunchThread(e){let n=this.openHandle(true);try{return n.db.transaction(r=>{if(!r.select({id:v.id}).from(v).where(drizzleOrm.eq(v.id,e.workspaceId)).limit(1).get())throw new exports.RepositoryError("NOT_FOUND","Workspace not found");let s=r.select().from(w).where(drizzleOrm.eq(w.id,e.threadId)).limit(1).get();if(s){let f=Nn(s.metadata).appLaunch,p=f&&typeof f=="object"&&!Array.isArray(f)?f.appId:void 0,g=r.get(drizzleOrm.sql`
403
+ SELECT COUNT(*) AS count FROM tasks WHERE thread_id = ${e.threadId}
404
+ `)?.count??0;return s.workspace_id===e.workspaceId&&p===e.appId&&s.message_count===0&&s.first_message===null&&s.last_message===null&&g===0?{status:"existing",thread:s}:{status:"conflict"}}let i=new Date().toISOString(),d=JSON.stringify({appLaunch:{appId:e.appId,...e.initialAgentId===void 0?{}:{initialAgentId:e.initialAgentId}}});r.insert(w).values({id:e.threadId,workspace_id:e.workspaceId,platform:e.platform,title:e.title,title_locked:1,created_by_kind:"human",created_by_id:e.createdById,created_by_task_id:null,message_count:0,first_message:null,last_message:null,metadata:d,created_at:i,updated_at:i}).run();let c=r.select().from(w).where(drizzleOrm.eq(w.id,e.threadId)).limit(1).get();if(!c)throw new exports.RepositoryError("DB_ERROR","App-launch thread could not be read after insert");return {status:"created",thread:c}},{behavior:"immediate"})}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to create App-launch thread",r)}finally{n.close();}}threadExists(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=x(o);try{let i=drizzleOrm.eq(w.id,e),d=n?drizzleOrm.and(i,drizzleOrm.eq(w.workspace_id,n)):i;if(s.db.select({id:w.id}).from(w).where(d).limit(1).get())return !0}catch(i){throw new exports.RepositoryError("DB_ERROR","Failed to check thread existence",i)}finally{s.close();}}return false}aggregateTaskStats(e,n){let r=this.resolveDbPaths(),o=0,s=0,i=0,d=0,c=0,u=new Set;for(let f of r){if(!Oa.existsSync(f))continue;let p=x(f);try{let g=p.db.get(drizzleOrm.sql`
403
405
  SELECT
404
406
  count(*) AS cnt,
405
407
  COALESCE(SUM(child.input_tokens), 0) AS total_input,
@@ -416,7 +418,7 @@ ${r.join(`
416
418
  AND child.agent_id IS NOT NULL AND child.agent_id != ''
417
419
  AND ${this.topLevelTaskPredicateSql()}
418
420
  ${n?drizzleOrm.sql`AND child.workspace_id = ${n}`:drizzleOrm.sql``}
419
- `);for(let m of _)u.add(m.agent_id);}catch(g){throw new exports.RepositoryError("DB_ERROR","Failed to aggregate task stats",g)}finally{p.close();}}return {taskCount:o,inputTokens:s,outputTokens:i,cachedInputTokens:d,costUsd:c,agentIds:Array.from(u)}}findTopLevelTasks(e,n,r){let o=this.resolveDbPaths(),s=new Set,i=[];for(let d of o){if(!Oa.existsSync(d))continue;let c=C(d);try{let u;r!==void 0?u=c.db.all(drizzleOrm.sql`
421
+ `);for(let m of _)u.add(m.agent_id);}catch(g){throw new exports.RepositoryError("DB_ERROR","Failed to aggregate task stats",g)}finally{p.close();}}return {taskCount:o,inputTokens:s,outputTokens:i,cachedInputTokens:d,costUsd:c,agentIds:Array.from(u)}}findTopLevelTasks(e,n,r){let o=this.resolveDbPaths(),s=new Set,i=[];for(let d of o){if(!Oa.existsSync(d))continue;let c=x(d);try{let u;r!==void 0?u=c.db.all(drizzleOrm.sql`
420
422
  SELECT * FROM (
421
423
  SELECT child.*,
422
424
  ROW_NUMBER() OVER (PARTITION BY child.agent_id ORDER BY child.started_at DESC) AS rn
@@ -433,7 +435,7 @@ ${r.join(`
433
435
  AND ${this.topLevelTaskPredicateSql()}
434
436
  ${n?drizzleOrm.sql`AND child.workspace_id = ${n}`:drizzleOrm.sql``}
435
437
  ORDER BY child.started_at ASC
436
- `);for(let f of u)s.has(f.id)||(s.add(f.id),i.push(ho(f)));}catch(u){throw new exports.RepositoryError("DB_ERROR","Failed to find top-level tasks",u)}finally{c.close();}}if(r!==void 0&&o.length>1){let d=new Map;for(let c of i){let u=c.agent_id??"";d.has(u)||d.set(u,[]),d.get(u).push(c);}i=[];for(let c of d.values())c.sort((u,f)=>(f.started_at??"").localeCompare(u.started_at??"")),i.push(...c.slice(0,r));i.sort((c,u)=>(c.started_at??"").localeCompare(u.started_at??""));}return i}findAllTasks(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Oa.existsSync(i))continue;let d=C(i);try{let c=drizzleOrm.eq(exports.tasks.thread_id,e),u=n?drizzleOrm.and(c,drizzleOrm.eq(exports.tasks.workspace_id,n)):c,f=d.db.select().from(exports.tasks).where(u).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all();for(let p of f)o.has(p.id)||(o.add(p.id),s.push(ho(p)));}catch(c){throw new exports.RepositoryError("DB_ERROR","Failed to find all tasks for thread",c)}finally{d.close();}}return s}findTaskById(e,n,r){let o=this.resolveDbPaths();for(let s of o){if(!Oa.existsSync(s))continue;let i=C(s);try{let d=drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,n),drizzleOrm.eq(exports.tasks.thread_id,e)),c=r?drizzleOrm.and(d,drizzleOrm.eq(exports.tasks.workspace_id,r)):d,u=i.db.select().from(exports.tasks).where(c).limit(1).get();if(!u)continue;let f=i.db.select().from(exports.tasks).where(drizzleOrm.eq(exports.tasks.parent_task_id,u.id)).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all().map(ho);return {task:ho(u),children:f}}catch(d){throw new exports.RepositoryError("DB_ERROR","Failed to find task by id",d)}finally{i.close();}}}batchFetchTasksQuery(e,n){return drizzleOrm.sql`
438
+ `);for(let f of u)s.has(f.id)||(s.add(f.id),i.push(ho(f)));}catch(u){throw new exports.RepositoryError("DB_ERROR","Failed to find top-level tasks",u)}finally{c.close();}}if(r!==void 0&&o.length>1){let d=new Map;for(let c of i){let u=c.agent_id??"";d.has(u)||d.set(u,[]),d.get(u).push(c);}i=[];for(let c of d.values())c.sort((u,f)=>(f.started_at??"").localeCompare(u.started_at??"")),i.push(...c.slice(0,r));i.sort((c,u)=>(c.started_at??"").localeCompare(u.started_at??""));}return i}findAllTasks(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Oa.existsSync(i))continue;let d=x(i);try{let c=drizzleOrm.eq(exports.tasks.thread_id,e),u=n?drizzleOrm.and(c,drizzleOrm.eq(exports.tasks.workspace_id,n)):c,f=d.db.select().from(exports.tasks).where(u).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all();for(let p of f)o.has(p.id)||(o.add(p.id),s.push(ho(p)));}catch(c){throw new exports.RepositoryError("DB_ERROR","Failed to find all tasks for thread",c)}finally{d.close();}}return s}findTaskById(e,n,r){let o=this.resolveDbPaths();for(let s of o){if(!Oa.existsSync(s))continue;let i=x(s);try{let d=drizzleOrm.and(drizzleOrm.eq(exports.tasks.id,n),drizzleOrm.eq(exports.tasks.thread_id,e)),c=r?drizzleOrm.and(d,drizzleOrm.eq(exports.tasks.workspace_id,r)):d,u=i.db.select().from(exports.tasks).where(c).limit(1).get();if(!u)continue;let f=i.db.select().from(exports.tasks).where(drizzleOrm.eq(exports.tasks.parent_task_id,u.id)).orderBy(drizzleOrm.asc(exports.tasks.started_at)).all().map(ho);return {task:ho(u),children:f}}catch(d){throw new exports.RepositoryError("DB_ERROR","Failed to find task by id",d)}finally{i.close();}}}batchFetchTasksQuery(e,n){return drizzleOrm.sql`
437
439
  SELECT child.id, child.thread_id, child.agent_id, child.status,
438
440
  child.parent_task_id, child.started_at, child.completed_at,
439
441
  child.duration_ms, child.input_tokens, child.output_tokens,
@@ -443,7 +445,7 @@ ${r.join(`
443
445
  AND ${this.topLevelTaskPredicateSql()}
444
446
  ${n?drizzleOrm.sql`AND child.workspace_id = ${n}`:drizzleOrm.sql``}
445
447
  ORDER BY child.started_at ASC
446
- `}batchFetchTasks(e,n){let r=new Map;if(e.length===0)return r;let o=this.resolveDbPaths();for(let s of o){if(!Oa.existsSync(s))continue;let i=C(s);try{let d=i.db.all(this.batchFetchTasksQuery(e,n));for(let c of d){let u=c.thread_id;r.has(u)||r.set(u,[]),r.get(u).push(qh(c));}}catch(d){throw new exports.RepositoryError("DB_ERROR","Failed to batch fetch tasks",d)}finally{i.close();}}return r}findThreadOriginsQuery(e,n){return drizzleOrm.sql`
448
+ `}batchFetchTasks(e,n){let r=new Map;if(e.length===0)return r;let o=this.resolveDbPaths();for(let s of o){if(!Oa.existsSync(s))continue;let i=x(s);try{let d=i.db.all(this.batchFetchTasksQuery(e,n));for(let c of d){let u=c.thread_id;r.has(u)||r.set(u,[]),r.get(u).push(qh(c));}}catch(d){throw new exports.RepositoryError("DB_ERROR","Failed to batch fetch tasks",d)}finally{i.close();}}return r}findThreadOriginsQuery(e,n){return drizzleOrm.sql`
447
449
  WITH root AS (
448
450
  SELECT child.thread_id, child.id, child.caller_agent_id, child.parent_task_id,
449
451
  CASE
@@ -495,7 +497,7 @@ ${r.join(`
495
497
  FROM tasks AS child
496
498
  LEFT JOIN tasks AS parent ON parent.id = child.parent_task_id
497
499
  WHERE child.id IN (${drizzleOrm.sql.join(e.map(n=>drizzleOrm.sql`${n}`),drizzleOrm.sql`, `)})
498
- `}findThreadOrigins(e,n){let r=new Map;if(e.length===0)return r;let o=this.resolveDbPaths();for(let s of o){if(!Oa.existsSync(s))continue;let i=C(s);try{for(let d=0;d<e.length;d+=_o){let c=e.slice(d,d+_o),f=i.db.all(this.findCreatorPointersQuery(c,n)).filter(b=>!r.has(b.thread_id)),p=f.filter(b=>b.creator_task_id!==null&&b.creator_pointer_unverified===0&&b.creator_actor_kind===null).map(b=>b.creator_task_id),g=p.length>0?i.db.all(this.findTaskOriginLineageQuery(p)):[],_=new Map(g.map(b=>[b.task_id,b])),m=new Map(f.map(b=>[b.thread_id,b])),k=c.filter(b=>{if(r.has(b))return !1;let L=m.get(b);return L?!(L.creator_task_id!==null&&L.creator_pointer_unverified===0)&&L.created_by_kind===null:!0}),T=k.length>0?i.db.all(this.findThreadOriginsQuery(k,n)):[],E=new Map(T.map(b=>[b.thread_id,b]));for(let b of f){if(r.has(b.thread_id))continue;let L=Bc(b,b.created_by_task_id!==null?_.get(b.created_by_task_id):void 0,E.get(b.thread_id));L&&r.set(b.thread_id,L);}for(let b of T)r.has(b.thread_id)||m.has(b.thread_id)||r.set(b.thread_id,go(b));}}catch(d){throw new exports.RepositoryError("DB_ERROR","Failed to fetch thread origins",d)}finally{i.close();}}return r}findThreadsByOrigin(e,n){let r=this.readThreadIds(n,"Failed to find threads by origin"),o=this.findThreadOrigins(r,n),s=r.filter(d=>Wc(o.get(d),e));return this.readThreadRowsByIds(s,n,"Failed to find threads by origin").sort(Gc)}findRecentDirectThreads(e,n=5){if(typeof e!="string"||e.trim().length===0)throw new exports.RepositoryError("VALIDATION","workspaceId is required");if(!Number.isInteger(n)||n<=0)throw new exports.RepositoryError("VALIDATION","limit must be a positive integer");let r=this.readThreadSortKeys(e).sort(Gc),o=[],s=new Map;for(let u=0;u<r.length;u+=jc){let f=r.slice(u,u+jc),p=this.findThreadOrigins(f.map(g=>g.id),e);for(let[g,_]of p)s.set(g,_);for(let g of f)if(Wc(p.get(g.id),"direct")&&(o.push(g.id),o.length===n))break;if(o.length===n)break}let i=new Map;if(o.length>0){let u=this.readThreadRowsByIds(o,e,"Failed to find recent direct threads");for(let f of u)i.set(f.id,f);}let d=[],c=new Map;for(let u of o){let f=i.get(u);if(!f)continue;d.push(f);let p=s.get(u);p&&c.set(u,p);}return {threads:d,originsByThread:c}}explainBatchFetchTasksPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=C(o);try{return s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.batchFetchTasksQuery(e,n)}`).map(d=>d.detail)}finally{s.close();}}return []}explainFindThreadOriginsPlan(e,n){if(e.length===0)return [];let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=C(o);try{let i=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findCreatorPointersQuery(e,n)}`),d=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findTaskOriginLineageQuery(e)}`),c=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery(e,n)}`);return [...i,...d,...c].map(u=>u.detail)}finally{s.close();}}return []}explainFindThreadsByOriginPlan(e,n){let r=`__thread_origin_${e}_plan__`,o=this.resolveDbPaths();for(let s of o){if(!Oa.existsSync(s))continue;let i=C(s);try{let d=i.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findThreadIdsQuery(n)}`),c=i.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findCreatorPointersQuery([r],n)}`),u=i.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findTaskOriginLineageQuery([r])}`),f=i.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery([r],n)}`);return [...d,...c,...u,...f].map(p=>p.detail)}finally{i.close();}}return []}updateThreadTitle(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=drizzleOrm.eq(w.id,e),i=r?drizzleOrm.and(s,drizzleOrm.eq(w.workspace_id,r)):s;if(!o.db.select({id:w.id}).from(w).where(i).limit(1).get())return;o.db.update(w).set({title:n,title_locked:1,updated_at:new Date().toISOString()}).where(drizzleOrm.eq(w.id,e)).run();}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("DB_ERROR","Failed to update thread title",s)}finally{o.close();}}upsertThread(e,n){let r=this.openHandle(true);try{r.db.transaction(o=>{let i=(n.workspaceId?o.select({id:x.id}).from(x).where(drizzleOrm.eq(x.id,n.workspaceId)).limit(1).get():void 0)?n.workspaceId:null,d=new Date().toISOString(),c=o.select({id:w.id,message_count:w.message_count,created_by_task_id:w.created_by_task_id}).from(w).where(drizzleOrm.eq(w.id,e)).limit(1).get();if(c){let u={updated_at:d};n.title!==void 0&&(u.title=n.title),n.titleLocked!==void 0&&(u.title_locked=n.titleLocked?1:0),c.created_by_task_id===null&&n.createdByTaskId!=null&&c.message_count===0&&!zc(o,e,n.createdByTaskId)&&(u.created_by_task_id=n.createdByTaskId),o.update(w).set(u).where(drizzleOrm.eq(w.id,e)).run();}else o.insert(w).values({id:e,platform:n.platform,workspace_id:i,created_by_kind:null,created_by_id:null,created_by_task_id:n.createdByTaskId??null,title:n.title??null,title_locked:n.titleLocked?1:0,message_count:0,created_at:d,updated_at:d}).run();},{behavior:"immediate"});}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to upsert thread",o)}finally{r.close();}}ensureThread(e,n,r,o){let s=this.openHandle(true);try{s.db.transaction(i=>{let c=(r?i.select({id:x.id}).from(x).where(drizzleOrm.eq(x.id,r)).limit(1).get():void 0)?r:null,u=i.select({id:w.id,platform:w.platform,workspace_id:w.workspace_id,message_count:w.message_count,created_by_task_id:w.created_by_task_id}).from(w).where(drizzleOrm.eq(w.id,e)).limit(1).get();if(u){let p={};c&&!u.workspace_id&&(p.workspace_id=c),u.created_by_task_id===null&&o?.createdByTaskId!=null&&u.message_count===0&&!zc(i,e,o.createdByTaskId)&&(p.created_by_task_id=o.createdByTaskId),Object.keys(p).length>0&&i.update(w).set(p).where(drizzleOrm.eq(w.id,e)).run();return}let f=new Date().toISOString();i.insert(w).values({id:e,platform:n,workspace_id:c,created_by_kind:null,created_by_id:null,created_by_task_id:o?.createdByTaskId??null,message_count:0,created_at:f,updated_at:f}).run();},{behavior:"immediate"});}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("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(d=>{let u=d.select({message_count:w.message_count}).from(w).where(drizzleOrm.eq(w.id,e)).limit(1).get()?.message_count===0;return d.run(drizzleOrm.sql`
500
+ `}findThreadOrigins(e,n){let r=new Map;if(e.length===0)return r;let o=this.resolveDbPaths();for(let s of o){if(!Oa.existsSync(s))continue;let i=x(s);try{for(let d=0;d<e.length;d+=_o){let c=e.slice(d,d+_o),f=i.db.all(this.findCreatorPointersQuery(c,n)).filter(b=>!r.has(b.thread_id)),p=f.filter(b=>b.creator_task_id!==null&&b.creator_pointer_unverified===0&&b.creator_actor_kind===null).map(b=>b.creator_task_id),g=p.length>0?i.db.all(this.findTaskOriginLineageQuery(p)):[],_=new Map(g.map(b=>[b.task_id,b])),m=new Map(f.map(b=>[b.thread_id,b])),k=c.filter(b=>{if(r.has(b))return !1;let L=m.get(b);return L?!(L.creator_task_id!==null&&L.creator_pointer_unverified===0)&&L.created_by_kind===null:!0}),T=k.length>0?i.db.all(this.findThreadOriginsQuery(k,n)):[],E=new Map(T.map(b=>[b.thread_id,b]));for(let b of f){if(r.has(b.thread_id))continue;let L=Bc(b,b.created_by_task_id!==null?_.get(b.created_by_task_id):void 0,E.get(b.thread_id));L&&r.set(b.thread_id,L);}for(let b of T)r.has(b.thread_id)||m.has(b.thread_id)||r.set(b.thread_id,go(b));}}catch(d){throw new exports.RepositoryError("DB_ERROR","Failed to fetch thread origins",d)}finally{i.close();}}return r}findThreadsByOrigin(e,n){let r=this.readThreadIds(n,"Failed to find threads by origin"),o=this.findThreadOrigins(r,n),s=r.filter(d=>Wc(o.get(d),e));return this.readThreadRowsByIds(s,n,"Failed to find threads by origin").sort(Gc)}findRecentDirectThreads(e,n=5){if(typeof e!="string"||e.trim().length===0)throw new exports.RepositoryError("VALIDATION","workspaceId is required");if(!Number.isInteger(n)||n<=0)throw new exports.RepositoryError("VALIDATION","limit must be a positive integer");let r=this.readThreadSortKeys(e).sort(Gc),o=[],s=new Map;for(let u=0;u<r.length;u+=jc){let f=r.slice(u,u+jc),p=this.findThreadOrigins(f.map(g=>g.id),e);for(let[g,_]of p)s.set(g,_);for(let g of f)if(Wc(p.get(g.id),"direct")&&(o.push(g.id),o.length===n))break;if(o.length===n)break}let i=new Map;if(o.length>0){let u=this.readThreadRowsByIds(o,e,"Failed to find recent direct threads");for(let f of u)i.set(f.id,f);}let d=[],c=new Map;for(let u of o){let f=i.get(u);if(!f)continue;d.push(f);let p=s.get(u);p&&c.set(u,p);}return {threads:d,originsByThread:c}}explainBatchFetchTasksPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=x(o);try{return s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.batchFetchTasksQuery(e,n)}`).map(d=>d.detail)}finally{s.close();}}return []}explainFindThreadOriginsPlan(e,n){if(e.length===0)return [];let r=this.resolveDbPaths();for(let o of r){if(!Oa.existsSync(o))continue;let s=x(o);try{let i=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findCreatorPointersQuery(e,n)}`),d=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findTaskOriginLineageQuery(e)}`),c=s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery(e,n)}`);return [...i,...d,...c].map(u=>u.detail)}finally{s.close();}}return []}explainFindThreadsByOriginPlan(e,n){let r=`__thread_origin_${e}_plan__`,o=this.resolveDbPaths();for(let s of o){if(!Oa.existsSync(s))continue;let i=x(s);try{let d=i.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findThreadIdsQuery(n)}`),c=i.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findCreatorPointersQuery([r],n)}`),u=i.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findTaskOriginLineageQuery([r])}`),f=i.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery([r],n)}`);return [...d,...c,...u,...f].map(p=>p.detail)}finally{i.close();}}return []}updateThreadTitle(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=drizzleOrm.eq(w.id,e),i=r?drizzleOrm.and(s,drizzleOrm.eq(w.workspace_id,r)):s;if(!o.db.select({id:w.id}).from(w).where(i).limit(1).get())return;o.db.update(w).set({title:n,title_locked:1,updated_at:new Date().toISOString()}).where(drizzleOrm.eq(w.id,e)).run();}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("DB_ERROR","Failed to update thread title",s)}finally{o.close();}}upsertThread(e,n){let r=this.openHandle(true);try{r.db.transaction(o=>{let i=(n.workspaceId?o.select({id:v.id}).from(v).where(drizzleOrm.eq(v.id,n.workspaceId)).limit(1).get():void 0)?n.workspaceId:null,d=new Date().toISOString(),c=o.select({id:w.id,message_count:w.message_count,created_by_task_id:w.created_by_task_id}).from(w).where(drizzleOrm.eq(w.id,e)).limit(1).get();if(c){let u={updated_at:d};n.title!==void 0&&(u.title=n.title),n.titleLocked!==void 0&&(u.title_locked=n.titleLocked?1:0),c.created_by_task_id===null&&n.createdByTaskId!=null&&c.message_count===0&&!zc(o,e,n.createdByTaskId)&&(u.created_by_task_id=n.createdByTaskId),o.update(w).set(u).where(drizzleOrm.eq(w.id,e)).run();}else o.insert(w).values({id:e,platform:n.platform,workspace_id:i,created_by_kind:null,created_by_id:null,created_by_task_id:n.createdByTaskId??null,title:n.title??null,title_locked:n.titleLocked?1:0,message_count:0,created_at:d,updated_at:d}).run();},{behavior:"immediate"});}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to upsert thread",o)}finally{r.close();}}ensureThread(e,n,r,o){let s=this.openHandle(true);try{s.db.transaction(i=>{let c=(r?i.select({id:v.id}).from(v).where(drizzleOrm.eq(v.id,r)).limit(1).get():void 0)?r:null,u=i.select({id:w.id,platform:w.platform,workspace_id:w.workspace_id,message_count:w.message_count,created_by_task_id:w.created_by_task_id}).from(w).where(drizzleOrm.eq(w.id,e)).limit(1).get();if(u){let p={};c&&!u.workspace_id&&(p.workspace_id=c),u.created_by_task_id===null&&o?.createdByTaskId!=null&&u.message_count===0&&!zc(i,e,o.createdByTaskId)&&(p.created_by_task_id=o.createdByTaskId),Object.keys(p).length>0&&i.update(w).set(p).where(drizzleOrm.eq(w.id,e)).run();return}let f=new Date().toISOString();i.insert(w).values({id:e,platform:n,workspace_id:c,created_by_kind:null,created_by_id:null,created_by_task_id:o?.createdByTaskId??null,message_count:0,created_at:f,updated_at:f}).run();},{behavior:"immediate"});}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("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(d=>{let u=d.select({message_count:w.message_count}).from(w).where(drizzleOrm.eq(w.id,e)).limit(1).get()?.message_count===0;return d.run(drizzleOrm.sql`
499
501
  UPDATE threads
500
502
  SET first_message = COALESCE(first_message, ${n}),
501
503
  title = CASE WHEN title_locked = 0 AND title IS NULL THEN substr(${n}, 1, 60) ELSE title END,
@@ -503,7 +505,7 @@ ${r.join(`
503
505
  message_count = message_count + 1,
504
506
  updated_at = ${s}
505
507
  WHERE id = ${e}
506
- `),u},{behavior:"immediate"})}}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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(w).set({last_message:n,updated_at:s}).where(drizzleOrm.eq(w.id,e)).run();}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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(w).set(o).where(drizzleOrm.eq(w.id,e)).run();}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("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 Qt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(o).some(c=>c!=="priority"&&c!=="state"))return new Qt("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 Qt("THREAD_TITLE_PATCH_EMPTY","Thread-title metadata patch must change priority or state");for(let c of [i.priority,i.state])if(c!=null&&(typeof c!="string"||c.length===0))return new Qt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let d=this.openHandle(true);try{let c=r?drizzleOrm.and(drizzleOrm.eq(w.id,e),drizzleOrm.eq(w.workspace_id,r)):drizzleOrm.eq(w.id,e);return d.db.transaction(u=>{let f=u.select({metadata:w.metadata}).from(w).where(c).get();if(!f)return null;let p=ir(f.metadata),g=p.threadTitle,_=g&&typeof g=="object"&&!Array.isArray(g)?{...g}:{};i.priority===null?delete _.priority:i.priority!==void 0&&(_.priority=i.priority),i.state===null?delete _.state:i.state!==void 0&&(_.state=i.state),Object.keys(_).length>0?p.threadTitle=_:delete p.threadTitle;let m=Object.keys(p).length>0?JSON.stringify(p):null,k=new Date().toISOString();u.update(w).set({metadata:m,updated_at:k}).where(c).run();let T=u.select({metadata:w.metadata}).from(w).where(c).get();if(!T)throw new exports.RepositoryError("DB_ERROR","Thread-title metadata update could not be read back");let E=jh(T.metadata);return {threadId:e,priority:E.priority,state:E.state}},{behavior:"immediate"})}catch(c){throw c instanceof exports.RepositoryError?c:new exports.RepositoryError("DB_ERROR","Failed to patch thread-title metadata",c)}finally{d.close();}}togglePin(e,n){let r=this.openHandle(true);try{let o=n?drizzleOrm.and(drizzleOrm.eq(w.id,e),drizzleOrm.eq(w.workspace_id,n)):drizzleOrm.eq(w.id,e);return r.db.transaction(s=>{let i=s.select({pinned:w.pinned,metadata:w.metadata}).from(w).where(o).get();if(!i)return null;let d=i.pinned?0:1,c=ir(i.metadata);if(d){let u=n?drizzleOrm.and(drizzleOrm.eq(w.pinned,1),drizzleOrm.eq(w.workspace_id,n)):drizzleOrm.eq(w.pinned,1),f=s.select({metadata:w.metadata}).from(w).where(u).all(),p=null;for(let g of f){let _=ir(g.metadata);typeof _.pinOrder=="number"&&(p===null||_.pinOrder<p)&&(p=_.pinOrder);}c.pinOrder=p===null?0:p-1;}else delete c.pinOrder;return s.update(w).set({pinned:d,metadata:Object.keys(c).length>0?JSON.stringify(c):null}).where(o).run(),{pinned:!!d}},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("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(w.id,e[s]),drizzleOrm.eq(w.workspace_id,n)):drizzleOrm.eq(w.id,e[s]),d=o.select({metadata:w.metadata}).from(w).where(i).get();if(!d)continue;let c=ir(d.metadata);c.pinOrder=s+1,o.update(w).set({metadata:JSON.stringify(c)}).where(i).run();}},{behavior:"immediate"});}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("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(w.id,e),drizzleOrm.eq(w.workspace_id,n)):drizzleOrm.eq(w.id,e),s=r.db.select({starred:w.starred}).from(w).where(o).get();if(!s)return null;let i=s.starred?0:1;return r.db.update(w).set({starred:i}).where(o).run(),{starred:!!i}}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to toggle star",o)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,o){let i=this.openHandle(true);try{let d=n?drizzleOrm.and(drizzleOrm.eq(w.id,e),drizzleOrm.eq(w.workspace_id,n)):drizzleOrm.eq(w.id,e);return i.db.transaction(u=>{let f=u.select({metadata:w.metadata}).from(w).where(d).get();if(!f)return null;let p=f.metadata?JSON.parse(f.metadata):{},g=p.overdrive??{},_=o?.defaultTurns??g.defaultTurns??3,m=o?.updatedBy??"ui",k=new Date().toISOString(),T,E,b,L;switch(r){case "enable-count":{let y=o?.turns??_,N=o?.consumeCurrent?Math.max(y-1,0):y;T=N>0?"count":"off",E=N,b=!0,L="count";break}case "enable-latch":{T="latch",E=0,b=!0,L="latch";break}case "disable":{T="off",E=0,b=!1;break}default:{let y=g.state??"off",N=typeof g.remaining=="number"?g.remaining:0;if(y==="count"&&N>0){let P=N-1;P<=0?(T="off",E=0):(T="count",E=P),b=!0,L="count";}else y==="latch"?(T="latch",E=0,b=!0,L="latch"):(T="off",E=0,b=!1);break}}return p.overdrive={state:T,remaining:E,defaultTurns:_,updatedAt:k,updatedBy:m},u.update(w).set({metadata:JSON.stringify(p),updated_at:k}).where(d).run(),{applied:b,appliedMode:L,state:T,remaining:E}},{behavior:"immediate"})}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to resolve overdrive",d)}finally{i.close();}}};h();se();fe();ce();pe();ue();h();var Vc=["urgent","high","medium","low"],Jc=["investigating","in-progress","in-review","on-hold","done"],ar="custom:";var Wh=new Set(Vc),Gh=new Set(Jc),zh={urgent:"U \uAE34\uAE09 Urgent",high:"P0 \uAE09\uD568 High",medium:"P1 \uC911\uC694 Medium",low:"P2 \uBCF4\uD1B5 Low"},ei={investigating:"\uC870\uC0AC\uC911 Looking into","in-progress":"\uC9C4\uD589\uC911 In progress","in-review":"\uAC80\uD1A0\uC911 In review","on-hold":"\uBCF4\uB958 On hold",done:"\uC644\uB8CC Done"};function Kc(t,e){return !e||e.includes(t)?e??t:`${t} ${e}`}function dr(t){return typeof t=="string"&&Wh.has(t)}function cr(t){if(typeof t!="string")return false;if(Gh.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(ar))return false;let e=t.slice(ar.length);return e.length>=1&&e.length<=20}function Yc(t){if(t.startsWith(ar))return t.slice(ar.length)}function ti(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 Kh(t){let e=ti(t);return !!e&&Object.prototype.hasOwnProperty.call(e,"threadTitle")}function mo(t){let e=ti(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,o={};return dr(r.priority)&&(o.priority=r.priority),cr(r.state)&&(o.state=r.state),o}function ni(t,e){let n=ti(t)??{},r={...mo(t)};return e.priority===null?delete r.priority:e.priority!==void 0&&(r.priority=e.priority),e.state===null?delete r.state:e.state!==void 0&&(r.state=e.state),r.priority===void 0&&r.state===void 0?delete n.threadTitle:n.threadTitle=r,Object.keys(n).length===0?null:JSON.stringify(n)}function Vh(t,e=new Map){let n=[];return t.priority&&n.push(Kc(zh[t.priority],e.get(t.priority))),t.state&&(t.state.startsWith(ar)?n.push(Yc(t.state)??""):ei[t.state]?n.push(Kc(ei[t.state],e.get(t.state))):e.has(t.state)?n.push(t.state,e.get(t.state)??""):t.state.startsWith("c_")?n.push(t.state):n.push(ei[t.state]??"")),n.filter(Boolean).join(" ")}function Xc(t,e){if(!t||t.trim().length===0)return;let n=new Set,r=false,o=false;for(let s of t.split(",")){let i=s.trim();if(i){if(i==="none"){r=true,o=true;continue}e(i)&&(n.add(i),o=true);}}if(o)return {values:n,includeNone:r}}function Jh(t){return Xc(t,dr)}function Yh(t){return Xc(t,cr)}function Xh(t,e){return e?t?e.values.has(t):e.includeNone:true}Yn();var nu="regeneration_replaced",n_="THREAD_HIGHLIGHT_REGENERATION_NO_ELIGIBLE_TURNS",ru="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED",r_="THREAD_HIGHLIGHT_REGENERATION_DETECTION_FAILED",ou="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",yo=class extends exports.RepositoryError{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;}},xn=class extends yo{},Ro=class extends exports.RepositoryError{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},o_=new Set(oa),s_=new Set(ra),i_=new Set(sa),a_=new Set(ia),d_=50,Zc=100,eu=280,tu=40,c_=new Set(aa),ko=["queued","running"];function oi(t){return c_.has(t)}function Y(t){throw new exports.RepositoryError("VALIDATION",t)}function it(t){throw new exports.RepositoryError("NOT_FOUND",t)}function M(t,e){(typeof t!="string"||t.trim().length===0)&&Y(`${e} is required`);}function lr(t={}){let e=t.actor??t,n=e.actorType??"system";return o_.has(n)||Y(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&Y("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function u_(t){M(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&M(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&Y("title must not be empty"),t.title.length>120&&Y("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!dr(t.priority)&&Y(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!cr(t.state)&&Y(`invalid state: ${String(t.state)}`);}function l_(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&Y("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)&&Y(`${n} must be a non-negative integer`);let e=t.limit??d_;return (!Number.isInteger(e)||e<1||e>Zc)&&Y(`limit must be between 1 and ${Zc}`),e}function ii(t){typeof t!="string"&&Y("text is required");let e=t.trim();return e.length===0&&Y("text must not be empty"),e.length>eu&&Y(`text must be at most ${eu} characters`),e}function Et(t,e){return M(t??"",e),t}function ai(t){a_.has(t)||Y(`invalid highlight kind: ${String(t)}`);}function p_(t){i_.has(t)||Y(`invalid highlight source: ${String(t)}`);}function f_(t){M(t.threadId,"threadId"),M(t.workspaceId,"workspaceId");let e=t.source??"manual";p_(e),ai(t.kind);let n=ii(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,o=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let f=t.taskId??(r&&o&&r===o?r:void 0),p=Et(f,"taskId");return (r!==p||o!==p)&&Y("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=Et(r,"coversFromTaskId"),i=Et(o,"coversToTaskId"),d=t.sourceTaskId??s,c=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),u=t.contentFingerprint??t.idempotencyKey??null;return Et(d??void 0,"sourceTaskId"),Et(c??void 0,"detectorVersion"),Et(u??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:s,coversToTaskId:i,agentId:t.agentId??null,sourceTaskId:d,detectorVersion:c,contentFingerprint:u}}function g_(t,e){(!t||typeof t!="object")&&Y(`candidates[${e}] is required`),ai(t.kind);let n=ii(t.text),r=Et(t.anchorTaskId,`candidates[${e}].anchorTaskId`),o=Et(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),s=Et(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||Ta("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s}));return M(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s,contentFingerprint:i}}function h_(t){Array.isArray(t)||Y("candidates must be an array"),t.length>tu&&Y(`candidates must contain at most ${tu} items`);let e=new Map;for(let[n,r]of t.entries()){let o=g_(r,n);e.set(o.contentFingerprint,o);}return [...e.values()]}function hr(t){let e=mo(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 __(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&Y("event payload must be a JSON object"),e}catch(e){throw new exports.RepositoryError("VALIDATION","event payload must be JSON serializable",e)}}function pr(t,e){return t.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${K.seq}), 0)`}).from(K).where(drizzleOrm.eq(K.thread_id,e)).get()?.maxSeq??0}function fr(t,e){return !!t.select({id:K.id}).from(K).where(drizzleOrm.eq(K.thread_id,e)).limit(1).get()}function Zt(t,e){s_.has(e.type)||Y(`invalid thread event type: ${String(e.type)}`);let n=$e("the");t.insert(K).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:__(e.payload),created_at:e.createdAt}).run();let r=t.select().from(K).where(drizzleOrm.eq(K.id,n)).get();if(!r)throw new exports.RepositoryError("DB_ERROR","Thread event insert did not return a row");return r}function gr(t,e,n,r,o){let s=hr(e);Zt(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 wo(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 To(t,e,n,r,o,s,i){let d=o==="thread.highlight.created"?wo(e):{before:i?wo({...e,...i,id:e.id}):void 0,after:wo(e)};return Zt(t,{threadId:e.thread_id,seq:s,type:o,actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source==="manual"?e.covers_from_task_id:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:d})}function m_(t,e,n,r,o,s){return Zt(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:wo(e),...s??{}}})}var si=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}findThread(e,n,r){let o=drizzleOrm.eq(w.id,n),s=r===void 0?o:r===null?drizzleOrm.and(o,drizzleOrm.isNull(w.workspace_id)):drizzleOrm.and(o,drizzleOrm.eq(w.workspace_id,r));return e.select().from(w).where(s).limit(1).get()}findRegenerationRun(e,n,r){let o=e.select().from(B).where(drizzleOrm.eq(B.id,n)).limit(1).get();if(o&&!(r!==void 0&&!this.findThread(e,o.thread_id,r)))return o}resolveWorkspaceId(e){if(M(e,"threadId"),!Oa.existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:w.workspace_id}).from(w).where(drizzleOrm.eq(w.id,e)).limit(1).get()?.workspaceId??null}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if(M(e,"threadId"),!Oa.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let o=this.findThread(r.db,e,n);return o?hr(o):null}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to read thread snapshot",o)}finally{r.close();}}updateSnapshot(e){u_(e);let n=lr(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||it(`Thread ${e.threadId} not found`);let d=hr(i),c=e.title!==void 0,u=c&&e.title!==d.title,f=c&&i.title_locked!==1,p=e.priority!==void 0&&e.priority!==d.priority,g=e.state!==void 0&&e.state!==d.state,_=u||p||g;if(!_&&!f)return d;let m=i.metadata;(p||g)&&(m=ni(i.metadata,{priority:e.priority,state:e.state}));let k={};if(_&&(k.metadata=m,k.updated_at=r),u&&(k.title=e.title),c&&(k.title_locked=1),s.update(w).set(k).where(e.workspaceId===void 0?drizzleOrm.eq(w.id,e.threadId):e.workspaceId===null?drizzleOrm.and(drizzleOrm.eq(w.id,e.threadId),drizzleOrm.isNull(w.workspace_id)):drizzleOrm.and(drizzleOrm.eq(w.id,e.threadId),drizzleOrm.eq(w.workspace_id,e.workspaceId))).run(),!_){let b={...i,title_locked:1};return hr(b)}let T=pr(s,i.id)+1;fr(s,i.id)||(gr(s,i,n,r,T),T+=1),u&&(Zt(s,{threadId:i.id,seq:T,type:"thread.title.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.title,after:e.title}}),T+=1),p&&(Zt(s,{threadId:i.id,seq:T,type:"thread.priority.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.priority,after:e.priority}}),T+=1),g&&Zt(s,{threadId:i.id,seq:T,type:"thread.state.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.state,after:e.state}});let E={...i,title:u?e.title:i.title,metadata:m,title_locked:c?1:i.title_locked,updated_at:r};return hr(E)},{behavior:"immediate"})}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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(M(e,"threadId"),!Oa.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(${K.seq}), 0)`}).from(K).where(drizzleOrm.eq(K.thread_id,e)).get()?.maxSeq??0:null}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to read latest thread event sequence",o)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if(M(e,"threadId"),M(n,"workspaceId"),!Oa.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({taskId:exports.tasks.id,prompt:exports.tasks.prompt,result:exports.tasks.result,status:exports.tasks.status,startedAt:exports.tasks.started_at,completedAt:exports.tasks.completed_at}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.thread_id,e),drizzleOrm.eq(exports.tasks.workspace_id,n),drizzleOrm.inArray(exports.tasks.status,[...exports.TASK_TERMINAL_STATUSES,"completed","done","error"]),drizzleOrm.or(drizzleOrm.isNull(exports.tasks.parent_task_id),drizzleOrm.eq(exports.tasks.parent_task_id,"")),drizzleOrm.sql`${exports.tasks.result} IS NOT NULL AND length(trim(${exports.tasks.result})) > 0`)).orderBy(drizzleOrm.asc(exports.tasks.started_at),drizzleOrm.asc(exports.tasks.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 exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to read completed thread highlight turns",o)}finally{r.close();}}createHighlightRegenerationRun(e){M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.requestId,"requestId"),M(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&M(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||it(`Thread ${e.threadId} not found`);let i=o.select().from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,s.id),drizzleOrm.eq(B.request_id,e.requestId))).orderBy(drizzleOrm.desc(B.requested_at),drizzleOrm.desc(B.id)).limit(1).get();if(i)return {run:i,created:!1};let d=o.select().from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,s.id),drizzleOrm.inArray(B.status,ko))).orderBy(drizzleOrm.asc(B.requested_at),drizzleOrm.asc(B.id)).limit(1).get();if(d)throw new Ro(d);let c=e.runId??$e("thr");o.insert(B).values({id:c,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 u=o.select().from(B).where(drizzleOrm.eq(B.id,c)).get();if(!u)throw new exports.RepositoryError("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:u,created:!0}},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("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(M(e,"runId"),n!==void 0&&M(n,"workspaceId"),!Oa.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to read highlight regeneration run",o)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if(M(e,"threadId"),M(n,"workspaceId"),M(r,"requestId"),!Oa.existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{return this.findThread(o.db,e,n)?o.db.select().from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,e),drizzleOrm.eq(B.request_id,r))).orderBy(drizzleOrm.desc(B.requested_at),drizzleOrm.desc(B.id)).limit(1).get()??null:null}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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){M(e,"runId"),n!==void 0&&M(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||it(`Highlight regeneration run ${e} not found`),oi(i.status)||Y(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;s.update(B).set({status:"running",started_at:r}).where(drizzleOrm.and(drizzleOrm.eq(B.id,i.id),drizzleOrm.eq(B.status,"queued"))).run();let d=s.select().from(B).where(drizzleOrm.eq(B.id,i.id)).get();if(!d)throw new exports.RepositoryError("DB_ERROR","Highlight regeneration run start did not return a row");return d},{behavior:"immediate"})}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("DB_ERROR","Failed to start highlight regeneration run",s)}finally{o.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){M(e.runId,"runId"),M(e.errorCode,"errorCode"),e.workspaceId!==void 0&&M(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||it(`Highlight regeneration run ${e.runId} not found`),oi(s.status)||Y(`invalid highlight regeneration status: ${s.status}`),s.status==="completed"||s.status==="failed")return s;o.update(B).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(drizzleOrm.and(drizzleOrm.eq(B.id,s.id),drizzleOrm.inArray(B.status,ko))).run();let i=o.select().from(B).where(drizzleOrm.eq(B.id,s.id)).get();if(!i)throw new exports.RepositoryError("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to fail highlight regeneration run",o)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=ru){M(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>o.update(B).set({status:"failed",completed_at:n,error_code:e}).where(drizzleOrm.inArray(B.status,ko)).run().changes,{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to recover interrupted highlight runs",o)}finally{r.close();}}completeHighlightRegenerationRun(e){M(e.runId,"runId"),M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.detectorVersion,"detectorVersion");let n=h_(e.candidates),r=lr(e),o=this.openHandle(true),s=false;try{return o.db.transaction(i=>{let d=this.findRegenerationRun(i,e.runId,e.workspaceId);if((!d||d.thread_id!==e.threadId)&&it(`Highlight regeneration run ${e.runId} not found`),oi(d.status)||Y(`invalid highlight regeneration status: ${d.status}`),d.status==="failed")throw new exports.RepositoryError("CONFLICT","Highlight regeneration run has already failed");if(d.status==="completed")return {run:d,deletedCount:0,createdCount:0,previousAutoCount:d.previous_auto_count??0,newAutoCount:d.new_auto_count??0};s=!0;let c=this.findThread(i,e.threadId,e.workspaceId);c||it(`Thread ${e.threadId} not found`),d.detector_version!==e.detectorVersion&&Y("detectorVersion does not match the regeneration run");let u=i.select().from(H).where(drizzleOrm.eq(H.thread_id,c.id)).orderBy(drizzleOrm.asc(H.created_at),drizzleOrm.asc(H.id)).all(),f=new Set(n.map(P=>P.contentFingerprint)),p=u.filter(P=>P.source==="auto"&&P.status==="active"&&P.revision===0&&!f.has(P.content_fingerprint??"")),g=u.filter(P=>P.source==="auto"&&P.status==="active").length,_=new Set(u.filter(P=>!p.includes(P)&&P.content_fingerprint).map(P=>P.content_fingerprint)),m=n.filter(P=>!_.has(P.contentFingerprint)),k=new Date().toISOString(),T=pr(i,c.id)+1;fr(i,c.id)||(gr(i,c,r,k,T),T+=1);for(let P of p)i.delete(H).where(drizzleOrm.eq(H.id,P.id)).run(),m_(i,P,r,k,T,{runId:e.runId,reason:nu}),T+=1;let E=0,b=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let P of m){let oe=$e("thl");i.insert(H).values({id:oe,thread_id:c.id,source:"auto",kind:P.kind,status:"active",text:P.text,covers_from_task_id:P.coversFromTaskId,covers_to_task_id:P.coversToTaskId,revision:0,created_at:k,updated_at:k,agent_id:b,source_task_id:P.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:P.contentFingerprint,dismissed_at:null}).run();let Pe=i.select().from(H).where(drizzleOrm.eq(H.id,oe)).get();if(!Pe)throw new exports.RepositoryError("DB_ERROR","Regenerated highlight insert did not return a row");To(i,Pe,r,k,"thread.highlight.created",T),T+=1,E+=1;}let y=i.select().from(H).where(drizzleOrm.eq(H.thread_id,c.id)).all().filter(P=>P.source==="auto"&&P.status==="active").length;Zt(i,{threadId:c.id,seq:T,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:k,payload:{runId:d.id,detectorVersion:e.detectorVersion,previousAutoCount:g,newAutoCount:y,deletedCount:p.length,createdCount:E}}),i.update(B).set({status:"completed",started_at:d.started_at??k,completed_at:k,error_code:null,previous_auto_count:g,new_auto_count:y}).where(drizzleOrm.and(drizzleOrm.eq(B.id,d.id),drizzleOrm.inArray(B.status,ko))).run();let N=i.select().from(B).where(drizzleOrm.eq(B.id,d.id)).get();if(!N)throw new exports.RepositoryError("DB_ERROR","Highlight regeneration completion did not return a row");return {run:N,deletedCount:p.length,createdCount:E,previousAutoCount:g,newAutoCount:y}},{behavior:"immediate"})}catch(i){if(s)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:ou});}catch{}throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("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;M(o.threadId,"threadId"),M(o.workspaceId,"workspaceId");let s=l_(o);if(!Oa.existsSync(this.resolveDbPath()))return null;let i=this.openHandle(false);try{if(!this.findThread(i.db,o.threadId,o.workspaceId))return null;let d=i.db.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${K.seq}), 0)`}).from(K).where(drizzleOrm.eq(K.thread_id,o.threadId)).get()?.maxSeq??0,c;o.beforeSeq!==void 0?c=i.db.select().from(K).where(drizzleOrm.and(drizzleOrm.eq(K.thread_id,o.threadId),drizzleOrm.lt(K.seq,o.beforeSeq))).orderBy(drizzleOrm.desc(K.seq)).limit(s+1).all().reverse():o.afterSeq!==void 0?c=i.db.select().from(K).where(drizzleOrm.and(drizzleOrm.eq(K.thread_id,o.threadId),drizzleOrm.sql`${K.seq} > ${o.afterSeq}`)).orderBy(drizzleOrm.asc(K.seq)).limit(s+1).all():c=i.db.select().from(K).where(drizzleOrm.eq(K.thread_id,o.threadId)).orderBy(drizzleOrm.desc(K.seq)).limit(s+1).all().reverse();let u=c.length>s,f=o.afterSeq!==void 0?c.slice(0,s):u?c.slice(1):c,p=!1,g=f[0];return g&&(p=!!i.db.select({id:K.id}).from(K).where(drizzleOrm.and(drizzleOrm.eq(K.thread_id,o.threadId),drizzleOrm.lt(K.seq,g.seq))).limit(1).get()),{items:f,latestSeq:d,hasMoreOlder:p}}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to list thread timeline",d)}finally{i.close();}}listEvents(e,n,r){return this.listTimeline(e,n,r)}getTimeline(e,n,r){return this.listTimeline(e,n,r)}createHighlight(e){let n=f_(e),r=lr(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(i=>{let d=this.findThread(i,e.threadId,e.workspaceId);if(d||it(`Thread ${e.threadId} not found`),n.source==="auto"){let g=i.select().from(H).where(drizzleOrm.and(drizzleOrm.eq(H.thread_id,e.threadId),drizzleOrm.eq(H.source_task_id,n.sourceTaskId),drizzleOrm.eq(H.detector_version,n.detectorVersion),drizzleOrm.eq(H.content_fingerprint,n.contentFingerprint))).orderBy(drizzleOrm.asc(H.created_at),drizzleOrm.asc(H.id)).limit(1).get();if(g)return g}let c=e.id??$e("thl"),u={id:c,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(H).values(u).run();let f=i.select().from(H).where(drizzleOrm.eq(H.id,c)).get();if(!f)throw new exports.RepositoryError("DB_ERROR","Highlight insert did not return a row");let p=pr(i,d.id)+1;return fr(i,d.id)||(gr(i,d,r,o,p),p+=1),To(i,f,r,o,"thread.highlight.created",p),f},{behavior:"immediate"})}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("DB_ERROR","Failed to create thread highlight",i)}finally{s.close();}}updateHighlight(e){M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&Y("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&Y("highlight update requires at least one field"),e.kind!==void 0&&ai(e.kind);let n=e.text===void 0?void 0:ii(e.text),r=lr(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(i=>{let d=this.findThread(i,e.threadId,e.workspaceId);d||it(`Thread ${e.threadId} not found`);let c=i.select().from(H).where(drizzleOrm.and(drizzleOrm.eq(H.id,e.highlightId),drizzleOrm.eq(H.thread_id,d.id))).limit(1).get();if(c||it(`Highlight ${e.highlightId} not found`),c.revision!==e.expectedRevision)throw new xn(d.id,c.id,e.expectedRevision,c.revision);if(c.status!=="active")throw new xn(d.id,c.id,e.expectedRevision,c.revision);let u=e.kind??c.kind,f=n??c.text,p=e.coversFromTaskId??c.covers_from_task_id,g=e.coversToTaskId??c.covers_to_task_id;(!f||p.length===0||g.length===0)&&Y("highlight projection is incomplete");let _=u!==c.kind||f!==c.text||p!==c.covers_from_task_id||g!==c.covers_to_task_id,m=r.actorType==="user"&&c.source==="auto"&&_?"manual":c.source;if(!(_||m!==c.source))return c;let T=c.revision+1;i.update(H).set({source:m,kind:u,text:f,covers_from_task_id:p,covers_to_task_id:g,revision:T,updated_at:o}).where(drizzleOrm.and(drizzleOrm.eq(H.id,c.id),drizzleOrm.eq(H.revision,c.revision))).run();let E=i.select().from(H).where(drizzleOrm.eq(H.id,c.id)).get();if(!E)throw new exports.RepositoryError("DB_ERROR","Highlight update did not return a row");let b=pr(i,d.id)+1;return fr(i,d.id)||(gr(i,d,r,o,b),b+=1),To(i,E,r,o,"thread.highlight.updated",b,c),E},{behavior:"immediate"})}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("DB_ERROR","Failed to update thread highlight",i)}finally{s.close();}}dismissHighlight(e){M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&Y("expectedRevision must be a non-negative integer");let n=lr(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||it(`Thread ${e.threadId} not found`);let d=s.select().from(H).where(drizzleOrm.and(drizzleOrm.eq(H.id,e.highlightId),drizzleOrm.eq(H.thread_id,i.id))).limit(1).get();if(d||it(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new xn(i.id,d.id,e.expectedRevision,d.revision);if(d.status==="dismissed")return d;let c=d.revision+1;s.update(H).set({status:"dismissed",text:null,revision:c,updated_at:r,dismissed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(H.id,d.id),drizzleOrm.eq(H.revision,d.revision))).run();let u=s.select().from(H).where(drizzleOrm.eq(H.id,d.id)).get();if(!u)throw new exports.RepositoryError("DB_ERROR","Highlight dismissal did not return a row");let f=pr(s,i.id)+1;return fr(s,i.id)||(gr(s,i,n,r,f),f+=1),To(s,u,n,r,"thread.highlight.deleted",f,d),u},{behavior:"immediate"})}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("DB_ERROR","Failed to dismiss thread highlight",s)}finally{o.close();}}listActiveHighlights(e,n,r={}){if(M(e,"threadId"),M(n,"workspaceId"),r.taskId!==void 0&&M(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&M(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&M(r.coversToTaskId,"coversToTaskId"),!Oa.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(H).where(drizzleOrm.and(drizzleOrm.eq(H.thread_id,e),drizzleOrm.eq(H.status,"active"))).orderBy(drizzleOrm.asc(H.created_at),drizzleOrm.asc(H.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return i;let d=o.db.all(drizzleOrm.sql`
508
+ `),u},{behavior:"immediate"})}}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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(w).set({last_message:n,updated_at:s}).where(drizzleOrm.eq(w.id,e)).run();}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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(w).set(o).where(drizzleOrm.eq(w.id,e)).run();}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("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 Qt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(o).some(c=>c!=="priority"&&c!=="state"))return new Qt("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 Qt("THREAD_TITLE_PATCH_EMPTY","Thread-title metadata patch must change priority or state");for(let c of [i.priority,i.state])if(c!=null&&(typeof c!="string"||c.length===0))return new Qt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let d=this.openHandle(true);try{let c=r?drizzleOrm.and(drizzleOrm.eq(w.id,e),drizzleOrm.eq(w.workspace_id,r)):drizzleOrm.eq(w.id,e);return d.db.transaction(u=>{let f=u.select({metadata:w.metadata}).from(w).where(c).get();if(!f)return null;let p=Nn(f.metadata),g=p.threadTitle,_=g&&typeof g=="object"&&!Array.isArray(g)?{...g}:{};i.priority===null?delete _.priority:i.priority!==void 0&&(_.priority=i.priority),i.state===null?delete _.state:i.state!==void 0&&(_.state=i.state),Object.keys(_).length>0?p.threadTitle=_:delete p.threadTitle;let m=Object.keys(p).length>0?JSON.stringify(p):null,k=new Date().toISOString();u.update(w).set({metadata:m,updated_at:k}).where(c).run();let T=u.select({metadata:w.metadata}).from(w).where(c).get();if(!T)throw new exports.RepositoryError("DB_ERROR","Thread-title metadata update could not be read back");let E=jh(T.metadata);return {threadId:e,priority:E.priority,state:E.state}},{behavior:"immediate"})}catch(c){throw c instanceof exports.RepositoryError?c:new exports.RepositoryError("DB_ERROR","Failed to patch thread-title metadata",c)}finally{d.close();}}togglePin(e,n){let r=this.openHandle(true);try{let o=n?drizzleOrm.and(drizzleOrm.eq(w.id,e),drizzleOrm.eq(w.workspace_id,n)):drizzleOrm.eq(w.id,e);return r.db.transaction(s=>{let i=s.select({pinned:w.pinned,metadata:w.metadata}).from(w).where(o).get();if(!i)return null;let d=i.pinned?0:1,c=Nn(i.metadata);if(d){let u=n?drizzleOrm.and(drizzleOrm.eq(w.pinned,1),drizzleOrm.eq(w.workspace_id,n)):drizzleOrm.eq(w.pinned,1),f=s.select({metadata:w.metadata}).from(w).where(u).all(),p=null;for(let g of f){let _=Nn(g.metadata);typeof _.pinOrder=="number"&&(p===null||_.pinOrder<p)&&(p=_.pinOrder);}c.pinOrder=p===null?0:p-1;}else delete c.pinOrder;return s.update(w).set({pinned:d,metadata:Object.keys(c).length>0?JSON.stringify(c):null}).where(o).run(),{pinned:!!d}},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("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(w.id,e[s]),drizzleOrm.eq(w.workspace_id,n)):drizzleOrm.eq(w.id,e[s]),d=o.select({metadata:w.metadata}).from(w).where(i).get();if(!d)continue;let c=Nn(d.metadata);c.pinOrder=s+1,o.update(w).set({metadata:JSON.stringify(c)}).where(i).run();}},{behavior:"immediate"});}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("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(w.id,e),drizzleOrm.eq(w.workspace_id,n)):drizzleOrm.eq(w.id,e),s=r.db.select({starred:w.starred}).from(w).where(o).get();if(!s)return null;let i=s.starred?0:1;return r.db.update(w).set({starred:i}).where(o).run(),{starred:!!i}}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to toggle star",o)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,o){let i=this.openHandle(true);try{let d=n?drizzleOrm.and(drizzleOrm.eq(w.id,e),drizzleOrm.eq(w.workspace_id,n)):drizzleOrm.eq(w.id,e);return i.db.transaction(u=>{let f=u.select({metadata:w.metadata}).from(w).where(d).get();if(!f)return null;let p=f.metadata?JSON.parse(f.metadata):{},g=p.overdrive??{},_=o?.defaultTurns??g.defaultTurns??3,m=o?.updatedBy??"ui",k=new Date().toISOString(),T,E,b,L;switch(r){case "enable-count":{let y=o?.turns??_,C=o?.consumeCurrent?Math.max(y-1,0):y;T=C>0?"count":"off",E=C,b=!0,L="count";break}case "enable-latch":{T="latch",E=0,b=!0,L="latch";break}case "disable":{T="off",E=0,b=!1;break}default:{let y=g.state??"off",C=typeof g.remaining=="number"?g.remaining:0;if(y==="count"&&C>0){let P=C-1;P<=0?(T="off",E=0):(T="count",E=P),b=!0,L="count";}else y==="latch"?(T="latch",E=0,b=!0,L="latch"):(T="off",E=0,b=!1);break}}return p.overdrive={state:T,remaining:E,defaultTurns:_,updatedAt:k,updatedBy:m},u.update(w).set({metadata:JSON.stringify(p),updated_at:k}).where(d).run(),{applied:b,appliedMode:L,state:T,remaining:E}},{behavior:"immediate"})}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to resolve overdrive",d)}finally{i.close();}}};h();se();fe();ce();pe();ue();h();var Vc=["urgent","high","medium","low"],Jc=["investigating","in-progress","in-review","on-hold","done"],ar="custom:";var Wh=new Set(Vc),Gh=new Set(Jc),zh={urgent:"U \uAE34\uAE09 Urgent",high:"P0 \uAE09\uD568 High",medium:"P1 \uC911\uC694 Medium",low:"P2 \uBCF4\uD1B5 Low"},ei={investigating:"\uC870\uC0AC\uC911 Looking into","in-progress":"\uC9C4\uD589\uC911 In progress","in-review":"\uAC80\uD1A0\uC911 In review","on-hold":"\uBCF4\uB958 On hold",done:"\uC644\uB8CC Done"};function Kc(t,e){return !e||e.includes(t)?e??t:`${t} ${e}`}function dr(t){return typeof t=="string"&&Wh.has(t)}function cr(t){if(typeof t!="string")return false;if(Gh.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(ar))return false;let e=t.slice(ar.length);return e.length>=1&&e.length<=20}function Yc(t){if(t.startsWith(ar))return t.slice(ar.length)}function ti(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 Kh(t){let e=ti(t);return !!e&&Object.prototype.hasOwnProperty.call(e,"threadTitle")}function mo(t){let e=ti(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,o={};return dr(r.priority)&&(o.priority=r.priority),cr(r.state)&&(o.state=r.state),o}function ni(t,e){let n=ti(t)??{},r={...mo(t)};return e.priority===null?delete r.priority:e.priority!==void 0&&(r.priority=e.priority),e.state===null?delete r.state:e.state!==void 0&&(r.state=e.state),r.priority===void 0&&r.state===void 0?delete n.threadTitle:n.threadTitle=r,Object.keys(n).length===0?null:JSON.stringify(n)}function Vh(t,e=new Map){let n=[];return t.priority&&n.push(Kc(zh[t.priority],e.get(t.priority))),t.state&&(t.state.startsWith(ar)?n.push(Yc(t.state)??""):ei[t.state]?n.push(Kc(ei[t.state],e.get(t.state))):e.has(t.state)?n.push(t.state,e.get(t.state)??""):t.state.startsWith("c_")?n.push(t.state):n.push(ei[t.state]??"")),n.filter(Boolean).join(" ")}function Xc(t,e){if(!t||t.trim().length===0)return;let n=new Set,r=false,o=false;for(let s of t.split(",")){let i=s.trim();if(i){if(i==="none"){r=true,o=true;continue}e(i)&&(n.add(i),o=true);}}if(o)return {values:n,includeNone:r}}function Jh(t){return Xc(t,dr)}function Yh(t){return Xc(t,cr)}function Xh(t,e){return e?t?e.values.has(t):e.includeNone:true}Xn();var nu="regeneration_replaced",n_="THREAD_HIGHLIGHT_REGENERATION_NO_ELIGIBLE_TURNS",ru="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED",r_="THREAD_HIGHLIGHT_REGENERATION_DETECTION_FAILED",ou="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",yo=class extends exports.RepositoryError{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;}},Pn=class extends yo{},Ro=class extends exports.RepositoryError{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},o_=new Set(oa),s_=new Set(ra),i_=new Set(sa),a_=new Set(ia),d_=50,Zc=100,eu=280,tu=40,c_=new Set(aa),ko=["queued","running"];function oi(t){return c_.has(t)}function Y(t){throw new exports.RepositoryError("VALIDATION",t)}function it(t){throw new exports.RepositoryError("NOT_FOUND",t)}function H(t,e){(typeof t!="string"||t.trim().length===0)&&Y(`${e} is required`);}function lr(t={}){let e=t.actor??t,n=e.actorType??"system";return o_.has(n)||Y(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&Y("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function u_(t){H(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&H(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&Y("title must not be empty"),t.title.length>120&&Y("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!dr(t.priority)&&Y(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!cr(t.state)&&Y(`invalid state: ${String(t.state)}`);}function l_(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&Y("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)&&Y(`${n} must be a non-negative integer`);let e=t.limit??d_;return (!Number.isInteger(e)||e<1||e>Zc)&&Y(`limit must be between 1 and ${Zc}`),e}function ii(t){typeof t!="string"&&Y("text is required");let e=t.trim();return e.length===0&&Y("text must not be empty"),e.length>eu&&Y(`text must be at most ${eu} characters`),e}function Et(t,e){return H(t??"",e),t}function ai(t){a_.has(t)||Y(`invalid highlight kind: ${String(t)}`);}function p_(t){i_.has(t)||Y(`invalid highlight source: ${String(t)}`);}function f_(t){H(t.threadId,"threadId"),H(t.workspaceId,"workspaceId");let e=t.source??"manual";p_(e),ai(t.kind);let n=ii(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,o=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let f=t.taskId??(r&&o&&r===o?r:void 0),p=Et(f,"taskId");return (r!==p||o!==p)&&Y("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=Et(r,"coversFromTaskId"),i=Et(o,"coversToTaskId"),d=t.sourceTaskId??s,c=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),u=t.contentFingerprint??t.idempotencyKey??null;return Et(d??void 0,"sourceTaskId"),Et(c??void 0,"detectorVersion"),Et(u??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:s,coversToTaskId:i,agentId:t.agentId??null,sourceTaskId:d,detectorVersion:c,contentFingerprint:u}}function g_(t,e){(!t||typeof t!="object")&&Y(`candidates[${e}] is required`),ai(t.kind);let n=ii(t.text),r=Et(t.anchorTaskId,`candidates[${e}].anchorTaskId`),o=Et(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),s=Et(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||Ta("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s}));return H(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s,contentFingerprint:i}}function h_(t){Array.isArray(t)||Y("candidates must be an array"),t.length>tu&&Y(`candidates must contain at most ${tu} items`);let e=new Map;for(let[n,r]of t.entries()){let o=g_(r,n);e.set(o.contentFingerprint,o);}return [...e.values()]}function hr(t){let e=mo(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 __(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&Y("event payload must be a JSON object"),e}catch(e){throw new exports.RepositoryError("VALIDATION","event payload must be JSON serializable",e)}}function pr(t,e){return t.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${K.seq}), 0)`}).from(K).where(drizzleOrm.eq(K.thread_id,e)).get()?.maxSeq??0}function fr(t,e){return !!t.select({id:K.id}).from(K).where(drizzleOrm.eq(K.thread_id,e)).limit(1).get()}function Zt(t,e){s_.has(e.type)||Y(`invalid thread event type: ${String(e.type)}`);let n=$e("the");t.insert(K).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:__(e.payload),created_at:e.createdAt}).run();let r=t.select().from(K).where(drizzleOrm.eq(K.id,n)).get();if(!r)throw new exports.RepositoryError("DB_ERROR","Thread event insert did not return a row");return r}function gr(t,e,n,r,o){let s=hr(e);Zt(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 wo(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 To(t,e,n,r,o,s,i){let d=o==="thread.highlight.created"?wo(e):{before:i?wo({...e,...i,id:e.id}):void 0,after:wo(e)};return Zt(t,{threadId:e.thread_id,seq:s,type:o,actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source==="manual"?e.covers_from_task_id:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:d})}function m_(t,e,n,r,o,s){return Zt(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:wo(e),...s??{}}})}var si=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}findThread(e,n,r){let o=drizzleOrm.eq(w.id,n),s=r===void 0?o:r===null?drizzleOrm.and(o,drizzleOrm.isNull(w.workspace_id)):drizzleOrm.and(o,drizzleOrm.eq(w.workspace_id,r));return e.select().from(w).where(s).limit(1).get()}findRegenerationRun(e,n,r){let o=e.select().from(B).where(drizzleOrm.eq(B.id,n)).limit(1).get();if(o&&!(r!==void 0&&!this.findThread(e,o.thread_id,r)))return o}resolveWorkspaceId(e){if(H(e,"threadId"),!Oa.existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:w.workspace_id}).from(w).where(drizzleOrm.eq(w.id,e)).limit(1).get()?.workspaceId??null}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if(H(e,"threadId"),!Oa.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let o=this.findThread(r.db,e,n);return o?hr(o):null}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to read thread snapshot",o)}finally{r.close();}}updateSnapshot(e){u_(e);let n=lr(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||it(`Thread ${e.threadId} not found`);let d=hr(i),c=e.title!==void 0,u=c&&e.title!==d.title,f=c&&i.title_locked!==1,p=e.priority!==void 0&&e.priority!==d.priority,g=e.state!==void 0&&e.state!==d.state,_=u||p||g;if(!_&&!f)return d;let m=i.metadata;(p||g)&&(m=ni(i.metadata,{priority:e.priority,state:e.state}));let k={};if(_&&(k.metadata=m,k.updated_at=r),u&&(k.title=e.title),c&&(k.title_locked=1),s.update(w).set(k).where(e.workspaceId===void 0?drizzleOrm.eq(w.id,e.threadId):e.workspaceId===null?drizzleOrm.and(drizzleOrm.eq(w.id,e.threadId),drizzleOrm.isNull(w.workspace_id)):drizzleOrm.and(drizzleOrm.eq(w.id,e.threadId),drizzleOrm.eq(w.workspace_id,e.workspaceId))).run(),!_){let b={...i,title_locked:1};return hr(b)}let T=pr(s,i.id)+1;fr(s,i.id)||(gr(s,i,n,r,T),T+=1),u&&(Zt(s,{threadId:i.id,seq:T,type:"thread.title.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.title,after:e.title}}),T+=1),p&&(Zt(s,{threadId:i.id,seq:T,type:"thread.priority.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.priority,after:e.priority}}),T+=1),g&&Zt(s,{threadId:i.id,seq:T,type:"thread.state.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.state,after:e.state}});let E={...i,title:u?e.title:i.title,metadata:m,title_locked:c?1:i.title_locked,updated_at:r};return hr(E)},{behavior:"immediate"})}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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(H(e,"threadId"),!Oa.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(${K.seq}), 0)`}).from(K).where(drizzleOrm.eq(K.thread_id,e)).get()?.maxSeq??0:null}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to read latest thread event sequence",o)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if(H(e,"threadId"),H(n,"workspaceId"),!Oa.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({taskId:exports.tasks.id,prompt:exports.tasks.prompt,result:exports.tasks.result,status:exports.tasks.status,startedAt:exports.tasks.started_at,completedAt:exports.tasks.completed_at}).from(exports.tasks).where(drizzleOrm.and(drizzleOrm.eq(exports.tasks.thread_id,e),drizzleOrm.eq(exports.tasks.workspace_id,n),drizzleOrm.inArray(exports.tasks.status,[...exports.TASK_TERMINAL_STATUSES,"completed","done","error"]),drizzleOrm.or(drizzleOrm.isNull(exports.tasks.parent_task_id),drizzleOrm.eq(exports.tasks.parent_task_id,"")),drizzleOrm.sql`${exports.tasks.result} IS NOT NULL AND length(trim(${exports.tasks.result})) > 0`)).orderBy(drizzleOrm.asc(exports.tasks.started_at),drizzleOrm.asc(exports.tasks.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 exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to read completed thread highlight turns",o)}finally{r.close();}}createHighlightRegenerationRun(e){H(e.threadId,"threadId"),H(e.workspaceId,"workspaceId"),H(e.requestId,"requestId"),H(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&H(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||it(`Thread ${e.threadId} not found`);let i=o.select().from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,s.id),drizzleOrm.eq(B.request_id,e.requestId))).orderBy(drizzleOrm.desc(B.requested_at),drizzleOrm.desc(B.id)).limit(1).get();if(i)return {run:i,created:!1};let d=o.select().from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,s.id),drizzleOrm.inArray(B.status,ko))).orderBy(drizzleOrm.asc(B.requested_at),drizzleOrm.asc(B.id)).limit(1).get();if(d)throw new Ro(d);let c=e.runId??$e("thr");o.insert(B).values({id:c,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 u=o.select().from(B).where(drizzleOrm.eq(B.id,c)).get();if(!u)throw new exports.RepositoryError("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:u,created:!0}},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("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(H(e,"runId"),n!==void 0&&H(n,"workspaceId"),!Oa.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to read highlight regeneration run",o)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if(H(e,"threadId"),H(n,"workspaceId"),H(r,"requestId"),!Oa.existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{return this.findThread(o.db,e,n)?o.db.select().from(B).where(drizzleOrm.and(drizzleOrm.eq(B.thread_id,e),drizzleOrm.eq(B.request_id,r))).orderBy(drizzleOrm.desc(B.requested_at),drizzleOrm.desc(B.id)).limit(1).get()??null:null}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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){H(e,"runId"),n!==void 0&&H(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||it(`Highlight regeneration run ${e} not found`),oi(i.status)||Y(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;s.update(B).set({status:"running",started_at:r}).where(drizzleOrm.and(drizzleOrm.eq(B.id,i.id),drizzleOrm.eq(B.status,"queued"))).run();let d=s.select().from(B).where(drizzleOrm.eq(B.id,i.id)).get();if(!d)throw new exports.RepositoryError("DB_ERROR","Highlight regeneration run start did not return a row");return d},{behavior:"immediate"})}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("DB_ERROR","Failed to start highlight regeneration run",s)}finally{o.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){H(e.runId,"runId"),H(e.errorCode,"errorCode"),e.workspaceId!==void 0&&H(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||it(`Highlight regeneration run ${e.runId} not found`),oi(s.status)||Y(`invalid highlight regeneration status: ${s.status}`),s.status==="completed"||s.status==="failed")return s;o.update(B).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(drizzleOrm.and(drizzleOrm.eq(B.id,s.id),drizzleOrm.inArray(B.status,ko))).run();let i=o.select().from(B).where(drizzleOrm.eq(B.id,s.id)).get();if(!i)throw new exports.RepositoryError("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to fail highlight regeneration run",o)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=ru){H(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>o.update(B).set({status:"failed",completed_at:n,error_code:e}).where(drizzleOrm.inArray(B.status,ko)).run().changes,{behavior:"immediate"})}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to recover interrupted highlight runs",o)}finally{r.close();}}completeHighlightRegenerationRun(e){H(e.runId,"runId"),H(e.threadId,"threadId"),H(e.workspaceId,"workspaceId"),H(e.detectorVersion,"detectorVersion");let n=h_(e.candidates),r=lr(e),o=this.openHandle(true),s=false;try{return o.db.transaction(i=>{let d=this.findRegenerationRun(i,e.runId,e.workspaceId);if((!d||d.thread_id!==e.threadId)&&it(`Highlight regeneration run ${e.runId} not found`),oi(d.status)||Y(`invalid highlight regeneration status: ${d.status}`),d.status==="failed")throw new exports.RepositoryError("CONFLICT","Highlight regeneration run has already failed");if(d.status==="completed")return {run:d,deletedCount:0,createdCount:0,previousAutoCount:d.previous_auto_count??0,newAutoCount:d.new_auto_count??0};s=!0;let c=this.findThread(i,e.threadId,e.workspaceId);c||it(`Thread ${e.threadId} not found`),d.detector_version!==e.detectorVersion&&Y("detectorVersion does not match the regeneration run");let u=i.select().from($).where(drizzleOrm.eq($.thread_id,c.id)).orderBy(drizzleOrm.asc($.created_at),drizzleOrm.asc($.id)).all(),f=new Set(n.map(P=>P.contentFingerprint)),p=u.filter(P=>P.source==="auto"&&P.status==="active"&&P.revision===0&&!f.has(P.content_fingerprint??"")),g=u.filter(P=>P.source==="auto"&&P.status==="active").length,_=new Set(u.filter(P=>!p.includes(P)&&P.content_fingerprint).map(P=>P.content_fingerprint)),m=n.filter(P=>!_.has(P.contentFingerprint)),k=new Date().toISOString(),T=pr(i,c.id)+1;fr(i,c.id)||(gr(i,c,r,k,T),T+=1);for(let P of p)i.delete($).where(drizzleOrm.eq($.id,P.id)).run(),m_(i,P,r,k,T,{runId:e.runId,reason:nu}),T+=1;let E=0,b=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let P of m){let oe=$e("thl");i.insert($).values({id:oe,thread_id:c.id,source:"auto",kind:P.kind,status:"active",text:P.text,covers_from_task_id:P.coversFromTaskId,covers_to_task_id:P.coversToTaskId,revision:0,created_at:k,updated_at:k,agent_id:b,source_task_id:P.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:P.contentFingerprint,dismissed_at:null}).run();let Pe=i.select().from($).where(drizzleOrm.eq($.id,oe)).get();if(!Pe)throw new exports.RepositoryError("DB_ERROR","Regenerated highlight insert did not return a row");To(i,Pe,r,k,"thread.highlight.created",T),T+=1,E+=1;}let y=i.select().from($).where(drizzleOrm.eq($.thread_id,c.id)).all().filter(P=>P.source==="auto"&&P.status==="active").length;Zt(i,{threadId:c.id,seq:T,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:k,payload:{runId:d.id,detectorVersion:e.detectorVersion,previousAutoCount:g,newAutoCount:y,deletedCount:p.length,createdCount:E}}),i.update(B).set({status:"completed",started_at:d.started_at??k,completed_at:k,error_code:null,previous_auto_count:g,new_auto_count:y}).where(drizzleOrm.and(drizzleOrm.eq(B.id,d.id),drizzleOrm.inArray(B.status,ko))).run();let C=i.select().from(B).where(drizzleOrm.eq(B.id,d.id)).get();if(!C)throw new exports.RepositoryError("DB_ERROR","Highlight regeneration completion did not return a row");return {run:C,deletedCount:p.length,createdCount:E,previousAutoCount:g,newAutoCount:y}},{behavior:"immediate"})}catch(i){if(s)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:ou});}catch{}throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("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;H(o.threadId,"threadId"),H(o.workspaceId,"workspaceId");let s=l_(o);if(!Oa.existsSync(this.resolveDbPath()))return null;let i=this.openHandle(false);try{if(!this.findThread(i.db,o.threadId,o.workspaceId))return null;let d=i.db.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${K.seq}), 0)`}).from(K).where(drizzleOrm.eq(K.thread_id,o.threadId)).get()?.maxSeq??0,c;o.beforeSeq!==void 0?c=i.db.select().from(K).where(drizzleOrm.and(drizzleOrm.eq(K.thread_id,o.threadId),drizzleOrm.lt(K.seq,o.beforeSeq))).orderBy(drizzleOrm.desc(K.seq)).limit(s+1).all().reverse():o.afterSeq!==void 0?c=i.db.select().from(K).where(drizzleOrm.and(drizzleOrm.eq(K.thread_id,o.threadId),drizzleOrm.sql`${K.seq} > ${o.afterSeq}`)).orderBy(drizzleOrm.asc(K.seq)).limit(s+1).all():c=i.db.select().from(K).where(drizzleOrm.eq(K.thread_id,o.threadId)).orderBy(drizzleOrm.desc(K.seq)).limit(s+1).all().reverse();let u=c.length>s,f=o.afterSeq!==void 0?c.slice(0,s):u?c.slice(1):c,p=!1,g=f[0];return g&&(p=!!i.db.select({id:K.id}).from(K).where(drizzleOrm.and(drizzleOrm.eq(K.thread_id,o.threadId),drizzleOrm.lt(K.seq,g.seq))).limit(1).get()),{items:f,latestSeq:d,hasMoreOlder:p}}catch(d){throw d instanceof exports.RepositoryError?d:new exports.RepositoryError("DB_ERROR","Failed to list thread timeline",d)}finally{i.close();}}listEvents(e,n,r){return this.listTimeline(e,n,r)}getTimeline(e,n,r){return this.listTimeline(e,n,r)}createHighlight(e){let n=f_(e),r=lr(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(i=>{let d=this.findThread(i,e.threadId,e.workspaceId);if(d||it(`Thread ${e.threadId} not found`),n.source==="auto"){let g=i.select().from($).where(drizzleOrm.and(drizzleOrm.eq($.thread_id,e.threadId),drizzleOrm.eq($.source_task_id,n.sourceTaskId),drizzleOrm.eq($.detector_version,n.detectorVersion),drizzleOrm.eq($.content_fingerprint,n.contentFingerprint))).orderBy(drizzleOrm.asc($.created_at),drizzleOrm.asc($.id)).limit(1).get();if(g)return g}let c=e.id??$e("thl"),u={id:c,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($).values(u).run();let f=i.select().from($).where(drizzleOrm.eq($.id,c)).get();if(!f)throw new exports.RepositoryError("DB_ERROR","Highlight insert did not return a row");let p=pr(i,d.id)+1;return fr(i,d.id)||(gr(i,d,r,o,p),p+=1),To(i,f,r,o,"thread.highlight.created",p),f},{behavior:"immediate"})}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("DB_ERROR","Failed to create thread highlight",i)}finally{s.close();}}updateHighlight(e){H(e.threadId,"threadId"),H(e.workspaceId,"workspaceId"),H(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&Y("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&Y("highlight update requires at least one field"),e.kind!==void 0&&ai(e.kind);let n=e.text===void 0?void 0:ii(e.text),r=lr(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(i=>{let d=this.findThread(i,e.threadId,e.workspaceId);d||it(`Thread ${e.threadId} not found`);let c=i.select().from($).where(drizzleOrm.and(drizzleOrm.eq($.id,e.highlightId),drizzleOrm.eq($.thread_id,d.id))).limit(1).get();if(c||it(`Highlight ${e.highlightId} not found`),c.revision!==e.expectedRevision)throw new Pn(d.id,c.id,e.expectedRevision,c.revision);if(c.status!=="active")throw new Pn(d.id,c.id,e.expectedRevision,c.revision);let u=e.kind??c.kind,f=n??c.text,p=e.coversFromTaskId??c.covers_from_task_id,g=e.coversToTaskId??c.covers_to_task_id;(!f||p.length===0||g.length===0)&&Y("highlight projection is incomplete");let _=u!==c.kind||f!==c.text||p!==c.covers_from_task_id||g!==c.covers_to_task_id,m=r.actorType==="user"&&c.source==="auto"&&_?"manual":c.source;if(!(_||m!==c.source))return c;let T=c.revision+1;i.update($).set({source:m,kind:u,text:f,covers_from_task_id:p,covers_to_task_id:g,revision:T,updated_at:o}).where(drizzleOrm.and(drizzleOrm.eq($.id,c.id),drizzleOrm.eq($.revision,c.revision))).run();let E=i.select().from($).where(drizzleOrm.eq($.id,c.id)).get();if(!E)throw new exports.RepositoryError("DB_ERROR","Highlight update did not return a row");let b=pr(i,d.id)+1;return fr(i,d.id)||(gr(i,d,r,o,b),b+=1),To(i,E,r,o,"thread.highlight.updated",b,c),E},{behavior:"immediate"})}catch(i){throw i instanceof exports.RepositoryError?i:new exports.RepositoryError("DB_ERROR","Failed to update thread highlight",i)}finally{s.close();}}dismissHighlight(e){H(e.threadId,"threadId"),H(e.workspaceId,"workspaceId"),H(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&Y("expectedRevision must be a non-negative integer");let n=lr(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||it(`Thread ${e.threadId} not found`);let d=s.select().from($).where(drizzleOrm.and(drizzleOrm.eq($.id,e.highlightId),drizzleOrm.eq($.thread_id,i.id))).limit(1).get();if(d||it(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new Pn(i.id,d.id,e.expectedRevision,d.revision);if(d.status==="dismissed")return d;let c=d.revision+1;s.update($).set({status:"dismissed",text:null,revision:c,updated_at:r,dismissed_at:r}).where(drizzleOrm.and(drizzleOrm.eq($.id,d.id),drizzleOrm.eq($.revision,d.revision))).run();let u=s.select().from($).where(drizzleOrm.eq($.id,d.id)).get();if(!u)throw new exports.RepositoryError("DB_ERROR","Highlight dismissal did not return a row");let f=pr(s,i.id)+1;return fr(s,i.id)||(gr(s,i,n,r,f),f+=1),To(s,u,n,r,"thread.highlight.deleted",f,d),u},{behavior:"immediate"})}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("DB_ERROR","Failed to dismiss thread highlight",s)}finally{o.close();}}listActiveHighlights(e,n,r={}){if(H(e,"threadId"),H(n,"workspaceId"),r.taskId!==void 0&&H(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&H(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&H(r.coversToTaskId,"coversToTaskId"),!Oa.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($).where(drizzleOrm.and(drizzleOrm.eq($.thread_id,e),drizzleOrm.eq($.status,"active"))).orderBy(drizzleOrm.asc($.created_at),drizzleOrm.asc($.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return i;let d=o.db.all(drizzleOrm.sql`
507
509
  SELECT id, started_at FROM tasks WHERE thread_id = ${e}
508
510
  ORDER BY started_at ASC, id ASC
509
- `),c=new Map(d.map((g,_)=>[g.id,_])),u=r.taskId===void 0?void 0:c.get(r.taskId),f=r.coversFromTaskId===void 0?void 0:c.get(r.coversFromTaskId),p=r.coversToTaskId===void 0?void 0:c.get(r.coversToTaskId);return i.filter(g=>{let _=c.get(g.covers_from_task_id),m=c.get(g.covers_to_task_id);if(_===void 0||m===void 0)return !1;let k=Math.min(_,m),T=Math.max(_,m);return !(u!==void 0&&(u<k||u>T)||f!==void 0&&T<f||p!==void 0&&k>p)})}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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)}};h();se();fe();ce();pe();ue();var di=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}insertSpan(e){let n=this.openHandle(true);try{n.db.insert(Tt).values(e).run();}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to insert span",r)}finally{n.close();}}findByTaskId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(Tt).where(drizzleOrm.eq(Tt.task_id,e)).all()}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find spans by task id",r)}finally{n.close();}}findById(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(Tt).where(drizzleOrm.eq(Tt.id,e)).limit(1).get()??void 0}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find span by id",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var ci=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}insertToolCall(e){let n=this.openHandle(true);try{n.db.insert(ut).values(e).run();}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to insert tool call",r)}finally{n.close();}}findByTaskId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(ut).where(drizzleOrm.eq(ut.task_id,e)).all()}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find tool calls by task id",r)}finally{n.close();}}aggregateByName(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select({toolName:ut.tool_name,count:drizzleOrm.sql`count(*)`}).from(ut).where(drizzleOrm.eq(ut.task_id,e)).groupBy(ut.tool_name).all().map(r=>({toolName:r.toolName,count:r.count}))}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to aggregate tool calls by name",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var ui=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}ensureThreadExists(e,n){if(!e.db.select({id:w.id}).from(w).where(drizzleOrm.eq(w.id,n)).limit(1).get())throw new exports.RepositoryError("NOT_FOUND",`Thread not found: ${n}`)}findByThreadId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return this.ensureThreadExists(n,e),n.db.select().from(We).where(drizzleOrm.eq(We.thread_id,e)).orderBy(drizzleOrm.asc(We.seq)).all()}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to find boxes by thread id",r)}finally{n.close();}}findById(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(We).where(drizzleOrm.and(drizzleOrm.eq(We.id,n),drizzleOrm.eq(We.thread_id,e))).limit(1).get()??void 0}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to find box by id",o)}finally{r.close();}}insert(e){let n=this.openHandle(true);try{this.ensureThreadExists(n,e.threadId);try{n.db.insert(We).values({id:e.id,thread_id:e.threadId,seq:e.seq,first_task_id:e.first_task_id,mid_task_id:e.mid_task_id,last_task_id:e.last_task_id,task_count:e.task_count,summary:e.summary??null,source_tokens:e.source_tokens,summary_tokens:e.summary_tokens??null,created_at:e.created_at}).run();}catch(o){throw o instanceof Error&&/UNIQUE constraint failed/i.test(o.message)?new exports.RepositoryError("CONFLICT",`Duplicate seq ${String(e.seq)} for thread ${e.threadId}`,o):o}let r=n.db.select().from(We).where(drizzleOrm.eq(We.id,e.id)).limit(1).get();if(!r)throw new exports.RepositoryError("DB_ERROR","Insert did not return a row");return r}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to insert thread box",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var li=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}bulkInsert(e){if(e.length===0)return;let n=this.openHandle(true);try{n.db.transaction(r=>{for(let o of e)r.insert(nn).values({id:crypto.randomUUID(),path:o.path,method:o.method,status_code:o.statusCode,duration_ms:o.durationMs,ip:o.ip??null,request_headers:o.requestHeaders??null,response_headers:o.responseHeaders??null,request_body:o.requestBody??null,response_body:o.responseBody??null,query:o.query??null,user_id:o.userId??null,project_id:o.projectId??null,partition_key:o.partitionKey??"default",timestamp:o.timestamp??new Date().toISOString(),metadata:o.metadata??null}).run();});}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to bulk insert request logs",r)}finally{n.close();}}findRecent(e=100){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(nn).orderBy(drizzleOrm.desc(nn.timestamp)).limit(e).all()}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find recent request logs",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();function pu(t){return new Date(Math.floor(t/3e5)*3e5).toISOString()}var pi=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}upsert(e){let n=this.openHandle(true);try{let r=pu(e.bucketStartMs),o=e.accountRef??"default";n.db.insert(_e).values({id:e.id,provider:e.provider,account_ref:o,limit_window:e.limitWindow,bucket_start:r,captured_at:e.capturedAt,used_percent:e.usedPercent,remaining_percent:e.remainingPercent,resets_at:e.resetsAt??null,source:e.source,metadata:e.metadata??null}).onConflictDoUpdate({target:[_e.provider,_e.account_ref,_e.limit_window,_e.bucket_start],set:{captured_at:e.capturedAt,used_percent:e.usedPercent,remaining_percent:e.remainingPercent,resets_at:e.resetsAt??null,metadata:e.metadata??null}}).run();}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to upsert usage limit snapshot",r)}finally{n.close();}}getTrends(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=n.db.select({provider:_e.provider,bucket_start:_e.bucket_start,used_percent:_e.used_percent,remaining_percent:_e.remaining_percent,resets_at:_e.resets_at}).from(_e).where(drizzleOrm.and(drizzleOrm.eq(_e.limit_window,e.window),drizzleOrm.gte(_e.bucket_start,e.fromIso),drizzleOrm.lte(_e.bucket_start,e.toIso))).orderBy(drizzleOrm.asc(_e.bucket_start)).all(),o=new Map;for(let s of r)o.has(s.provider)||o.set(s.provider,[]),o.get(s.provider).push({bucketStart:s.bucket_start,usedPercent:s.used_percent,remainingPercent:s.remaining_percent,resetsAt:s.resets_at??null});return Array.from(o.entries()).map(([s,i])=>({provider:s,points:i}))}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to get usage limit trends",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var fi=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}publish(e){let n=this.openHandle(true);try{n.db.insert(De).values({id:e.id,workspace_id:e.workspaceId,month:e.month,generated_at:e.generatedAt,source_range:e.sourceRange,tier:e.tier,total_tokens:e.totalTokens,total_cost_usd:e.totalCostUsd,payload:e.payload}).onConflictDoUpdate({target:[De.workspace_id,De.month],set:{generated_at:e.generatedAt,source_range:e.sourceRange,tier:e.tier,total_tokens:e.totalTokens,total_cost_usd:e.totalCostUsd,payload:e.payload}}).run();let r=n.db.select().from(De).where(drizzleOrm.and(drizzleOrm.eq(De.workspace_id,e.workspaceId),drizzleOrm.eq(De.month,e.month))).limit(1).get();if(!r)throw new exports.RepositoryError("DB_ERROR","Failed to read back published usage report");return r}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to publish usage report",r)}finally{n.close();}}findByMonth(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(De).where(drizzleOrm.and(drizzleOrm.eq(De.workspace_id,e),drizzleOrm.eq(De.month,n))).limit(1).get()??void 0}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to find usage report",o)}finally{r.close();}}listByWorkspace(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(De).where(drizzleOrm.eq(De.workspace_id,e)).orderBy(drizzleOrm.desc(De.month)).all()}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to list usage reports",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var Tu=500,wu=50,gi=class extends exports.BaseSqliteRepository{dbPath;cap;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db")),this.cap=e.cap??Tu;}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}create(e){let n=this.openHandle(true);try{let r=$e("ntf"),o=new Date().toISOString();return n.db.insert(F).values({id:r,workspace_id:e.workspaceId,agent_id:e.agentId??null,task_id:e.taskId??null,thread_id:e.threadId??null,source:e.source??"agent",level:e.level??"info",title:e.title,body:e.body??null,target_user_id:e.targetUserId??null,created_at:o,metadata:e.metadata??null}).run(),this.enforceCap(n,e.workspaceId),{id:r}}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to create notification",r)}finally{n.close();}}enforceCap(e,n){let s=(e.db.select({count:drizzleOrm.sql`count(*)`}).from(F).where(drizzleOrm.eq(F.workspace_id,n)).get()?.count??0)-this.cap;if(s<=0)return;let d=e.db.select({id:F.id}).from(F).innerJoin(ie,drizzleOrm.eq(ie.notification_id,F.id)).where(drizzleOrm.eq(F.workspace_id,n)).groupBy(F.id).orderBy(drizzleOrm.asc(F.created_at)).limit(s).all().map(c=>c.id);d.length!==0&&(e.db.delete(ie).where(drizzleOrm.inArray(ie.notification_id,d)).run(),e.db.delete(F).where(drizzleOrm.inArray(F.id,d)).run());}list(e){if(!this.dbExists())return [];let n=e.limit??wu,r=this.openHandle(false);try{return r.db.select({id:F.id,workspace_id:F.workspace_id,agent_id:F.agent_id,task_id:F.task_id,thread_id:F.thread_id,source:F.source,level:F.level,title:F.title,body:F.body,target_user_id:F.target_user_id,created_at:F.created_at,metadata:F.metadata,read_at:ie.read_at}).from(F).leftJoin(ie,drizzleOrm.and(drizzleOrm.eq(ie.notification_id,F.id),drizzleOrm.eq(ie.user_id,e.userId))).where(drizzleOrm.eq(F.workspace_id,e.workspaceId)).orderBy(drizzleOrm.desc(F.created_at)).limit(n).all().map(s=>({...s,read_at:s.read_at??null,read:s.read_at!=null}))}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to list notifications",o)}finally{r.close();}}unreadCount(e){if(!this.dbExists())return 0;let n=this.openHandle(false);try{return n.db.select({count:drizzleOrm.sql`count(*)`}).from(F).leftJoin(ie,drizzleOrm.and(drizzleOrm.eq(ie.notification_id,F.id),drizzleOrm.eq(ie.user_id,e.userId))).where(drizzleOrm.and(drizzleOrm.eq(F.workspace_id,e.workspaceId),drizzleOrm.isNull(ie.notification_id))).get()?.count??0}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to count unread notifications",r)}finally{n.close();}}markRead(e){let n=this.openHandle(true);try{if(!n.db.select({id:F.id}).from(F).where(drizzleOrm.and(drizzleOrm.eq(F.id,e.notificationId),drizzleOrm.eq(F.workspace_id,e.workspaceId))).get())throw new exports.RepositoryError("NOT_FOUND","Notification not found in workspace");return n.db.insert(ie).values({notification_id:e.notificationId,user_id:e.userId,read_at:new Date().toISOString()}).onConflictDoNothing().run().changes>0}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to mark notification read",r)}finally{n.close();}}markAllRead(e){let n=this.openHandle(true);try{let r=n.db.select({id:F.id}).from(F).leftJoin(ie,drizzleOrm.and(drizzleOrm.eq(ie.notification_id,F.id),drizzleOrm.eq(ie.user_id,e.userId))).where(drizzleOrm.and(drizzleOrm.eq(F.workspace_id,e.workspaceId),drizzleOrm.isNull(ie.notification_id))).all();if(r.length===0)return 0;let o=new Date().toISOString();return n.db.transaction(s=>{for(let i of r)s.insert(ie).values({notification_id:i.id,user_id:e.userId,read_at:o}).onConflictDoNothing().run();}),r.length}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to mark all notifications read",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var Eu=50,_i=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=C(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}create(e){let n=this.openHandle(true);try{let r=new Date().toISOString(),o=[],s=e.map(i=>{let d=$e("sug");return o.push(d),{id:d,workspace_id:i.workspaceId,agent_id:i.agentId,task_id:i.taskId??null,type:i.type,status:i.status??"pending",payload:i.payload,applied_commit_sha:i.appliedCommitSha??null,created_at:r,updated_at:r}});return s.length>0&&n.db.insert(j).values(s).run(),{ids:o}}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to create agent suggestions",r)}finally{n.close();}}findLatestSet(e,n){if(!this.dbExists())return [];let r=this.openHandle(false);try{let o=r.db.select({task_id:j.task_id}).from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n))).orderBy(drizzleOrm.desc(j.created_at)).limit(1).get();if(!o)return [];let s=o.task_id===null?drizzleOrm.isNull(j.task_id):drizzleOrm.eq(j.task_id,o.task_id);return r.db.select().from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n),s)).orderBy(drizzleOrm.asc(j.created_at)).all()}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to find latest agent suggestion set",o)}finally{r.close();}}findSetByTaskId(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.select().from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n),drizzleOrm.eq(j.task_id,r))).orderBy(drizzleOrm.asc(j.created_at)).all()}catch(s){throw new exports.RepositoryError("DB_ERROR","Failed to find agent suggestion set by task id",s)}finally{o.close();}}findById(e,n,r){if(!this.dbExists())return null;let o=this.openHandle(false);try{return o.db.select().from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n),drizzleOrm.eq(j.id,r))).get()??null}catch(s){throw new exports.RepositoryError("DB_ERROR","Failed to find agent suggestion by id",s)}finally{o.close();}}updateStatus(e,n,r){let o=this.openHandle(true);try{let s={status:n,updated_at:new Date().toISOString()};return r!==void 0&&(s.applied_commit_sha=r),o.db.update(j).set(s).where(drizzleOrm.eq(j.id,e)).run().changes>0}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("DB_ERROR","Failed to update agent suggestion status",s)}finally{o.close();}}listByAgent(e,n,r=Eu){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.select().from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n))).orderBy(drizzleOrm.desc(j.created_at)).limit(r).all()}catch(s){throw new exports.RepositoryError("DB_ERROR","Failed to list agent suggestions",s)}finally{o.close();}}findDismissed(e,n,r=20){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.select().from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n),drizzleOrm.eq(j.status,"dismissed"))).orderBy(drizzleOrm.desc(j.updated_at)).limit(r).all()}catch(s){throw new exports.RepositoryError("DB_ERROR","Failed to find dismissed agent suggestions",s)}finally{o.close();}}};exports.AgentSuggestionRepository=_i;exports.BUILTIN_THREAD_STATES=Jc;exports.CommonCodeRepository=Do;exports.CommonCodeRepositoryError=ee;exports.DEFAULT_AGENT_SUGGESTION_LIST_LIMIT=Eu;exports.DEFAULT_NOTIFICATION_CAP=Tu;exports.DEFAULT_NOTIFICATION_LIST_LIMIT=wu;exports.DEFAULT_PROJECT_STAGES=ba;exports.DEFAULT_PROJECT_STAGE_KEYS=Bo;exports.NotificationRepository=gi;exports.ProjectRepository=Fo;exports.RequestLogRepository=li;exports.SpanRepository=di;exports.TASK_LOG_MIGRATION_EVENT_ROW_BYTES=kc;exports.TASK_LOG_MIGRATION_MIN_FREE_SPACE_BYTES=co;exports.TASK_LOG_MIGRATION_TERMINAL_STATUSES=mc;exports.THREAD_HIGHLIGHT_DELETION_REASON_REGENERATION_REPLACED=nu;exports.THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED=ou;exports.THREAD_HIGHLIGHT_REGENERATION_DETECTION_FAILED=r_;exports.THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED=ru;exports.THREAD_HIGHLIGHT_REGENERATION_NO_ELIGIBLE_TURNS=n_;exports.THREAD_PRIORITIES=Vc;exports.ThreadBoxRepository=ui;exports.ThreadHighlightConflictError=xn;exports.ThreadHighlightRegenerationConflictError=Ro;exports.ThreadHistoryConflictError=yo;exports.ThreadHistoryRepository=si;exports.ThreadRepository=Zs;exports.ThreadTitleMetadataPatchError=Qt;exports.ToolCallRepository=ci;exports.USAGE_BACKFILL_MAX_LATE_USAGE_AGE_MS=Oc;exports.USAGE_BACKFILL_TERMINAL_STATUSES=po;exports.UsageLimitSnapshotRepository=pi;exports.UsageReportRepository=fi;exports.WorkspaceRepository=$o;exports.calcBucketStart=pu;exports.classifyUsageAccountingReason=Mc;exports.customStateLabel=Yc;exports.generateCommonCodeId=Po;exports.hasRecordedUsage=In;exports.hasSufficientTaskLogMigrationFreeSpace=Rc;exports.hasThreadTitleKey=Kh;exports.isThreadPriority=dr;exports.isThreadState=cr;exports.matchesThreadTitleFilter=Xh;exports.mergeTerminalReason=oo;exports.mergeThreadTitleMeta=ni;exports.normalizeTaskStatus=Nt;exports.openDrizzleDb=C;exports.parseThreadPriorityFilter=Jh;exports.parseThreadStateFilter=Yh;exports.pushSchema=wp;exports.readThreadTitleMeta=mo;exports.reclaimTemporaryJournal=Cu;exports.resolveTaskHeartbeatHardStaleMs=Xn;exports.resolveTaskHeartbeatIntervalMs=Yr;exports.resolveTaskHeartbeatStaleMs=Kt;exports.resolveTaskLogMigrationDbPath=uo;exports.resolveTaskStopMethod=vs;exports.runHeartbeatTick=ks;exports.runMigrations=tn;exports.runMigrationsOnce=V;exports.runTaskLogMigration=Yg;exports.runUsageBackfill=Lh;exports.startTaskHeartbeat=og;exports.stopTask=Ns;exports.stopTaskHeartbeat=Yd;exports.taskLogBackupName=Xg;exports.threadTitleSearchHaystack=Vh;exports.tryCheckpointTaskLogWal=or;
511
+ `),c=new Map(d.map((g,_)=>[g.id,_])),u=r.taskId===void 0?void 0:c.get(r.taskId),f=r.coversFromTaskId===void 0?void 0:c.get(r.coversFromTaskId),p=r.coversToTaskId===void 0?void 0:c.get(r.coversToTaskId);return i.filter(g=>{let _=c.get(g.covers_from_task_id),m=c.get(g.covers_to_task_id);if(_===void 0||m===void 0)return !1;let k=Math.min(_,m),T=Math.max(_,m);return !(u!==void 0&&(u<k||u>T)||f!==void 0&&T<f||p!==void 0&&k>p)})}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("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)}};h();se();fe();ce();pe();ue();var di=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}insertSpan(e){let n=this.openHandle(true);try{n.db.insert(Tt).values(e).run();}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to insert span",r)}finally{n.close();}}findByTaskId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(Tt).where(drizzleOrm.eq(Tt.task_id,e)).all()}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find spans by task id",r)}finally{n.close();}}findById(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(Tt).where(drizzleOrm.eq(Tt.id,e)).limit(1).get()??void 0}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find span by id",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var ci=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}insertToolCall(e){let n=this.openHandle(true);try{n.db.insert(ut).values(e).run();}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to insert tool call",r)}finally{n.close();}}findByTaskId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(ut).where(drizzleOrm.eq(ut.task_id,e)).all()}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find tool calls by task id",r)}finally{n.close();}}aggregateByName(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select({toolName:ut.tool_name,count:drizzleOrm.sql`count(*)`}).from(ut).where(drizzleOrm.eq(ut.task_id,e)).groupBy(ut.tool_name).all().map(r=>({toolName:r.toolName,count:r.count}))}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to aggregate tool calls by name",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var ui=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}ensureThreadExists(e,n){if(!e.db.select({id:w.id}).from(w).where(drizzleOrm.eq(w.id,n)).limit(1).get())throw new exports.RepositoryError("NOT_FOUND",`Thread not found: ${n}`)}findByThreadId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return this.ensureThreadExists(n,e),n.db.select().from(We).where(drizzleOrm.eq(We.thread_id,e)).orderBy(drizzleOrm.asc(We.seq)).all()}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to find boxes by thread id",r)}finally{n.close();}}findById(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(We).where(drizzleOrm.and(drizzleOrm.eq(We.id,n),drizzleOrm.eq(We.thread_id,e))).limit(1).get()??void 0}catch(o){throw o instanceof exports.RepositoryError?o:new exports.RepositoryError("DB_ERROR","Failed to find box by id",o)}finally{r.close();}}insert(e){let n=this.openHandle(true);try{this.ensureThreadExists(n,e.threadId);try{n.db.insert(We).values({id:e.id,thread_id:e.threadId,seq:e.seq,first_task_id:e.first_task_id,mid_task_id:e.mid_task_id,last_task_id:e.last_task_id,task_count:e.task_count,summary:e.summary??null,source_tokens:e.source_tokens,summary_tokens:e.summary_tokens??null,created_at:e.created_at}).run();}catch(o){throw o instanceof Error&&/UNIQUE constraint failed/i.test(o.message)?new exports.RepositoryError("CONFLICT",`Duplicate seq ${String(e.seq)} for thread ${e.threadId}`,o):o}let r=n.db.select().from(We).where(drizzleOrm.eq(We.id,e.id)).limit(1).get();if(!r)throw new exports.RepositoryError("DB_ERROR","Insert did not return a row");return r}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to insert thread box",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var li=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}bulkInsert(e){if(e.length===0)return;let n=this.openHandle(true);try{n.db.transaction(r=>{for(let o of e)r.insert(nn).values({id:crypto.randomUUID(),path:o.path,method:o.method,status_code:o.statusCode,duration_ms:o.durationMs,ip:o.ip??null,request_headers:o.requestHeaders??null,response_headers:o.responseHeaders??null,request_body:o.requestBody??null,response_body:o.responseBody??null,query:o.query??null,user_id:o.userId??null,project_id:o.projectId??null,partition_key:o.partitionKey??"default",timestamp:o.timestamp??new Date().toISOString(),metadata:o.metadata??null}).run();});}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to bulk insert request logs",r)}finally{n.close();}}findRecent(e=100){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(nn).orderBy(drizzleOrm.desc(nn.timestamp)).limit(e).all()}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to find recent request logs",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();function pu(t){return new Date(Math.floor(t/3e5)*3e5).toISOString()}var pi=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}upsert(e){let n=this.openHandle(true);try{let r=pu(e.bucketStartMs),o=e.accountRef??"default";n.db.insert(_e).values({id:e.id,provider:e.provider,account_ref:o,limit_window:e.limitWindow,bucket_start:r,captured_at:e.capturedAt,used_percent:e.usedPercent,remaining_percent:e.remainingPercent,resets_at:e.resetsAt??null,source:e.source,metadata:e.metadata??null}).onConflictDoUpdate({target:[_e.provider,_e.account_ref,_e.limit_window,_e.bucket_start],set:{captured_at:e.capturedAt,used_percent:e.usedPercent,remaining_percent:e.remainingPercent,resets_at:e.resetsAt??null,metadata:e.metadata??null}}).run();}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to upsert usage limit snapshot",r)}finally{n.close();}}getTrends(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=n.db.select({provider:_e.provider,bucket_start:_e.bucket_start,used_percent:_e.used_percent,remaining_percent:_e.remaining_percent,resets_at:_e.resets_at}).from(_e).where(drizzleOrm.and(drizzleOrm.eq(_e.limit_window,e.window),drizzleOrm.gte(_e.bucket_start,e.fromIso),drizzleOrm.lte(_e.bucket_start,e.toIso))).orderBy(drizzleOrm.asc(_e.bucket_start)).all(),o=new Map;for(let s of r)o.has(s.provider)||o.set(s.provider,[]),o.get(s.provider).push({bucketStart:s.bucket_start,usedPercent:s.used_percent,remainingPercent:s.remaining_percent,resetsAt:s.resets_at??null});return Array.from(o.entries()).map(([s,i])=>({provider:s,points:i}))}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to get usage limit trends",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var fi=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}publish(e){let n=this.openHandle(true);try{n.db.insert(De).values({id:e.id,workspace_id:e.workspaceId,month:e.month,generated_at:e.generatedAt,source_range:e.sourceRange,tier:e.tier,total_tokens:e.totalTokens,total_cost_usd:e.totalCostUsd,payload:e.payload}).onConflictDoUpdate({target:[De.workspace_id,De.month],set:{generated_at:e.generatedAt,source_range:e.sourceRange,tier:e.tier,total_tokens:e.totalTokens,total_cost_usd:e.totalCostUsd,payload:e.payload}}).run();let r=n.db.select().from(De).where(drizzleOrm.and(drizzleOrm.eq(De.workspace_id,e.workspaceId),drizzleOrm.eq(De.month,e.month))).limit(1).get();if(!r)throw new exports.RepositoryError("DB_ERROR","Failed to read back published usage report");return r}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to publish usage report",r)}finally{n.close();}}findByMonth(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(De).where(drizzleOrm.and(drizzleOrm.eq(De.workspace_id,e),drizzleOrm.eq(De.month,n))).limit(1).get()??void 0}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to find usage report",o)}finally{r.close();}}listByWorkspace(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(De).where(drizzleOrm.eq(De.workspace_id,e)).orderBy(drizzleOrm.desc(De.month)).all()}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to list usage reports",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var Tu=500,wu=50,gi=class extends exports.BaseSqliteRepository{dbPath;cap;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db")),this.cap=e.cap??Tu;}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}create(e){let n=this.openHandle(true);try{let r=$e("ntf"),o=new Date().toISOString();return n.db.insert(F).values({id:r,workspace_id:e.workspaceId,agent_id:e.agentId??null,task_id:e.taskId??null,thread_id:e.threadId??null,source:e.source??"agent",level:e.level??"info",title:e.title,body:e.body??null,target_user_id:e.targetUserId??null,created_at:o,metadata:e.metadata??null}).run(),this.enforceCap(n,e.workspaceId),{id:r}}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to create notification",r)}finally{n.close();}}enforceCap(e,n){let s=(e.db.select({count:drizzleOrm.sql`count(*)`}).from(F).where(drizzleOrm.eq(F.workspace_id,n)).get()?.count??0)-this.cap;if(s<=0)return;let d=e.db.select({id:F.id}).from(F).innerJoin(ie,drizzleOrm.eq(ie.notification_id,F.id)).where(drizzleOrm.eq(F.workspace_id,n)).groupBy(F.id).orderBy(drizzleOrm.asc(F.created_at)).limit(s).all().map(c=>c.id);d.length!==0&&(e.db.delete(ie).where(drizzleOrm.inArray(ie.notification_id,d)).run(),e.db.delete(F).where(drizzleOrm.inArray(F.id,d)).run());}list(e){if(!this.dbExists())return [];let n=e.limit??wu,r=this.openHandle(false);try{return r.db.select({id:F.id,workspace_id:F.workspace_id,agent_id:F.agent_id,task_id:F.task_id,thread_id:F.thread_id,source:F.source,level:F.level,title:F.title,body:F.body,target_user_id:F.target_user_id,created_at:F.created_at,metadata:F.metadata,read_at:ie.read_at}).from(F).leftJoin(ie,drizzleOrm.and(drizzleOrm.eq(ie.notification_id,F.id),drizzleOrm.eq(ie.user_id,e.userId))).where(drizzleOrm.eq(F.workspace_id,e.workspaceId)).orderBy(drizzleOrm.desc(F.created_at)).limit(n).all().map(s=>({...s,read_at:s.read_at??null,read:s.read_at!=null}))}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to list notifications",o)}finally{r.close();}}unreadCount(e){if(!this.dbExists())return 0;let n=this.openHandle(false);try{return n.db.select({count:drizzleOrm.sql`count(*)`}).from(F).leftJoin(ie,drizzleOrm.and(drizzleOrm.eq(ie.notification_id,F.id),drizzleOrm.eq(ie.user_id,e.userId))).where(drizzleOrm.and(drizzleOrm.eq(F.workspace_id,e.workspaceId),drizzleOrm.isNull(ie.notification_id))).get()?.count??0}catch(r){throw new exports.RepositoryError("DB_ERROR","Failed to count unread notifications",r)}finally{n.close();}}markRead(e){let n=this.openHandle(true);try{if(!n.db.select({id:F.id}).from(F).where(drizzleOrm.and(drizzleOrm.eq(F.id,e.notificationId),drizzleOrm.eq(F.workspace_id,e.workspaceId))).get())throw new exports.RepositoryError("NOT_FOUND","Notification not found in workspace");return n.db.insert(ie).values({notification_id:e.notificationId,user_id:e.userId,read_at:new Date().toISOString()}).onConflictDoNothing().run().changes>0}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to mark notification read",r)}finally{n.close();}}markAllRead(e){let n=this.openHandle(true);try{let r=n.db.select({id:F.id}).from(F).leftJoin(ie,drizzleOrm.and(drizzleOrm.eq(ie.notification_id,F.id),drizzleOrm.eq(ie.user_id,e.userId))).where(drizzleOrm.and(drizzleOrm.eq(F.workspace_id,e.workspaceId),drizzleOrm.isNull(ie.notification_id))).all();if(r.length===0)return 0;let o=new Date().toISOString();return n.db.transaction(s=>{for(let i of r)s.insert(ie).values({notification_id:i.id,user_id:e.userId,read_at:o}).onConflictDoNothing().run();}),r.length}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to mark all notifications read",r)}finally{n.close();}}};h();se();fe();ce();pe();ue();var Eu=50,_i=class extends exports.BaseSqliteRepository{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Se.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Se.dirname(n);Oa.existsSync(o)||Oa.mkdirSync(o,{recursive:true});}else if(!Oa.existsSync(n))throw new exports.RepositoryError("NOT_FOUND","Database not found");let r=x(n);if(e)try{V(r.db,n);}catch(o){throw r.close(),o}return r}create(e){let n=this.openHandle(true);try{let r=new Date().toISOString(),o=[],s=e.map(i=>{let d=$e("sug");return o.push(d),{id:d,workspace_id:i.workspaceId,agent_id:i.agentId,task_id:i.taskId??null,type:i.type,status:i.status??"pending",payload:i.payload,applied_commit_sha:i.appliedCommitSha??null,created_at:r,updated_at:r}});return s.length>0&&n.db.insert(j).values(s).run(),{ids:o}}catch(r){throw r instanceof exports.RepositoryError?r:new exports.RepositoryError("DB_ERROR","Failed to create agent suggestions",r)}finally{n.close();}}findLatestSet(e,n){if(!this.dbExists())return [];let r=this.openHandle(false);try{let o=r.db.select({task_id:j.task_id}).from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n))).orderBy(drizzleOrm.desc(j.created_at)).limit(1).get();if(!o)return [];let s=o.task_id===null?drizzleOrm.isNull(j.task_id):drizzleOrm.eq(j.task_id,o.task_id);return r.db.select().from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n),s)).orderBy(drizzleOrm.asc(j.created_at)).all()}catch(o){throw new exports.RepositoryError("DB_ERROR","Failed to find latest agent suggestion set",o)}finally{r.close();}}findSetByTaskId(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.select().from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n),drizzleOrm.eq(j.task_id,r))).orderBy(drizzleOrm.asc(j.created_at)).all()}catch(s){throw new exports.RepositoryError("DB_ERROR","Failed to find agent suggestion set by task id",s)}finally{o.close();}}findById(e,n,r){if(!this.dbExists())return null;let o=this.openHandle(false);try{return o.db.select().from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n),drizzleOrm.eq(j.id,r))).get()??null}catch(s){throw new exports.RepositoryError("DB_ERROR","Failed to find agent suggestion by id",s)}finally{o.close();}}updateStatus(e,n,r){let o=this.openHandle(true);try{let s={status:n,updated_at:new Date().toISOString()};return r!==void 0&&(s.applied_commit_sha=r),o.db.update(j).set(s).where(drizzleOrm.eq(j.id,e)).run().changes>0}catch(s){throw s instanceof exports.RepositoryError?s:new exports.RepositoryError("DB_ERROR","Failed to update agent suggestion status",s)}finally{o.close();}}listByAgent(e,n,r=Eu){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.select().from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n))).orderBy(drizzleOrm.desc(j.created_at)).limit(r).all()}catch(s){throw new exports.RepositoryError("DB_ERROR","Failed to list agent suggestions",s)}finally{o.close();}}findDismissed(e,n,r=20){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.select().from(j).where(drizzleOrm.and(drizzleOrm.eq(j.workspace_id,e),drizzleOrm.eq(j.agent_id,n),drizzleOrm.eq(j.status,"dismissed"))).orderBy(drizzleOrm.desc(j.updated_at)).limit(r).all()}catch(s){throw new exports.RepositoryError("DB_ERROR","Failed to find dismissed agent suggestions",s)}finally{o.close();}}};exports.AgentSuggestionRepository=_i;exports.BUILTIN_THREAD_STATES=Jc;exports.CommonCodeRepository=Do;exports.CommonCodeRepositoryError=ee;exports.DEFAULT_AGENT_SUGGESTION_LIST_LIMIT=Eu;exports.DEFAULT_NOTIFICATION_CAP=Tu;exports.DEFAULT_NOTIFICATION_LIST_LIMIT=wu;exports.DEFAULT_PROJECT_STAGES=ba;exports.DEFAULT_PROJECT_STAGE_KEYS=Bo;exports.NotificationRepository=gi;exports.ProjectRepository=Fo;exports.RequestLogRepository=li;exports.SpanRepository=di;exports.TASK_LOG_MIGRATION_EVENT_ROW_BYTES=kc;exports.TASK_LOG_MIGRATION_MIN_FREE_SPACE_BYTES=co;exports.TASK_LOG_MIGRATION_TERMINAL_STATUSES=mc;exports.THREAD_HIGHLIGHT_DELETION_REASON_REGENERATION_REPLACED=nu;exports.THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED=ou;exports.THREAD_HIGHLIGHT_REGENERATION_DETECTION_FAILED=r_;exports.THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED=ru;exports.THREAD_HIGHLIGHT_REGENERATION_NO_ELIGIBLE_TURNS=n_;exports.THREAD_PRIORITIES=Vc;exports.ThreadBoxRepository=ui;exports.ThreadHighlightConflictError=Pn;exports.ThreadHighlightRegenerationConflictError=Ro;exports.ThreadHistoryConflictError=yo;exports.ThreadHistoryRepository=si;exports.ThreadRepository=Zs;exports.ThreadTitleMetadataPatchError=Qt;exports.ToolCallRepository=ci;exports.USAGE_BACKFILL_MAX_LATE_USAGE_AGE_MS=Oc;exports.USAGE_BACKFILL_TERMINAL_STATUSES=po;exports.UsageLimitSnapshotRepository=pi;exports.UsageReportRepository=fi;exports.WorkspaceRepository=$o;exports.calcBucketStart=pu;exports.classifyUsageAccountingReason=Mc;exports.customStateLabel=Yc;exports.generateCommonCodeId=Po;exports.hasRecordedUsage=In;exports.hasSufficientTaskLogMigrationFreeSpace=Rc;exports.hasThreadTitleKey=Kh;exports.isThreadPriority=dr;exports.isThreadState=cr;exports.matchesThreadTitleFilter=Xh;exports.mergeTerminalReason=oo;exports.mergeThreadTitleMeta=ni;exports.normalizeTaskStatus=Nt;exports.openDrizzleDb=x;exports.parseThreadPriorityFilter=Jh;exports.parseThreadStateFilter=Yh;exports.pushSchema=wp;exports.readThreadTitleMeta=mo;exports.reclaimTemporaryJournal=Cu;exports.resolveTaskHeartbeatHardStaleMs=Qn;exports.resolveTaskHeartbeatIntervalMs=Yr;exports.resolveTaskHeartbeatStaleMs=Kt;exports.resolveTaskLogMigrationDbPath=uo;exports.resolveTaskStopMethod=vs;exports.runHeartbeatTick=ks;exports.runMigrations=tn;exports.runMigrationsOnce=V;exports.runTaskLogMigration=Yg;exports.runUsageBackfill=Lh;exports.startTaskHeartbeat=og;exports.stopTask=Ns;exports.stopTaskHeartbeat=Yd;exports.taskLogBackupName=Xg;exports.threadTitleSearchHaystack=Vh;exports.tryCheckpointTaskLogWal=sr;