@crewx/sdk 0.9.0-rc.162 → 0.9.0-rc.164
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.js +247 -224
- package/dist/esm/plugins/index.js +102 -85
- package/dist/esm/repository/index.js +134 -111
- package/dist/index.d.ts +4 -0
- package/dist/index.js +249 -226
- package/dist/migrations/0041_tranquil_vivisector.sql +54 -0
- package/dist/migrations/meta/0041_snapshot.json +4156 -0
- package/dist/migrations/meta/_journal.json +7 -0
- package/dist/plugins/index.js +102 -85
- package/dist/repository/index.d.ts +2 -0
- package/dist/repository/index.js +132 -109
- package/dist/repository/sidebar-tab.repository.d.ts +82 -0
- package/dist/repository/thread.repository.d.ts +10 -0
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/sidebar-tabs.d.ts +466 -0
- package/package.json +1 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as le from'path';import le__default,{join,dirname,resolve}from'path';import {fileURLToPath}from'url';import {existsSync,mkdirSync,writeFileSync,appendFileSync,lstatSync,readFileSync,statSync,realpathSync}from'fs';import Go,{homedir}from'os';import {createHash,randomBytes,randomUUID}from'crypto';import {sqliteTable,text,integer,index,check,primaryKey,real,uniqueIndex,unique}from'drizzle-orm/sqlite-core';import {sql,and,eq,inArray,or,isNull,ne as ne$1,desc,lt as lt$1,notLike,asc,like,gte,isNotNull,getTableColumns}from'drizzle-orm';import {spawn}from'child_process';var gu=Object.defineProperty;var Lt=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var x=(t,e)=>()=>(t&&(e=t(t=0)),e);var hu=(t,e)=>{for(var n in e)gu(t,n,{get:e[n],enumerable:true});};var ku,Tu,S,h=x(()=>{ku=()=>fileURLToPath(import.meta.url),Tu=()=>le__default.dirname(ku()),S=Tu();});var f,at=x(()=>{h();f=class extends Error{code;cause;constructor(e,n,r){super(n),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};});function Wo(t){if(t===":memory:")return t;let e=resolve(t),n=e,r=[];for(;!existsSync(n);){let o=dirname(n);if(o===n)return e;r.unshift(n.slice(o.length+1)),n=o;}let s=realpathSync(n);for(let o of r)s=join(s,o);return resolve(s)}function vu(t,e){let n=Wo(t),r=Wo(e);return process.platform==="win32"?n.toLowerCase()===r.toLowerCase():n===r}function mt(t){if((process.env.NODE_ENV==="test"||process.env.VITEST!==void 0)&&xu.some(e=>vu(t,join(Go.homedir(),".crewx",e))))throw new Error(`${Nu}: ${t}. Set CREWX_DB to an isolated temporary path or :memory:.`);return t}var Nu,xu,me,dt=x(()=>{h();Nu="[crewx] Refusing to open the real CrewX database from a test process";xu=["crewx.db","logs.db"];me=class{resolveDbPath(){if(process.env.CREWX_TRACES_DB!==void 0)throw new Error(`CREWX_TRACES_DB is removed. Use CREWX_DB instead. (got: ${process.env.CREWX_TRACES_DB})`);let e=process.env.CREWX_DB||join(Go.homedir(),".crewx","crewx.db");return mt(e)}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return existsSync(e??this.resolveDbPath())}};});function H(t,e={}){let n=mt(t),r=Lt("better-sqlite3"),{drizzle:s}=Lt("drizzle-orm/better-sqlite3"),o=e.readOnly?new r(n,{readonly:true,fileMustExist:true}):new r(n);return e.readOnly||(o.exec("PRAGMA journal_mode = WAL"),o.exec(`PRAGMA journal_size_limit = ${Du}`),o.exec("PRAGMA busy_timeout = 5000"),o.exec("PRAGMA foreign_keys = ON"),o.exec("PRAGMA analysis_limit = 400")),{db:s(o),runRaw:(i,u=[])=>o.prepare(i).run(...u),close:()=>o.close()}}var Du,kt=x(()=>{h();dt();Du=32*1024*1024;});function $t(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Lu(t,e){if(e>0||!$t(t,"tasks"))return;let n=t.all("PRAGMA table_info(tasks)"),r=new Set(n.map(s=>s.name));for(let[s,o]of Object.entries(Pu))r.has(s)||t.run(`ALTER TABLE tasks ADD COLUMN ${s} ${o}`);}function $u(t,e,n){if(!$t(t,"__drizzle_migrations")||!$t(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),s=new Set(r.map(i=>i.hash)),o=JSON.parse(readFileSync(le__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of o.entries){let u=Mu[i.tag];if(!u)continue;let d=le__default.join(e,`${i.tag}.sql`);if(!existsSync(d))continue;let c=readFileSync(d,"utf-8"),l=createHash("sha256").update(c).digest("hex");if(s.has(l))continue;let p=t.all("PRAGMA table_info(tasks)"),g=new Set(p.map(_=>_.name));for(let[_,m]of Object.entries(u))g.has(_)||(t.run(`ALTER TABLE tasks ADD COLUMN ${_} ${m}`),g.add(_));}}function Vo(t){let e=t.trim().replace(/;+\s*$/,"").trim(),n=e.match(/^ALTER\s+TABLE\s+[`"]?([A-Za-z_][\w$]*)[`"]?\s+ADD\s+(?:COLUMN\s+)?[`"]?([A-Za-z_][\w$]*)[`"]?/i);if(n)return {kind:"add-column",table:n[1],column:n[2]};let r=e.match(/^CREATE\s+(?:UNIQUE\s+)?INDEX(?:\s+IF\s+NOT\s+EXISTS)?\s+[`"]?([A-Za-z_][\w$]*)[`"]?\s+ON\s+/i);if(r)return {kind:"create-index",name:r[1]};let s=e.match(/^DROP\s+INDEX\s+IF\s+EXISTS\s+[`"]?([A-Za-z_][\w$]*)[`"]?/i);if(s)return {kind:"drop-index",name:s[1]}}function Jo(t){return t.split(/-->\s*statement-breakpoint/).map(e=>e.trim()).filter(Boolean)}function Hu(t,e,n){return t.all(`PRAGMA table_info("${e}")`).some(o=>o.name===n)}function Uu(t,e){return t.all(`SELECT name FROM sqlite_master WHERE type = 'index' AND name = '${e}'`).length>0}function tr(t,e){return e.kind==="add-column"?Hu(t,e.table,e.column):Uu(t,e.name)}function Xo(t,e,n){let r=t;for(let s of Jo(e)){let o=Vo(s);o?.kind==="add-column"&&tr(r,o)||o?.kind==="create-index"&&tr(r,o)||o?.kind==="drop-index"&&!tr(r,o)||r.run(n.raw(s));}}function Fu(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),s=new Set(r.map(i=>i.hash)),o=JSON.parse(readFileSync(le__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of o.entries){let u=le__default.join(e,`${i.tag}.sql`);if(!existsSync(u))continue;let d=readFileSync(u,"utf-8"),c=createHash("sha256").update(d).digest("hex");if(s.has(c))continue;let p=Jo(d).map(Vo);if(p.some(_=>!_))continue;let g=p;g.some(_=>_.kind==="add-column")&&g.some(_=>tr(t,_))&&(t.transaction(_=>{Xo(_,d,n),_.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${i.when})`);},{behavior:"immediate"}),s.add(c),console.error(`[crewx] Reconciled additive migration ${i.tag} from existing schema objects.`));}}function qu(t,e){let{sql:n}=Lt("drizzle-orm"),r=JSON.parse(readFileSync(le__default.join(e,"meta/_journal.json"),"utf-8")),o=["0025_task_heartbeat","0025_thread_app_instance_ledger","0026_mcp_action_source","0027_ui_instance_active_unique"].map(i=>{let u=r.entries.find(c=>c.tag===i);if(!u)throw new Error(`Missing release/App compatibility migration: ${i}`);let d=readFileSync(le__default.join(e,`${i}.sql`),"utf-8");return {entry:u,content:d,hash:createHash("sha256").update(d).digest("hex")}});t.transaction(i=>{let u=new Set(i.all(n`SELECT hash FROM __drizzle_migrations`).map(d=>d.hash));if(u.has(o[0].hash))for(let d of o.slice(1))u.has(d.hash)||(Xo(i,d.content,n),i.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${d.hash}, ${d.entry.when})`),u.add(d.hash),console.error(`[crewx] Replayed release/App migration ${d.entry.tag} safely.`));},{behavior:"immediate"});}function Gu(t,e,n,r){let o=JSON.parse(readFileSync(le__default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===Bu);if(!o)return;let i=le__default.join(e,`${o.tag}.sql`);if(!existsSync(i))return;let u=createHash("sha256").update(readFileSync(i,"utf-8")).digest("hex");if(r&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u))return;if(!$t(t,"tasks"))return {hash:u,affectedRows:0};let d=t.all("PRAGMA table_info(tasks)"),c=new Set(d.map(p=>p.name));if(!c.has("stop_requested_at")||!c.has("stop_requested_epoch"))return {hash:u,affectedRows:0};let l=t.get(n`
|
|
2
2
|
SELECT count(*) AS count
|
|
3
3
|
FROM tasks
|
|
4
4
|
WHERE status IN ('success', 'failed')
|
|
5
5
|
AND (stop_requested_at IS NOT NULL OR stop_requested_epoch IS NOT NULL)
|
|
6
|
-
`);return {hash:u,affectedRows:l?.count??0}}function
|
|
6
|
+
`);return {hash:u,affectedRows:l?.count??0}}function zu(t,e,n,r){let o=JSON.parse(readFileSync(le__default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===Wu);if(!o)return;let i=le__default.join(e,`${o.tag}.sql`);if(!existsSync(i))return;let u=createHash("sha256").update(readFileSync(i,"utf-8")).digest("hex");if(r&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u))return;if(!$t(t,"threads"))return {hash:u,markedPointers:0};if(!t.all("PRAGMA table_info(threads)").some(p=>p.name==="created_by_task_id"))return {hash:u,markedPointers:0};let c=$t(t,Ko)?`AND NOT EXISTS (
|
|
7
7
|
SELECT 1
|
|
8
|
-
FROM ${
|
|
8
|
+
FROM ${Ko} AS marked
|
|
9
9
|
WHERE marked.thread_id = current.id
|
|
10
10
|
AND marked.created_by_task_id = current.created_by_task_id
|
|
11
11
|
)`:"",l=t.get(`SELECT count(*) AS count
|
|
@@ -15,45 +15,45 @@ import*as ue from'path';import ue__default,{join,dirname,resolve}from'path';impo
|
|
|
15
15
|
SELECT 1
|
|
16
16
|
FROM sqlite_master
|
|
17
17
|
WHERE type = 'trigger'
|
|
18
|
-
AND name = '${
|
|
18
|
+
AND name = '${ju}'
|
|
19
19
|
)
|
|
20
|
-
${c}`);return {hash:u,markedPointers:l?.count??0}}function
|
|
20
|
+
${c}`);return {hash:u,markedPointers:l?.count??0}}function Ku(t){let{migrate:e}=Lt("drizzle-orm/better-sqlite3/migrator"),{sql:n}=Lt("drizzle-orm"),r=[le__default.join(S,"../migrations"),le__default.join(S,"migrations"),le__default.join(S,"../../../../drizzle/migrations"),le__default.join(process.cwd(),"drizzle/migrations")],s=r.find(p=>existsSync(le__default.join(p,"meta/_journal.json")));if(!s)throw new Error(`migrations folder not found. Searched:
|
|
21
21
|
${r.join(`
|
|
22
|
-
`)}`);let o=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;o?.cnt&&(i=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Au(t,i),o?.cnt&&(Cu(t,s),xu(t,s,n),bu(t,s,n));let u=Mu(t,s,n,!!o?.cnt),d=$u(t,s,n,!!o?.cnt);e(t,{migrationsFolder:s});let l=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(l>0){let p=o?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${p} (${l} migration${l>1?"s":""} applied).`);}u&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u.hash)&&console.error(`[crewx] Task stop-marker cleanup (${u.affectedRows} success/failed row(s) affected).`),d&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===d.hash)&&console.error(`[crewx] Thread creator pointer migration (${d.markedPointers} pointer(s) marked unverified).`);}function Ae(t,e){Uo.has(e)||(Hu(t),Uo.add(e));}var Uo,Iu,Ou,Du,Pu,Lu,Fo,kt=x(()=>{h();Uo=new Set,Iu={agent_id:"TEXT",status:"TEXT DEFAULT 'running'",started_at:"TEXT",trace_id:"TEXT",parent_task_id:"TEXT",crewx_version:"TEXT",pid:"INTEGER",thread_id:"TEXT",workspace_id:"TEXT",workspace_ref:"TEXT",workspace_name:"TEXT",project_id:"TEXT",project_name:"TEXT",command:"TEXT"};Ou={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"},"0015_panoramic_gorilla_man":{project_id:"TEXT",workspace_id:"TEXT"},"0019_backfill_task_thread_ids":{command:"TEXT",thread_id:"TEXT"},"0024_storage_metadata":{prompt:"TEXT",rendered_prompt:"TEXT",result:"TEXT",input_tokens:"INTEGER DEFAULT 0",output_tokens:"INTEGER DEFAULT 0",cost_usd:"REAL DEFAULT 0"}};Du="0027_task_stop_scope_cleanup",Pu="0033_thread_creator_boundary_guard",Lu="trg_threads_creator_late_fill_guard",Fo="thread_creator_unverified";});var Oe,Yr=x(()=>{h();Oe=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),starred:integer("starred").notNull().default(0)});});var a,ah,Wu,te,Mt=x(()=>{h();a=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),actor_kind:text("actor_kind",{enum:["human","agent","system","unknown"]}),actor_id:text("actor_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),heartbeat_at:text("heartbeat_at"),stop_requested_at:text("stop_requested_at"),stop_requested_epoch:integer("stop_requested_epoch"),rendered_prompt:text("rendered_prompt"),security_key:text("security_key"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),log_storage:text("log_storage",{enum:["blob","events"]}).notNull().default("blob"),last_log_seq:integer("last_log_seq").notNull().default(0),log_revision:integer("log_revision").notNull().default(0),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),cwd:text("cwd"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0),run_epoch:integer("run_epoch").default(0),rating:text("rating",{enum:["up","down"]}),rated_at:text("rated_at")},t=>({log_storage_check:check("tasks_log_storage_ck",sql`${t.log_storage} IN ('blob', 'events')`),rating_check:check("tasks_rating_ck",sql`${t.rating} IN ('up', 'down')`),idx_tasks_agent_id:index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:index("idx_tasks_status").on(t.status),idx_tasks_started_at:index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(t.pid),idx_tasks_status_heartbeat:index("idx_tasks_status_heartbeat").on(t.status,t.heartbeat_at),idx_tasks_thread_id:index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_thread_creator:index("idx_tasks_thread_creator").on(t.id,t.thread_id,t.actor_kind,t.actor_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(t.workspace_id,t.started_at),idx_tasks_ws_rated:index("idx_tasks_ws_rated").on(t.workspace_id,t.rating,t.rated_at).where(sql`${t.rating} IS NOT NULL`)})),{security_key:ah,...Wu}=getTableColumns(a),te=Wu;});var tt,Ko=x(()=>{h();Mt();tt=sqliteTable("task_provider_inputs",{task_id:text("task_id").notNull().references(()=>a.id,{onDelete:"cascade"}),run_epoch:integer("run_epoch").notNull(),input:text("input").notNull(),key_wrap_skipped:integer("key_wrap_skipped").notNull().default(0),recorded_at:text("recorded_at").notNull()},t=>({pk:primaryKey({columns:[t.task_id,t.run_epoch]})}));});var ze,Jo=x(()=>{h();Mt();ze=sqliteTable("task_log_events",{id:integer("id").primaryKey(),task_id:text("task_id").notNull().references(()=>a.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),timestamp:text("timestamp").notNull(),level:text("level").notNull(),message:text("message").notNull()},t=>({taskSeqUnique:uniqueIndex("task_log_events_task_seq_uq").on(t.task_id,t.seq),timestampIdIndex:index("task_log_events_timestamp_id_idx").on(t.timestamp,t.id)}));});var Xu,Yu,T,Zn=x(()=>{h();Yr();Xu="json_extract(metadata, '$.threadTitle.state')",Yu="json_extract(metadata, '$.threadTitle.priority')",T=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>Oe.id,{onDelete:"set null"}),created_by_kind:text("created_by_kind",{enum:["human","agent","system","unknown"]}),created_by_id:text("created_by_id"),created_by_task_id:text("created_by_task_id"),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},t=>({idx_threads_updated_at:index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_workspace_created_by_kind_updated_at:index("idx_threads_workspace_created_by_kind_updated_at").on(t.workspace_id,t.created_by_kind,t.updated_at),idx_threads_title:index("idx_threads_title").on(t.title),idx_threads_workspace_thread_state:index("idx_threads_workspace_thread_state").on(t.workspace_id,sql.raw(Xu)),idx_threads_workspace_thread_priority:index("idx_threads_workspace_thread_priority").on(t.workspace_id,sql.raw(Yu))}));});var Qo=x(()=>{h();sqliteTable("thread_creator_unverified",{thread_id:text("thread_id").notNull(),created_by_task_id:text("created_by_task_id").notNull()},t=>({pk:primaryKey({columns:[t.thread_id,t.created_by_task_id]})}));});var nc,ei=x(()=>{h();Mt();nc=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>a.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>nc.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},t=>({idx_spans_task_id:index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(t.parent_span_id)}));});var ti=x(()=>{h();Mt();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>a.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},t=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(t.timestamp)}));});var ri=x(()=>{h();Zn();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:unique().on(t.thread_id,t.seq)}));});var oi=x(()=>{h();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},t=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(t.partition_key)}));});var ii=x(()=>{h();sqliteTable("request_log_daily",{day:text("day").notNull(),scope:text("scope").notNull(),ok:integer("ok").notNull(),client:integer("client").notNull(),server:integer("server").notNull(),p50_ms:integer("p50_ms"),p95_ms:integer("p95_ms"),computed_at:text("computed_at").notNull()},t=>({pk:primaryKey({columns:[t.day,t.scope]})}));});var ui=x(()=>{h();sqliteTable("usage_limit_snapshots",{id:text("id").primaryKey(),provider:text("provider").notNull(),account_ref:text("account_ref").notNull().default("default"),limit_window:text("limit_window").notNull(),bucket_start:text("bucket_start").notNull(),captured_at:text("captured_at").notNull(),used_percent:integer("used_percent").notNull(),remaining_percent:integer("remaining_percent").notNull(),resets_at:text("resets_at"),source:text("source").notNull(),metadata:text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));});var ci=x(()=>{h();sqliteTable("usage_reports",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),month:text("month").notNull(),generated_at:text("generated_at").notNull(),source_range:text("source_range").notNull(),tier:text("tier").notNull(),total_tokens:integer("total_tokens").notNull(),total_cost_usd:real("total_cost_usd").notNull(),payload:text("payload").notNull(),payload_hash:text("payload_hash"),signature:text("signature"),signed_at:text("signed_at"),issuer:text("issuer")},t=>({uniq_usage_reports_ws_month:uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));});var pi=x(()=>{h();sqliteTable("notifications",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id"),task_id:text("task_id"),thread_id:text("thread_id"),source:text("source").notNull().default("agent"),level:text("level").notNull().default("info"),title:text("title").notNull(),body:text("body"),target_user_id:text("target_user_id"),created_at:text("created_at").notNull(),metadata:text("metadata")},t=>({idx_notifications_ws_created:index("idx_notifications_ws_created").on(t.workspace_id,sql`${t.created_at} DESC`)})),sqliteTable("notification_reads",{notification_id:text("notification_id").notNull(),user_id:text("user_id").notNull(),read_at:text("read_at").notNull()},t=>({pk:primaryKey({columns:[t.notification_id,t.user_id]})}));});var gi=x(()=>{h();sqliteTable("agent_suggestions",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id").notNull(),task_id:text("task_id"),type:text("type").notNull(),status:text("status").notNull().default("pending"),payload:text("payload").notNull(),applied_commit_sha:text("applied_commit_sha"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));});var hi=x(()=>{h();sqliteTable("ui_instances",{id:text("id").primaryKey().notNull(),definition_id:text("definition_id").notNull(),definition_version:integer("definition_version").notNull(),definition_hash:text("definition_hash").notNull(),workspace_id:text("workspace_id").notNull(),thread_id:text("thread_id").notNull(),app_id:text("app_id"),anchor_task_id:text("anchor_task_id"),domain_ref_json:text("domain_ref_json").notNull(),state_json:text("state_json").notNull(),revision:integer("revision").notNull().default(0),status:text("status").notNull().default("active"),granted_capabilities_json:text("granted_capabilities_json").notNull().default("[]"),opened_by_json:text("opened_by_json"),agent_open_request_json:text("agent_open_request_json"),created_at:integer("created_at").notNull(),updated_at:integer("updated_at").notNull()},t=>({idCheck:check("ui_instances_id_ck",sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:check("ui_instances_definition_id_ck",sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:check("ui_instances_definition_version_ck",sql`${t.definition_version} >= 1`),definitionHashCheck:check("ui_instances_definition_hash_ck",sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:check("ui_instances_workspace_id_ck",sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:check("ui_instances_thread_id_ck",sql`length(${t.thread_id}) BETWEEN 1 AND 256`),appIdCheck:check("ui_instances_app_id_ck",sql`${t.app_id} IS NULL OR length(${t.app_id}) BETWEEN 1 AND 128`),domainRefJsonCheck:check("ui_instances_domain_ref_json_ck",sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:check("ui_instances_state_json_ck",sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:check("ui_instances_revision_ck",sql`${t.revision} >= 0`),statusCheck:check("ui_instances_status_ck",sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:check("ui_instances_granted_capabilities_json_ck",sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),openedByJsonCheck:check("ui_instances_opened_by_json_ck",sql`${t.opened_by_json} IS NULL OR (json_valid(${t.opened_by_json}) AND json_type(${t.opened_by_json}) = 'object')`),createdAtCheck:check("ui_instances_created_at_ck",sql`${t.created_at} >= 0`),updatedAtCheck:check("ui_instances_updated_at_ck",sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id),workspaceThreadAppUnique:uniqueIndex("ui_instances_workspace_thread_app_uq").on(t.workspace_id,t.thread_id,t.app_id).where(sql`${t.status} = 'active'`)}));});var mi=x(()=>{h();sqliteTable("ui_action_receipts",{id:text("id").primaryKey().notNull(),instance_id:text("instance_id").notNull(),definition_id:text("definition_id"),definition_version:integer("definition_version"),definition_hash:text("definition_hash"),request_id:text("request_id").notNull(),action_id:text("action_id").notNull(),actor_json:text("actor_json").notNull(),source:text("source").notNull(),expected_revision:integer("expected_revision").notNull(),before_revision:integer("before_revision").notNull(),after_revision:integer("after_revision"),status:text("status").notNull(),outcome:text("outcome"),input_json:text("input_json").notNull(),result_json:text("result_json"),error_code:text("error_code"),requested_at:integer("requested_at").notNull(),settled_at:integer("settled_at")},t=>({idCheck:check("ui_action_receipts_id_ck",sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:check("ui_action_receipts_instance_id_ck",sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:check("ui_action_receipts_request_id_ck",sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:check("ui_action_receipts_action_id_ck",sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:check("ui_action_receipts_actor_json_ck",sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:check("ui_action_receipts_source_ck",sql`${t.source} IN ('ui_host', 'cli', 'system', 'mcp')`),expectedRevisionCheck:check("ui_action_receipts_expected_revision_ck",sql`${t.expected_revision} >= 0`),beforeRevisionCheck:check("ui_action_receipts_before_revision_ck",sql`${t.before_revision} >= 0`),afterRevisionCheck:check("ui_action_receipts_after_revision_ck",sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:check("ui_action_receipts_status_ck",sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:check("ui_action_receipts_outcome_ck",sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:check("ui_action_receipts_input_json_ck",sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:check("ui_action_receipts_result_json_ck",sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:check("ui_action_receipts_requested_at_ck",sql`${t.requested_at} >= 0`),settledAtCheck:check("ui_action_receipts_settled_at_ck",sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:check("ui_action_receipts_status_transition_ck",sql`(
|
|
22
|
+
`)}`);let o=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;o?.cnt&&(i=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Lu(t,i),o?.cnt&&(qu(t,s),Fu(t,s,n),$u(t,s,n));let u=Gu(t,s,n,!!o?.cnt),d=zu(t,s,n,!!o?.cnt);e(t,{migrationsFolder:s});let l=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(l>0){let p=o?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${p} (${l} migration${l>1?"s":""} applied).`);}u&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===u.hash)&&console.error(`[crewx] Task stop-marker cleanup (${u.affectedRows} success/failed row(s) affected).`),d&&t.all(n`SELECT hash FROM __drizzle_migrations`).some(g=>g.hash===d.hash)&&console.error(`[crewx] Thread creator pointer migration (${d.markedPointers} pointer(s) marked unverified).`);}function be(t,e){zo.has(e)||(Ku(t),zo.add(e));}var zo,Pu,Mu,Bu,Wu,ju,Ko,Tt=x(()=>{h();zo=new Set,Pu={agent_id:"TEXT",status:"TEXT DEFAULT 'running'",started_at:"TEXT",trace_id:"TEXT",parent_task_id:"TEXT",crewx_version:"TEXT",pid:"INTEGER",thread_id:"TEXT",workspace_id:"TEXT",workspace_ref:"TEXT",workspace_name:"TEXT",project_id:"TEXT",project_name:"TEXT",command:"TEXT"};Mu={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"},"0015_panoramic_gorilla_man":{project_id:"TEXT",workspace_id:"TEXT"},"0019_backfill_task_thread_ids":{command:"TEXT",thread_id:"TEXT"},"0024_storage_metadata":{prompt:"TEXT",rendered_prompt:"TEXT",result:"TEXT",input_tokens:"INTEGER DEFAULT 0",output_tokens:"INTEGER DEFAULT 0",cost_usd:"REAL DEFAULT 0"}};Bu="0027_task_stop_scope_cleanup",Wu="0033_thread_creator_boundary_guard",ju="trg_threads_creator_late_fill_guard",Ko="thread_creator_unverified";});var te,nr=x(()=>{h();te=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),starred:integer("starred").notNull().default(0)});});var a,kh,Qu,ne,Ht=x(()=>{h();a=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),actor_kind:text("actor_kind",{enum:["human","agent","system","unknown"]}),actor_id:text("actor_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),heartbeat_at:text("heartbeat_at"),stop_requested_at:text("stop_requested_at"),stop_requested_epoch:integer("stop_requested_epoch"),rendered_prompt:text("rendered_prompt"),security_key:text("security_key"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),log_storage:text("log_storage",{enum:["blob","events"]}).notNull().default("blob"),last_log_seq:integer("last_log_seq").notNull().default(0),log_revision:integer("log_revision").notNull().default(0),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),cwd:text("cwd"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0),run_epoch:integer("run_epoch").default(0),rating:text("rating",{enum:["up","down"]}),rated_at:text("rated_at")},t=>({log_storage_check:check("tasks_log_storage_ck",sql`${t.log_storage} IN ('blob', 'events')`),rating_check:check("tasks_rating_ck",sql`${t.rating} IN ('up', 'down')`),idx_tasks_agent_id:index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:index("idx_tasks_status").on(t.status),idx_tasks_started_at:index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(t.pid),idx_tasks_status_heartbeat:index("idx_tasks_status_heartbeat").on(t.status,t.heartbeat_at),idx_tasks_thread_id:index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_thread_creator:index("idx_tasks_thread_creator").on(t.id,t.thread_id,t.actor_kind,t.actor_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(t.workspace_id,t.started_at),idx_tasks_ws_rated:index("idx_tasks_ws_rated").on(t.workspace_id,t.rating,t.rated_at).where(sql`${t.rating} IS NOT NULL`)})),{security_key:kh,...Qu}=getTableColumns(a),ne=Qu;});var nt,ei=x(()=>{h();Ht();nt=sqliteTable("task_provider_inputs",{task_id:text("task_id").notNull().references(()=>a.id,{onDelete:"cascade"}),run_epoch:integer("run_epoch").notNull(),input:text("input").notNull(),key_wrap_skipped:integer("key_wrap_skipped").notNull().default(0),recorded_at:text("recorded_at").notNull()},t=>({pk:primaryKey({columns:[t.task_id,t.run_epoch]})}));});var Ve,ni=x(()=>{h();Ht();Ve=sqliteTable("task_log_events",{id:integer("id").primaryKey(),task_id:text("task_id").notNull().references(()=>a.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),timestamp:text("timestamp").notNull(),level:text("level").notNull(),message:text("message").notNull()},t=>({taskSeqUnique:uniqueIndex("task_log_events_task_seq_uq").on(t.task_id,t.seq),timestampIdIndex:index("task_log_events_timestamp_id_idx").on(t.timestamp,t.id)}));});var oc,ic,T,mn=x(()=>{h();nr();oc="json_extract(metadata, '$.threadTitle.state')",ic="json_extract(metadata, '$.threadTitle.priority')",T=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>te.id,{onDelete:"set null"}),created_by_kind:text("created_by_kind",{enum:["human","agent","system","unknown"]}),created_by_id:text("created_by_id"),created_by_task_id:text("created_by_task_id"),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},t=>({idx_threads_updated_at:index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_workspace_created_by_kind_updated_at:index("idx_threads_workspace_created_by_kind_updated_at").on(t.workspace_id,t.created_by_kind,t.updated_at),idx_threads_title:index("idx_threads_title").on(t.title),idx_threads_workspace_thread_state:index("idx_threads_workspace_thread_state").on(t.workspace_id,sql.raw(oc)),idx_threads_workspace_thread_priority:index("idx_threads_workspace_thread_priority").on(t.workspace_id,sql.raw(ic))}));});var oi=x(()=>{h();sqliteTable("thread_creator_unverified",{thread_id:text("thread_id").notNull(),created_by_task_id:text("created_by_task_id").notNull()},t=>({pk:primaryKey({columns:[t.thread_id,t.created_by_task_id]})}));});var lc,ai=x(()=>{h();Ht();lc=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>a.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>lc.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},t=>({idx_spans_task_id:index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(t.parent_span_id)}));});var di=x(()=>{h();Ht();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>a.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},t=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(t.timestamp)}));});var ci=x(()=>{h();mn();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:unique().on(t.thread_id,t.seq)}));});var pi=x(()=>{h();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},t=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(t.partition_key)}));});var fi=x(()=>{h();sqliteTable("request_log_daily",{day:text("day").notNull(),scope:text("scope").notNull(),ok:integer("ok").notNull(),client:integer("client").notNull(),server:integer("server").notNull(),p50_ms:integer("p50_ms"),p95_ms:integer("p95_ms"),computed_at:text("computed_at").notNull()},t=>({pk:primaryKey({columns:[t.day,t.scope]})}));});var _i=x(()=>{h();sqliteTable("usage_limit_snapshots",{id:text("id").primaryKey(),provider:text("provider").notNull(),account_ref:text("account_ref").notNull().default("default"),limit_window:text("limit_window").notNull(),bucket_start:text("bucket_start").notNull(),captured_at:text("captured_at").notNull(),used_percent:integer("used_percent").notNull(),remaining_percent:integer("remaining_percent").notNull(),resets_at:text("resets_at"),source:text("source").notNull(),metadata:text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));});var mi=x(()=>{h();sqliteTable("usage_reports",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),month:text("month").notNull(),generated_at:text("generated_at").notNull(),source_range:text("source_range").notNull(),tier:text("tier").notNull(),total_tokens:integer("total_tokens").notNull(),total_cost_usd:real("total_cost_usd").notNull(),payload:text("payload").notNull(),payload_hash:text("payload_hash"),signature:text("signature"),signed_at:text("signed_at"),issuer:text("issuer")},t=>({uniq_usage_reports_ws_month:uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));});var Ti=x(()=>{h();sqliteTable("notifications",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id"),task_id:text("task_id"),thread_id:text("thread_id"),source:text("source").notNull().default("agent"),level:text("level").notNull().default("info"),title:text("title").notNull(),body:text("body"),target_user_id:text("target_user_id"),created_at:text("created_at").notNull(),metadata:text("metadata")},t=>({idx_notifications_ws_created:index("idx_notifications_ws_created").on(t.workspace_id,sql`${t.created_at} DESC`)})),sqliteTable("notification_reads",{notification_id:text("notification_id").notNull(),user_id:text("user_id").notNull(),read_at:text("read_at").notNull()},t=>({pk:primaryKey({columns:[t.notification_id,t.user_id]})}));});var yi=x(()=>{h();sqliteTable("agent_suggestions",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id").notNull(),task_id:text("task_id"),type:text("type").notNull(),status:text("status").notNull().default("pending"),payload:text("payload").notNull(),applied_commit_sha:text("applied_commit_sha"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));});var Ei=x(()=>{h();sqliteTable("ui_instances",{id:text("id").primaryKey().notNull(),definition_id:text("definition_id").notNull(),definition_version:integer("definition_version").notNull(),definition_hash:text("definition_hash").notNull(),workspace_id:text("workspace_id").notNull(),thread_id:text("thread_id").notNull(),app_id:text("app_id"),anchor_task_id:text("anchor_task_id"),domain_ref_json:text("domain_ref_json").notNull(),state_json:text("state_json").notNull(),revision:integer("revision").notNull().default(0),status:text("status").notNull().default("active"),granted_capabilities_json:text("granted_capabilities_json").notNull().default("[]"),opened_by_json:text("opened_by_json"),agent_open_request_json:text("agent_open_request_json"),created_at:integer("created_at").notNull(),updated_at:integer("updated_at").notNull()},t=>({idCheck:check("ui_instances_id_ck",sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:check("ui_instances_definition_id_ck",sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:check("ui_instances_definition_version_ck",sql`${t.definition_version} >= 1`),definitionHashCheck:check("ui_instances_definition_hash_ck",sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:check("ui_instances_workspace_id_ck",sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:check("ui_instances_thread_id_ck",sql`length(${t.thread_id}) BETWEEN 1 AND 256`),appIdCheck:check("ui_instances_app_id_ck",sql`${t.app_id} IS NULL OR length(${t.app_id}) BETWEEN 1 AND 128`),domainRefJsonCheck:check("ui_instances_domain_ref_json_ck",sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:check("ui_instances_state_json_ck",sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:check("ui_instances_revision_ck",sql`${t.revision} >= 0`),statusCheck:check("ui_instances_status_ck",sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:check("ui_instances_granted_capabilities_json_ck",sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),openedByJsonCheck:check("ui_instances_opened_by_json_ck",sql`${t.opened_by_json} IS NULL OR (json_valid(${t.opened_by_json}) AND json_type(${t.opened_by_json}) = 'object')`),createdAtCheck:check("ui_instances_created_at_ck",sql`${t.created_at} >= 0`),updatedAtCheck:check("ui_instances_updated_at_ck",sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id),workspaceThreadAppUnique:uniqueIndex("ui_instances_workspace_thread_app_uq").on(t.workspace_id,t.thread_id,t.app_id).where(sql`${t.status} = 'active'`)}));});var Si=x(()=>{h();sqliteTable("ui_action_receipts",{id:text("id").primaryKey().notNull(),instance_id:text("instance_id").notNull(),definition_id:text("definition_id"),definition_version:integer("definition_version"),definition_hash:text("definition_hash"),request_id:text("request_id").notNull(),action_id:text("action_id").notNull(),actor_json:text("actor_json").notNull(),source:text("source").notNull(),expected_revision:integer("expected_revision").notNull(),before_revision:integer("before_revision").notNull(),after_revision:integer("after_revision"),status:text("status").notNull(),outcome:text("outcome"),input_json:text("input_json").notNull(),result_json:text("result_json"),error_code:text("error_code"),requested_at:integer("requested_at").notNull(),settled_at:integer("settled_at")},t=>({idCheck:check("ui_action_receipts_id_ck",sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:check("ui_action_receipts_instance_id_ck",sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:check("ui_action_receipts_request_id_ck",sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:check("ui_action_receipts_action_id_ck",sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:check("ui_action_receipts_actor_json_ck",sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:check("ui_action_receipts_source_ck",sql`${t.source} IN ('ui_host', 'cli', 'system', 'mcp')`),expectedRevisionCheck:check("ui_action_receipts_expected_revision_ck",sql`${t.expected_revision} >= 0`),beforeRevisionCheck:check("ui_action_receipts_before_revision_ck",sql`${t.before_revision} >= 0`),afterRevisionCheck:check("ui_action_receipts_after_revision_ck",sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:check("ui_action_receipts_status_ck",sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:check("ui_action_receipts_outcome_ck",sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:check("ui_action_receipts_input_json_ck",sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:check("ui_action_receipts_result_json_ck",sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:check("ui_action_receipts_requested_at_ck",sql`${t.requested_at} >= 0`),settledAtCheck:check("ui_action_receipts_settled_at_ck",sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:check("ui_action_receipts_status_transition_ck",sql`(
|
|
23
23
|
(${t.status} = 'requested' AND ${t.after_revision} IS NULL AND ${t.outcome} IS NULL AND ${t.settled_at} IS NULL)
|
|
24
24
|
OR
|
|
25
25
|
(${t.status} = 'settled' AND ${t.after_revision} IS NOT NULL AND ${t.outcome} IS NOT NULL AND ${t.settled_at} IS NOT NULL)
|
|
26
|
-
)`),instanceRequestUnique:uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));});var
|
|
26
|
+
)`),instanceRequestUnique:uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));});var Ii=x(()=>{h();sqliteTable("ui_instance_repins",{instance_id:text("instance_id").notNull(),from_version:integer("from_version").notNull(),from_hash:text("from_hash").notNull(),to_version:integer("to_version").notNull(),to_hash:text("to_hash").notNull(),from_revision:integer("from_revision").notNull(),to_revision:integer("to_revision"),status:text("status").notNull(),code:text("code"),attempts:integer("attempts").notNull().default(1),first_at:integer("first_at").notNull(),last_at:integer("last_at").notNull()},t=>({pk:primaryKey({columns:[t.instance_id,t.to_hash],name:"ui_instance_repins_pk"}),instanceIdCheck:check("ui_instance_repins_instance_id_ck",sql`length(${t.instance_id}) BETWEEN 5 AND 128 AND ${t.instance_id} GLOB 'uic_*'`),fromVersionCheck:check("ui_instance_repins_from_version_ck",sql`${t.from_version} >= 1`),toVersionCheck:check("ui_instance_repins_to_version_ck",sql`${t.to_version} >= 1`),fromHashCheck:check("ui_instance_repins_from_hash_ck",sql`length(${t.from_hash}) = 64 AND ${t.from_hash} NOT GLOB '*[^0-9a-f]*'`),toHashCheck:check("ui_instance_repins_to_hash_ck",sql`length(${t.to_hash}) = 64 AND ${t.to_hash} NOT GLOB '*[^0-9a-f]*'`),fromRevisionCheck:check("ui_instance_repins_from_revision_ck",sql`${t.from_revision} >= 0`),toRevisionCheck:check("ui_instance_repins_to_revision_ck",sql`${t.to_revision} IS NULL OR ${t.to_revision} >= 0`),statusCheck:check("ui_instance_repins_status_ck",sql`${t.status} IN ('applied', 'deferred', 'failed')`),attemptsCheck:check("ui_instance_repins_attempts_ck",sql`${t.attempts} >= 1`),datesCheck:check("ui_instance_repins_dates_ck",sql`${t.first_at} >= 0 AND ${t.last_at} >= ${t.first_at}`),resultCheck:check("ui_instance_repins_result_ck",sql`(
|
|
27
27
|
(${t.status} = 'applied' AND ${t.code} IS NULL
|
|
28
28
|
AND ${t.to_revision} = ${t.from_revision} + 1)
|
|
29
29
|
OR
|
|
30
30
|
(${t.status} IN ('deferred', 'failed') AND ${t.code} IS NOT NULL
|
|
31
31
|
AND ${t.to_revision} IS NULL)
|
|
32
|
-
)`)}));});var wi=x(()=>{h();sqliteTable("ui_definition_archive",{definition_hash:text("definition_hash").primaryKey().notNull(),definition_json:text("definition_json").notNull(),created_at:integer("created_at").notNull()},t=>({definitionHashCheck:check("ui_definition_archive_definition_hash_ck",sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),definitionJsonCheck:check("ui_definition_archive_definition_json_ck",sql`json_valid(${t.definition_json}) AND json_type(${t.definition_json}) = 'object'`),createdAtCheck:check("ui_definition_archive_created_at_ck",sql`${t.created_at} >= 0`)}));});var Ei,Ri=x(()=>{h();Ei=sqliteTable("projects",{id:text("id").primaryKey().notNull(),workspace_id:text("workspace_id").notNull(),name:text("name").notNull(),outcome:text("outcome").notNull(),due_date:text("due_date"),scene:text("scene").notNull().default("planning"),stages_json:text("stages_json").notNull(),stage_index:integer("stage_index").notNull(),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),accepted_at:text("accepted_at"),archived_at:text("archived_at")},t=>({idCheck:check("projects_id_ck",sql`${t.id} GLOB 'prj_*'`),sceneCheck:check("projects_scene_ck",sql`${t.scene} IN ('planning', 'plan_review', 'running', 'human_wait', 'limit_wait', 'failed_stop', 'analyzing_feedback', 'replanned', 'awaiting_review', 'accepted')`),stagesJsonCheck:check("projects_stages_json_ck",sql`json_valid(${t.stages_json}) AND json_type(${t.stages_json}) = 'array'`),stageIndexCheck:check("projects_stage_index_ck",sql`${t.stage_index} >= 1`)})),sqliteTable("project_criteria",{id:text("id").primaryKey().notNull(),project_id:text("project_id").notNull().references(()=>Ei.id,{onDelete:"cascade"}),position:integer("position").notNull(),statement:text("statement").notNull(),verify_status:text("verify_status").notNull().default("pending"),verified_at:text("verified_at"),evidence_json:text("evidence_json").notNull().default("[]"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({idCheck:check("project_criteria_id_ck",sql`${t.id} GLOB 'pjc_*'`),verifyStatusCheck:check("project_criteria_verify_status_ck",sql`${t.verify_status} IN ('pending', 'verifying', 'passed', 'failed')`),evidenceJsonCheck:check("project_criteria_evidence_json_ck",sql`json_valid(${t.evidence_json}) AND json_type(${t.evidence_json}) = 'array'`),projectPositionUnique:uniqueIndex("project_criteria_project_position_uq").on(t.project_id,t.position)})),sqliteTable("project_events",{id:text("id").primaryKey().notNull(),project_id:text("project_id").notNull().references(()=>Ei.id,{onDelete:"restrict"}),seq:integer("seq").notNull(),actor_type:text("actor_type").notNull(),actor_id:text("actor_id"),type:text("type").notNull(),title:text("title").notNull(),summary:text("summary"),payload_json:text("payload_json").notNull().default("{}"),created_at:text("created_at").notNull()},t=>({idCheck:check("project_events_id_ck",sql`${t.id} GLOB 'pje_*'`),actorTypeCheck:check("project_events_actor_type_ck",sql`${t.actor_type} IN ('user', 'project_manager', 'system')`),payloadJsonCheck:check("project_events_payload_json_ck",sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),projectSeqUnique:uniqueIndex("project_events_project_seq_uq").on(t.project_id,t.seq)}));});var us,cs,C,ls=x(()=>{h();us=["THREAD_STATE","THREAD_PRIORITY"],cs=["gray","blue","violet","green","amber","orange","red","pink"],C=sqliteTable("common_codes",{code_group:text("code_group").notNull(),code:text("code").notNull(),code_name:text("code_name"),color:text("color").notNull().default("gray"),sort_order:integer("sort_order").notNull(),workspace_id:text("workspace_id"),is_builtin:integer("is_builtin").notNull().default(0),is_archived:integer("is_archived").notNull().default(0),metadata:text("metadata"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({pk:primaryKey({columns:[t.code_group,t.code]}),metadataCheck:check("common_codes_metadata_ck",sql`${t.metadata} IS NULL OR (json_valid(${t.metadata}) AND json_type(${t.metadata}) = 'object')`),builtinCheck:check("common_codes_builtin_ck",sql`${t.is_builtin} IN (0, 1)`),archivedCheck:check("common_codes_archived_ck",sql`${t.is_archived} IN (0, 1)`),idxCommonCodesSelection:index("idx_common_codes_group_archived_order").on(t.code_group,t.is_archived,t.sort_order)}));});var Si,Ii,Ai,Oi,bi,W,F,H,vi=x(()=>{h();Zn();Si=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],Ii=["user","agent","system"],Ai=["auto","manual"],Oi=["decision","judgment","issue","result","pivot"],bi=["queued","running","completed","failed"],W=sqliteTable("thread_events",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),type:text("type").notNull(),actor_type:text("actor_type").notNull(),payload_json:text("payload_json").notNull(),created_at:text("created_at").notNull(),actor_id:text("actor_id"),task_id:text("task_id"),highlight_id:text("highlight_id")},t=>({typeCheck:check("thread_events_type_ck",sql`${t.type} IN ('thread.snapshot.imported', 'thread.title.changed', 'thread.priority.changed', 'thread.state.changed', 'thread.highlight.created', 'thread.highlight.updated', 'thread.highlight.deleted', 'thread.highlights.regenerated')`),actorTypeCheck:check("thread_events_actor_type_ck",sql`${t.actor_type} IN ('user', 'agent', 'system')`),payloadJsonCheck:check("thread_events_payload_json_ck",sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),threadSeqIndex:index("idx_thread_events_thread_seq").on(t.thread_id,t.seq),threadCreatedIndex:index("idx_thread_events_thread_created").on(t.thread_id,t.created_at),threadSeqUnique:uniqueIndex("thread_events_thread_seq_uq").on(t.thread_id,t.seq)})),F=sqliteTable("thread_highlight_runs",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),request_id:text("request_id").notNull(),status:text("status").notNull(),detector_version:text("detector_version").notNull(),requested_at:text("requested_at").notNull(),started_at:text("started_at"),completed_at:text("completed_at"),error_code:text("error_code"),previous_auto_count:integer("previous_auto_count"),new_auto_count:integer("new_auto_count")},t=>({statusCheck:check("thread_highlight_runs_status_ck",sql`${t.status} IN ('queued', 'running', 'completed', 'failed')`),countCheck:check("thread_highlight_runs_counts_ck",sql`(${t.previous_auto_count} IS NULL OR ${t.previous_auto_count} >= 0) AND (${t.new_auto_count} IS NULL OR ${t.new_auto_count} >= 0)`),threadRequestUnique:uniqueIndex("thread_highlight_runs_thread_request_uq").on(t.thread_id,t.request_id),inProgressThreadUnique:uniqueIndex("thread_highlight_runs_in_progress_thread_uq").on(t.thread_id).where(sql`${t.status} IN ('queued', 'running')`),threadStatusRequestedIndex:index("idx_thread_highlight_runs_thread_status_requested").on(t.thread_id,t.status,t.requested_at)})),H=sqliteTable("thread_highlights",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),source:text("source").notNull(),kind:text("kind").notNull(),status:text("status").notNull().default("active"),text:text("text"),covers_from_task_id:text("covers_from_task_id").notNull(),covers_to_task_id:text("covers_to_task_id").notNull(),revision:integer("revision").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),agent_id:text("agent_id"),source_task_id:text("source_task_id"),detector_version:text("detector_version"),content_fingerprint:text("content_fingerprint"),dismissed_at:text("dismissed_at")},t=>({sourceCheck:check("thread_highlights_source_ck",sql`${t.source} IN ('auto', 'manual')`),kindCheck:check("thread_highlights_kind_ck",sql`${t.kind} IN ('decision', 'judgment', 'issue', 'result', 'pivot')`),statusCheck:check("thread_highlights_status_ck",sql`${t.status} IN ('active', 'dismissed')`),activeTextCheck:check("thread_highlights_active_text_ck",sql`${t.status} = 'dismissed' OR (${t.text} IS NOT NULL AND length(${t.text}) > 0)`),coversCheck:check("thread_highlights_covers_ck",sql`length(${t.covers_from_task_id}) > 0 AND length(${t.covers_to_task_id}) > 0`),autoKeyCheck:check("thread_highlights_auto_key_ck",sql`${t.source} = 'manual' OR (${t.source} = 'auto' AND ${t.source_task_id} IS NOT NULL AND ${t.detector_version} IS NOT NULL AND ${t.content_fingerprint} IS NOT NULL AND length(${t.source_task_id}) > 0 AND length(${t.detector_version}) > 0 AND length(${t.content_fingerprint}) > 0)`),threadStatusCreatedIndex:index("idx_thread_highlights_thread_status_created").on(t.thread_id,t.status,t.created_at),threadCoversIndex:index("idx_thread_highlights_thread_covers").on(t.thread_id,t.covers_from_task_id,t.covers_to_task_id),autoIdempotencyUnique:uniqueIndex("thread_highlights_auto_idempotency_uq").on(t.thread_id,t.source_task_id,t.detector_version,t.content_fingerprint).where(sql`${t.source} = 'auto'`)}));});var xi=x(()=>{h();sqliteTable("storage_metadata",{source_kind:text("source_kind").notNull(),source_id:text("source_id").notNull(),utc_ts:text("utc_ts"),bytes:integer("bytes").notNull()},t=>({pk:primaryKey({columns:[t.source_kind,t.source_id]}),kindTimestampBytesIndex:index("idx_storage_metadata_kind_ts_bytes").on(t.source_kind,t.utc_ts,t.bytes)})),sqliteTable("storage_metadata_state",{unit:text("unit").primaryKey().notNull(),cursor_rowid:integer("cursor_rowid").notNull().default(0),end_rowid:integer("end_rowid"),complete:integer("complete").notNull().default(0),updated_at:text("updated_at").notNull()});});var ye,Ci=x(()=>{h();ye=sqliteTable("agent_send_history",{workspace_id:text("workspace_id").notNull(),actor_id:text("actor_id").notNull(),agent_id:text("agent_id").notNull(),last_accepted_at:text("last_accepted_at").notNull()},t=>({pk:primaryKey({columns:[t.workspace_id,t.actor_id,t.agent_id]}),recentIndex:index("idx_agent_send_history_recent").on(t.workspace_id,t.actor_id,t.last_accepted_at,t.agent_id)}));});var Rt=x(()=>{h();Yr();Mt();Ko();Jo();Zn();Qo();ei();ti();ri();oi();ii();ui();ci();pi();gi();hi();mi();ki();wi();Ri();ls();vi();xi();Ci();});var Ht,fs,Di,gs=x(()=>{h();Ht={"claude-fable-5-1":{input:10,cachedInput:.25,output:50},"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5-5":{input:4,cachedInput:.2,output:20},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5-5":{input:2,cachedInput:.1,output:10},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-5-5":{input:.1,cachedInput:.01,output:.5},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-6-astra":{input:10,cachedInput:1,output:50},"gpt-6.1-sol":{input:2,cachedInput:.1,output:10},"gpt-6-sol":{input:2,cachedInput:.2,output:10},"gpt-6-luna":{input:.1,cachedInput:.01,output:.5},"gpt-5.6-sol":{input:4,cachedInput:.4,output:20},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.7":{input:2,cachedInput:.5,output:6},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},fs=new Set(["gpt-5.3-codex-spark"]),Di=new Set(["auto","claude-fable-5","claude-fable-5-1","claude-haiku-4-5","claude-haiku-5-5","claude-opus-4-6","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7","claude-opus-4-7[1m]","claude-opus-4-8","claude-opus-4-8[1m]","claude-opus-5","claude-opus-5-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","claude-sonnet-5-5","gemini-3.1-pro","gemini-3.6-flash","gemini-3.7-flash","glm-5.1","glm-5.2","gpt-4.1","gpt-4o","gpt-5-mini","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-6.1-sol","gpt-oss-120b","grok-4.5","grok-4.6","grok-4.7"]);});function hs(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function Uc(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),Tn;let e=hs(t),n=Hc[e];if(n)return ar[n]??Ht[n]??Tn;if(ar[e])return ar[e];if(Ht[e])return Ht[e];if(fs.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),Tn;if(Di.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),Tn;let r={...Ht,...ar};for(let s of Object.keys(r))if(e.includes(s))return r[s];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),Tn}function Fc(t,e,n,r=0,s){let o=Uc(n),i=Math.min(r,t),d=(t-i)*o.input/1e6,c=i*o.cachedInput/1e6,l=e*o.output/1e6;return d+c+l}function Pi(t,e,n,r,s,o){return t&&t>0?t:!e&&!n?0:Fc(e??0,n??0,s,r??0)}var Hc,Tn,ar,dr=x(()=>{h();gs();gs();Hc={opus:"claude-opus-4-8",sonnet:"claude-sonnet-4-6",haiku:"claude-haiku-4-5","codex-mini":"gpt-5.3-codex",codex:"gpt-5.3-codex"},Tn={input:0,cachedInput:0,output:0},ar={};});function Hi(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function Mi(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function Ui(t){return Number.isSafeInteger(t)&&t>0}function Gc(t,e){return new Promise(n=>{let r;try{r=spawn(t,e,{windowsHide:!0});}catch(c){n({status:null,stdout:"",stderr:"",error:Hi(c)});return}let s="",o="",i=false,u,d=setTimeout(()=>{try{r.kill();}catch{}u({status:null,stdout:s,stderr:o,error:new Error(`Command timed out after ${Li}ms`)});},Li);u=c=>{i||(i=true,clearTimeout(d),n(c));},r.stdout?.setEncoding("utf8"),r.stderr?.setEncoding("utf8"),r.stdout?.on("data",c=>{s+=String(c);}),r.stderr?.on("data",c=>{o+=String(c);}),r.once("error",c=>{u({status:null,stdout:s,stderr:o,error:c});}),r.once("close",c=>{u({status:c,stdout:s,stderr:o});});})}async function Fi(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):Gc(t,e)}function zc(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function Kc(){return new Promise(t=>{setImmediate(t);})}function St(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return Mi(n)==="ESRCH"?"not_found":Mi(n)==="EPERM"?"alive":"unknown"}}function Vc(t,e){let n=St(-t,e),r=St(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function qi(t,e,n,r){let s=Math.max(0,n),o=Math.max(1,r.pollIntervalMs??Wc),i=Date.now()+s,u,d=s===0,c=r.sleep?Promise.resolve().then(()=>r.sleep(s)).then(()=>{},()=>{}):new Promise(l=>{u=setTimeout(l,s);});c.then(()=>{d=true;});try{for(await Kc();;){let l=Vc(t,e);if(l==="not_found")return l;let p=i-Date.now();if(d||p<=0)return l;await Promise.race([c,zc(Math.min(o,p))]);}}finally{u!==void 0&&clearTimeout(u);}}async function $i(t,e,n,r,s){let o=await qi(t,e,s.hardConfirmMs??jc,{...s,sleep:void 0});return o==="not_found"?n?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r}:o==="alive"?{status:"failed",pid:t,method:r,error:"Process is still running after termination attempt"}:{status:"failed",pid:t,method:r,error:"Unable to verify process termination"}}async function ur(t,e,n={}){if(!Ui(t))return "unknown";let r=n.platform??process.platform,s=r==="win32"?"powershell.exe":"ps",o=r==="win32"?["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-Command",`$p = Get-CimInstance -ClassName Win32_Process -Filter 'ProcessId = ${t}' -ErrorAction Stop; if ($null -ne $p) { [Console]::Write([string]$p.CommandLine) }`]:["-p",String(t),"-o","command="],i;try{i=await Fi(s,o,n);}catch{return "unknown"}if(i.error||i.status!==0)return "unknown";let u=i.stdout.trim();if(!u)return "not_found";let d=r==="win32"?u.toLowerCase():u;return e.filter(l=>l.trim().length>0).some(l=>{let p=r==="win32"?l.toLowerCase():l;return d.includes(p)})?"owned":"not_owned"}async function Ft(t,e={}){let n=e.platform??process.platform,r=n==="win32"?"taskkill":"process-group",s=g=>({status:"failed",pid:t,method:r,error:g});if(!Ui(t))return s("Invalid process ID");let o=e.kill??process.kill,i=St(t,o);if(i==="not_found")return {status:"not_found",pid:t,method:r};if(i!=="alive")return s("Unable to determine whether the process is alive");if(n==="win32"){let g;try{g=await Fi("taskkill",["/PID",String(t),"/T","/F"],e);}catch(m){g={status:null,stdout:"",stderr:"",error:Hi(m)};}let _=St(t,o);return _==="not_found"?g.status===0&&!g.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:s(_==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let u,d=e.signal??"SIGKILL";try{o(-t,d);}catch(g){u=g;}if(d==="SIGKILL")return $i(t,o,u,r,e);if(await qi(t,o,e.graceMs??Bc,e)==="not_found")return u?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r};let l;try{o(-t,"SIGKILL");}catch(g){l=g;}let p=await $i(t,o,l,r,e);return p.status==="terminated"?p:p.status==="not_found"?u?p:{status:"terminated",pid:t,method:r}:s(p.error??"Process termination failed")}var Li,Ut,Bc,Wc,jc,cr=x(()=>{h();Li=3e3,Ut="SIGINT",Bc=2e3,Wc=25,jc=100;});function zi(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new f("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new f("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function ji(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new f("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,s)=>zi(r,s))}catch(r){throw r instanceof f?new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function Ki(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new f("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new f("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new f("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function Gi(t){return {taskId:t.id,source:Ki(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function el(t){if(!Number.isInteger(t)||t<0)throw new f("VALIDATION","Task log tail limit must be a non-negative integer")}var lr,Vi=x(()=>{h();at();mt();kt();it();Rt();lr=class extends he{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?_t(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{Ae(r.db,n);}catch(s){throw r.close(),s}return r}findStateRow(e,n){return e.db.select({id:a.id,log_storage:a.log_storage,last_log_seq:a.last_log_seq,log_revision:a.log_revision,logs:a.logs}).from(a).where(eq(a.id,n)).limit(1).get()}findStateRowInTransaction(e,n){return e.select({id:a.id,log_storage:a.log_storage,last_log_seq:a.last_log_seq,log_revision:a.log_revision,logs:a.logs}).from(a).where(eq(a.id,n)).limit(1).get()}requireStateRowInTransaction(e,n){let r=this.findStateRowInTransaction(e,n);if(!r)throw new f("NOT_FOUND",`Task not found: ${n}`);return r}appendLog(e,n){return this.appendLogs(e,[n])}appendLogs(e,n){let r=n.map((o,i)=>zi(o,i));if(r.length===0){let o=this.getLogState(e);if(!o)throw new f("NOT_FOUND",`Task not found: ${e}`);return o}let s=this.openHandle(true);try{return s.db.transaction(i=>{let u=this.requireStateRowInTransaction(i,e),d=Ki(u);if(d==="blob"){let g=ji(e,u.logs);if(i.update(a).set({logs:JSON.stringify([...g,...r]),log_revision:sql`${a.log_revision} + 1`}).where(eq(a.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:d,revision:u.log_revision+1,lastSeq:u.last_log_seq}}let c=u.last_log_seq+1,l=u.last_log_seq+r.length;if(i.insert(ze).values(r.map((g,_)=>({task_id:e,seq:c+_,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),i.update(a).set({last_log_seq:l,log_revision:sql`${a.log_revision} + 1`}).where(eq(a.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:d,revision:u.log_revision+1,lastSeq:l}},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to append task log",o)}finally{s.close();}}getLogState(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=this.findStateRow(n,e);return r?Gi(r):void 0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return el(n),this.readLogsInternal(e,n)}readTail(e,n){return this.readLogsTail(e,n)}readLogsInternal(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.transaction(s=>{let o=this.findStateRowInTransaction(s,e);if(!o)return;let i=Gi(o);if(i.source==="blob"){let l=ji(e,o.logs);return {...i,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let u=s.select({seq:ze.seq,timestamp:ze.timestamp,level:ze.level,message:ze.message}).from(ze).where(eq(ze.task_id,e)).orderBy(n===void 0?asc(ze.seq):desc(ze.seq)),c=(n===void 0?u.all():u.limit(n).all()).map(({timestamp:l,level:p,message:g})=>({timestamp:l,level:p,message:g}));return n!==void 0&&c.reverse(),{...i,entries:c}},{behavior:"deferred"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read task logs",s)}finally{r.close();}}};});var ol,pr,Xi=x(()=>{h();at();mt();kt();it();Rt();ol=50,pr=class extends he{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=`${e.dbRoot}/.crewx/crewx.db`);}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(){let e=this.resolveDbPath(),n=U(e);try{return Ae(n.db,e),n}catch(r){throw n.close(),r}}recordAccepted(e){if(e.actorKind!=="human"||!e.workspaceId||!e.actorId||!e.agentId)return false;let n;try{n=this.openHandle();let r=e.acceptedAt??new Date().toISOString();return n.db.insert(ye).values({workspace_id:e.workspaceId,actor_id:e.actorId,agent_id:e.agentId,last_accepted_at:r}).onConflictDoUpdate({target:[ye.workspace_id,ye.actor_id,ye.agent_id],set:{last_accepted_at:sql`MAX(${ye.last_accepted_at}, excluded.last_accepted_at)`}}).run(),!0}catch(r){return console.error("[AgentSendHistoryRepository] Failed to record accepted agent send",r),false}finally{n?.close();}}findRecentAgents(e,n){let r;try{return r=this.openHandle(),r.db.select({agentId:ye.agent_id,lastAcceptedAt:ye.last_accepted_at}).from(ye).where(and(eq(ye.workspace_id,e),eq(ye.actor_id,n))).orderBy(desc(ye.last_accepted_at),asc(ye.agent_id)).limit(ol).all()}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to find recent agent sends",s)}finally{r?.close();}}};});var Yi=x(()=>{h();});var Q,It=x(()=>{h();Q=class extends Error{constructor(n,r,s){super(n);this.providerStr=r;this.name="ProviderError",this.code=s?.code??"UNKNOWN",this.kind=s?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=s?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout};});var At,_s=x(()=>{h();It();At=class extends Q{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function ks(t){if(!fr(t)||t.type!=="item.started"||!Zi(t)||!Qi(t))return false;let e=t.item;return !fr(e)||!Zi(e)||!Qi(e)||!ms(e.id)?false:e.type==="web_search"?e.query===""&&fr(e.action)&&e.action.type==="other":e.type==="file_change"?e.status!=="in_progress"||!Array.isArray(e.changes)||e.changes.length===0?false:e.changes.every(n=>fr(n)&&ms(n.path)&&ms(n.kind)):false}function fr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ea(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function ms(t){return typeof t=="string"&&t.trim().length>0}function Qi(t){return !ea(t,"status")||t.status==="in_progress"}function Zi(t){for(let e of ["error","errors","isError","is_error"])if(ea(t,e))return false;return true}var Ts=x(()=>{h();});function il(t,e){let n=t.trimStart();if(!n.startsWith("{"))return false;let r;try{r=JSON.parse(n);}catch{return false}let s=r.type;if(typeof s!="string")return false;let o=e?gl[e]:void 0;return o?o(r,s):Object.values(na).some(i=>i(r,s))}function Xe(t,e){let n=t.split(`
|
|
33
|
-
`).filter(r=>r.trim());return n.length===0?false:n.every(r=>
|
|
32
|
+
)`)}));});var Oi=x(()=>{h();sqliteTable("ui_definition_archive",{definition_hash:text("definition_hash").primaryKey().notNull(),definition_json:text("definition_json").notNull(),created_at:integer("created_at").notNull()},t=>({definitionHashCheck:check("ui_definition_archive_definition_hash_ck",sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),definitionJsonCheck:check("ui_definition_archive_definition_json_ck",sql`json_valid(${t.definition_json}) AND json_type(${t.definition_json}) = 'object'`),createdAtCheck:check("ui_definition_archive_created_at_ck",sql`${t.created_at} >= 0`)}));});var Ni,vi=x(()=>{h();Ni=sqliteTable("projects",{id:text("id").primaryKey().notNull(),workspace_id:text("workspace_id").notNull(),name:text("name").notNull(),outcome:text("outcome").notNull(),due_date:text("due_date"),scene:text("scene").notNull().default("planning"),stages_json:text("stages_json").notNull(),stage_index:integer("stage_index").notNull(),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),accepted_at:text("accepted_at"),archived_at:text("archived_at")},t=>({idCheck:check("projects_id_ck",sql`${t.id} GLOB 'prj_*'`),sceneCheck:check("projects_scene_ck",sql`${t.scene} IN ('planning', 'plan_review', 'running', 'human_wait', 'limit_wait', 'failed_stop', 'analyzing_feedback', 'replanned', 'awaiting_review', 'accepted')`),stagesJsonCheck:check("projects_stages_json_ck",sql`json_valid(${t.stages_json}) AND json_type(${t.stages_json}) = 'array'`),stageIndexCheck:check("projects_stage_index_ck",sql`${t.stage_index} >= 1`)})),sqliteTable("project_criteria",{id:text("id").primaryKey().notNull(),project_id:text("project_id").notNull().references(()=>Ni.id,{onDelete:"cascade"}),position:integer("position").notNull(),statement:text("statement").notNull(),verify_status:text("verify_status").notNull().default("pending"),verified_at:text("verified_at"),evidence_json:text("evidence_json").notNull().default("[]"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({idCheck:check("project_criteria_id_ck",sql`${t.id} GLOB 'pjc_*'`),verifyStatusCheck:check("project_criteria_verify_status_ck",sql`${t.verify_status} IN ('pending', 'verifying', 'passed', 'failed')`),evidenceJsonCheck:check("project_criteria_evidence_json_ck",sql`json_valid(${t.evidence_json}) AND json_type(${t.evidence_json}) = 'array'`),projectPositionUnique:uniqueIndex("project_criteria_project_position_uq").on(t.project_id,t.position)})),sqliteTable("project_events",{id:text("id").primaryKey().notNull(),project_id:text("project_id").notNull().references(()=>Ni.id,{onDelete:"restrict"}),seq:integer("seq").notNull(),actor_type:text("actor_type").notNull(),actor_id:text("actor_id"),type:text("type").notNull(),title:text("title").notNull(),summary:text("summary"),payload_json:text("payload_json").notNull().default("{}"),created_at:text("created_at").notNull()},t=>({idCheck:check("project_events_id_ck",sql`${t.id} GLOB 'pje_*'`),actorTypeCheck:check("project_events_actor_type_ck",sql`${t.actor_type} IN ('user', 'project_manager', 'system')`),payloadJsonCheck:check("project_events_payload_json_ck",sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),projectSeqUnique:uniqueIndex("project_events_project_seq_uq").on(t.project_id,t.seq)}));});var ps,fs,C,gs=x(()=>{h();ps=["THREAD_STATE","THREAD_PRIORITY"],fs=["gray","blue","violet","green","amber","orange","red","pink"],C=sqliteTable("common_codes",{code_group:text("code_group").notNull(),code:text("code").notNull(),code_name:text("code_name"),color:text("color").notNull().default("gray"),sort_order:integer("sort_order").notNull(),workspace_id:text("workspace_id"),is_builtin:integer("is_builtin").notNull().default(0),is_archived:integer("is_archived").notNull().default(0),metadata:text("metadata"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},t=>({pk:primaryKey({columns:[t.code_group,t.code]}),metadataCheck:check("common_codes_metadata_ck",sql`${t.metadata} IS NULL OR (json_valid(${t.metadata}) AND json_type(${t.metadata}) = 'object')`),builtinCheck:check("common_codes_builtin_ck",sql`${t.is_builtin} IN (0, 1)`),archivedCheck:check("common_codes_archived_ck",sql`${t.is_archived} IN (0, 1)`),idxCommonCodesSelection:index("idx_common_codes_group_archived_order").on(t.code_group,t.is_archived,t.sort_order)}));});var xi,Ci,Di,Pi,Li,W,F,U,Mi=x(()=>{h();mn();xi=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],Ci=["user","agent","system"],Di=["auto","manual"],Pi=["decision","judgment","issue","result","pivot"],Li=["queued","running","completed","failed"],W=sqliteTable("thread_events",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),type:text("type").notNull(),actor_type:text("actor_type").notNull(),payload_json:text("payload_json").notNull(),created_at:text("created_at").notNull(),actor_id:text("actor_id"),task_id:text("task_id"),highlight_id:text("highlight_id")},t=>({typeCheck:check("thread_events_type_ck",sql`${t.type} IN ('thread.snapshot.imported', 'thread.title.changed', 'thread.priority.changed', 'thread.state.changed', 'thread.highlight.created', 'thread.highlight.updated', 'thread.highlight.deleted', 'thread.highlights.regenerated')`),actorTypeCheck:check("thread_events_actor_type_ck",sql`${t.actor_type} IN ('user', 'agent', 'system')`),payloadJsonCheck:check("thread_events_payload_json_ck",sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),threadSeqIndex:index("idx_thread_events_thread_seq").on(t.thread_id,t.seq),threadCreatedIndex:index("idx_thread_events_thread_created").on(t.thread_id,t.created_at),threadSeqUnique:uniqueIndex("thread_events_thread_seq_uq").on(t.thread_id,t.seq)})),F=sqliteTable("thread_highlight_runs",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),request_id:text("request_id").notNull(),status:text("status").notNull(),detector_version:text("detector_version").notNull(),requested_at:text("requested_at").notNull(),started_at:text("started_at"),completed_at:text("completed_at"),error_code:text("error_code"),previous_auto_count:integer("previous_auto_count"),new_auto_count:integer("new_auto_count")},t=>({statusCheck:check("thread_highlight_runs_status_ck",sql`${t.status} IN ('queued', 'running', 'completed', 'failed')`),countCheck:check("thread_highlight_runs_counts_ck",sql`(${t.previous_auto_count} IS NULL OR ${t.previous_auto_count} >= 0) AND (${t.new_auto_count} IS NULL OR ${t.new_auto_count} >= 0)`),threadRequestUnique:uniqueIndex("thread_highlight_runs_thread_request_uq").on(t.thread_id,t.request_id),inProgressThreadUnique:uniqueIndex("thread_highlight_runs_in_progress_thread_uq").on(t.thread_id).where(sql`${t.status} IN ('queued', 'running')`),threadStatusRequestedIndex:index("idx_thread_highlight_runs_thread_status_requested").on(t.thread_id,t.status,t.requested_at)})),U=sqliteTable("thread_highlights",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),source:text("source").notNull(),kind:text("kind").notNull(),status:text("status").notNull().default("active"),text:text("text"),covers_from_task_id:text("covers_from_task_id").notNull(),covers_to_task_id:text("covers_to_task_id").notNull(),revision:integer("revision").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),agent_id:text("agent_id"),source_task_id:text("source_task_id"),detector_version:text("detector_version"),content_fingerprint:text("content_fingerprint"),dismissed_at:text("dismissed_at")},t=>({sourceCheck:check("thread_highlights_source_ck",sql`${t.source} IN ('auto', 'manual')`),kindCheck:check("thread_highlights_kind_ck",sql`${t.kind} IN ('decision', 'judgment', 'issue', 'result', 'pivot')`),statusCheck:check("thread_highlights_status_ck",sql`${t.status} IN ('active', 'dismissed')`),activeTextCheck:check("thread_highlights_active_text_ck",sql`${t.status} = 'dismissed' OR (${t.text} IS NOT NULL AND length(${t.text}) > 0)`),coversCheck:check("thread_highlights_covers_ck",sql`length(${t.covers_from_task_id}) > 0 AND length(${t.covers_to_task_id}) > 0`),autoKeyCheck:check("thread_highlights_auto_key_ck",sql`${t.source} = 'manual' OR (${t.source} = 'auto' AND ${t.source_task_id} IS NOT NULL AND ${t.detector_version} IS NOT NULL AND ${t.content_fingerprint} IS NOT NULL AND length(${t.source_task_id}) > 0 AND length(${t.detector_version}) > 0 AND length(${t.content_fingerprint}) > 0)`),threadStatusCreatedIndex:index("idx_thread_highlights_thread_status_created").on(t.thread_id,t.status,t.created_at),threadCoversIndex:index("idx_thread_highlights_thread_covers").on(t.thread_id,t.covers_from_task_id,t.covers_to_task_id),autoIdempotencyUnique:uniqueIndex("thread_highlights_auto_idempotency_uq").on(t.thread_id,t.source_task_id,t.detector_version,t.content_fingerprint).where(sql`${t.source} = 'auto'`)}));});var Hi=x(()=>{h();sqliteTable("storage_metadata",{source_kind:text("source_kind").notNull(),source_id:text("source_id").notNull(),utc_ts:text("utc_ts"),bytes:integer("bytes").notNull()},t=>({pk:primaryKey({columns:[t.source_kind,t.source_id]}),kindTimestampBytesIndex:index("idx_storage_metadata_kind_ts_bytes").on(t.source_kind,t.utc_ts,t.bytes)})),sqliteTable("storage_metadata_state",{unit:text("unit").primaryKey().notNull(),cursor_rowid:integer("cursor_rowid").notNull().default(0),end_rowid:integer("end_rowid"),complete:integer("complete").notNull().default(0),updated_at:text("updated_at").notNull()});});var Re,Ui=x(()=>{h();Re=sqliteTable("agent_send_history",{workspace_id:text("workspace_id").notNull(),actor_id:text("actor_id").notNull(),agent_id:text("agent_id").notNull(),last_accepted_at:text("last_accepted_at").notNull()},t=>({pk:primaryKey({columns:[t.workspace_id,t.actor_id,t.agent_id]}),recentIndex:index("idx_agent_send_history_recent").on(t.workspace_id,t.actor_id,t.last_accepted_at,t.agent_id)}));});var Bi,Wi=x(()=>{h();mn();nr();sqliteTable("sidebar_states",{workspace_id:text("workspace_id").primaryKey().references(()=>te.id,{onDelete:"cascade"}),revision:integer("revision").notNull().default(0),rail_collapsed:integer("rail_collapsed").notNull().default(0),seeded_at:text("seeded_at").notNull()},t=>({railCollapsedCheck:check("sidebar_states_rail_collapsed_ck",sql`${t.rail_collapsed} IN (0, 1)`)})),Bi=sqliteTable("sidebar_groups",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull().references(()=>te.id,{onDelete:"cascade"}),name:text("name").notNull(),color:text("color").notNull(),collapsed:integer("collapsed").notNull().default(0),position:integer("position").notNull()},t=>({colorCheck:check("sidebar_groups_color_ck",sql`${t.color} IN ('cyan', 'orange', 'purple', 'blue')`),collapsedCheck:check("sidebar_groups_collapsed_ck",sql`${t.collapsed} IN (0, 1)`),idxSidebarGroupsWorkspacePosition:index("idx_sidebar_groups_workspace_position").on(t.workspace_id,t.position)})),sqliteTable("sidebar_tabs",{workspace_id:text("workspace_id").notNull().references(()=>te.id,{onDelete:"cascade"}),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),group_id:text("group_id").references(()=>Bi.id,{onDelete:"set null"}),position:integer("position").notNull()},t=>({pk:primaryKey({columns:[t.workspace_id,t.thread_id]})})),sqliteTable("sidebar_closed_tabs",{id:integer("id").primaryKey({autoIncrement:true}),workspace_id:text("workspace_id").notNull().references(()=>te.id,{onDelete:"cascade"}),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),group_id:text("group_id").references(()=>Bi.id,{onDelete:"set null"}),position:integer("position").notNull(),closed_at:text("closed_at").notNull()},t=>({idxSidebarClosedTabsWorkspaceId:index("idx_sidebar_closed_tabs_workspace_id").on(t.workspace_id,t.id)})),sqliteTable("thread_reads",{workspace_id:text("workspace_id").notNull().references(()=>te.id,{onDelete:"cascade"}),thread_id:text("thread_id").notNull().references(()=>T.id,{onDelete:"cascade"}),read_through_at:text("read_through_at").notNull()},t=>({pk:primaryKey({columns:[t.workspace_id,t.thread_id]})}));});var It=x(()=>{h();nr();Ht();ei();ni();mn();oi();ai();di();ci();pi();fi();_i();mi();Ti();yi();Ei();Si();Ii();Oi();vi();gs();Mi();Hi();Ui();Wi();});var Ft,ks,ji,Ts=x(()=>{h();Ft={"claude-fable-5-1":{input:10,cachedInput:.25,output:50},"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5-5":{input:4,cachedInput:.2,output:20},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5-5":{input:2,cachedInput:.1,output:10},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-5-5":{input:.1,cachedInput:.01,output:.5},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-6-astra":{input:10,cachedInput:1,output:50},"gpt-6.1-sol":{input:2,cachedInput:.1,output:10},"gpt-6-sol":{input:2,cachedInput:.2,output:10},"gpt-6-luna":{input:.1,cachedInput:.01,output:.5},"gpt-5.6-sol":{input:4,cachedInput:.4,output:20},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.7":{input:2,cachedInput:.5,output:6},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},ks=new Set(["gpt-5.3-codex-spark"]),ji=new Set(["auto","claude-fable-5","claude-fable-5-1","claude-haiku-4-5","claude-haiku-5-5","claude-opus-4-6","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7","claude-opus-4-7[1m]","claude-opus-4-8","claude-opus-4-8[1m]","claude-opus-5","claude-opus-5-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","claude-sonnet-5-5","gemini-3.1-pro","gemini-3.6-flash","gemini-3.7-flash","glm-5.1","glm-5.2","gpt-4.1","gpt-4o","gpt-5-mini","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-6.1-sol","gpt-oss-120b","grok-4.5","grok-4.6","grok-4.7"]);});function ws(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function Vc(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),Rn;let e=ws(t),n=Kc[e];if(n)return pr[n]??Ft[n]??Rn;if(pr[e])return pr[e];if(Ft[e])return Ft[e];if(ks.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),Rn;if(ji.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),Rn;let r={...Ft,...pr};for(let s of Object.keys(r))if(e.includes(s))return r[s];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),Rn}function Jc(t,e,n,r=0,s){let o=Vc(n),i=Math.min(r,t),d=(t-i)*o.input/1e6,c=i*o.cachedInput/1e6,l=e*o.output/1e6;return d+c+l}function Gi(t,e,n,r,s,o){return t&&t>0?t:!e&&!n?0:Jc(e??0,n??0,s,r??0)}var Kc,Rn,pr,fr=x(()=>{h();Ts();Ts();Kc={opus:"claude-opus-4-8",sonnet:"claude-sonnet-4-6",haiku:"claude-haiku-4-5","codex-mini":"gpt-5.3-codex",codex:"gpt-5.3-codex"},Rn={input:0,cachedInput:0,output:0},pr={};});function Ji(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function Ki(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function Xi(t){return Number.isSafeInteger(t)&&t>0}function el(t,e){return new Promise(n=>{let r;try{r=spawn(t,e,{windowsHide:!0});}catch(c){n({status:null,stdout:"",stderr:"",error:Ji(c)});return}let s="",o="",i=false,u,d=setTimeout(()=>{try{r.kill();}catch{}u({status:null,stdout:s,stderr:o,error:new Error(`Command timed out after ${zi}ms`)});},zi);u=c=>{i||(i=true,clearTimeout(d),n(c));},r.stdout?.setEncoding("utf8"),r.stderr?.setEncoding("utf8"),r.stdout?.on("data",c=>{s+=String(c);}),r.stderr?.on("data",c=>{o+=String(c);}),r.once("error",c=>{u({status:null,stdout:s,stderr:o,error:c});}),r.once("close",c=>{u({status:c,stdout:s,stderr:o});});})}async function Yi(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):el(t,e)}function tl(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function nl(){return new Promise(t=>{setImmediate(t);})}function At(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return Ki(n)==="ESRCH"?"not_found":Ki(n)==="EPERM"?"alive":"unknown"}}function rl(t,e){let n=At(-t,e),r=At(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function Qi(t,e,n,r){let s=Math.max(0,n),o=Math.max(1,r.pollIntervalMs??Qc),i=Date.now()+s,u,d=s===0,c=r.sleep?Promise.resolve().then(()=>r.sleep(s)).then(()=>{},()=>{}):new Promise(l=>{u=setTimeout(l,s);});c.then(()=>{d=true;});try{for(await nl();;){let l=rl(t,e);if(l==="not_found")return l;let p=i-Date.now();if(d||p<=0)return l;await Promise.race([c,tl(Math.min(o,p))]);}}finally{u!==void 0&&clearTimeout(u);}}async function Vi(t,e,n,r,s){let o=await Qi(t,e,s.hardConfirmMs??Zc,{...s,sleep:void 0});return o==="not_found"?n?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r}:o==="alive"?{status:"failed",pid:t,method:r,error:"Process is still running after termination attempt"}:{status:"failed",pid:t,method:r,error:"Unable to verify process termination"}}async function gr(t,e,n={}){if(!Xi(t))return "unknown";let r=n.platform??process.platform,s=r==="win32"?"powershell.exe":"ps",o=r==="win32"?["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-Command",`$p = Get-CimInstance -ClassName Win32_Process -Filter 'ProcessId = ${t}' -ErrorAction Stop; if ($null -ne $p) { [Console]::Write([string]$p.CommandLine) }`]:["-p",String(t),"-o","command="],i;try{i=await Yi(s,o,n);}catch{return "unknown"}if(i.error||i.status!==0)return "unknown";let u=i.stdout.trim();if(!u)return "not_found";let d=r==="win32"?u.toLowerCase():u;return e.filter(l=>l.trim().length>0).some(l=>{let p=r==="win32"?l.toLowerCase():l;return d.includes(p)})?"owned":"not_owned"}async function Bt(t,e={}){let n=e.platform??process.platform,r=n==="win32"?"taskkill":"process-group",s=g=>({status:"failed",pid:t,method:r,error:g});if(!Xi(t))return s("Invalid process ID");let o=e.kill??process.kill,i=At(t,o);if(i==="not_found")return {status:"not_found",pid:t,method:r};if(i!=="alive")return s("Unable to determine whether the process is alive");if(n==="win32"){let g;try{g=await Yi("taskkill",["/PID",String(t),"/T","/F"],e);}catch(m){g={status:null,stdout:"",stderr:"",error:Ji(m)};}let _=At(t,o);return _==="not_found"?g.status===0&&!g.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:s(_==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let u,d=e.signal??"SIGKILL";try{o(-t,d);}catch(g){u=g;}if(d==="SIGKILL")return Vi(t,o,u,r,e);if(await Qi(t,o,e.graceMs??Yc,e)==="not_found")return u?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r};let l;try{o(-t,"SIGKILL");}catch(g){l=g;}let p=await Vi(t,o,l,r,e);return p.status==="terminated"?p:p.status==="not_found"?u?p:{status:"terminated",pid:t,method:r}:s(p.error??"Process termination failed")}var zi,qt,Yc,Qc,Zc,hr=x(()=>{h();zi=3e3,qt="SIGINT",Yc=2e3,Qc=25,Zc=100;});function ra(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new f("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new f("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function ta(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new f("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,s)=>ra(r,s))}catch(r){throw r instanceof f?new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function sa(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new f("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new f("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new f("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function na(t){return {taskId:t.id,source:sa(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function ul(t){if(!Number.isInteger(t)||t<0)throw new f("VALIDATION","Task log tail limit must be a non-negative integer")}var _r,oa=x(()=>{h();dt();kt();Tt();at();It();_r=class extends me{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?mt(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=H(n);if(e)try{be(r.db,n);}catch(s){throw r.close(),s}return r}findStateRow(e,n){return e.db.select({id:a.id,log_storage:a.log_storage,last_log_seq:a.last_log_seq,log_revision:a.log_revision,logs:a.logs}).from(a).where(eq(a.id,n)).limit(1).get()}findStateRowInTransaction(e,n){return e.select({id:a.id,log_storage:a.log_storage,last_log_seq:a.last_log_seq,log_revision:a.log_revision,logs:a.logs}).from(a).where(eq(a.id,n)).limit(1).get()}requireStateRowInTransaction(e,n){let r=this.findStateRowInTransaction(e,n);if(!r)throw new f("NOT_FOUND",`Task not found: ${n}`);return r}appendLog(e,n){return this.appendLogs(e,[n])}appendLogs(e,n){let r=n.map((o,i)=>ra(o,i));if(r.length===0){let o=this.getLogState(e);if(!o)throw new f("NOT_FOUND",`Task not found: ${e}`);return o}let s=this.openHandle(true);try{return s.db.transaction(i=>{let u=this.requireStateRowInTransaction(i,e),d=sa(u);if(d==="blob"){let g=ta(e,u.logs);if(i.update(a).set({logs:JSON.stringify([...g,...r]),log_revision:sql`${a.log_revision} + 1`}).where(eq(a.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:d,revision:u.log_revision+1,lastSeq:u.last_log_seq}}let c=u.last_log_seq+1,l=u.last_log_seq+r.length;if(i.insert(Ve).values(r.map((g,_)=>({task_id:e,seq:c+_,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),i.update(a).set({last_log_seq:l,log_revision:sql`${a.log_revision} + 1`}).where(eq(a.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:d,revision:u.log_revision+1,lastSeq:l}},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to append task log",o)}finally{s.close();}}getLogState(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=this.findStateRow(n,e);return r?na(r):void 0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return ul(n),this.readLogsInternal(e,n)}readTail(e,n){return this.readLogsTail(e,n)}readLogsInternal(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.transaction(s=>{let o=this.findStateRowInTransaction(s,e);if(!o)return;let i=na(o);if(i.source==="blob"){let l=ta(e,o.logs);return {...i,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let u=s.select({seq:Ve.seq,timestamp:Ve.timestamp,level:Ve.level,message:Ve.message}).from(Ve).where(eq(Ve.task_id,e)).orderBy(n===void 0?asc(Ve.seq):desc(Ve.seq)),c=(n===void 0?u.all():u.limit(n).all()).map(({timestamp:l,level:p,message:g})=>({timestamp:l,level:p,message:g}));return n!==void 0&&c.reverse(),{...i,entries:c}},{behavior:"deferred"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read task logs",s)}finally{r.close();}}};});var gl,mr,aa=x(()=>{h();dt();kt();Tt();at();It();gl=50,mr=class extends me{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=`${e.dbRoot}/.crewx/crewx.db`);}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(){let e=this.resolveDbPath(),n=H(e);try{return be(n.db,e),n}catch(r){throw n.close(),r}}recordAccepted(e){if(e.actorKind!=="human"||!e.workspaceId||!e.actorId||!e.agentId)return false;let n;try{n=this.openHandle();let r=e.acceptedAt??new Date().toISOString();return n.db.insert(Re).values({workspace_id:e.workspaceId,actor_id:e.actorId,agent_id:e.agentId,last_accepted_at:r}).onConflictDoUpdate({target:[Re.workspace_id,Re.actor_id,Re.agent_id],set:{last_accepted_at:sql`MAX(${Re.last_accepted_at}, excluded.last_accepted_at)`}}).run(),!0}catch(r){return console.error("[AgentSendHistoryRepository] Failed to record accepted agent send",r),false}finally{n?.close();}}findRecentAgents(e,n){let r;try{return r=this.openHandle(),r.db.select({agentId:Re.agent_id,lastAcceptedAt:Re.last_accepted_at}).from(Re).where(and(eq(Re.workspace_id,e),eq(Re.actor_id,n))).orderBy(desc(Re.last_accepted_at),asc(Re.agent_id)).limit(gl).all()}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to find recent agent sends",s)}finally{r?.close();}}};});var da=x(()=>{h();});var Q,Ot=x(()=>{h();Q=class extends Error{constructor(n,r,s){super(n);this.providerStr=r;this.name="ProviderError",this.code=s?.code??"UNKNOWN",this.kind=s?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=s?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout};});var bt,ys=x(()=>{h();Ot();bt=class extends Q{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Rs(t){if(!kr(t)||t.type!=="item.started"||!ca(t)||!ua(t))return false;let e=t.item;return !kr(e)||!ca(e)||!ua(e)||!Es(e.id)?false:e.type==="web_search"?e.query===""&&kr(e.action)&&e.action.type==="other":e.type==="file_change"?e.status!=="in_progress"||!Array.isArray(e.changes)||e.changes.length===0?false:e.changes.every(n=>kr(n)&&Es(n.path)&&Es(n.kind)):false}function kr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function la(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Es(t){return typeof t=="string"&&t.trim().length>0}function ua(t){return !la(t,"status")||t.status==="in_progress"}function ca(t){for(let e of ["error","errors","isError","is_error"])if(la(t,e))return false;return true}var Ss=x(()=>{h();});function hl(t,e){let n=t.trimStart();if(!n.startsWith("{"))return false;let r;try{r=JSON.parse(n);}catch{return false}let s=r.type;if(typeof s!="string")return false;let o=e?Rl[e]:void 0;return o?o(r,s):Object.values(fa).some(i=>i(r,s))}function Qe(t,e){let n=t.split(`
|
|
33
|
+
`).filter(r=>r.trim());return n.length===0?false:n.every(r=>hl(r,e))}function Se(t){return typeof t=="object"&&t!==null}function pa(t,e){if(e==="assistant"||e==="user"){let n=t.message;return Se(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||Se(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?Se(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function _l(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:pa(t,e)}function ml(t,e){if(e==="error")return typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||Se(t.error);if(e==="item.updated"||e.startsWith("thread.")||e.startsWith("turn."))return true;if(e==="item.started"||e==="item.completed"){let n=t.item;return Se(n)&&typeof n.type=="string"}return false}function kl(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||Se(t.part):e==="text"||e==="tool_use"?Se(t.part):e==="result"?typeof t.result=="string":false}function Tl(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||Se(t.part)||e==="result"&&typeof t.result=="string")}function wl(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?Se(t.data):e==="result"?typeof t.result=="string":false}function yl(t,e){return e==="message"?typeof t.role=="string":e==="tool_use"?typeof t.tool_name=="string"||typeof t.tool_id=="string":e==="tool_result"?typeof t.tool_id=="string"||typeof t.status=="string":false}function El(t,e){return e==="available_commands"?Se(t.tools)||Se(t.commands):e==="usage"?Se(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||Se(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var fa,Rl,Wt=x(()=>{h();Ss();fa={claude:pa,codex:ml,opencode:kl,copilot:wl,gemini:yl},Rl={...fa,claude:_l,opencode:Tl,grok:El,antigravity:()=>false};});function Ze(t){return /crewx\s+(q|query|x|execute)\s/.test(t)}function et(t,e,n){let r=e.match(/@(\S+)/);return {timestamp:t,type:"agent_call",targetAgent:r?.[1]?.replace(/["']/g,""),toolInput:e,...typeof n=="string"&&n.length>0?{toolUseId:n}:{}}}var jt=x(()=>{h();});function Al(t){let e=Ol(t),n=e.map((o,i)=>({line:o,index:i})).filter(({line:o})=>Nl(o.value)),r=bl(e);return {result:n.length===1&&n[0].index===r?vl(n[0].line.value):null,resultPreview:Dl(e,n),hasReservedLine:n.length>0}}function Me(t,e){let n=Al(t);return {resultPreview:n.resultPreview,isError:e||n.result?.isError===true,...n.hasReservedLine?{delegationResult:n.result}:{}}}function Ol(t){let e=[],n=0;for(let r=0;r<t.length;r++){let s=t[r];if(s!==`
|
|
34
34
|
`&&s!=="\r")continue;let o=s==="\r"&&t[r+1]===`
|
|
35
35
|
`?`\r
|
|
36
|
-
`:s;e.push({value:t.slice(n,r),separator:o}),r+=o.length-1,n=r+1;}return e.push({value:t.slice(n),separator:""}),e}function Tl(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function wl(t){return t.trimStart().startsWith(hl)}function yl(t){let e=t.trim();if(!e.startsWith(ra)||!e.endsWith("]]"))return null;let n=e.slice(ra.length,-2);if(!n)return null;try{return El(JSON.parse(n))}catch{return null}}function El(t){return Rl(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function Rl(t){if(!Il(t)||Object.keys(t).some(r=>!_l.has(r))||t.schema!==1||typeof t.isError!="boolean")return false;let e=Object.prototype.hasOwnProperty.call(t,"taskId"),n=Object.prototype.hasOwnProperty.call(t,"agentId");return e!==n?false:e?sa(t.taskId)&&sa(t.agentId):t.isError===true}function Sl(t,e){if(e.length===0)return t.map(r=>r.value+r.separator).join("");let n=new Set(e.map(({index:r})=>r));return t.map((r,s)=>n.has(s)?"":r.value+r.separator).join("")}function sa(t){return typeof t=="string"&&t.trim().length>0}function Il(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var ra,hl,_l,Wt=x(()=>{h();ra="[[crewx:delegation-result ",hl="[[crewx:delegation-result",_l=new Set(["schema","taskId","agentId","isError"]);});function Le(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return JSON.stringify(t??{});let e=t;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var jt=x(()=>{h();});var oa,gr,ws,hr=x(()=>{h();oa=["none","minimal","low","medium","high","xhigh","max","ultra"],gr={claude:["low","medium","high","xhigh","max"],codex:["none","minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]},ws={claude:{models:[{id:"claude-fable-5-1",name:"Claude Fable 5.1",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-5-5",name:"Claude Opus 5.5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-5-5",name:"Claude Sonnet 5.5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-5-5",name:"Claude Haiku 5.5",contextWindowTokens:1e6,tier:"speed"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5-1":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"medium"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-5-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"medium"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-6.1-sol",name:"GPT-6.1 Sol",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-6-sol",name:"GPT-6 Sol",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-6-luna",name:"GPT-6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-6-astra":{effort:["low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-6.1-sol":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"max"},"gpt-6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"medium"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.7",name:"Grok 4.7",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship"},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.7":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Object.fromEntries(Object.entries(ws).map(([t,e])=>[t,e.models]));});function ys(t){return Ol[t]??t}function vl(t){return bl.get(t)??t}function Es(t){if(!t)return {};let e=xl.get(t);return e?{...e}:{model:t}}function Rs(t,e){return t==="antigravity"||t==="cli/antigravity"?Es(e):e===void 0?{}:{model:vl(e)}}var Al,Ol,bl,Nl,xl,yn=x(()=>{h();Al=[{baseModelId:"claude-opus-4-8",catalogModelId:"claude-opus-4-8[1m]"},{baseModelId:"claude-opus-4-7",catalogModelId:"claude-opus-4-7[1m]"},{baseModelId:"claude-opus-4-6",catalogModelId:"claude-opus-4-6[1m]"},{baseModelId:"claude-sonnet-4-6",catalogModelId:"claude-sonnet-4-6[1m]"}],Ol={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};bl=new Map(Al.map(({baseModelId:t,catalogModelId:e})=>[t,e]));Nl=[{legacyId:"Gemini 3.7 Flash (High)",model:"gemini-3.7-flash",effort:"high"},{legacyId:"Gemini 3.7 Flash (Medium)",model:"gemini-3.7-flash",effort:"medium"},{legacyId:"Gemini 3.7 Flash (Low)",model:"gemini-3.7-flash",effort:"low"},{legacyId:"Gemini 3.6 Flash (High)",model:"gemini-3.6-flash",effort:"high"},{legacyId:"Gemini 3.6 Flash (Medium)",model:"gemini-3.6-flash",effort:"medium"},{legacyId:"Gemini 3.6 Flash (Low)",model:"gemini-3.6-flash",effort:"low"},{legacyId:"Gemini 3.5 Flash (Medium)",model:"gemini-3.5-flash",effort:"medium"},{legacyId:"Gemini 3.5 Flash (High)",model:"gemini-3.5-flash",effort:"high"},{legacyId:"Gemini 3.5 Flash (Low)",model:"gemini-3.5-flash",effort:"low"},{legacyId:"Gemini 3.1 Pro (Low)",model:"gemini-3.1-pro",effort:"low"},{legacyId:"Gemini 3.1 Pro (High)",model:"gemini-3.1-pro",effort:"high"},{legacyId:"Claude Sonnet 4.6 (Thinking)",model:"claude-sonnet-4-6"},{legacyId:"Claude Opus 4.6 (Thinking)",model:"claude-opus-4-6-thinking"},{legacyId:"GPT-OSS 120B (Medium)",model:"gpt-oss-120b",effort:"medium"},{legacyId:"gemini-3.7-flash-high",model:"gemini-3.7-flash",effort:"high"},{legacyId:"gemini-3.7-flash-medium",model:"gemini-3.7-flash",effort:"medium"},{legacyId:"gemini-3.7-flash-low",model:"gemini-3.7-flash",effort:"low"},{legacyId:"gemini-3.6-flash-high",model:"gemini-3.6-flash",effort:"high"},{legacyId:"gemini-3.6-flash-medium",model:"gemini-3.6-flash",effort:"medium"},{legacyId:"gemini-3.6-flash-low",model:"gemini-3.6-flash",effort:"low"},{legacyId:"gemini-3.5-flash-high",model:"gemini-3.5-flash",effort:"high"},{legacyId:"gemini-3.5-flash-medium",model:"gemini-3.5-flash",effort:"medium"},{legacyId:"gemini-3.5-flash-low",model:"gemini-3.5-flash",effort:"low"},{legacyId:"gemini-3.1-pro-high",model:"gemini-3.1-pro",effort:"high"},{legacyId:"gemini-3.1-pro-low",model:"gemini-3.1-pro",effort:"low"},{legacyId:"gpt-oss-120b-medium",model:"gpt-oss-120b",effort:"medium"}],xl=new Map(Nl.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function Dl(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function ct(t){return _r(t).models}function _r(t){return Cl[t]??ws[t]??Dl()}function En(t,e){let n=_r(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=Rs(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function ia(t){return _r(t).modelOverrides}function aa(){return ct("claude")}function da(){return ct("codex")}function ua(){return ct("copilot")}function ca(){return ct("antigravity")}var Cl,Ot=x(()=>{h();hr();dr();yn();Cl={};});function la(t){return Pl[t]??t}var Pl,pa=x(()=>{h();Ot();yn();Pl={auto:"default"};});function mr(t,e){return (gr[t]??[]).includes(e)}function lt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return Ll.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function fa(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function ga(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["-c","sandbox_mode=read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function ha(t){return !t||!mr("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function _a(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=la(t);return e.has(n)?["--permission-mode",n]:[]}function ma(t){return t?mr("claude",t)?["--effort",t]:[]:[]}function ka(t){return t==="default"?[]:t&&Ml.has(t)?["--permission-mode",t]:[]}function Ta(t){return t===true?["--always-approve"]:[]}function wa(t,e=n=>console.warn(n)){return t===void 0?[]:t==="workspace"||t==="read-only"||t==="off"?["--sandbox",t]:(e(`[grok] Invalid sandbox value ${JSON.stringify(t)}; using workspace.`),["--sandbox","workspace"])}function ya(t){return t?mr("grok",t)?["--effort",t]:[]:[]}function Ea(t){if(!t)return [];switch(ys(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function Ra(t){return t?mr("antigravity",t)?["--effort",t]:[]:[]}var Ll,Ml,Rn=x(()=>{h();pa();yn();hr();Ll=new Set(oa);Ml=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function $l(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),s="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,o="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,i=s!==void 0?s:o??0;return {inputTokens:s!==void 0?e+s:e,outputTokens:n,cachedInputTokens:i}}function Hl(t){let e=t.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(!("input_tokens"in n))return null;let r=Number(n.input_tokens??0),s=Number(n.output_tokens??0),i="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,u="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,d=i!==void 0?i:u??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:s,cachedInputTokens:d}}function Ul(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),s=Number(n.output??0),o=n.cache,i=o?Number(o.read??0):0;return {inputTokens:r+i,outputTokens:s,cachedInputTokens:i}}function Sa(t){let e=new Map,n;for(let o of t.split(`
|
|
37
|
-
`))if(o.trim())try{let i=JSON.parse(o);if(i.type!=="assistant")continue;let u=i.message,d=u?.id,c=u?.usage;if(typeof d!="string"||!c)continue;let l=Number(c.input_tokens??0),p=Number(c.cache_read_input_tokens??0);e.set(d,{inputTokens:l+p,cachedInputTokens:p});let g=u?.model;typeof g=="string"&&g&&(n=g);}catch{}if(e.size===0)return;let r=0,s=0;for(let o of e.values())r+=o.inputTokens,s+=o.cachedInputTokens;return {inputTokens:r,cachedInputTokens:s,model:n}}function
|
|
38
|
-
`))if(r.trim())try{let s=JSON.parse(r),o=
|
|
39
|
-
`).filter(s=>s.trim()),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="assistant"&&Array.isArray(o.message?.content))for(let i of o.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&n.push(i.text.trim());o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function
|
|
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
|
|
41
|
-
`)){let n=e.trim();if(n){if(n.startsWith("Not logged in"))return n;try{let r=
|
|
36
|
+
`:s;e.push({value:t.slice(n,r),separator:o}),r+=o.length-1,n=r+1;}return e.push({value:t.slice(n),separator:""}),e}function bl(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function Nl(t){return t.trimStart().startsWith(Sl)}function vl(t){let e=t.trim();if(!e.startsWith(ga)||!e.endsWith("]]"))return null;let n=e.slice(ga.length,-2);if(!n)return null;try{return xl(JSON.parse(n))}catch{return null}}function xl(t){return Cl(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function Cl(t){if(!Pl(t)||Object.keys(t).some(r=>!Il.has(r))||t.schema!==1||typeof t.isError!="boolean")return false;let e=Object.prototype.hasOwnProperty.call(t,"taskId"),n=Object.prototype.hasOwnProperty.call(t,"agentId");return e!==n?false:e?ha(t.taskId)&&ha(t.agentId):t.isError===true}function Dl(t,e){if(e.length===0)return t.map(r=>r.value+r.separator).join("");let n=new Set(e.map(({index:r})=>r));return t.map((r,s)=>n.has(s)?"":r.value+r.separator).join("")}function ha(t){return typeof t=="string"&&t.trim().length>0}function Pl(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var ga,Sl,Il,Gt=x(()=>{h();ga="[[crewx:delegation-result ",Sl="[[crewx:delegation-result",Il=new Set(["schema","taskId","agentId","isError"]);});function $e(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return JSON.stringify(t??{});let e=t;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var zt=x(()=>{h();});var _a,Tr,Is,wr=x(()=>{h();_a=["none","minimal","low","medium","high","xhigh","max","ultra"],Tr={claude:["low","medium","high","xhigh","max"],codex:["none","minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]},Is={claude:{models:[{id:"claude-fable-5-1",name:"Claude Fable 5.1",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-5-5",name:"Claude Opus 5.5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-5-5",name:"Claude Sonnet 5.5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-5-5",name:"Claude Haiku 5.5",contextWindowTokens:1e6,tier:"speed"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5-1":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"medium"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-5-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"medium"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-6.1-sol",name:"GPT-6.1 Sol",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-6-sol",name:"GPT-6 Sol",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-6-luna",name:"GPT-6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-6-astra":{effort:["low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-6.1-sol":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"max"},"gpt-6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"medium"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.7",name:"Grok 4.7",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship"},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.7":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Object.fromEntries(Object.entries(Is).map(([t,e])=>[t,e.models]));});function As(t){return Ml[t]??t}function Hl(t){return $l.get(t)??t}function Os(t){if(!t)return {};let e=Fl.get(t);return e?{...e}:{model:t}}function bs(t,e){return t==="antigravity"||t==="cli/antigravity"?Os(e):e===void 0?{}:{model:Hl(e)}}var Ll,Ml,$l,Ul,Fl,In=x(()=>{h();Ll=[{baseModelId:"claude-opus-4-8",catalogModelId:"claude-opus-4-8[1m]"},{baseModelId:"claude-opus-4-7",catalogModelId:"claude-opus-4-7[1m]"},{baseModelId:"claude-opus-4-6",catalogModelId:"claude-opus-4-6[1m]"},{baseModelId:"claude-sonnet-4-6",catalogModelId:"claude-sonnet-4-6[1m]"}],Ml={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};$l=new Map(Ll.map(({baseModelId:t,catalogModelId:e})=>[t,e]));Ul=[{legacyId:"Gemini 3.7 Flash (High)",model:"gemini-3.7-flash",effort:"high"},{legacyId:"Gemini 3.7 Flash (Medium)",model:"gemini-3.7-flash",effort:"medium"},{legacyId:"Gemini 3.7 Flash (Low)",model:"gemini-3.7-flash",effort:"low"},{legacyId:"Gemini 3.6 Flash (High)",model:"gemini-3.6-flash",effort:"high"},{legacyId:"Gemini 3.6 Flash (Medium)",model:"gemini-3.6-flash",effort:"medium"},{legacyId:"Gemini 3.6 Flash (Low)",model:"gemini-3.6-flash",effort:"low"},{legacyId:"Gemini 3.5 Flash (Medium)",model:"gemini-3.5-flash",effort:"medium"},{legacyId:"Gemini 3.5 Flash (High)",model:"gemini-3.5-flash",effort:"high"},{legacyId:"Gemini 3.5 Flash (Low)",model:"gemini-3.5-flash",effort:"low"},{legacyId:"Gemini 3.1 Pro (Low)",model:"gemini-3.1-pro",effort:"low"},{legacyId:"Gemini 3.1 Pro (High)",model:"gemini-3.1-pro",effort:"high"},{legacyId:"Claude Sonnet 4.6 (Thinking)",model:"claude-sonnet-4-6"},{legacyId:"Claude Opus 4.6 (Thinking)",model:"claude-opus-4-6-thinking"},{legacyId:"GPT-OSS 120B (Medium)",model:"gpt-oss-120b",effort:"medium"},{legacyId:"gemini-3.7-flash-high",model:"gemini-3.7-flash",effort:"high"},{legacyId:"gemini-3.7-flash-medium",model:"gemini-3.7-flash",effort:"medium"},{legacyId:"gemini-3.7-flash-low",model:"gemini-3.7-flash",effort:"low"},{legacyId:"gemini-3.6-flash-high",model:"gemini-3.6-flash",effort:"high"},{legacyId:"gemini-3.6-flash-medium",model:"gemini-3.6-flash",effort:"medium"},{legacyId:"gemini-3.6-flash-low",model:"gemini-3.6-flash",effort:"low"},{legacyId:"gemini-3.5-flash-high",model:"gemini-3.5-flash",effort:"high"},{legacyId:"gemini-3.5-flash-medium",model:"gemini-3.5-flash",effort:"medium"},{legacyId:"gemini-3.5-flash-low",model:"gemini-3.5-flash",effort:"low"},{legacyId:"gemini-3.1-pro-high",model:"gemini-3.1-pro",effort:"high"},{legacyId:"gemini-3.1-pro-low",model:"gemini-3.1-pro",effort:"low"},{legacyId:"gpt-oss-120b-medium",model:"gpt-oss-120b",effort:"medium"}],Fl=new Map(Ul.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function Bl(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function lt(t){return yr(t).models}function yr(t){return ql[t]??Is[t]??Bl()}function An(t,e){let n=yr(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=bs(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function ma(t){return yr(t).modelOverrides}function ka(){return lt("claude")}function Ta(){return lt("codex")}function wa(){return lt("copilot")}function ya(){return lt("antigravity")}var ql,Nt=x(()=>{h();wr();fr();In();ql={};});function Ea(t){return Wl[t]??t}var Wl,Ra=x(()=>{h();Nt();In();Wl={auto:"default"};});function Er(t,e){return (Tr[t]??[]).includes(e)}function pt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return jl.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function Sa(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function Ia(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["-c","sandbox_mode=read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function Aa(t){return !t||!Er("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function Oa(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=Ea(t);return e.has(n)?["--permission-mode",n]:[]}function ba(t){return t?Er("claude",t)?["--effort",t]:[]:[]}function Na(t){return t==="default"?[]:t&&Gl.has(t)?["--permission-mode",t]:[]}function va(t){return t===true?["--always-approve"]:[]}function xa(t,e=n=>console.warn(n)){return t===void 0?[]:t==="workspace"||t==="read-only"||t==="off"?["--sandbox",t]:(e(`[grok] Invalid sandbox value ${JSON.stringify(t)}; using workspace.`),["--sandbox","workspace"])}function Ca(t){return t?Er("grok",t)?["--effort",t]:[]:[]}function Da(t){if(!t)return [];switch(As(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function Pa(t){return t?Er("antigravity",t)?["--effort",t]:[]:[]}var jl,Gl,On=x(()=>{h();Ra();In();wr();jl=new Set(_a);Gl=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function zl(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),s="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,o="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,i=s!==void 0?s:o??0;return {inputTokens:s!==void 0?e+s:e,outputTokens:n,cachedInputTokens:i}}function Kl(t){let e=t.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(!("input_tokens"in n))return null;let r=Number(n.input_tokens??0),s=Number(n.output_tokens??0),i="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,u="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,d=i!==void 0?i:u??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:s,cachedInputTokens:d}}function Vl(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),s=Number(n.output??0),o=n.cache,i=o?Number(o.read??0):0;return {inputTokens:r+i,outputTokens:s,cachedInputTokens:i}}function La(t){let e=new Map,n;for(let o of t.split(`
|
|
37
|
+
`))if(o.trim())try{let i=JSON.parse(o);if(i.type!=="assistant")continue;let u=i.message,d=u?.id,c=u?.usage;if(typeof d!="string"||!c)continue;let l=Number(c.input_tokens??0),p=Number(c.cache_read_input_tokens??0);e.set(d,{inputTokens:l+p,cachedInputTokens:p});let g=u?.model;typeof g=="string"&&g&&(n=g);}catch{}if(e.size===0)return;let r=0,s=0;for(let o of e.values())r+=o.inputTokens,s+=o.cachedInputTokens;return {inputTokens:r,cachedInputTokens:s,model:n}}function Kt(t){if(!t||!t.trim())return;let e=null,n=null;for(let r of t.split(`
|
|
38
|
+
`))if(r.trim())try{let s=JSON.parse(r),o=Vl(s);if(o){n||(n={inputTokens:0,outputTokens:0,cachedInputTokens:0}),n.inputTokens+=o.inputTokens,n.outputTokens+=o.outputTokens,n.cachedInputTokens+=o.cachedInputTokens;continue}let i=zl(s)??Kl(s);i&&(e=i);}catch{}return n||(e??void 0)}var bn=x(()=>{h();});function He(t,e){if(typeof t!="object"||t===null||Array.isArray(t))return e;let n=t.timestamp;return typeof n!="string"||!Number.isFinite(Date.parse(n))?e:new Date(n).toISOString()}var vt=x(()=>{h();});function Ma(t){let e=t.split(`
|
|
39
|
+
`).filter(s=>s.trim()),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="assistant"&&Array.isArray(o.message?.content))for(let i of o.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&n.push(i.text.trim());o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function Yl(t){let e=t.split(`
|
|
40
|
+
`).filter(n=>n.trim());for(let n of e.reverse())try{let r=JSON.parse(n);if(typeof r=="object"&&r!==null&&r.type==="result")return r}catch{}}function Vt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Fa(t){let e=Vt(t.rate_limit_info);if(t.type==="rate_limit_event"&&e?.status==="rejected")return `Claude rate limit: ${typeof e.rateLimitType=="string"?e.rateLimitType:"unknown"} (status: rejected)`;if(t.error==="rate_limit"){let n=tp(t);return n?`Claude rate limit: ${n}`:"Claude rate limit"}if(t.type==="result"&&t.is_error===true){let n=typeof t.result=="string"?t.result:"";if(np(n))return `Claude rate limit: ${n}`}}function Ql(t){for(let e of t.split(`
|
|
41
|
+
`)){let n=e.trim();if(n){if(n.startsWith("Not logged in"))return n;try{let r=Vt(JSON.parse(n));if(r?.type==="result"&&r.is_error===!0&&typeof r.result=="string"&&r.result.startsWith("Not logged in"))return r.result}catch{}}}}function Zl(t){let e=Vt(t);if(e?.type!=="rate_limit_event")return;let n=Vt(Vt(e.rate_limit_info)?.unifiedWindows);if(!n)return;let r=$a(n.five_hour),s=$a(n.seven_day);if(!(!r&&!s))return {...r?{five_hour:r}:{},...s?{seven_day:s}:{}}}function $a(t){let e=Vt(t);if(!(typeof e?.utilization!="number"||typeof e.resetsAt!="number"))return {utilization:e.utilization,resetsAt:e.resetsAt}}function ep(t){let e=Fa(t);if(e)return e;if(t.type!=="result"||t.is_error!==true)return;let n=typeof t.result=="string"?t.result:"";if(n.trim())return n;let r=typeof t.subtype=="string"?t.subtype:"unknown",s=typeof t.terminal_reason=="string"?t.terminal_reason:"unknown";return `Claude ended without an answer (subtype=${r}, terminal_reason=${s})`}function tp(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
|
|
42
42
|
|
|
43
|
-
`):""}function
|
|
44
|
-
`):i=JSON.stringify(o),{timestamp:t,type:"tool_result",toolUseId:s,...
|
|
45
|
-
`);for(let r of e)if(r.trim())try{let s=JSON.parse(r);if(s.type==="result"){let o=s.usage,i=o?{inputTokens:Number(o.input_tokens??0)+Number(o.cache_read_input_tokens??0),outputTokens:Number(o.output_tokens??0),cachedInputTokens:Number(o.cache_read_input_tokens??0),costUsd:Number(s.total_cost_usd??0)}:null,u=s.modelUsage,d=u?Object.keys(u)[0]??null:null;return {usage:i,model:d}}}catch{}let n=
|
|
46
|
-
`).filter(s=>s.trim()),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="assistant.message"&&typeof o.data?.content=="string"){let i=o.data.content;i.trim()&&n.push(i.trim());}o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}var
|
|
47
|
-
`).map(s=>s.trim()).filter(Boolean),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="item.completed"&&(o.item?.type==="message"||o.item?.type==="agent_message")&&typeof o.item?.text=="string"){let i=o.item.text;i.trim()&&n.push(i.trim());}o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function
|
|
48
|
-
`),u=typeof e.error=="string"?e.error:pt(e.error)&&typeof e.error.message=="string"?e.error.message:"";return {timestamp:t,type:"tool_result",resultPreview:i||u,isError:e.status==="failed"||e.status==="error"||e.is_error===true||e.error!=null,...n?{toolUseId:n}:{}}}if(r==="tool_use"){let s=String(e.name||e.tool_name||""),o=e.input,i=Le(o);return s==="Bash"&&Ye(i)?Qe(t,i):{timestamp:t,type:"tool_use",toolName:s,toolInput:i}}if(r==="tool_result"){let s=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",...Pe(o,s)}}if(r==="web_search"){let s=e.action,o;if(s?.type==="search"){let i=s.queries;o=String(s.query||"")||(i?.length?i.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return !o&&!(pt(s)&&s.type==="other"&&e.query==="")?null:{timestamp:t,type:"tool_use",toolName:"WebSearch",toolInput:o}}if(r==="file_change"){let s=e.changes;if(!Array.isArray(s)||s.length===0)return null;let o=s.map(u=>String(u.path||"")).filter(Boolean);if(o.length===0)return null;let i=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:t,type:"tool_use",toolName:"Edit",toolInput:i}}return null}function sp(t,e){let n=e.type;if(n==="text")return {timestamp:t,type:"text",content:String(e.text||"")};if(n==="tool_use"){let r=String(e.name||""),s=e.input,o=Le(s);return r==="Bash"&&Ye(o)?Qe(t,o):{timestamp:t,type:"tool_use",toolName:r,toolInput:o}}return null}var Yl,Ql,Os,bs=x(()=>{h();It();qt();Sn();Bt();jt();Ts();Wt();Rn();Ot();bt();Yl=new Set(["turn.started","turn.completed","item.updated"]),Ql="cli/codex";Os={command:"codex",meta:{displayName:"Codex",models:da(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:s}=lt(e.model),o=e.effort??s,i=e.resumeSessionId?ga(e.mode):fa(e.mode),u=ha(o),d=r?["-m",r]:[],c=ep(e.additionalArgs??[]),p=c.includes("--json")||c.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...p,...i,...u,...d,...c,e.resumeSessionId,"-"],stdinMessage:t}:{args:["exec",...p,...i,...u,...d,...c],stdinMessage:t}},extractText(t){let e=tp(t);if(e)throw new Q(e,Ql);let n=xa(t);if(n)return n;let r=t.trim();return Xe(r,"codex")?"":r},extractPartialText(t){return xa(t)},parseResultMeta(t){let e=Gt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e,n){let r=e??new Date().toISOString(),s=[],o;try{JSON.parse(t),o=[t];}catch{o=Zl(t),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let[i,u]of o.entries()){let d;try{d=JSON.parse(u);}catch{continue}if(!pt(d))continue;let c=d.type;if(!c)continue;let l=Me(d,r);if(Da(d)){let g=Pa(d);s.push({timestamp:l,type:"error",content:g,errorMessage:g});continue}if(!c.startsWith("item.")&&!c.startsWith("turn.")&&!c.startsWith("thread.")||ks(d))continue;c==="thread.started"&&n&&n.state.delete("codex.pending");let p=d.item;if(p){if(c==="item.started"){s.push(...np(l,p,Ca(p,c,n,i)));continue}if(c==="item.completed"){let g=rp(l,p,Ca(p,c,n,i));g&&s.push(g);continue}}}return s},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Yl.has(r):!1}catch{return false}}};});function ap(t){return t?ip[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Tr(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Ua(t){let e=[],n=0,r=false,s=false,o=0;for(let u=0;u<t.length;u++){let d=t[u];if(s){s=false;continue}if(d==="\\"&&r){s=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(o,u+1).trim();c&&e.push(c),o=u+1;}}}let i=t.slice(o).trim();return i&&e.push(i),e}function Vt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function dp(t){let e=[],n=false;for(let r of t.split(/\r?\n/)){let s=r.trim();if(!s)continue;try{let i=JSON.parse(s);Vt(i)?e.push(i):n=!0;continue}catch{}let o=Ua(s);o.length>1&&console.warn("[opencode] extractText: falling back to concatenated-JSON split for a malformed line");for(let i of o)try{let u=JSON.parse(i);Vt(u)?e.push(u):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function vt(t){if(typeof t!="string")return;let e=t.split(/\r?\n/).map(n=>n.trim()).find(n=>n&&!/^at\s+/.test(n));if(e)return e.replace(/\u001b\[[0-?]*[ -/]*[@-~]/g,"").replace(/(?:[A-Za-z]:[\\/]|\/)(?:[^\s"'`()\[\]{}]+[\\/])*[^\s"'`()\[\]{}]+/g,"[path]").slice(0,Ha).trim()}function Fa(t){let e=Vt(t.error)?t.error:void 0,n=e&&Vt(e.data)?e.data:void 0,r=vt(e?.name),s=vt(n?.message)??vt(e?.message)??vt(t.message)??vt(t.errorMessage)??vt(t.error),o=vt(t.ref),i=r&&s&&r!==s?`${r}: ${s}`:r??s??$a;return (o?`${i} (ref: ${o})`:i).slice(0,Ha)}function La(t){let e=dp(t),n=[],r=null,s=0,o=[],i,u=false;for(let d of e.events){let c=typeof d.type=="string"?d.type:void 0;if(c){if(c==="text"){let l=Vt(d.part)?d.part:void 0,p=typeof l?.text=="string"?l.text:void 0;p?.trim()&&n.push(p.trim());continue}if(c==="result"){typeof d.result=="string"&&(r=d.result);continue}if(c==="tool_use"){s++;continue}if(c==="error"){o.push(Fa(d));continue}if(c==="step_finish"){u=true;let l=Vt(d.part)?d.part:void 0;i=typeof l?.reason=="string"?l.reason:void 0;}}}return {...e,texts:n,resultText:r,toolUseCount:s,errorMessages:o,terminalReason:i,hasTerminal:u}}function qa(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function wr(){return new Q("OpenCode returned no assistant output.",Kt,{code:"EMPTY_OUTPUT",kind:"transient"})}function up(){return new Q("OpenCode emitted malformed JSON output.",Kt,{code:"PROVIDER_CRASHED",kind:"transient"})}function Ma(t,e){switch(qa(t)){case "length":return new Q("OpenCode stopped because the context window was exceeded.",Kt,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new Q("OpenCode stopped because the content filter blocked the response.",Kt,{code:"UNKNOWN",kind:"permanent"});case "error":return new Q(e?`OpenCode error: ${e}`:`${$a} while generating a response.`,Kt,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var op,Kt,$a,Ha,ip,vs,Ns=x(()=>{h();It();Sn();jt();bt();op=new Set(["step_start","step_finish"]),Kt="cli/opencode",$a="OpenCode provider error",Ha=240,ip={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};vs={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,s=r!==void 0?[...r]:["run"];Tr(s,"--format")||s.push("--format","json"),e.resumeSessionId&&!s.includes("-s")&&!s.includes("--session")&&s.push("-s",e.resumeSessionId);let{agent:o,autoApprove:i}=ap(e.mode);Tr(s,"--agent")||o!==void 0&&s.push("--agent",o),i&&!Tr(s,"--auto")&&s.push("--auto"),e.effort!==void 0&&!Tr(s,"--variant")&&s.push("--variant",e.effort),e.model&&s.push("--model",e.model);let u;return !n&&!i&&!e.env?.OPENCODE_PERMISSION&&(u={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:s,stdinMessage:t,env:u}},extractText(t){let e=La(t),n=e.errorMessages[0];if(n){let i=Ma("error",n);if(i)throw i}let r=Ma(e.terminalReason??"",void 0);if(r)throw r;let s=e.texts.length>0?e.texts[e.texts.length-1]:void 0;if(s!==void 0){if(!e.hasTerminal)throw wr();return s}if(e.resultText?.trim()){if(!e.hasTerminal)throw wr();return e.resultText}if(e.malformed)throw up();if(!e.hasTerminal)throw wr();let o=qa(e.terminalReason);if((o==="stop"||o==="tool-calls")&&e.toolUseCount>0)return "";throw wr()},interpretExit(t,e,n=""){if(t===0)return null;let s=La(n).errorMessages[0];return s?new Q(`OpenCode error: ${s}`,Kt,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=Gt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],s;try{JSON.parse(t),s=[t];}catch{s=Ua(t),s.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let o of s){let i;try{i=JSON.parse(o);}catch{continue}let u=Me(i,n),d=i.type;if(d){if(d==="text"){let l=i.part?.text;l&&r.push({timestamp:u,type:"text",content:l});continue}if(d==="tool_use"){let c=i.part;if(!c)continue;let l=String(c.tool||""),p=String(c.callID||""),g=c.state,_=String(g?.status||""),m=g?.input,y=Le(m);if(r.push({timestamp:u,type:"tool_use",toolName:l,toolUseId:p,toolInput:y}),_==="completed"&&g?.output!==void 0){let k=g.output,N=typeof k=="string"?k:JSON.stringify(k);r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:N,isError:false});}else _==="error"&&r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}if(d==="error"){let c=Fa(i);r.push({timestamp:u,type:"error",content:c,errorMessage:c});continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?op.has(r):!1}catch{return false}}};});function In(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function cp(t,e){if(!(t?ct(xs).some(o=>o.id===t):false)||!t)return e;let r=En(xs,t),s=ia(xs)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:s&&r.includes(s)?s:void 0:s}var xs,Cs,Ds=x(()=>{h();It();yn();Ot();Rn();xs="antigravity";Cs={command:"agy",meta:{displayName:"Antigravity",models:ca(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:s}=lt(e.model),o=Es(r),i=o.model,u=e.effort??s??o.effort,d=cp(i,u),c=e.additionalArgs??[],l=i&&!In(c,"--model")?["--model",i]:[],p=In(c,"--effort")?[]:Ra(d),g=In(c,"--mode")||In(c,"--dangerously-skip-permissions")?[]:Ea(e.mode),_=In(c,"--print")?[]:["--print",t];return {args:[...l,...p,...g,...c,..._]}},extractText(t){let e=t.trim();if(!e)throw new Q("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(t){return {usage:null,model:null}},parseEvent(t,e){return []}};});var Ba=x(()=>{h();Bt();jt();Wt();bt();});function Jt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Xt(t){return Jt(t)?t:void 0}function me(t){return typeof t=="string"?t:void 0}function xt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function hp(t){let e=[],n=-1,r=0,s=false,o=false;for(let i=0;i<t.length;i+=1){let u=t[i];if(n===-1){(u==="{"||u==="[")&&(n=i,r=1);continue}if(o){o=false;continue}if(u==="\\"&&s){o=true;continue}if(u==='"'){s=!s;continue}s||(u==="{"||u==="["?r+=1:(u==="}"||u==="]")&&(r-=1,r===0&&(e.push(t.slice(n,i+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function An(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return Jt(n)?[n]:[]}catch{return hp(e).flatMap(n=>{try{let r=JSON.parse(n);return Jt(r)?[r]:[]}catch{return []}})}}function Ka(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function Nt(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(Nt).filter(n=>n!==void 0);return e.length>0?e.join(`
|
|
49
|
-
`):void 0}if(
|
|
43
|
+
`):""}function np(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function Ua(t){return t.replace(/\s+/g," ").trim()}function rp(t,e){let n=t?.description;if(typeof n!="string")return;let r=Ua(n);if(!r||r===Ua(e))return;if(r.length<=Ha)return r;let s=r.slice(0,Ha-1);return /[\uD800-\uDBFF]$/.test(s)&&(s=s.slice(0,-1)),`${s}\u2026`}function sp(t,e){let n=e.type;if(n==="text"){let r=String(e.text||"");return r?{timestamp:t,type:"text",content:r}:null}if(n==="thinking"){let r=typeof e.thinking=="string"?e.thinking.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="tool_use"){let r=String(e.name||""),s=e.id,o=e.input,i=$e(o);if(r==="Bash"&&Ze(i))return et(t,i,s);let u=rp(o,i);return {timestamp:t,type:"tool_use",toolUseId:s,toolName:r,toolInput:i,...u?{toolTitle:u}:{}}}if(n==="tool_result"){let r=!!e.is_error,s=e.tool_use_id,o=e.output??e.content??"",i;return typeof o=="string"?i=o:Array.isArray(o)?i=o.filter(u=>u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
|
|
44
|
+
`):i=JSON.stringify(o),{timestamp:t,type:"tool_result",toolUseId:s,...Me(i,r)}}return null}var Jl,Xl,Rr,Ha,Ns=x(()=>{h();ys();Ot();Wt();jt();Gt();zt();On();Nt();bn();vt();Jl=new Set(["tool_progress"]),Xl="cli/claude";Rr={command:"claude",meta:{displayName:"Claude",models:ka(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:s}=pt(e.model),o=e.effort??s,i=Oa(e.mode),u=ba(o),d=r?["--model",r]:[],c=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let p=[...e.additionalArgs];return p.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...c,...i,...u,...d,...p],stdinMessage:t}:{args:["--output-format","stream-json","--verbose",...c,...i,...u,...d,...p],stdinMessage:t}}return {args:["-p","--output-format","stream-json","--verbose",...c,...i,...u,...d],stdinMessage:t}},extractText(t){let e=Yl(t);if(e?.is_error===true){let s=Rr.extractFailure(JSON.stringify(e));if(s)throw s;let o=typeof e.subtype=="string"?e.subtype:"unknown",i=typeof e.terminal_reason=="string"?e.terminal_reason:"unknown";throw new Q(`Claude ended without an answer (subtype=${o}, terminal_reason=${i})`,Xl,{code:"EMPTY_OUTPUT",kind:"permanent"})}let n=Ma(t);if(n)return n;let r=t.trim();return Qe(r,"claude")?"":r},extractPartialText(t){return Ma(t)},extractFailure(t){try{let e=JSON.parse(t),n=Fa(e);if(n)return new bt(n)}catch{}return null},interpretExit(t,e,n){let r=Ql(n??"");return r?new Q(`Claude is not logged in (exit ${t}): ${r}. Sign in to this account with the official "claude auth login".`,"cli/claude",{code:"AUTH_REQUIRED",kind:"config"}):null},observeRateLimit(t){try{let e=JSON.parse(t);return Zl(e)}catch{return}},parseResultMeta(t){let e=t.split(`
|
|
45
|
+
`);for(let r of e)if(r.trim())try{let s=JSON.parse(r);if(s.type==="result"){let o=s.usage,i=o?{inputTokens:Number(o.input_tokens??0)+Number(o.cache_read_input_tokens??0),outputTokens:Number(o.output_tokens??0),cachedInputTokens:Number(o.cache_read_input_tokens??0),costUsd:Number(s.total_cost_usd??0)}:null,u=s.modelUsage,d=u?Object.keys(u)[0]??null:null;return {usage:i,model:d}}}catch{}let n=La(t);return n?{usage:{inputTokens:n.inputTokens,outputTokens:0,cachedInputTokens:n.cachedInputTokens,costUsd:0},model:n.model??null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];let s=He(n,e??new Date().toISOString()),o=ep(n);if(o)return [{timestamp:s,type:"error",content:o,errorMessage:o}];let i=n.output_file,u=n.summary;if(r==="system"&&n.subtype==="task_notification"&&n.status==="completed"&&typeof i=="string"&&i.trim().length>0&&typeof u=="string"&&u.trim().length>0)return [{timestamp:s,type:"text",content:u}];if(r!=="assistant"&&r!=="user")return [];let c=n.message?.content;if(!Array.isArray(c))return [];let l=[];for(let p of c){let g=sp(s,p);g&&l.push(g);}return l},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Jl.has(r):!1}catch{return false}}};Ha=200;});function qa(t){let e=t.split(`
|
|
46
|
+
`).filter(s=>s.trim()),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="assistant.message"&&typeof o.data?.content=="string"){let i=o.data.content;i.trim()&&n.push(i.trim());}o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}var op,vs,xs=x(()=>{h();Wt();bn();jt();zt();Gt();Nt();wr();vt();op=new Set(["interactive","plan","autopilot"]);vs={command:"copilot",meta:{displayName:"Copilot",models:wa()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&op.has(e.mode)&&r.push("--mode",e.mode),e.effort&&(Tr.copilot??[]).includes(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=qa(t);if(e)return e;let n=t.trim();return Qe(n,"copilot")?"":n},extractPartialText(t){return qa(t)},parseResultMeta(t){let e=Kt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let s=n.data;if(!s)return [];let o=He(n,e??new Date().toISOString()),i=s.toolCallId;if(r==="tool.execution_start"){let u=String(s.toolName||""),d=s.arguments,c=$e(d);return (u==="bash"||u==="Bash")&&Ze(c)?[et(o,c,i)]:[{timestamp:o,type:"tool_use",toolName:u,toolInput:c,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let u=s.error;if(u)return [{timestamp:o,type:"tool_result",...i&&{toolUseId:i},...Me(String(u.message||""),true)}];let d=s.result,c=String(d?.content||"");return [{timestamp:o,type:"tool_result",...i&&{toolUseId:i},...Me(c,false)}]}if(r==="assistant.message"){let u=String(s.content||"");return u?[{timestamp:o,type:"text",content:u}]:[]}return []}};});function dp(t){let e=[],n=0,r=false,s=false,o=0;for(let u=0;u<t.length;u++){let d=t[u];if(s){s=false;continue}if(d==="\\"&&r){s=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(o,u+1).trim();c&&e.push(c),o=u+1;}}}let i=t.slice(o).trim();return i&&e.push(i),e}function up(t){return t[0]==="exec"?t.slice(1):t}function Ba(t){let e=t.split(`
|
|
47
|
+
`).map(s=>s.trim()).filter(Boolean),n=[],r=null;for(let s of e)try{let o=JSON.parse(s);if(o.type==="item.completed"&&(o.item?.type==="message"||o.item?.type==="agent_message")&&typeof o.item?.text=="string"){let i=o.item.text;i.trim()&&n.push(i.trim());}o.type==="result"&&typeof o.result=="string"&&(r=o.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function ft(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ja(t){return t.type==="turn.failed"?true:t.type!=="error"?false:typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||ft(t.error)}function Ga(t){let e=ft(t.error)?t.error:void 0,n=[t.message,t.errorMessage,e?.message,e?.detail,typeof t.error=="string"?t.error:void 0];for(let r of n)if(typeof r=="string"&&r.trim())return r;return t.type==="turn.failed"?"Codex turn failed.":"Codex CLI reported an error."}function cp(t){for(let e of t.split(/\r?\n/)){if(!e.trim())continue;let n;try{n=JSON.parse(e);}catch{continue}if(ft(n)&&ja(n))return Ga(n)}}function Wa(t,e,n,r){if(!n||t.type!=="command_execution"&&t.type!=="mcp_tool_call"||typeof t.id!="string"||!t.id.trim()||t.type==="mcp_tool_call"&&e==="item.started"&&(typeof t.server!="string"||typeof t.tool!="string"))return;let s=n.state.get("codex.pending");s||(s=new Map,n.state.set("codex.pending",s));let o=JSON.stringify([t.type,t.id]);if(e==="item.started"){let d=`codex:${JSON.stringify(t.id)}#${n.rowIndex}:${r}`,c=s.get(o)??[];return c.push(d),s.set(o,c),d}let i=s.get(o),u=i?.pop();return i?.length||s.delete(o),u}function lp(t,e,n){let r=e.type;if(r==="command_execution"){let s=String(e.command||"");return Ze(s)?[et(t,s,n)]:[{timestamp:t,type:"tool_use",toolName:"Bash",toolInput:s,...n?{toolUseId:n}:{}}]}return r==="mcp_tool_call"?typeof e.server!="string"||typeof e.tool!="string"?[]:[{timestamp:t,type:"tool_use",toolName:`${e.server}/${e.tool}`,toolInput:$e(e.arguments),...n?{toolUseId:n}:{}}]:[]}function pp(t,e,n){let r=e.type;if(r==="message"||r==="text"){let s=e.content;if(Array.isArray(s))for(let o of s){let i=fp(t,o);if(i)return i}if(typeof e.text=="string")return {timestamp:t,type:"text",content:e.text}}if(r==="agent_message"&&typeof e.text=="string")return {timestamp:t,type:"text",content:e.text};if(r==="reasoning"){let s=typeof e.text=="string"?e.text.trim():"";return s?{timestamp:t,type:"thinking",content:s}:null}if(r==="command_execution"){let s=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:t,type:"tool_result",...Me(s,o),...n?{toolUseId:n}:{}}}if(r==="mcp_tool_call"){let s=ft(e.result)?e.result:void 0,i=(Array.isArray(s?.content)?s.content:[]).filter(d=>ft(d)&&d.type==="text"&&typeof d.text=="string").map(d=>d.text).join(`
|
|
48
|
+
`),u=typeof e.error=="string"?e.error:ft(e.error)&&typeof e.error.message=="string"?e.error.message:"";return {timestamp:t,type:"tool_result",resultPreview:i||u,isError:e.status==="failed"||e.status==="error"||e.is_error===true||e.error!=null,...n?{toolUseId:n}:{}}}if(r==="tool_use"){let s=String(e.name||e.tool_name||""),o=e.input,i=$e(o);return s==="Bash"&&Ze(i)?et(t,i):{timestamp:t,type:"tool_use",toolName:s,toolInput:i}}if(r==="tool_result"){let s=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",...Me(o,s)}}if(r==="web_search"){let s=e.action,o;if(s?.type==="search"){let i=s.queries;o=String(s.query||"")||(i?.length?i.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return !o&&!(ft(s)&&s.type==="other"&&e.query==="")?null:{timestamp:t,type:"tool_use",toolName:"WebSearch",toolInput:o}}if(r==="file_change"){let s=e.changes;if(!Array.isArray(s)||s.length===0)return null;let o=s.map(u=>String(u.path||"")).filter(Boolean);if(o.length===0)return null;let i=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:t,type:"tool_use",toolName:"Edit",toolInput:i}}return null}function fp(t,e){let n=e.type;if(n==="text")return {timestamp:t,type:"text",content:String(e.text||"")};if(n==="tool_use"){let r=String(e.name||""),s=e.input,o=$e(s);return r==="Bash"&&Ze(o)?et(t,o):{timestamp:t,type:"tool_use",toolName:r,toolInput:o}}return null}var ip,ap,Cs,Ds=x(()=>{h();Ot();Wt();bn();jt();zt();Ss();Gt();On();Nt();vt();ip=new Set(["turn.started","turn.completed","item.updated"]),ap="cli/codex";Cs={command:"codex",meta:{displayName:"Codex",models:Ta(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:s}=pt(e.model),o=e.effort??s,i=e.resumeSessionId?Ia(e.mode):Sa(e.mode),u=Aa(o),d=r?["-m",r]:[],c=up(e.additionalArgs??[]),p=c.includes("--json")||c.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...p,...i,...u,...d,...c,e.resumeSessionId,"-"],stdinMessage:t}:{args:["exec",...p,...i,...u,...d,...c],stdinMessage:t}},extractText(t){let e=cp(t);if(e)throw new Q(e,ap);let n=Ba(t);if(n)return n;let r=t.trim();return Qe(r,"codex")?"":r},extractPartialText(t){return Ba(t)},parseResultMeta(t){let e=Kt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e,n){let r=e??new Date().toISOString(),s=[],o;try{JSON.parse(t),o=[t];}catch{o=dp(t),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let[i,u]of o.entries()){let d;try{d=JSON.parse(u);}catch{continue}if(!ft(d))continue;let c=d.type;if(!c)continue;let l=He(d,r);if(ja(d)){let g=Ga(d);s.push({timestamp:l,type:"error",content:g,errorMessage:g});continue}if(!c.startsWith("item.")&&!c.startsWith("turn.")&&!c.startsWith("thread.")||Rs(d))continue;c==="thread.started"&&n&&n.state.delete("codex.pending");let p=d.item;if(p){if(c==="item.started"){s.push(...lp(l,p,Wa(p,c,n,i)));continue}if(c==="item.completed"){let g=pp(l,p,Wa(p,c,n,i));g&&s.push(g);continue}}}return s},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?ip.has(r):!1}catch{return false}}};});function _p(t){return t?hp[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Sr(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Xa(t){let e=[],n=0,r=false,s=false,o=0;for(let u=0;u<t.length;u++){let d=t[u];if(s){s=false;continue}if(d==="\\"&&r){s=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(o,u+1).trim();c&&e.push(c),o=u+1;}}}let i=t.slice(o).trim();return i&&e.push(i),e}function Xt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function mp(t){let e=[],n=false;for(let r of t.split(/\r?\n/)){let s=r.trim();if(!s)continue;try{let i=JSON.parse(s);Xt(i)?e.push(i):n=!0;continue}catch{}let o=Xa(s);o.length>1&&console.warn("[opencode] extractText: falling back to concatenated-JSON split for a malformed line");for(let i of o)try{let u=JSON.parse(i);Xt(u)?e.push(u):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function xt(t){if(typeof t!="string")return;let e=t.split(/\r?\n/).map(n=>n.trim()).find(n=>n&&!/^at\s+/.test(n));if(e)return e.replace(/\u001b\[[0-?]*[ -/]*[@-~]/g,"").replace(/(?:[A-Za-z]:[\\/]|\/)(?:[^\s"'`()\[\]{}]+[\\/])*[^\s"'`()\[\]{}]+/g,"[path]").slice(0,Ja).trim()}function Ya(t){let e=Xt(t.error)?t.error:void 0,n=e&&Xt(e.data)?e.data:void 0,r=xt(e?.name),s=xt(n?.message)??xt(e?.message)??xt(t.message)??xt(t.errorMessage)??xt(t.error),o=xt(t.ref),i=r&&s&&r!==s?`${r}: ${s}`:r??s??Va;return (o?`${i} (ref: ${o})`:i).slice(0,Ja)}function za(t){let e=mp(t),n=[],r=null,s=0,o=[],i,u=false;for(let d of e.events){let c=typeof d.type=="string"?d.type:void 0;if(c){if(c==="text"){let l=Xt(d.part)?d.part:void 0,p=typeof l?.text=="string"?l.text:void 0;p?.trim()&&n.push(p.trim());continue}if(c==="result"){typeof d.result=="string"&&(r=d.result);continue}if(c==="tool_use"){s++;continue}if(c==="error"){o.push(Ya(d));continue}if(c==="step_finish"){u=true;let l=Xt(d.part)?d.part:void 0;i=typeof l?.reason=="string"?l.reason:void 0;}}}return {...e,texts:n,resultText:r,toolUseCount:s,errorMessages:o,terminalReason:i,hasTerminal:u}}function Qa(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function Ir(){return new Q("OpenCode returned no assistant output.",Jt,{code:"EMPTY_OUTPUT",kind:"transient"})}function kp(){return new Q("OpenCode emitted malformed JSON output.",Jt,{code:"PROVIDER_CRASHED",kind:"transient"})}function Ka(t,e){switch(Qa(t)){case "length":return new Q("OpenCode stopped because the context window was exceeded.",Jt,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new Q("OpenCode stopped because the content filter blocked the response.",Jt,{code:"UNKNOWN",kind:"permanent"});case "error":return new Q(e?`OpenCode error: ${e}`:`${Va} while generating a response.`,Jt,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var gp,Jt,Va,Ja,hp,Ps,Ls=x(()=>{h();Ot();bn();zt();vt();gp=new Set(["step_start","step_finish"]),Jt="cli/opencode",Va="OpenCode provider error",Ja=240,hp={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};Ps={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,s=r!==void 0?[...r]:["run"];Sr(s,"--format")||s.push("--format","json"),e.resumeSessionId&&!s.includes("-s")&&!s.includes("--session")&&s.push("-s",e.resumeSessionId);let{agent:o,autoApprove:i}=_p(e.mode);Sr(s,"--agent")||o!==void 0&&s.push("--agent",o),i&&!Sr(s,"--auto")&&s.push("--auto"),e.effort!==void 0&&!Sr(s,"--variant")&&s.push("--variant",e.effort),e.model&&s.push("--model",e.model);let u;return !n&&!i&&!e.env?.OPENCODE_PERMISSION&&(u={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:s,stdinMessage:t,env:u}},extractText(t){let e=za(t),n=e.errorMessages[0];if(n){let i=Ka("error",n);if(i)throw i}let r=Ka(e.terminalReason??"",void 0);if(r)throw r;let s=e.texts.length>0?e.texts[e.texts.length-1]:void 0;if(s!==void 0){if(!e.hasTerminal)throw Ir();return s}if(e.resultText?.trim()){if(!e.hasTerminal)throw Ir();return e.resultText}if(e.malformed)throw kp();if(!e.hasTerminal)throw Ir();let o=Qa(e.terminalReason);if((o==="stop"||o==="tool-calls")&&e.toolUseCount>0)return "";throw Ir()},interpretExit(t,e,n=""){if(t===0)return null;let s=za(n).errorMessages[0];return s?new Q(`OpenCode error: ${s}`,Jt,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=Kt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],s;try{JSON.parse(t),s=[t];}catch{s=Xa(t),s.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let o of s){let i;try{i=JSON.parse(o);}catch{continue}let u=He(i,n),d=i.type;if(d){if(d==="text"){let l=i.part?.text;l&&r.push({timestamp:u,type:"text",content:l});continue}if(d==="tool_use"){let c=i.part;if(!c)continue;let l=String(c.tool||""),p=String(c.callID||""),g=c.state,_=String(g?.status||""),m=g?.input,y=$e(m);if(r.push({timestamp:u,type:"tool_use",toolName:l,toolUseId:p,toolInput:y}),_==="completed"&&g?.output!==void 0){let k=g.output,v=typeof k=="string"?k:JSON.stringify(k);r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:v,isError:false});}else _==="error"&&r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}if(d==="error"){let c=Ya(i);r.push({timestamp:u,type:"error",content:c,errorMessage:c});continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?gp.has(r):!1}catch{return false}}};});function Nn(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Tp(t,e){if(!(t?lt(Ms).some(o=>o.id===t):false)||!t)return e;let r=An(Ms,t),s=ma(Ms)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:s&&r.includes(s)?s:void 0:s}var Ms,$s,Hs=x(()=>{h();Ot();In();Nt();On();Ms="antigravity";$s={command:"agy",meta:{displayName:"Antigravity",models:ya(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:s}=pt(e.model),o=Os(r),i=o.model,u=e.effort??s??o.effort,d=Tp(i,u),c=e.additionalArgs??[],l=i&&!Nn(c,"--model")?["--model",i]:[],p=Nn(c,"--effort")?[]:Pa(d),g=Nn(c,"--mode")||Nn(c,"--dangerously-skip-permissions")?[]:Da(e.mode),_=Nn(c,"--print")?[]:["--print",t];return {args:[...l,...p,...g,...c,..._]}},extractText(t){let e=t.trim();if(!e)throw new Q("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(t){return {usage:null,model:null}},parseEvent(t,e){return []}};});var Za=x(()=>{h();jt();zt();Gt();vt();});function Yt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Qt(t){return Yt(t)?t:void 0}function Te(t){return typeof t=="string"?t:void 0}function Dt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function Sp(t){let e=[],n=-1,r=0,s=false,o=false;for(let i=0;i<t.length;i+=1){let u=t[i];if(n===-1){(u==="{"||u==="[")&&(n=i,r=1);continue}if(o){o=false;continue}if(u==="\\"&&s){o=true;continue}if(u==='"'){s=!s;continue}s||(u==="{"||u==="["?r+=1:(u==="}"||u==="]")&&(r-=1,r===0&&(e.push(t.slice(n,i+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function vn(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return Yt(n)?[n]:[]}catch{return Sp(e).flatMap(n=>{try{let r=JSON.parse(n);return Yt(r)?[r]:[]}catch{return []}})}}function sd(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function Ct(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(Ct).filter(n=>n!==void 0);return e.length>0?e.join(`
|
|
49
|
+
`):void 0}if(Yt(t)){if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error;if(t.type==="text"&&typeof t.data=="string")return t.data;for(let e of ["content","FileContent","rawOutput"]){let n=Ct(t[e]);if(n!==void 0)return n}}}function Ip(t){let e=i=>Array.isArray(i)&&i.every(u=>Number.isInteger(u)&&u>=0&&u<=255),n=i=>typeof i=="string"&&i.trim().length>0?i:void 0,r=i=>new TextDecoder("utf-8",{fatal:false}).decode(Uint8Array.from(i)),s=i=>{let u=JSON.stringify(i,(d,c)=>e(c)?`<bytes:${c.length}>`:c);return u===void 0?String(i):u},o=t.rawOutput;if(o!=null){let i=Qt(o);if(!i)return n(Ct(o))??s(o);let u;if(e(i.output)&&i.output.length>0&&(u=n(r(i.output))),!u&&e(i.stdout)&&i.stdout.length>0&&(u=n(r(i.stdout))),!u){let l=Qt(i.Result);u=n(i.output)??n(l?.output)??n(Ct(o));}let d=e(i.stderr)&&i.stderr.length>0?r(i.stderr):void 0;if(d!==void 0)if(u){let l=u.endsWith(`
|
|
50
50
|
`)||u.endsWith("\r")?"":`
|
|
51
|
-
`;u=`${u}${l}${d}`;}else u=n(d);if(u)return u;let c=n(i.summary)??n(
|
|
52
|
-
`).flatMap(
|
|
53
|
-
`),s=r.length>
|
|
54
|
-
`).flatMap(
|
|
55
|
-
`).flatMap(
|
|
56
|
-
`)??"";if(!n.trim())return;let r=Qa(t.provider);if(!r)return;let s;try{s=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let o=Ep(s?.model,t.model),i=s?.usage;if(!i)return {stdout:n,adapter:r};let u=Er(i.inputTokens),d=Er(i.outputTokens),c=Er(i.cachedInputTokens),l=Pi(Er(i.costUsd),u,d,c,o);return u!==0||d!==0||c!==0||l!==0?{stdout:n,adapter:r,usage:{inputTokens:u,outputTokens:d,cachedInputTokens:c,costUsd:l,model:o}}:{stdout:n,adapter:r}}var Ms=x(()=>{h();Za();dr();});function Hs(t){let e=new Set;for(let n of t)for(let r of Rp.get(n)??[n])e.add(r);return [...e]}function Us(t){if(t)try{let e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))return;let n=e.terminalReason;return typeof n=="string"&&Sp.has(n)?n:void 0}catch{return}}function Ze(t){let e=Us(t.metadata);if(e)return e;if(t.status==="runner_lost")return "runner_lost";if(t.status==="stopped")return "user_stop";if(t.status==="failed"&&typeof t.error=="string"){if($s.stopped.test(t.error))return "user_stop";if($s.runnerLost.test(t.error))return "runner_lost"}}function $e(t){switch(t.status){case "stopped":case "pending":case "running":case "paused":case "success":return t.status;case "completed":case "done":return "success";case "error":case "runner_lost":return "failed";case "failed":{let e=Us(t.metadata);return e==="user_stop"?"stopped":e?"failed":typeof t.error=="string"&&$s.stopped.test(t.error)?"stopped":"failed"}default:return t.status}}function Ip(t){if(!t)return {};try{let e=JSON.parse(t);return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{}}catch{return {}}}function bn(t){let e=$e(t);return t.status==="runner_lost"&&Us(t.metadata)===void 0?{...t,status:e,metadata:JSON.stringify({...Ip(t.metadata),terminalReason:"runner_lost"})}:{...t,status:e}}var On,Rp,$s,Sp,vn=x(()=>{h();On=["success","completed","done","failed","error","stopped","runner_lost"],Rp=new Map([["success",["success","completed","done"]],["failed",["failed","error","runner_lost"]]]);$s={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},Sp=new Set(["user_stop","runner_lost","launch_failed"]);});function Fs(t,e,n=1){let r=process.env[t];if(r===void 0||r==="")return e;let s=Number(r);return !Number.isFinite(s)||s<=0?e:Math.max(n,Math.trunc(s))}function qs(){return Fs("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function Qt(){return Fs("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function Ir(){return Fs("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function Yt(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Sr(t){let e=typeof t=="object"&&t!==null&&"code"in t?String(t.code):t instanceof Error?t.name:typeof t;console.warn(`[crewx] task heartbeat write failed (${e}); execution continues`);}function Ap(t){return t?{id:t.id,status:t.status,run_epoch:t.run_epoch,stop_requested_at:t.stop_requested_at,stop_requested_epoch:t.stop_requested_epoch,pid:t.pid,metadata:t.metadata,started_at:t.started_at,duration_ms:t.duration_ms}:null}function ed(t,e){return !!t.stop_requested_at&&Yt(t.stop_requested_epoch)===Yt(e)}function td(t,e){let n=Yt(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let s=Ap(t.getTask(e.taskId));return !s||s.status!=="running"||Yt(s.run_epoch)!==n?{accepted:false,row:s}:{accepted:true,row:s}}function od(t,e){let n=Nn.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),Nn.delete(t),true)}function xn(t,e){let n=Nn.get(t);return !n||e!==void 0&&n.runEpoch!==Yt(e)?false:od(t,n)}function id(t,e){let n=Yt(e.runEpoch);xn(e.taskId);let r=true,s=null;try{let c=td(t,{...e,runEpoch:n});r=c.accepted,s=c.row;}catch(c){Sr(c);}if(!r)return false;let o=qs(),i=Math.min(o,1e3),u=setInterval(()=>{let c=Nn.get(e.taskId);if(!(!c||c.timer!==u))try{c.heartbeatElapsedMs+=i;let l=c.heartbeatElapsedMs>=o,p=td(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:l});if(!p.accepted){od(e.taskId,c);return}l&&(c.heartbeatElapsedMs%=o,c.lastHeartbeatAt=Date.now()),p.row&&ed(p.row,n)&&!c.stopRequested&&(c.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(Sr));}catch(l){Sr(l);}},i),d={timer:u,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return Nn.set(e.taskId,d),typeof u=="object"&&u!==null&&"unref"in u&&u.unref(),s&&ed(s,n)&&e.onStopRequested&&(d.stopRequested=true,Promise.resolve(e.onStopRequested(s)).catch(Sr)),true}var nd,rd,sd,Nn,Cn=x(()=>{h();nd=1e4,rd=3e4,sd=18e5;Nn=new Map;});function Ar(t,e=Date.now(),n=Gs){let r=t?Date.parse(t):Number.NaN,s=typeof e=="number"?e:Date.parse(e),o=Vs(n,Gs,0);return Number.isFinite(r)&&Number.isFinite(s)&&s-r>o?"forced":"cooperative"}function Vs(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function ld(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function Pp(t){if(!t)return;let e=ld(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function Re(t,e){if(!t)return {status:"not_running",finalStatus:"not_running",...e?{pid:e}:{}};let n=typeof t.pid=="number"&&t.pid>0?t.pid:e;if(t.status==="stopped"){let r=Pp(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function Qs(t,e,n="Process owner could not be verified"){let r=e??(t.pid&&t.pid>0?t.pid:void 0);return {status:"ownership_unverified",finalStatus:t.status,...r?{pid:r}:{},error:n}}function V(t,e,n){let r=n??(t?.pid&&t.pid>0?t.pid:void 0);return {status:"failed",finalStatus:t?.status??null,...r?{pid:r}:{},error:e}}function js(t,e){return V(t,vp,e)}function Lp(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=Qt():false}function Mp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function $p(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=ld(t.metadata),r=n.ownership==="runner"&&typeof n.providerPid=="number"&&Number.isSafeInteger(n.providerPid)&&n.providerPid>0?n.providerPid:void 0;return [...new Set([e,r].filter(s=>s!==void 0))]}function Hp(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return Re(r,n)}async function Up(t,e,n,r){let s=Date.now()+n;for(;;){let o=Hp(t,e);if(o)return o;let i=s-Date.now();if(i<=0)return;await new Promise(u=>{setTimeout(u,Math.min(r,i));});}}async function cd(t,e,n){let r=new Date().toISOString(),s={origin:n.origin??"internal",...n.callerPid!==void 0?{callerPid:n.callerPid}:{},...n.callerTaskId!==void 0?{callerTaskId:n.callerTaskId}:{}},o=t.requestTaskStop({id:e,requestedAt:r,...s}),i=t.getTask(e);if(!o.accepted){if(o.status==="pending"){let D=t.stopPendingTask(e,void 0,void 0,{...s,at:r}),E=t.getTask(e);if(D||!E||E.status!=="running")return Re(E);if(o=t.requestTaskStop({id:e,requestedAt:r,...s}),!o.accepted&&o.status!=="running"||!o.accepted&&!o.alreadyRequestedAt)return Re(t.getTask(e))}else if(!(o.status==="running"&&o.alreadyRequestedAt))return Re(i)}let u=o.runEpoch,d=Vs(n.graceMs,Gs,0),c=Vs(n.pollMs,Op,1),l=await Up(t,e,d,c);if(l)return l;let p=t.getTask(e);if(!p||p.status!=="running")return Re(p);let g=$p(p),_=g[0];if(!_){let D=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),E=t.getTask(e);return D||E?.status!=="running"?Re(E):V(E,"Failed to finalize task stop")}let m=Mp(n),y="unknown";if(!Lp(p,Date.now())){let D=n.processControl?.checkProcessOwnershipAsync??ur;try{y=await D(_,n.ownershipMarkers??Ys,m);}catch{y="unknown";}if(y!=="owned")return Qs(p)}let k=n.processControl?.terminateProcessTree??Ft;for(let D of g){let E;try{E=await k(D,{...m,signal:Ut});}catch(A){E={status:"failed",pid:D,method:m.platform==="win32"?"taskkill":"process-group",error:A instanceof Error?A.message:String(A)};}if(E.status==="failed")return V(t.getTask(e),E.error??"Failed to terminate process tree")}let N=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),I=t.getTask(e);return N||I?.status!=="running"?Re(I,_):V(I,"Task changed before stop was finalized")}function Js(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function Xs(t){return Number.isSafeInteger(t)&&t>=0}function Dn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Fp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function qp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Bp(t,e){let n=t?.pid&&t.pid>0?t.pid:e;return {status:"stopped",method:"forced",finalStatus:t?.status??"failed",...n?{pid:n}:{}}}function Wp(t){switch(t){case "epoch_mismatch":return zs;case "workspace_mismatch":return Ks;default:return}}async function pd(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return js(n,Js(e.targetPid)?e.targetPid:void 0);if(!Xs(e.sourceRunEpoch)||!Xs(e.settleRunEpoch)||Dn(n.run_epoch)!==e.settleRunEpoch)return V(n,Bs,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return V(n,Ws,e.targetPid);let r=new Date().toISOString(),s;try{s=t.requestTaskStop({id:e.taskId,requestedAt:r,sourceRunEpoch:e.sourceRunEpoch,settleRunEpoch:e.settleRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return V(n,Np,e.targetPid)}let o=t.getTask(e.taskId);if(!o||o.status!=="running")return js(o,e.targetPid);if(s.runEpoch!==e.settleRunEpoch||Dn(o.run_epoch)!==e.settleRunEpoch)return V(o,Bs,e.targetPid);if(e.workspaceId!==void 0&&o.workspace_id!==e.workspaceId)return V(o,Ws,e.targetPid);if(!Js(e.targetPid))return V(o,bp);let i=Fp(e),u=e.processControl?.checkProcessOwnershipAsync??ur,d="unknown";try{d=await u(e.targetPid,e.ownershipMarkers??Ys,i);}catch{d="unknown";}if(d!=="owned")return Qs(o,e.targetPid);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return js(c,e.targetPid);if(Dn(c.run_epoch)!==e.settleRunEpoch)return V(c,Bs,e.targetPid);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return V(c,Ws,e.targetPid);let l=e.processControl?.terminateProcessTree??Ft,p;try{p=await l(e.targetPid,{...i,signal:Ut});}catch{return V(t.getTask(e.taskId),ad,e.targetPid)}if(p.status==="failed")return V(t.getTask(e.taskId),ad,e.targetPid);let g;try{g=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return V(t.getTask(e.taskId),dd,e.targetPid)}return g?Re(t.getTask(e.taskId),e.targetPid):V(t.getTask(e.taskId),dd,e.targetPid)}async function fd(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Re(n);if(!Xs(e.expectedRunEpoch)||Dn(n.run_epoch)!==e.expectedRunEpoch)return V(n,zs);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return V(n,Ks);let r=n.pid;if(!Js(r))return V(n,xp);let s=qp(e),o=e.processControl?.checkProcessOwnershipAsync??ur,i="unknown";try{i=await o(r,e.ownershipMarkers??Ys,s);}catch{i="unknown";}if(i!=="owned")return Qs(n,r,Cp);let u=e.processControl?.terminateProcessTree??Ft,d;try{d=await u(r,{...s,signal:Ut});}catch{return V(t.getTask(e.taskId),ud,r)}if(d.status==="failed")return V(t.getTask(e.taskId),ud,r);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return Re(c,r);if(Dn(c.run_epoch)!==e.expectedRunEpoch)return V(c,zs,r);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return V(c,Ks,r);let l;try{l=t.finalizeTaskForHostShutdown({id:e.taskId,expectedRunEpoch:e.expectedRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return V(t.getTask(e.taskId),Dp,r)}let p=Wp(l);return p?V(t.getTask(e.taskId),p,r):l!=="settled"?Re(t.getTask(e.taskId),r):Bp(t.getTask(e.taskId),r)}function gd(t,e,n={}){if(typeof t=="string"){let r=t,s=e??{};return Promise.resolve().then(()=>(eo(),hd)).then(({TaskRepository:o})=>cd(new o,r,s))}return cd(t,e,n)}var Gs,Op,Ys,bp,Bs,Ws,vp,ad,dd,Np,zs,Ks,xp,Cp,ud,Dp,Zs=x(()=>{h();cr();Cn();Gs=5e3,Op=250;Ys=["crewx","claude","codex","opencode","grok","node"],bp="INSTRUCTION_STOP_TARGET_PID_MISSING",Bs="INSTRUCTION_STOP_EPOCH_MISMATCH",Ws="INSTRUCTION_STOP_WORKSPACE_MISMATCH",vp="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",ad="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",dd="INSTRUCTION_STOP_SETTLE_CAS_FAILED",Np="INSTRUCTION_STOP_REQUEST_FAILED",zs="HOST_SHUTDOWN_EPOCH_MISMATCH",Ks="HOST_SHUTDOWN_WORKSPACE_MISMATCH",xp="HOST_SHUTDOWN_TARGET_PID_MISSING",Cp="HOST_SHUTDOWN_OWNERSHIP_UNVERIFIED",ud="HOST_SHUTDOWN_PROCESS_TERMINATION_FAILED",Dp="HOST_SHUTDOWN_SETTLE_CAS_FAILED";});var hd={};iu(hd,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>Ed,HOST_SHUTDOWN_TERMINAL_ERROR:()=>Td,PENDING_ADOPT_GRACE_MS:()=>yd,PID_NULL_REAP_GRACE_MS:()=>lo,RATED_TASK_EXCERPT_MAX_CHARS:()=>po,RATED_TASK_LIST_MAX_LIMIT:()=>Sd,TASK_HEARTBEAT_HARD_STALE_MS:()=>sd,TASK_HEARTBEAT_INTERVAL_MS:()=>nd,TASK_HEARTBEAT_STALE_MS:()=>rd,TASK_RATINGS:()=>Rd,TaskRatingError:()=>Un,TaskRepository:()=>Hn,buildRatedTasksCountQuery:()=>Ad,buildRatedTasksQuery:()=>Id,countRatedTasks:()=>df,hasRecordedUsage:()=>co,listRatedTasks:()=>af,mergeTerminalReason:()=>uo,resolveTaskHeartbeatHardStaleMs:()=>Ir,resolveTaskHeartbeatIntervalMs:()=>qs,resolveTaskHeartbeatStaleMs:()=>Qt,setTaskRating:()=>of});function Ue(t){return bn(t)}function no(t){return bn(t)}function so(t=a.model,e=a.metadata){let n=sql`
|
|
51
|
+
`;u=`${u}${l}${d}`;}else u=n(d);if(u)return u;let c=n(i.summary)??n(Ct(t.content))??n(i.output_for_prompt);return c!==void 0?c:s(o)}if(t.content!==null&&t.content!==void 0)return Ct(t.content)??s(t.content);if(t.result!==null&&t.result!==void 0)return Ct(t.result)??s(t.result)}function od(t){let e=Qt(t.error),n=[t.message,t.errorMessage,e?.message,e?.detail,typeof t.error=="string"?t.error:void 0].find(r=>typeof r=="string"&&r.trim().length>0);return n?id(n):"Grok CLI reported an error."}function id(t){return (t.replace(Rp,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function rd(t){return Ep.test(t)}function Ap(t){let e=Qt(t.modelUsage);return e?Object.keys(e)[0]??null:null}function Op(t){let e=Qt(t.usage);if(!e)return null;let n=Dt(e.cache_read_input_tokens);return {inputTokens:Dt(e.input_tokens)+n,cachedInputTokens:n,outputTokens:Dt(e.output_tokens),costUsd:Dt(t.total_cost_usd)}}function bp(t){let e=0,n=0,r=0,s=false,o=new Set;for(let i of t.split(`
|
|
52
|
+
`).flatMap(vn)){if(i.type!=="usage")continue;let u=Qt(i.usage);if(!u)continue;let d=Te(i.signature);if(d&&d.length>0){let l=`signature:${d}`;if(o.has(l))continue;o.add(l);}let c=Dt(u.cache_read_input_tokens);e+=Dt(u.input_tokens)+c,n+=c,r+=Dt(u.output_tokens),s=true;}return s?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function Np(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let o of e.entries.slice(0,ed)){if(!Yt(o))continue;let i=Te(o.content)?.trim();if(!i)continue;let u=Te(o.status)?.trim(),d=Te(o.priority)?.trim(),c=[u?`status=${u}`:void 0,d?`priority=${d}`:void 0].filter(p=>!!p),l=c.length>0?` (${c.join(", ")})`:"";n.push(`- ${i}${l}`);}if(n.length===0)return [];e.entries.length>ed&&n.push(nd);let r=n.join(`
|
|
53
|
+
`),s=r.length>td?`${r.slice(0,td-1)}${nd}`:r;return [{timestamp:t,type:"info",content:s}]}function vp(t,e){let n=Te(e.type);if(n==="thought"){let r=Te(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=Te(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return Np(t,e);if(n==="tool_call"){let r=Te(e.toolCallId),s=Te(e.toolName)??Te(e.title),o=e.rawInput===void 0?void 0:sd(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:s,toolInput:o}]}if(n==="tool_call_update"){let r=Te(e.status);if(r!=="completed"&&r!=="failed"&&r!=="error")return [];let s=Ip(e),o=r!=="completed"||e.isError===true;return [{timestamp:t,type:"tool_result",toolUseId:Te(e.toolCallId),toolName:Te(e.toolName)??Te(e.title),...s!==void 0?Me(s,o):{isError:o}}]}if(n==="error"){let r=od(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var Ar,yp,Ep,Rp,ed,td,nd,Us,Fs=x(()=>{h();Ot();ys();Nt();Gt();On();vt();Ar="cli/grok",yp=new Set(["available_commands","usage","end"]),Ep=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,Rp=/\u001b\[[0-?]*[ -/]*[@-~]/g,ed=20,td=4e3,nd="\u2026";Us={command:"grok",createSessionId:()=>randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=pt(e.model),s=e.effort??r,o=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],i=n?["--model",n]:[],u=n?lt("grok").some(E=>E.id===n):false,d=n&&u?An("grok",n):[],c=!s||d.length===0||d.includes(s)?s:void 0,l=Ca(c),p=e.additionalArgs??[],g=E=>p.some(A=>A===E||A.startsWith(`${E}=`)),_=e.providerOptions,m=_?.alwaysApprove,y=_?.sandbox,k=g("--permission-mode")?[]:Na(e.mode),v=g("--always-approve")?[]:va(m),I=g("--sandbox")?[]:xa(y),D=g("--verbatim")?[]:["--verbatim"];return {args:["--no-auto-update",...o,"--single",t,...D,"--output-format","streaming-json","--no-alt-screen",...i,...l,...k,...v,...I,...p]}},extractText(t){let e=[],n=false;for(let r of t.split(`
|
|
54
|
+
`).flatMap(vn))typeof r.type=="string"&&(n=true),r.type==="text"&&typeof r.data=="string"&&e.push(r.data);return e.length>0?e.join(""):n?"":t.trim()},extractFailure(t){for(let e of vn(t))if(e.type==="error"){let n=od(e);return rd(sd(e))?new bt(n,Ar):new Q(n,Ar)}return null},interpretExit(t,e){if(t===0)return null;let n=id(e)||`Grok CLI exited with code ${t}.`;return rd(e)?new bt(n,Ar):new Q(n,Ar)},parseResultMeta(t){let n=t.split(`
|
|
55
|
+
`).flatMap(vn).find(r=>r.type==="end");return n?{usage:Op(n),model:Ap(n)}:{usage:bp(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return vn(t).flatMap(r=>vp(He(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return Yt(n)&&typeof n.type=="string"?yp.has(n.type):!1}catch{return false}}};});var ad,dd=x(()=>{h();Ns();xs();Ds();Ls();Hs();Za();Fs();Ns();xs();Ds();Ls();Hs();Fs();jt();ad={codex:Cs,claude:Rr,opencode:Ps,antigravity:$s,copilot:vs,grok:Us};});function ud(t){if(t.startsWith("cli/"))return ad[t.slice(4)]}var cd=x(()=>{h();da();dd();});function Or(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function xp(t,e){return typeof t=="string"&&t.length>0?t:typeof e=="string"&&e.length>0?e:null}function br(t){if(typeof t.provider!="string"||t.provider.length===0)return;let n=t.taskLogRepository.readLogs(t.taskId)?.entries.filter(g=>g.level==="stdout").map(g=>g.message).join(`
|
|
56
|
+
`)??"";if(!n.trim())return;let r=ud(t.provider);if(!r)return;let s;try{s=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let o=xp(s?.model,t.model),i=s?.usage;if(!i)return {stdout:n,adapter:r};let u=Or(i.inputTokens),d=Or(i.outputTokens),c=Or(i.cachedInputTokens),l=Gi(Or(i.costUsd),u,d,c,o);return u!==0||d!==0||c!==0||l!==0?{stdout:n,adapter:r,usage:{inputTokens:u,outputTokens:d,cachedInputTokens:c,costUsd:l,model:o}}:{stdout:n,adapter:r}}var qs=x(()=>{h();cd();fr();});function Ws(t){let e=new Set;for(let n of t)for(let r of Cp.get(n)??[n])e.add(r);return [...e]}function js(t){if(t)try{let e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))return;let n=e.terminalReason;return typeof n=="string"&&Dp.has(n)?n:void 0}catch{return}}function Ue(t){let e=js(t.metadata);if(e)return e;if(t.status==="runner_lost")return "runner_lost";if(t.status==="stopped")return "user_stop";if(t.status==="failed"&&typeof t.error=="string"){if(Bs.stopped.test(t.error))return "user_stop";if(Bs.runnerLost.test(t.error))return "runner_lost"}}function xe(t){switch(t.status){case "stopped":case "pending":case "running":case "paused":case "success":return t.status;case "completed":case "done":return "success";case "error":case "runner_lost":return "failed";case "failed":{let e=js(t.metadata);return e==="user_stop"?"stopped":e?"failed":typeof t.error=="string"&&Bs.stopped.test(t.error)?"stopped":"failed"}default:return t.status}}function Pp(t){if(!t)return {};try{let e=JSON.parse(t);return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{}}catch{return {}}}function Cn(t){let e=xe(t);return t.status==="runner_lost"&&js(t.metadata)===void 0?{...t,status:e,metadata:JSON.stringify({...Pp(t.metadata),terminalReason:"runner_lost"})}:{...t,status:e}}var xn,Cp,Bs,Dp,Dn=x(()=>{h();xn=["success","completed","done","failed","error","stopped","runner_lost"],Cp=new Map([["success",["success","completed","done"]],["failed",["failed","error","runner_lost"]]]);Bs={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},Dp=new Set(["user_stop","runner_lost","launch_failed"]);});function Gs(t,e,n=1){let r=process.env[t];if(r===void 0||r==="")return e;let s=Number(r);return !Number.isFinite(s)||s<=0?e:Math.max(n,Math.trunc(s))}function zs(){return Gs("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function en(){return Gs("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function vr(){return Gs("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function Zt(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Nr(t){let e=typeof t=="object"&&t!==null&&"code"in t?String(t.code):t instanceof Error?t.name:typeof t;console.warn(`[crewx] task heartbeat write failed (${e}); execution continues`);}function Lp(t){return t?{id:t.id,status:t.status,run_epoch:t.run_epoch,stop_requested_at:t.stop_requested_at,stop_requested_epoch:t.stop_requested_epoch,pid:t.pid,metadata:t.metadata,started_at:t.started_at,duration_ms:t.duration_ms}:null}function ld(t,e){return !!t.stop_requested_at&&Zt(t.stop_requested_epoch)===Zt(e)}function pd(t,e){let n=Zt(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let s=Lp(t.getTask(e.taskId));return !s||s.status!=="running"||Zt(s.run_epoch)!==n?{accepted:false,row:s}:{accepted:true,row:s}}function _d(t,e){let n=Pn.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),Pn.delete(t),true)}function Ln(t,e){let n=Pn.get(t);return !n||e!==void 0&&n.runEpoch!==Zt(e)?false:_d(t,n)}function md(t,e){let n=Zt(e.runEpoch);Ln(e.taskId);let r=true,s=null;try{let c=pd(t,{...e,runEpoch:n});r=c.accepted,s=c.row;}catch(c){Nr(c);}if(!r)return false;let o=zs(),i=Math.min(o,1e3),u=setInterval(()=>{let c=Pn.get(e.taskId);if(!(!c||c.timer!==u))try{c.heartbeatElapsedMs+=i;let l=c.heartbeatElapsedMs>=o,p=pd(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:l});if(!p.accepted){_d(e.taskId,c);return}l&&(c.heartbeatElapsedMs%=o,c.lastHeartbeatAt=Date.now()),p.row&&ld(p.row,n)&&!c.stopRequested&&(c.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(Nr));}catch(l){Nr(l);}},i),d={timer:u,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return Pn.set(e.taskId,d),typeof u=="object"&&u!==null&&"unref"in u&&u.unref(),s&&ld(s,n)&&e.onStopRequested&&(d.stopRequested=true,Promise.resolve(e.onStopRequested(s)).catch(Nr)),true}var fd,gd,hd,Pn,Mn=x(()=>{h();fd=1e4,gd=3e4,hd=18e5;Pn=new Map;});function xr(t,e=Date.now(),n=Xs){let r=t?Date.parse(t):Number.NaN,s=typeof e=="number"?e:Date.parse(e),o=Zs(n,Xs,0);return Number.isFinite(r)&&Number.isFinite(s)&&s-r>o?"forced":"cooperative"}function Zs(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function Ed(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function Wp(t){if(!t)return;let e=Ed(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function Ie(t,e){if(!t)return {status:"not_running",finalStatus:"not_running",...e?{pid:e}:{}};let n=typeof t.pid=="number"&&t.pid>0?t.pid:e;if(t.status==="stopped"){let r=Wp(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function ro(t,e,n="Process owner could not be verified"){let r=e??(t.pid&&t.pid>0?t.pid:void 0);return {status:"ownership_unverified",finalStatus:t.status,...r?{pid:r}:{},error:n}}function V(t,e,n){let r=n??(t?.pid&&t.pid>0?t.pid:void 0);return {status:"failed",finalStatus:t?.status??null,...r?{pid:r}:{},error:e}}function Js(t,e){return V(t,Hp,e)}function jp(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=en():false}function Gp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function zp(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=Ed(t.metadata),r=n.ownership==="runner"&&typeof n.providerPid=="number"&&Number.isSafeInteger(n.providerPid)&&n.providerPid>0?n.providerPid:void 0;return [...new Set([e,r].filter(s=>s!==void 0))]}function Kp(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return Ie(r,n)}async function Vp(t,e,n,r){let s=Date.now()+n;for(;;){let o=Kp(t,e);if(o)return o;let i=s-Date.now();if(i<=0)return;await new Promise(u=>{setTimeout(u,Math.min(r,i));});}}async function yd(t,e,n){let r=new Date().toISOString(),s={origin:n.origin??"internal",...n.callerPid!==void 0?{callerPid:n.callerPid}:{},...n.callerTaskId!==void 0?{callerTaskId:n.callerTaskId}:{}},o=t.requestTaskStop({id:e,requestedAt:r,...s}),i=t.getTask(e);if(!o.accepted){if(o.status==="pending"){let D=t.stopPendingTask(e,void 0,void 0,{...s,at:r}),E=t.getTask(e);if(D||!E||E.status!=="running")return Ie(E);if(o=t.requestTaskStop({id:e,requestedAt:r,...s}),!o.accepted&&o.status!=="running"||!o.accepted&&!o.alreadyRequestedAt)return Ie(t.getTask(e))}else if(!(o.status==="running"&&o.alreadyRequestedAt))return Ie(i)}let u=o.runEpoch,d=Zs(n.graceMs,Xs,0),c=Zs(n.pollMs,Mp,1),l=await Vp(t,e,d,c);if(l)return l;let p=t.getTask(e);if(!p||p.status!=="running")return Ie(p);let g=zp(p),_=g[0];if(!_){let D=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),E=t.getTask(e);return D||E?.status!=="running"?Ie(E):V(E,"Failed to finalize task stop")}let m=Gp(n),y="unknown";if(!jp(p,Date.now())){let D=n.processControl?.checkProcessOwnershipAsync??gr;try{y=await D(_,n.ownershipMarkers??no,m);}catch{y="unknown";}if(y!=="owned")return ro(p)}let k=n.processControl?.terminateProcessTree??Bt;for(let D of g){let E;try{E=await k(D,{...m,signal:qt});}catch(A){E={status:"failed",pid:D,method:m.platform==="win32"?"taskkill":"process-group",error:A instanceof Error?A.message:String(A)};}if(E.status==="failed")return V(t.getTask(e),E.error??"Failed to terminate process tree")}let v=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),I=t.getTask(e);return v||I?.status!=="running"?Ie(I,_):V(I,"Task changed before stop was finalized")}function eo(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function to(t){return Number.isSafeInteger(t)&&t>=0}function $n(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Jp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Xp(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Yp(t,e){let n=t?.pid&&t.pid>0?t.pid:e;return {status:"stopped",method:"forced",finalStatus:t?.status??"failed",...n?{pid:n}:{}}}function Qp(t){switch(t){case "epoch_mismatch":return Ys;case "workspace_mismatch":return Qs;default:return}}async function Rd(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Js(n,eo(e.targetPid)?e.targetPid:void 0);if(!to(e.sourceRunEpoch)||!to(e.settleRunEpoch)||$n(n.run_epoch)!==e.settleRunEpoch)return V(n,Ks,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return V(n,Vs,e.targetPid);let r=new Date().toISOString(),s;try{s=t.requestTaskStop({id:e.taskId,requestedAt:r,sourceRunEpoch:e.sourceRunEpoch,settleRunEpoch:e.settleRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return V(n,Up,e.targetPid)}let o=t.getTask(e.taskId);if(!o||o.status!=="running")return Js(o,e.targetPid);if(s.runEpoch!==e.settleRunEpoch||$n(o.run_epoch)!==e.settleRunEpoch)return V(o,Ks,e.targetPid);if(e.workspaceId!==void 0&&o.workspace_id!==e.workspaceId)return V(o,Vs,e.targetPid);if(!eo(e.targetPid))return V(o,$p);let i=Jp(e),u=e.processControl?.checkProcessOwnershipAsync??gr,d="unknown";try{d=await u(e.targetPid,e.ownershipMarkers??no,i);}catch{d="unknown";}if(d!=="owned")return ro(o,e.targetPid);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return Js(c,e.targetPid);if($n(c.run_epoch)!==e.settleRunEpoch)return V(c,Ks,e.targetPid);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return V(c,Vs,e.targetPid);let l=e.processControl?.terminateProcessTree??Bt,p;try{p=await l(e.targetPid,{...i,signal:qt});}catch{return V(t.getTask(e.taskId),kd,e.targetPid)}if(p.status==="failed")return V(t.getTask(e.taskId),kd,e.targetPid);let g;try{g=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return V(t.getTask(e.taskId),Td,e.targetPid)}return g?Ie(t.getTask(e.taskId),e.targetPid):V(t.getTask(e.taskId),Td,e.targetPid)}async function Sd(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Ie(n);if(!to(e.expectedRunEpoch)||$n(n.run_epoch)!==e.expectedRunEpoch)return V(n,Ys);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return V(n,Qs);let r=n.pid;if(!eo(r))return V(n,Fp);let s=Xp(e),o=e.processControl?.checkProcessOwnershipAsync??gr,i="unknown";try{i=await o(r,e.ownershipMarkers??no,s);}catch{i="unknown";}if(i!=="owned")return ro(n,r,qp);let u=e.processControl?.terminateProcessTree??Bt,d;try{d=await u(r,{...s,signal:qt});}catch{return V(t.getTask(e.taskId),wd,r)}if(d.status==="failed")return V(t.getTask(e.taskId),wd,r);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return Ie(c,r);if($n(c.run_epoch)!==e.expectedRunEpoch)return V(c,Ys,r);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return V(c,Qs,r);let l;try{l=t.finalizeTaskForHostShutdown({id:e.taskId,expectedRunEpoch:e.expectedRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return V(t.getTask(e.taskId),Bp,r)}let p=Qp(l);return p?V(t.getTask(e.taskId),p,r):l!=="settled"?Ie(t.getTask(e.taskId),r):Yp(t.getTask(e.taskId),r)}function Id(t,e,n={}){if(typeof t=="string"){let r=t,s=e??{};return Promise.resolve().then(()=>(oo(),Ad)).then(({TaskRepository:o})=>yd(new o,r,s))}return yd(t,e,n)}var Xs,Mp,no,$p,Ks,Vs,Hp,kd,Td,Up,Ys,Qs,Fp,qp,wd,Bp,so=x(()=>{h();hr();Mn();Xs=5e3,Mp=250;no=["crewx","claude","codex","opencode","grok","node"],$p="INSTRUCTION_STOP_TARGET_PID_MISSING",Ks="INSTRUCTION_STOP_EPOCH_MISMATCH",Vs="INSTRUCTION_STOP_WORKSPACE_MISMATCH",Hp="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",kd="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",Td="INSTRUCTION_STOP_SETTLE_CAS_FAILED",Up="INSTRUCTION_STOP_REQUEST_FAILED",Ys="HOST_SHUTDOWN_EPOCH_MISMATCH",Qs="HOST_SHUTDOWN_WORKSPACE_MISMATCH",Fp="HOST_SHUTDOWN_TARGET_PID_MISSING",qp="HOST_SHUTDOWN_OWNERSHIP_UNVERIFIED",wd="HOST_SHUTDOWN_PROCESS_TERMINATION_FAILED",Bp="HOST_SHUTDOWN_SETTLE_CAS_FAILED";});var Ad={};hu(Ad,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>Dd,HOST_SHUTDOWN_TERMINAL_ERROR:()=>vd,PENDING_ADOPT_GRACE_MS:()=>Cd,PID_NULL_REAP_GRACE_MS:()=>_o,RATED_TASK_EXCERPT_MAX_CHARS:()=>mo,RATED_TASK_LIST_MAX_LIMIT:()=>Ld,TASK_HEARTBEAT_HARD_STALE_MS:()=>hd,TASK_HEARTBEAT_INTERVAL_MS:()=>fd,TASK_HEARTBEAT_STALE_MS:()=>gd,TASK_RATINGS:()=>Pd,TaskRatingError:()=>Wn,TaskRepository:()=>Bn,buildRatedTasksCountQuery:()=>$d,buildRatedTasksQuery:()=>Md,countRatedTasks:()=>mf,hasRecordedUsage:()=>ho,listRatedTasks:()=>_f,mergeTerminalReason:()=>go,resolveTaskHeartbeatHardStaleMs:()=>vr,resolveTaskHeartbeatIntervalMs:()=>zs,resolveTaskHeartbeatStaleMs:()=>en,setTaskRating:()=>hf});function qe(t){return Cn(t)}function ao(t){return Cn(t)}function co(t=a.model,e=a.metadata){let n=sql`
|
|
57
57
|
CASE
|
|
58
58
|
WHEN ${t} LIKE 'claude-%' OR ${t} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
59
59
|
WHEN ${t} LIKE 'gpt-%' OR ${t} LIKE 'codex-%' THEN 'codex'
|
|
@@ -82,7 +82,7 @@ ${r.join(`
|
|
|
82
82
|
WHEN trim(${i}) = '' THEN 'unknown'
|
|
83
83
|
ELSE ${i}
|
|
84
84
|
END
|
|
85
|
-
`}function
|
|
85
|
+
`}function af(t){let e={status:t.status,metadata:t.metadata},n=xe(e);return n==="stopped"||n==="failed"&&Ue(e)==="runner_lost"}function qn(t){return sql`${t} NOT IN (${sql.join(df.map(e=>sql`${e}`),sql`, `)})`}function Cr(t){let e=sql`
|
|
86
86
|
CASE
|
|
87
87
|
WHEN json_valid(${t}) = 1
|
|
88
88
|
THEN json_extract(${t}, '$.usageAccounting')
|
|
@@ -92,7 +92,7 @@ ${r.join(`
|
|
|
92
92
|
COALESCE(SUM(
|
|
93
93
|
CASE WHEN ${e} = 'unavailable' THEN 1 ELSE 0 END
|
|
94
94
|
), 0)
|
|
95
|
-
`}function
|
|
95
|
+
`}function sn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function re(t){if(!t)return {};try{let e=JSON.parse(t);return sn(e)?{...e}:{}}catch{return {}}}function Mr(t){return t==null||t===""}function Dr(t,e){return Mr(t)&&!Mr(e)?e:t}function uf(t,e){let n=re(t);if(!e)return n;for(let[r,s]of Object.entries(e))Mr(n[r])&&!Mr(s)&&(n[r]=s);return n}function Pr(t,e){let n=t.origin&&xd.has(t.origin)?t.origin:"internal",r=t.callerPid!==void 0&&Number.isInteger(t.callerPid)&&t.callerPid>0?t.callerPid:process.pid;return {origin:n,at:t.at??e,callerPid:r,...t.callerTaskId?{callerTaskId:t.callerTaskId}:{}}}function cf(t){let e=re(t).stopRequest;if(sn(e)&&!(typeof e.origin!="string"||!xd.has(e.origin)||typeof e.at!="string"||typeof e.callerPid!="number"))return {...e}}function bd(){return or(isNull(a.stop_requested_at),ne$1(sql`COALESCE(${a.stop_requested_epoch}, 0)`,sql`COALESCE(${a.run_epoch}, 0)`))}function go(t,e){let n=re(t??null);return n.terminalReason=e,JSON.stringify(n)}function po(t,e){let n={...t,terminalReason:"user_stop"},r=e?.trim();return r&&r!==Od&&(n[of]=e),{error:Od,metadata:n}}function de(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function ho(t){return de(t.input_tokens)!==0||de(t.output_tokens)!==0||de(t.cached_input_tokens)!==0||de(t.cost_usd)!==0}function j(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Nd(t){return {inputTokens:de(t.inputTokens??0),outputTokens:de(t.outputTokens??0),cachedInputTokens:de(t.cachedInputTokens??0),costUsd:de(t.costUsd??0)}}function lf(t){if(sn(t))return {inputTokens:de(t.inputTokens),outputTokens:de(t.outputTokens),cachedInputTokens:de(t.cachedInputTokens),costUsd:de(t.costUsd)}}function pf(t){let e={inputTokens:0,outputTokens:0,cachedInputTokens:0,costUsd:0};for(let n of Object.values(t)){let r=lf(n);r&&(e.inputTokens+=r.inputTokens,e.outputTokens+=r.outputTokens,e.cachedInputTokens+=r.cachedInputTokens,e.costUsd+=r.costUsd);}return e}function Lr(t,e,n){let r=Date.parse(t),s=Date.parse(e);return Number.isFinite(r)&&Number.isFinite(s)?s-r:n??null}function on(t,e){if(typeof t!="string"||t.length===0)throw new f("VALIDATION",`${e} is required`);return t}function ko(t,e){let n=Date.parse(t);if(!Number.isFinite(n))throw new f("VALIDATION",`${e} is not a valid ISO time: ${t}`);return new Date(n).toISOString()}function hf(t,e){let n=on(e.workspaceId,"workspaceId"),r=on(e.taskId,"taskId"),s=e.rating;if(s!==null&&!Pd.includes(s))throw new f("VALIDATION","rating must be 'up', 'down' or null");let o=e.now===void 0?new Date().toISOString():ko(e.now,"now");try{return t.transaction(i=>{let u=and(eq(a.id,r),eq(a.workspace_id,n),inArray(a.status,[...xn])),d=i.update(a).set({rating:s,rated_at:s===null?null:o}).where(and(u,sql`${a.rating} IS NOT ${s}`)).returning({rating:a.rating,ratedAt:a.rated_at}).all();if(d.length>0)return {taskId:r,rating:d[0].rating,ratedAt:d[0].ratedAt,changed:!0};let c=i.select({status:a.status,rating:a.rating,rated_at:a.rated_at}).from(a).where(and(eq(a.id,r),eq(a.workspace_id,n))).limit(1).get();if(!c)throw new Wn("TASK_NOT_FOUND",r);if(!gf.has(c.status))throw new Wn("TASK_RATING_NOT_TERMINAL",r);return {taskId:r,rating:c.rating,ratedAt:c.rated_at,changed:!1}},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to set task rating",i)}}function Md(t){let e=sql`
|
|
96
96
|
SELECT id, rated_at FROM tasks
|
|
97
97
|
WHERE workspace_id = ${t.workspaceId}
|
|
98
98
|
AND rating IS NOT NULL
|
|
@@ -102,41 +102,41 @@ ${r.join(`
|
|
|
102
102
|
LIMIT ${t.limit}
|
|
103
103
|
`;return sql`
|
|
104
104
|
SELECT t.id AS taskId, t.agent_id AS agentId, t.thread_id AS threadId, t.status AS status,
|
|
105
|
-
substr(t.error, 1, ${
|
|
105
|
+
substr(t.error, 1, ${ff}) AS errorHead,
|
|
106
106
|
CASE WHEN json_valid(t.metadata) THEN json_extract(t.metadata, '$.terminalReason') END AS terminalReason,
|
|
107
107
|
t.rating AS rating, t.rated_at AS ratedAt,
|
|
108
|
-
NULLIF(substr(t.prompt, 1, ${
|
|
109
|
-
NULLIF(substr(t.result, 1, ${
|
|
108
|
+
NULLIF(substr(t.prompt, 1, ${mo}), '') AS promptExcerpt,
|
|
109
|
+
NULLIF(substr(t.result, 1, ${mo}), '') AS resultExcerpt
|
|
110
110
|
FROM (${e}) AS page
|
|
111
111
|
JOIN tasks t ON t.id = page.id
|
|
112
112
|
ORDER BY page.rated_at DESC, page.id DESC
|
|
113
|
-
`}function
|
|
113
|
+
`}function _f(t,e){let n=on(e.workspaceId,"workspaceId");if(e.agentId!==void 0&&on(e.agentId,"agentId"),!Number.isFinite(e.limit)||Math.trunc(e.limit)<1)throw new f("VALIDATION","limit must be a positive integer");let r=Math.min(Math.trunc(e.limit),Ld),s=e.sinceIso===void 0?void 0:ko(e.sinceIso,"sinceIso");try{return t.all(Md({workspaceId:n,agentId:e.agentId,sinceIso:s,limit:r})).map(i=>({taskId:i.taskId,agentId:i.agentId,threadId:i.threadId,status:xe({status:i.status,error:i.errorHead,metadata:i.terminalReason===null?null:JSON.stringify({terminalReason:i.terminalReason})}),rating:i.rating,ratedAt:i.ratedAt,promptExcerpt:i.promptExcerpt,resultExcerpt:i.resultExcerpt}))}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to list rated tasks",o)}}function $d(t){return sql`
|
|
114
114
|
SELECT COUNT(*) AS total FROM tasks
|
|
115
115
|
WHERE workspace_id = ${t.workspaceId}
|
|
116
116
|
AND rating IS NOT NULL
|
|
117
117
|
${t.agentId!==void 0?sql`AND agent_id = ${t.agentId}`:sql``}
|
|
118
118
|
${t.sinceIso!==void 0?sql`AND rated_at >= ${t.sinceIso}`:sql``}
|
|
119
|
-
`}function df(t,e){let n=rn(e.workspaceId,"workspaceId");e.agentId!==void 0&&rn(e.agentId,"agentId");let r=e.sinceIso===void 0?void 0:fo(e.sinceIso,"sinceIso");try{return t.all(Ad({workspaceId:n,agentId:e.agentId,sinceIso:r}))[0]?.total??0}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to count rated tasks",s)}}var ro,Zt,Vp,en,tn,Jp,oo,Mn,Fe,_d,Td,Xp,Qp,wd,lo,yd,Ed,Hn,Rd,po,Sd,rf,Un,sf,eo=x(()=>{h();at();mt();kt();it();Rt();dr();cr();Vi();Xi();Ms();vn();Cn();Zs();Cn();ro=40,Zt="2026-05-09",Vp="0.8.9-rc.13",en=10,tn=parseInt(Vp.split("rc.")[1]);Jp=new Set(["workflow","mcp"]),oo="usageByEpoch",Mn="lateUsage",Fe="usageAccounting",_d="Stopped by user",Td="Stopped by app shutdown",Xp="terminalErrorOriginal";Qp=["pending","running"];wd=new Set(["http","cli","instruction","workflow","internal"]);lo=600*1e3,yd=600*1e3,Ed=300*1e3,Hn=class extends he{dbPath;clock;taskLogRepository;lastReaperTickAt;pidNullObservedSince=new Map;constructor(e={}){super(),this.clock=e.clock??(()=>Date.now()),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db")),this.taskLogRepository=new lr({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?_t(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=U(n);if(e)try{Ae(r.db,n);}catch(s){throw r.close(),s}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=j(e.runEpoch),s=r===0?or(eq(a.run_epoch,0),isNull(a.run_epoch)):eq(a.run_epoch,r);return n.db.update(a).set({heartbeat_at:new Date(this.clock()).toISOString()}).where(and(eq(a.id,e.id),s,eq(a.status,"running"))).run().changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to heartbeat task",r)}finally{n.close();}}requestTaskStop(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(s=>{let o=s.select({id:a.id,status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!o)return;let i=j(o.run_epoch);if(o.status!=="running"){r={accepted:!1,status:o.status,runEpoch:i};return}let u=o.stop_requested_at!==null&&j(o.stop_requested_epoch)===i,d=u?o.stop_requested_at:e.requestedAt,c=ne(o.metadata),l=u?ef(o.metadata)??vr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d):vr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d);if(s.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:sql`${a.run_epoch}`,metadata:JSON.stringify({...c,stopRequest:l})}).where(and(eq(a.id,e.id),eq(a.status,"running"),md())).run().changes===0){let m=s.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:j(m?.run_epoch)};return}r={accepted:!1,status:m.status,runEpoch:j(m.run_epoch),...m.stop_requested_at&&j(m.stop_requested_epoch)===j(m.run_epoch)?{alreadyRequestedAt:m.stop_requested_at}:{}};}else r={accepted:!0,status:o.status,runEpoch:i};let g=new Set([e.id]),_=(m,y)=>{if(y>=8)return;let k=s.select({id:a.id,status:a.status,metadata:a.metadata}).from(a).where(and(eq(a.parent_task_id,m),eq(a.status,"running"))).all();for(let N of k)g.has(N.id)||(g.add(N.id),s.update(a).set({stop_requested_at:d,stop_requested_epoch:sql`${a.run_epoch}`,metadata:JSON.stringify({...ne(N.metadata),stopRequest:l})}).where(and(eq(a.id,N.id),eq(a.status,"running"),md())).run(),_(N.id,y+1));};_(e.id,0);},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request task stop",r)}finally{n.close();}}requestTaskStopForInstruction(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(s=>{let o=s.select({id:a.id,status:a.status,run_epoch:a.run_epoch,workspace_id:a.workspace_id,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!o)return;let i=j(o.run_epoch),u=j(e.sourceRunEpoch),d=j(e.settleRunEpoch);if(o.status!=="running"||i!==d||e.workspaceId!==void 0&&o.workspace_id!==e.workspaceId){r={accepted:!1,status:o.status,runEpoch:i};return}let c=d===0?or(eq(a.run_epoch,0),isNull(a.run_epoch)):eq(a.run_epoch,d),l=or(isNull(a.stop_requested_at),isNull(a.stop_requested_epoch),ne$1(a.stop_requested_epoch,u)),p=vr({origin:"instruction",at:e.requestedAt,callerPid:e.callerPid,callerTaskId:e.callerTaskId},e.requestedAt),g=k=>s.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:u,metadata:JSON.stringify({...ne(o.metadata),stopRequest:p})}).where(and(eq(a.id,e.id),eq(a.status,"running"),c,k,l)).run();if((e.workspaceId===void 0?g():e.workspaceId===null?g(isNull(a.workspace_id)):g(eq(a.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:o.status,runEpoch:d};return}let m=s.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:j(m?.run_epoch)};return}let y=j(m.run_epoch);r={accepted:!1,status:m.status,runEpoch:y,...m.stop_requested_at&&j(m.stop_requested_epoch)===u?{alreadyRequestedAt:m.stop_requested_at}:{}};},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request instruction task stop",r)}finally{n.close();}}finalizeTaskStop(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=e.completedAt??new Date(this.clock()).toISOString(),s=!1;return n.db.transaction(o=>{let i=o.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,started_at:a.started_at,duration_ms:a.duration_ms,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!i||i.status!=="running"||j(i.run_epoch)!==j(e.runEpoch))return;let u=i.stop_requested_at!==null&&j(i.stop_requested_epoch)===j(e.runEpoch),d=ne(i.metadata),c=u?io(d,e.error):{error:e.error??null,metadata:e.terminalReason===void 0?{...d}:{...d,terminalReason:e.terminalReason}},l={...c.metadata,stopMethod:e.method},p=i.duration_ms??e.durationMs??Nr(i.started_at,r,void 0),g=i.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,i.run_epoch);s=o.update(a).set({status:"stopped",error:c.error,completed_at:r,duration_ms:p,metadata:JSON.stringify(l)}).where(and(eq(a.id,e.id),eq(a.status,"running"),g)).run().changes>0;},{behavior:"immediate"}),s}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to finalize task stop",r)}finally{n.close();}}finalizeTaskForHostShutdown(e){if(!this.dbExists())return "not_running";let n=this.openHandle(true);try{let r=e.completedAt??new Date(this.clock()).toISOString(),s=j(e.expectedRunEpoch),o="not_running";return n.db.transaction(i=>{let u=i.select({status:a.status,run_epoch:a.run_epoch,workspace_id:a.workspace_id,started_at:a.started_at,duration_ms:a.duration_ms,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!u||u.status!=="running"){o="not_running";return}if(j(u.run_epoch)!==s){o="epoch_mismatch";return}if(e.workspaceId!==void 0&&u.workspace_id!==e.workspaceId){o="workspace_mismatch";return}let c=u.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,u.run_epoch),l=e.workspaceId===void 0?void 0:e.workspaceId===null?isNull(a.workspace_id):eq(a.workspace_id,e.workspaceId),p={...ne(u.metadata),terminalReason:"runner_lost"},g=u.duration_ms??Nr(u.started_at,r,void 0);o=i.update(a).set({status:"failed",error:Td,completed_at:r,duration_ms:g,metadata:JSON.stringify(p)}).where(and(eq(a.id,e.id),eq(a.status,"running"),c,l)).run().changes>0?"settled":"not_running";},{behavior:"immediate"}),o}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to finalize task for host shutdown",r)}finally{n.close();}}async stopTask(e,n={}){return gd(this,e,n)}async stopTaskGenerationForInstruction(e){return pd({requestTaskStop:n=>this.requestTaskStopForInstruction(n),getTask:n=>this.getTask(n),finalizeTaskStop:n=>this.finalizeTaskStop(n)},e)}startTask(e){let n=this.openHandle(true);try{let r=e.actorKind==="human"&&typeof e.workspaceId=="string"&&e.workspaceId.length>0&&typeof e.actorId=="string"&&e.actorId.length>0,s=r?n.db.select({id:a.id}).from(a).where(eq(a.id,e.id)).get()!==void 0:!0,o={id:e.id,agent_id:e.agentId,actor_kind:e.actorKind??null,actor_id:e.actorId??null,user_id:e.userId??null,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,cwd:e.cwd??null,project_id:e.projectId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,security_key:e.securityKey??null,coding_agent_command:e.codingAgentCommand??null,log_storage:"events"},i=u=>{n.db.insert(a).values(u).onConflictDoUpdate({target:a.id,set:{status:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN 'running' ELSE ${a.status} END`,pid:sql`COALESCE(excluded.pid, ${a.pid})`,actor_kind:sql`CASE WHEN ${a.status} IN ('pending', 'running') AND ${a.pid} IS NULL AND ${a.actor_kind} IS NULL AND COALESCE(${a.run_epoch}, 0) = 0 THEN excluded.actor_kind ELSE ${a.actor_kind} END`,actor_id:sql`CASE WHEN ${a.status} IN ('pending', 'running') AND ${a.pid} IS NULL AND ${a.actor_kind} IS NULL AND COALESCE(${a.run_epoch}, 0) = 0 THEN excluded.actor_id ELSE ${a.actor_id} END`,command:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.command ELSE ${a.command} END`,metadata:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.metadata ELSE ${a.metadata} END`,workspace_id:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.workspace_id}, excluded.workspace_id) ELSE ${a.workspace_id} END`,cwd:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.cwd}, excluded.cwd) ELSE ${a.cwd} END`,project_id:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.project_id}, excluded.project_id) ELSE ${a.project_id} END`,crewx_version:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.crewx_version ELSE ${a.crewx_version} END`,model:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.model ELSE ${a.model} END`,rendered_prompt:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.rendered_prompt ELSE ${a.rendered_prompt} END`,security_key:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.security_key ELSE ${a.security_key} END`,coding_agent_command:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.coding_agent_command ELSE ${a.coding_agent_command} END`},setWhere:or(eq(a.status,"running"),and(eq(a.status,"pending"),isNull(a.pid)))}).run();};try{i(o);}catch(u){let d=u instanceof Error?u.message:typeof u=="object"&&u!==null&&"message"in u?String(u.message):String(u);if(!/log_storage|heartbeat_at|stop_requested_at|stop_requested_epoch|cwd|actor_kind|actor_id/i.test(d)||!/no such column|no column named/i.test(d))throw u;let c=new Set(n.db.all("PRAGMA table_info(tasks)").map(su=>su.name)),l=c.has("cwd"),p=c.has("user_id"),g=c.has("actor_kind"),_=c.has("actor_id"),m=c.has("log_storage"),y=l?", cwd":"",k=l?", ?":"",N=l?", cwd = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.cwd, excluded.cwd) ELSE tasks.cwd END":"",I=m?", log_storage":"",D=m?", ?":"",E=p?", user_id":"",A=p?", ?":"",v=g?", actor_kind":"",Z=g?", ?":"",ge=_?", actor_id":"",Kr=_?", ?":"",ru=m?`,
|
|
119
|
+
`}function mf(t,e){let n=on(e.workspaceId,"workspaceId");e.agentId!==void 0&&on(e.agentId,"agentId");let r=e.sinceIso===void 0?void 0:ko(e.sinceIso,"sinceIso");try{return t.all($d({workspaceId:n,agentId:e.agentId,sinceIso:r}))[0]?.total??0}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to count rated tasks",s)}}var uo,tn,rf,nn,rn,sf,lo,Fn,Be,Od,vd,of,df,xd,_o,Cd,Dd,Bn,Pd,mo,Ld,ff,Wn,gf,oo=x(()=>{h();dt();kt();Tt();at();It();fr();hr();oa();aa();qs();Dn();Mn();so();Mn();uo=40,tn="2026-05-09",rf="0.8.9-rc.13",nn=10,rn=parseInt(rf.split("rc.")[1]);sf=new Set(["workflow","mcp"]),lo="usageByEpoch",Fn="lateUsage",Be="usageAccounting",Od="Stopped by user",vd="Stopped by app shutdown",of="terminalErrorOriginal";df=["pending","running"];xd=new Set(["http","cli","instruction","workflow","internal"]);_o=600*1e3,Cd=600*1e3,Dd=300*1e3,Bn=class extends me{dbPath;clock;taskLogRepository;lastReaperTickAt;pidNullObservedSince=new Map;constructor(e={}){super(),this.clock=e.clock??(()=>Date.now()),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db")),this.taskLogRepository=new _r({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?mt(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=H(n);if(e)try{be(r.db,n);}catch(s){throw r.close(),s}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=j(e.runEpoch),s=r===0?or(eq(a.run_epoch,0),isNull(a.run_epoch)):eq(a.run_epoch,r);return n.db.update(a).set({heartbeat_at:new Date(this.clock()).toISOString()}).where(and(eq(a.id,e.id),s,eq(a.status,"running"))).run().changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to heartbeat task",r)}finally{n.close();}}requestTaskStop(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(s=>{let o=s.select({id:a.id,status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!o)return;let i=j(o.run_epoch);if(o.status!=="running"){r={accepted:!1,status:o.status,runEpoch:i};return}let u=o.stop_requested_at!==null&&j(o.stop_requested_epoch)===i,d=u?o.stop_requested_at:e.requestedAt,c=re(o.metadata),l=u?cf(o.metadata)??Pr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d):Pr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d);if(s.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:sql`${a.run_epoch}`,metadata:JSON.stringify({...c,stopRequest:l})}).where(and(eq(a.id,e.id),eq(a.status,"running"),bd())).run().changes===0){let m=s.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:j(m?.run_epoch)};return}r={accepted:!1,status:m.status,runEpoch:j(m.run_epoch),...m.stop_requested_at&&j(m.stop_requested_epoch)===j(m.run_epoch)?{alreadyRequestedAt:m.stop_requested_at}:{}};}else r={accepted:!0,status:o.status,runEpoch:i};let g=new Set([e.id]),_=(m,y)=>{if(y>=8)return;let k=s.select({id:a.id,status:a.status,metadata:a.metadata}).from(a).where(and(eq(a.parent_task_id,m),eq(a.status,"running"))).all();for(let v of k)g.has(v.id)||(g.add(v.id),s.update(a).set({stop_requested_at:d,stop_requested_epoch:sql`${a.run_epoch}`,metadata:JSON.stringify({...re(v.metadata),stopRequest:l})}).where(and(eq(a.id,v.id),eq(a.status,"running"),bd())).run(),_(v.id,y+1));};_(e.id,0);},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request task stop",r)}finally{n.close();}}requestTaskStopForInstruction(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(s=>{let o=s.select({id:a.id,status:a.status,run_epoch:a.run_epoch,workspace_id:a.workspace_id,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!o)return;let i=j(o.run_epoch),u=j(e.sourceRunEpoch),d=j(e.settleRunEpoch);if(o.status!=="running"||i!==d||e.workspaceId!==void 0&&o.workspace_id!==e.workspaceId){r={accepted:!1,status:o.status,runEpoch:i};return}let c=d===0?or(eq(a.run_epoch,0),isNull(a.run_epoch)):eq(a.run_epoch,d),l=or(isNull(a.stop_requested_at),isNull(a.stop_requested_epoch),ne$1(a.stop_requested_epoch,u)),p=Pr({origin:"instruction",at:e.requestedAt,callerPid:e.callerPid,callerTaskId:e.callerTaskId},e.requestedAt),g=k=>s.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:u,metadata:JSON.stringify({...re(o.metadata),stopRequest:p})}).where(and(eq(a.id,e.id),eq(a.status,"running"),c,k,l)).run();if((e.workspaceId===void 0?g():e.workspaceId===null?g(isNull(a.workspace_id)):g(eq(a.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:o.status,runEpoch:d};return}let m=s.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:j(m?.run_epoch)};return}let y=j(m.run_epoch);r={accepted:!1,status:m.status,runEpoch:y,...m.stop_requested_at&&j(m.stop_requested_epoch)===u?{alreadyRequestedAt:m.stop_requested_at}:{}};},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request instruction task stop",r)}finally{n.close();}}finalizeTaskStop(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=e.completedAt??new Date(this.clock()).toISOString(),s=!1;return n.db.transaction(o=>{let i=o.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,started_at:a.started_at,duration_ms:a.duration_ms,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!i||i.status!=="running"||j(i.run_epoch)!==j(e.runEpoch))return;let u=i.stop_requested_at!==null&&j(i.stop_requested_epoch)===j(e.runEpoch),d=re(i.metadata),c=u?po(d,e.error):{error:e.error??null,metadata:e.terminalReason===void 0?{...d}:{...d,terminalReason:e.terminalReason}},l={...c.metadata,stopMethod:e.method},p=i.duration_ms??e.durationMs??Lr(i.started_at,r,void 0),g=i.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,i.run_epoch);s=o.update(a).set({status:"stopped",error:c.error,completed_at:r,duration_ms:p,metadata:JSON.stringify(l)}).where(and(eq(a.id,e.id),eq(a.status,"running"),g)).run().changes>0;},{behavior:"immediate"}),s}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to finalize task stop",r)}finally{n.close();}}finalizeTaskForHostShutdown(e){if(!this.dbExists())return "not_running";let n=this.openHandle(true);try{let r=e.completedAt??new Date(this.clock()).toISOString(),s=j(e.expectedRunEpoch),o="not_running";return n.db.transaction(i=>{let u=i.select({status:a.status,run_epoch:a.run_epoch,workspace_id:a.workspace_id,started_at:a.started_at,duration_ms:a.duration_ms,metadata:a.metadata}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!u||u.status!=="running"){o="not_running";return}if(j(u.run_epoch)!==s){o="epoch_mismatch";return}if(e.workspaceId!==void 0&&u.workspace_id!==e.workspaceId){o="workspace_mismatch";return}let c=u.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,u.run_epoch),l=e.workspaceId===void 0?void 0:e.workspaceId===null?isNull(a.workspace_id):eq(a.workspace_id,e.workspaceId),p={...re(u.metadata),terminalReason:"runner_lost"},g=u.duration_ms??Lr(u.started_at,r,void 0);o=i.update(a).set({status:"failed",error:vd,completed_at:r,duration_ms:g,metadata:JSON.stringify(p)}).where(and(eq(a.id,e.id),eq(a.status,"running"),c,l)).run().changes>0?"settled":"not_running";},{behavior:"immediate"}),o}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to finalize task for host shutdown",r)}finally{n.close();}}async stopTask(e,n={}){return Id(this,e,n)}async stopTaskGenerationForInstruction(e){return Rd({requestTaskStop:n=>this.requestTaskStopForInstruction(n),getTask:n=>this.getTask(n),finalizeTaskStop:n=>this.finalizeTaskStop(n)},e)}startTask(e){let n=this.openHandle(true);try{let r=e.actorKind==="human"&&typeof e.workspaceId=="string"&&e.workspaceId.length>0&&typeof e.actorId=="string"&&e.actorId.length>0,s=r?n.db.select({id:a.id}).from(a).where(eq(a.id,e.id)).get()!==void 0:!0,o={id:e.id,agent_id:e.agentId,actor_kind:e.actorKind??null,actor_id:e.actorId??null,user_id:e.userId??null,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,cwd:e.cwd??null,project_id:e.projectId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,security_key:e.securityKey??null,coding_agent_command:e.codingAgentCommand??null,log_storage:"events"},i=u=>{n.db.insert(a).values(u).onConflictDoUpdate({target:a.id,set:{status:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN 'running' ELSE ${a.status} END`,pid:sql`COALESCE(excluded.pid, ${a.pid})`,actor_kind:sql`CASE WHEN ${a.status} IN ('pending', 'running') AND ${a.pid} IS NULL AND ${a.actor_kind} IS NULL AND COALESCE(${a.run_epoch}, 0) = 0 THEN excluded.actor_kind ELSE ${a.actor_kind} END`,actor_id:sql`CASE WHEN ${a.status} IN ('pending', 'running') AND ${a.pid} IS NULL AND ${a.actor_kind} IS NULL AND COALESCE(${a.run_epoch}, 0) = 0 THEN excluded.actor_id ELSE ${a.actor_id} END`,command:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.command ELSE ${a.command} END`,metadata:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.metadata ELSE ${a.metadata} END`,workspace_id:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.workspace_id}, excluded.workspace_id) ELSE ${a.workspace_id} END`,cwd:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.cwd}, excluded.cwd) ELSE ${a.cwd} END`,project_id:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN COALESCE(${a.project_id}, excluded.project_id) ELSE ${a.project_id} END`,crewx_version:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.crewx_version ELSE ${a.crewx_version} END`,model:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.model ELSE ${a.model} END`,rendered_prompt:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.rendered_prompt ELSE ${a.rendered_prompt} END`,security_key:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.security_key ELSE ${a.security_key} END`,coding_agent_command:sql`CASE WHEN ${a.status} = 'pending' AND ${a.pid} IS NULL THEN excluded.coding_agent_command ELSE ${a.coding_agent_command} END`},setWhere:or(eq(a.status,"running"),and(eq(a.status,"pending"),isNull(a.pid)))}).run();};try{i(o);}catch(u){let d=u instanceof Error?u.message:typeof u=="object"&&u!==null&&"message"in u?String(u.message):String(u);if(!/log_storage|heartbeat_at|stop_requested_at|stop_requested_epoch|cwd|actor_kind|actor_id/i.test(d)||!/no such column|no column named/i.test(d))throw u;let c=new Set(n.db.all("PRAGMA table_info(tasks)").map(fu=>fu.name)),l=c.has("cwd"),p=c.has("user_id"),g=c.has("actor_kind"),_=c.has("actor_id"),m=c.has("log_storage"),y=l?", cwd":"",k=l?", ?":"",v=l?", cwd = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.cwd, excluded.cwd) ELSE tasks.cwd END":"",I=m?", log_storage":"",D=m?", ?":"",E=p?", user_id":"",A=p?", ?":"",N=g?", actor_kind":"",Z=g?", ?":"",_e=_?", actor_id":"",Yr=_?", ?":"",pu=m?`,
|
|
120
120
|
log_storage = CASE WHEN tasks.status = 'pending' THEN excluded.log_storage ELSE tasks.log_storage END`:"";n.runRaw(`INSERT INTO tasks (
|
|
121
121
|
id, agent_id, prompt, mode, status, started_at, pid,
|
|
122
122
|
parent_task_id, caller_agent_id, trace_id, command, metadata,
|
|
123
123
|
workspace_id${y}, project_id, platform, crewx_version, thread_id,
|
|
124
|
-
model, rendered_prompt, coding_agent_command${E}${
|
|
125
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?${k}${A}${Z}${
|
|
124
|
+
model, rendered_prompt, coding_agent_command${E}${N}${_e}${I}
|
|
125
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?${k}${A}${Z}${Yr}${D})
|
|
126
126
|
ON CONFLICT(id) DO UPDATE SET
|
|
127
127
|
status = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN 'running' ELSE tasks.status END,
|
|
128
128
|
pid = COALESCE(excluded.pid, tasks.pid),
|
|
129
129
|
command = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.command ELSE tasks.command END,
|
|
130
130
|
metadata = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.metadata ELSE tasks.metadata END,
|
|
131
|
-
workspace_id = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.workspace_id, excluded.workspace_id) ELSE tasks.workspace_id END${
|
|
131
|
+
workspace_id = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.workspace_id, excluded.workspace_id) ELSE tasks.workspace_id END${v},
|
|
132
132
|
project_id = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.project_id, excluded.project_id) ELSE tasks.project_id END,
|
|
133
133
|
crewx_version = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.crewx_version ELSE tasks.crewx_version END,
|
|
134
134
|
model = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.model ELSE tasks.model END,
|
|
135
135
|
rendered_prompt = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.rendered_prompt ELSE tasks.rendered_prompt END,
|
|
136
|
-
coding_agent_command = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.coding_agent_command ELSE tasks.coding_agent_command END${
|
|
137
|
-
WHERE tasks.status = 'running' OR (tasks.status = 'pending' AND tasks.pid IS NULL)`,[o.id,o.agent_id,o.prompt,o.mode,o.status,o.started_at,o.pid,o.parent_task_id,o.caller_agent_id,o.trace_id,o.command,o.metadata,o.workspace_id,...l?[o.cwd]:[],o.project_id,o.platform,o.crewx_version,o.thread_id,o.model,o.rendered_prompt,o.coding_agent_command,...p?[o.user_id]:[],...g?[o.actor_kind]:[],..._?[o.actor_id]:[],...m?[o.log_storage]:[]]);}r&&!s&&new
|
|
138
|
-
AND COALESCE(${a.stop_requested_epoch}, 0) <> COALESCE(${a.run_epoch}, 0)`)).run(),i.changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to update task ownership",r)}finally{n.close();}}adoptPendingTask(e){let n=this.openHandle(true);try{return n.db.update(a).set({status:"running"}).where(and(eq(a.id,e),eq(a.status,"pending"),isNull(a.pid))).run().changes===1}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to adopt pending task",r)}finally{n.close();}}failPendingTask(e,n,r=new Date().toISOString()){let s=this.openHandle(true);try{return s.db.update(a).set({status:"failed",error:n,completed_at:r}).where(and(eq(a.id,e),eq(a.status,"pending"))).run().changes>0}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to fail pending task",o)}finally{s.close();}}stopPendingTask(e,n,r=new Date().toISOString(),s={}){let o=this.openHandle(true);try{let i=!1;return o.db.transaction(u=>{let d=u.select({metadata:a.metadata}).from(a).where(and(eq(a.id,e),eq(a.status,"pending"))).limit(1).get();if(!d)return;let c=
|
|
139
|
-
`);}}updateTaskLifecycle(e){let n=this.openHandle(true);try{let r=and(eq(a.id,e.id),eq(a.workspace_id,e.workspaceId)),s={status:e.status,error:e.error,completed_at:e.completedAt,duration_ms:e.durationMs};if(e.terminalReason){let o=n.db.select({metadata:a.metadata}).from(a).where(r).limit(1).get(),i=
|
|
136
|
+
coding_agent_command = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.coding_agent_command ELSE tasks.coding_agent_command END${pu}
|
|
137
|
+
WHERE tasks.status = 'running' OR (tasks.status = 'pending' AND tasks.pid IS NULL)`,[o.id,o.agent_id,o.prompt,o.mode,o.status,o.started_at,o.pid,o.parent_task_id,o.caller_agent_id,o.trace_id,o.command,o.metadata,o.workspace_id,...l?[o.cwd]:[],o.project_id,o.platform,o.crewx_version,o.thread_id,o.model,o.rendered_prompt,o.coding_agent_command,...p?[o.user_id]:[],...g?[o.actor_kind]:[],..._?[o.actor_id]:[],...m?[o.log_storage]:[]]);}r&&!s&&new mr({dbPath:this.resolveDbPath()}).recordAccepted({workspaceId:e.workspaceId,actorId:e.actorId,actorKind:e.actorKind,agentId:e.agentId});}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to start task",r)}finally{n.close();}}recordTaskPid(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=n.db.select({status:a.status,run_epoch:a.run_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!r||r.status!=="running"||j(r.run_epoch)!==j(e.runEpoch))return !1;let s=r.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,r.run_epoch);return n.db.update(a).set({pid:e.pid}).where(and(eq(a.id,e.id),eq(a.status,"running"),s)).run().changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to record task pid",r)}finally{n.close();}}updateTaskOwnership(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=n.db.select({status:a.status,run_epoch:a.run_epoch,metadata:a.metadata,model:a.model,rendered_prompt:a.rendered_prompt,security_key:a.security_key,coding_agent_command:a.coding_agent_command}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!r||r.status!=="running"||j(r.run_epoch)!==j(e.runEpoch))return !1;let s=uf(r.metadata,e.runtime?.metadata);s.ownership=e.ownership,e.ownership==="runner"&&e.providerPid!==void 0&&(s.providerPid=e.providerPid);let o=r.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,r.run_epoch),i=n.db.update(a).set({metadata:JSON.stringify(s),model:Dr(r.model,e.runtime?.model),rendered_prompt:Dr(r.rendered_prompt,e.runtime?.renderedPrompt),security_key:Dr(r.security_key,e.runtime?.securityKey),coding_agent_command:Dr(r.coding_agent_command,e.runtime?.codingAgentCommand)}).where(and(eq(a.id,e.id),eq(a.status,"running"),o)).run();return i.changes>0&&j(e.runEpoch)>0&&n.db.update(a).set({stop_requested_at:null,stop_requested_epoch:null}).where(and(eq(a.id,e.id),eq(a.status,"running"),o,sql`${a.stop_requested_at} IS NOT NULL
|
|
138
|
+
AND COALESCE(${a.stop_requested_epoch}, 0) <> COALESCE(${a.run_epoch}, 0)`)).run(),i.changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to update task ownership",r)}finally{n.close();}}adoptPendingTask(e){let n=this.openHandle(true);try{return n.db.update(a).set({status:"running"}).where(and(eq(a.id,e),eq(a.status,"pending"),isNull(a.pid))).run().changes===1}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to adopt pending task",r)}finally{n.close();}}failPendingTask(e,n,r=new Date().toISOString()){let s=this.openHandle(true);try{return s.db.update(a).set({status:"failed",error:n,completed_at:r}).where(and(eq(a.id,e),eq(a.status,"pending"))).run().changes>0}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to fail pending task",o)}finally{s.close();}}stopPendingTask(e,n,r=new Date().toISOString(),s={}){let o=this.openHandle(true);try{let i=!1;return o.db.transaction(u=>{let d=u.select({metadata:a.metadata}).from(a).where(and(eq(a.id,e),eq(a.status,"pending"))).limit(1).get();if(!d)return;let c=po(re(d.metadata),n),l={...c.metadata,stopMethod:"cooperative",stopRequest:Pr(s,r)};i=u.update(a).set({status:"stopped",error:c.error,completed_at:r,metadata:JSON.stringify(l)}).where(and(eq(a.id,e),eq(a.status,"pending"))).run().changes===1;},{behavior:"immediate"}),i}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to stop pending task",i)}finally{o.close();}}listTasksByProjectId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select(ne).from(a).where(eq(a.project_id,e)).orderBy(desc(a.started_at)).all().map(qe)}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to list tasks by project",r)}finally{n.close();}}finishTask(e){let n=this.openHandle(true),r,s;try{n.db.transaction(o=>{let i=o.select({status:a.status,run_epoch:a.run_epoch,stop_requested_at:a.stop_requested_at,stop_requested_epoch:a.stop_requested_epoch,started_at:a.started_at,duration_ms:a.duration_ms,result:a.result,exit_code:a.exit_code,error:a.error,metadata:a.metadata,model:a.model,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cached_input_tokens:a.cached_input_tokens,cost_usd:a.cost_usd}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!i)return;let u=j(i.run_epoch),d=j(e.runEpoch),c=i.status==="running"&&u===d,l=i.stop_requested_at!==null&&j(i.stop_requested_epoch)===u,p=c&&l,g=i.status==="stopped"&&u===d&&l,_=re(i.metadata),m=sn(_[Fn])?_[Fn]:{},y=String(d),k=af(i),v=k&&u===d&&!ho(i)&&!Object.prototype.hasOwnProperty.call(m,y),I=k&&u===d&&!Object.prototype.hasOwnProperty.call(m,y),D=u>0||d>0||e.runEpoch!==void 0&&e.runEpoch!==null||u!==d,E={},A;if(i.status!=="running"&&(r=i.status,s=e.result?.trim()||e.error?.trim()||`task:end status=${e.status}`),D&&(i.status==="running"||I)){A=re(i.metadata);let N=sn(A[lo])?{...A[lo]}:{};N[String(d)]=Nd(e),A[lo]=N;let Z=pf(N),_e=Z.inputTokens!==0||Z.outputTokens!==0||Z.cachedInputTokens!==0||Z.costUsd!==0;_e&&_[Be]==="unavailable"?A[Be]="recorded":i.status!=="running"&&!_e&&_[Be]===void 0&&(A[Be]="unavailable"),E.metadata=JSON.stringify(A),E.input_tokens=Z.inputTokens,E.output_tokens=Z.outputTokens,E.cached_input_tokens=Z.cachedInputTokens,E.cost_usd=Z.costUsd;}else if(c||v)if(c)E.input_tokens=de(e.inputTokens??0),E.output_tokens=de(e.outputTokens??0),E.cached_input_tokens=de(e.cachedInputTokens??0),E.cost_usd=de(e.costUsd??0);else {let N=Nd(e),Z=N.inputTokens!==0||N.outputTokens!==0||N.cachedInputTokens!==0||N.costUsd!==0;Z&&(E.input_tokens=N.inputTokens,E.output_tokens=N.outputTokens,E.cached_input_tokens=N.cachedInputTokens,E.cost_usd=N.costUsd),A={..._};let _e=sn(_[Fn])?{..._[Fn]}:{};_e[y]={at:e.completedAt},A[Fn]=_e,A[Be]===void 0?A[Be]=Z?"recorded":"unavailable":Z&&A[Be]==="unavailable"&&(A[Be]="recorded"),E.metadata=JSON.stringify(A);}if((c||v)&&e.model!==void 0&&e.model!==null&&(!v||i.model===null)&&(E.model=e.model),p){A??=re(i.metadata);let N=po(A,e.error);A={...N.metadata,...e.partialResultRecovered===!0?{partialResultRecovered:!0}:{},stopMethod:xr(i.stop_requested_at,e.completedAt)},E.status="stopped",E.result=e.result??i.result,E.error=N.error,E.completed_at=e.completedAt,E.duration_ms=i.duration_ms??e.durationMs??Lr(i.started_at,e.completedAt,void 0),E.exit_code=e.exitCode??i.exit_code,E.metadata=JSON.stringify(A);}else if(c)e.partialResultRecovered===!0&&(A??=re(i.metadata),A.partialResultRecovered=!0,E.metadata=JSON.stringify(A)),E.status=e.status,E.result=e.result??null,E.error=e.error??null,E.completed_at=e.completedAt,E.duration_ms=u>0?Lr(i.started_at,e.completedAt,e.durationMs):e.durationMs??null,E.exit_code=e.exitCode??null;else if(g){let N=!1;i.result===null&&e.result!==void 0&&e.result!==null&&(E.result=e.result,N=!0),i.exit_code===null&&e.exitCode!==void 0&&e.exitCode!==null&&(E.exit_code=e.exitCode),e.partialResultRecovered===!0&&(A??=re(i.metadata),A.partialResultRecovered=!0,E.metadata=JSON.stringify(A)),N&&(r=void 0,s=void 0);}Object.keys(E).length>0&&o.update(a).set(E).where(eq(a.id,e.id)).run();},{behavior:"immediate"});}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to finish task",o)}finally{n.close();}if(r!==void 0){try{this.taskLogRepository.appendLog(e.id,{timestamp:e.completedAt,level:"late-result",message:s??`task:end status=${e.status}`});}catch(o){console.error(`[crewx] failed to preserve late task result for ${e.id}: ${o instanceof Error?o.message:String(o)}`);}process.stderr.write(`Task ${e.id} was already finalized (${r}); late result kept in task log
|
|
139
|
+
`);}}updateTaskLifecycle(e){let n=this.openHandle(true);try{let r=and(eq(a.id,e.id),eq(a.workspace_id,e.workspaceId)),s={status:e.status,error:e.error,completed_at:e.completedAt,duration_ms:e.durationMs};if(e.terminalReason){let o=n.db.select({metadata:a.metadata}).from(a).where(r).limit(1).get(),i=re(o?.metadata??null);i.terminalReason=e.terminalReason,s.metadata=JSON.stringify(i);}n.db.update(a).set(s).where(r).run();}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to update task lifecycle",r)}finally{n.close();}}appendLog(e,n){this.taskLogRepository.appendLog(e,n);}appendLogs(e,n){this.taskLogRepository.appendLogs(e,n);}readLogs(e){return this.taskLogRepository.readLogs(e)}readLogsTail(e,n){return this.taskLogRepository.readLogsTail(e,n)}getLogState(e){return this.taskLogRepository.getLogState(e)}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select(ne).from(a).where(eq(a.status,"running")).orderBy(desc(a.started_at)).all().map(qe)}catch(n){throw new f("DB_ERROR","Failed to get running tasks",n)}finally{e.close();}}getActiveTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select(ne).from(a).where(inArray(a.status,["pending","running"])).orderBy(desc(a.started_at)).all().map(qe)}catch(n){throw new f("DB_ERROR","Failed to get active tasks",n)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select(ne).from(a).orderBy(desc(a.started_at)).limit(100).all().map(qe)}catch(n){throw new f("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}readTaskSecurityKey(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.db.select({security_key:a.security_key}).from(a).where(eq(a.id,e)).limit(1).get()?.security_key??null}catch(r){throw new f("DB_ERROR","Failed to read task security key",r)}finally{n.close();}}recordProviderInput(e){if(!this.dbExists())return false;let n=j(e.runEpoch);if(n===0&&e.interceptedRequest!==true)return false;let r=e.recordedAt??new Date(this.clock()).toISOString(),s=this.openHandle(true);try{let o=!1;return s.db.transaction(i=>{let u=i.select({run_epoch:a.run_epoch}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!u||j(u.run_epoch)!==n)return;o=i.insert(nt).values({task_id:e.id,run_epoch:n,input:e.input,key_wrap_skipped:e.keyWrapSkipped?1:0,recorded_at:r}).onConflictDoNothing().run().changes>0;}),o}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to record provider input",o)}finally{s.close();}}listProviderInputEpochs(e,n={}){if(!this.dbExists())return [];let r=this.openHandle(false);try{let s=r.db.select({run_epoch:a.run_epoch}).from(a).where(eq(a.id,e)).limit(1).get();if(!s)return [];let o=j(s.run_epoch),i=r.db.select({run_epoch:nt.run_epoch,key_wrap_skipped:nt.key_wrap_skipped}).from(nt).where(eq(nt.task_id,e)).all(),u=new Map(i.map(c=>[c.run_epoch,c])),d=[];for(let c=1;c<=o;c++){let l=u.get(c);l?d.push({runEpoch:c,available:!0,...l.key_wrap_skipped===1?{keyWrapSkipped:!0}:{}}):d.push({runEpoch:c,available:!1,reason:n.archivedRunEpochs?.has(c)?"pruned":"absent"});}return d}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to list provider inputs",s)}finally{r.close();}}readProviderInput(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let s=r.db.select().from(nt).where(and(eq(nt.task_id,e),eq(nt.run_epoch,j(n)))).limit(1).get();return s?{runEpoch:s.run_epoch,input:s.input,keyWrapSkipped:s.key_wrap_skipped===1,recordedAt:s.recorded_at}:void 0}catch(s){throw new f("DB_ERROR","Failed to read provider input",s)}finally{r.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=n.db.select(ne).from(a).where(eq(a.id,e)).limit(1).get();return r?qe(r):void 0}catch(r){throw new f("DB_ERROR","Failed to get task",r)}finally{n.close();}}async killTask(e){let n=await this.stopTask(e);return n.status==="stopped"?{status:"terminated",killed:n.method==="forced"||n.method==="cooperative",...n.pid?{pid:n.pid}:{}}:n.status==="not_running"?{status:"not_running",killed:false,...n.pid?{pid:n.pid}:{},...n.error?{error:n.error}:{}}:{status:"failed",killed:false,...n.pid?{pid:n.pid}:{},...n.error?{error:n.error}:{}}}reapOrphanedTasks(e={}){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=n.db.select({id:a.id,status:a.status,pid:a.pid,platform:a.platform,run_epoch:a.run_epoch,heartbeat_at:a.heartbeat_at,started_at:a.started_at,metadata:a.metadata,model:a.model,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cached_input_tokens:a.cached_input_tokens,cost_usd:a.cost_usd}).from(a).where(or(eq(a.status,"running"),eq(a.status,"pending"))).all(),s=this.clock(),o=Math.max(1,Math.trunc(e.tickIntervalMs??Dd)),i=this.lastReaperTickAt,u=i===void 0?Number.POSITIVE_INFINITY:s-i,d=i!==void 0&&u>=0&&u<=o*2;this.lastReaperTickAt=s;let c=en(),l=vr(),p=new Date(s-Cd).toISOString(),g=new Date(s).toISOString(),_=new Set,m=0,y=(k,v)=>{let I=re(go(k.metadata,"runner_lost")),D=typeof I.provider=="string"?I.provider:void 0,E;try{E=br({taskLogRepository:this.taskLogRepository,taskId:k.id,provider:D,model:k.model})?.usage;}catch{}let A={status:"failed",error:v,completed_at:g};E?(A.input_tokens=E.inputTokens,A.output_tokens=E.outputTokens,A.cached_input_tokens=E.cachedInputTokens,A.cost_usd=E.costUsd,k.model===null&&E.model!==null&&(A.model=E.model),I[Be]="recorded"):!ho(k)&&I[Be]!=="recorded"&&(I[Be]="unavailable"),A.metadata=JSON.stringify(I);let N=k.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,k.run_epoch),Z=k.heartbeat_at===null?isNull(a.heartbeat_at):eq(a.heartbeat_at,k.heartbeat_at),_e=n.db.update(a).set(A).where(and(eq(a.id,k.id),eq(a.status,"running"),N,Z)).run();return _e.changes>0&&m++,_e.changes>0};for(let k of r){if(k.status==="pending"){if(k.pid!==null||k.started_at>=p)continue;let E=go(k.metadata,"launch_failed");n.db.update(a).set({status:"failed",error:"Reaped: runner never adopted task (pending timeout)",completed_at:g,metadata:E}).where(and(eq(a.id,k.id),eq(a.status,"pending"),isNull(a.pid),lt$1(a.started_at,p))).run().changes>0&&m++;continue}if(sf.has(k.platform??"cli"))continue;if(k.pid===null){let E=`${k.id}:${k.run_epoch??0}`;_.add(E);let A=this.pidNullObservedSince.get(E);if(A===void 0){this.pidNullObservedSince.set(E,s);continue}s-A>=_o&&y(k,"Reaped: pid never recorded after resume (stale running_instruction)")&&this.pidNullObservedSince.delete(E);continue}if(k.heartbeat_at===null){At(k.pid)==="not_found"&&y(k,"Reaped: process not found (orphaned task)");continue}let v=Date.parse(k.heartbeat_at),I=Number.isFinite(v)?s-v:Number.POSITIVE_INFINITY;if(I<=c)continue;At(k.pid)==="not_found"?y(k,"Reaped: process not found (orphaned task)"):I>l&&d&&y(k,"Reaped: heartbeat stale beyond hard limit (orphaned task)");}for(let k of Array.from(this.pidNullObservedSince.keys()))_.has(k)||this.pidNullObservedSince.delete(k);return m}finally{n.close();}}reapRunningWorkflowTasks(e=_o){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString(),s=and(eq(a.status,"running"),eq(a.platform,"workflow"),isNull(a.pid),lt$1(a.started_at,r),or(isNull(a.metadata),and(notLike(a.metadata,'%"kind":"workflow_card"%'),notLike(a.metadata,'%"kind":"workflow_ui_instance"%')))),o=n.db.select({id:a.id,metadata:a.metadata}).from(a).where(s).all(),i=new Date().toISOString(),u=0;for(let d of o){let c=re(d.metadata);c.terminalReason="runner_lost";let l=n.db.update(a).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:i,metadata:JSON.stringify(c)}).where(and(eq(a.id,d.id),eq(a.status,"running"))).run();u+=l.changes??0;}return u}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{let i=n?eq(a.workspace_id,n):void 0,u=i?and(eq(a.id,e),i):eq(a.id,e),d=o.db.select(ne).from(a).where(u).limit(1).get()??void 0;if(!d){let c=i?and(eq(a.thread_id,e),i):eq(a.thread_id,e);d=o.db.select(ne).from(a).where(c).orderBy(desc(a.started_at)).limit(1).get()??void 0;}if(d)return qe(d)}catch(i){throw new f("DB_ERROR","Failed to find task status",i)}finally{o.close();}}}findChildTasks(e,n){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=n?and(eq(a.parent_task_id,e),eq(a.workspace_id,n)):eq(a.parent_task_id,e),c=u.db.select(ne).from(a).where(d).orderBy(asc(a.started_at)).all();for(let l of c)s.has(l.id)||(s.add(l.id),o.push(qe(l)));}catch(d){throw new f("DB_ERROR","Failed to find child tasks",d)}finally{u.close();}}return o}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?sql`
|
|
140
140
|
SELECT
|
|
141
141
|
COALESCE(workspace_id, 'unknown') AS workspace_id,
|
|
142
142
|
COALESCE(SUM(input_tokens), 0) AS input_tokens,
|
|
@@ -157,14 +157,14 @@ ${r.join(`
|
|
|
157
157
|
FROM tasks
|
|
158
158
|
GROUP BY workspace_id
|
|
159
159
|
ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
|
|
160
|
-
`)}catch(r){throw new f("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),s=new Set,o=0,i=0,u=0;for(let d of r){if(!existsSync(d))continue;let c=
|
|
160
|
+
`)}catch(r){throw new f("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),s=new Set,o=0,i=0,u=0;for(let d of r){if(!existsSync(d))continue;let c=H(d);try{let l=eq(a.thread_id,e),p=n?and(l,eq(a.workspace_id,n)):l,g=c.db.select({id:a.id,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cost_usd:a.cost_usd}).from(a).where(p).all();for(let _ of g)s.has(_.id)||(s.add(_.id),o+=_.input_tokens??0,i+=_.output_tokens??0,u+=_.cost_usd??0);}catch(l){throw new f("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:o,outputTokens:i,costUsd:u}}findTasksByThread(e,n,r){let s=this.resolveDbPaths(),o=new Set,i=[],u=r?.projection==="activity-log";for(let d of s){if(!existsSync(d))continue;let c=H(d);try{let l=eq(a.thread_id,e),p=n?and(l,eq(a.workspace_id,n)):l,g=u?c.db.select({id:a.id,thread_id:a.thread_id,agent_id:a.agent_id,parent_task_id:a.parent_task_id,started_at:a.started_at,completed_at:a.completed_at}).from(a).where(p).orderBy(asc(a.started_at)).all():c.db.select(ne).from(a).where(p).orderBy(asc(a.started_at)).all().map(qe);for(let _ of g)o.has(_.id)||(o.add(_.id),i.push(_));}catch(l){throw new f("DB_ERROR","Failed to find tasks by thread",l)}finally{c.close();}}return i}parseWorkflowCardMetadata(e){if(!e)return {};try{let n=JSON.parse(e);return {kind:typeof n.kind=="string"?n.kind:void 0,workflowRunId:typeof n.workflowRunId=="string"?n.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}findRunningWorkflowParentTasks(){if(!this.dbExists())return [];let e=[];for(let n of this.resolveDbPaths()){if(!existsSync(n))continue;let r=H(n);try{e.push(...r.db.select({id:a.id,agent_id:a.agent_id,thread_id:a.thread_id,workspace_id:a.workspace_id,platform:a.platform,status:a.status,error:a.error,completed_at:a.completed_at,duration_ms:a.duration_ms,started_at:a.started_at,metadata:a.metadata}).from(a).where(and(eq(a.platform,"workflow"),inArray(a.status,["running","pending"]),or(like(a.metadata,'%"kind":"workflow_card"%'),like(a.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(desc(a.started_at)).all().map(ao));}catch(s){throw new f("DB_ERROR","Failed to find workflow parent tasks",s)}finally{r.close();}}return e}findWorkflowParentTasksByWorkspace(e){let n=[],r=new Map;for(let s of this.resolveDbPaths()){if(!existsSync(s))continue;let o=H(s);try{let i=o.db.select({id:a.id,agent_id:a.agent_id,thread_id:a.thread_id,workspace_id:a.workspace_id,platform:a.platform,status:a.status,error:a.error,completed_at:a.completed_at,duration_ms:a.duration_ms,started_at:a.started_at,metadata:a.metadata}).from(a).where(and(eq(a.platform,"workflow"),eq(a.workspace_id,e))).orderBy(desc(a.started_at),desc(a.id)).all();for(let u of i){let d=this.parseWorkflowCardMetadata(u.metadata);if(d.kind!=="workflow_card"&&d.kind!=="workflow_ui_instance"||typeof d.workflowRunId!="string")continue;let c=d.kind,l=r.get(c)??new Set;l.has(d.workflowRunId)||(l.add(d.workflowRunId),r.set(c,l),n.push(ao(u)));}}catch(i){throw new f("DB_ERROR","Failed to find workflow parent tasks by workspace",i)}finally{o.close();}}return n}findWorkflowParentTask(e){if(this.dbExists())for(let n of this.resolveDbPaths()){if(!existsSync(n))continue;let r=H(n);try{let s=r.db.select({id:a.id,agent_id:a.agent_id,thread_id:a.thread_id,workspace_id:a.workspace_id,platform:a.platform,status:a.status,error:a.error,completed_at:a.completed_at,duration_ms:a.duration_ms,started_at:a.started_at,metadata:a.metadata}).from(a).where(and(eq(a.platform,"workflow"),eq(a.workspace_id,e.workspaceId))).orderBy(desc(a.started_at),desc(a.id)).all();for(let o of s){let i=this.parseWorkflowCardMetadata(o.metadata);if(i.kind===e.kind&&i.workflowRunId===e.workflowRunId)return ao(o)}}catch(s){throw new f("DB_ERROR","Failed to find workflow parent task",s)}finally{r.close();}}}batchFetchWorkflowCards(e,n){let r=new Map;if(e.length===0)return r;let s=new Set(e),o=new Map,i=n?eq(a.workspace_id,n):void 0,u=(d,c)=>{if(!d)return;let l=o.get(d);if(l&&c.started_at<=l)return;let p=this.parseWorkflowCardMetadata(c.metadata);p.kind!=="workflow_card"&&p.kind!=="workflow_ui_instance"||(o.set(d,c.started_at),r.set(d,{taskId:c.id,workflowRunId:p.workflowRunId,raw:c.result??void 0}));};for(let d of this.resolveDbPaths()){if(!existsSync(d))continue;let c=H(d);try{let l=and(inArray(a.thread_id,e),or(like(a.metadata,'%"kind":"workflow_card"%'),like(a.metadata,'%"kind":"workflow_ui_instance"%'))),p=c.db.select({id:a.id,thread_id:a.thread_id,metadata:a.metadata,result:a.result,started_at:a.started_at}).from(a).where(i?and(l,i):l).all();for(let m of p)u(m.thread_id,m);let g=and(isNull(a.thread_id),or(like(a.metadata,'%"kind":"workflow_card"%'),like(a.metadata,'%"kind":"workflow_ui_instance"%'))),_=c.db.select({id:a.id,command:a.command,metadata:a.metadata,result:a.result,started_at:a.started_at}).from(a).where(i?and(g,i):g).all();for(let m of _){let y=this.extractThreadIdFromCommand(m.command);!y||!s.has(y)||u(y,m);}}catch(l){throw new f("DB_ERROR","Failed to batch fetch workflow cards",l)}finally{c.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(a.workspace_id,e.workspaceId));let s=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;s&&r.push(inArray(a.agent_id,s));let o=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;o&&r.push(inArray(a.status,Ws(o)));let i=e.q??e.search;i&&r.push(like(a.prompt,`%${i}%`)),e.from&&r.push(gte(a.started_at,e.from)),e.to&&r.push(lt$1(a.started_at,e.to));let u=r.length>0?and(...r):void 0,d=n.db.select({count:sql`count(*)`}).from(a).where(u).get(),c=(e.sortDir??"DESC")==="ASC"?asc(a.started_at):desc(a.started_at);return {rows:n.db.select(ne).from(a).where(u).orderBy(c).limit(e.limit).offset(e.offset).all().map(qe),total:d?.count??0}}catch(r){throw new f("DB_ERROR","Failed to find all tasks",r)}finally{n.close();}}getAgentUsage(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=co(sql.raw("t.model"),sql.raw("t.metadata")),i=qn(sql.raw("t.status")),u=Cr(sql.raw("t.metadata")),d=sql`
|
|
161
161
|
COALESCE(t.input_tokens, 0)
|
|
162
162
|
+ CASE
|
|
163
|
-
WHEN t.started_at >= ${
|
|
163
|
+
WHEN t.started_at >= ${tn}
|
|
164
164
|
AND (
|
|
165
165
|
t.crewx_version IS NULL
|
|
166
166
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
167
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
167
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${nn}) AS INTEGER) < ${rn})
|
|
168
168
|
)
|
|
169
169
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
170
170
|
ELSE 0
|
|
@@ -183,7 +183,7 @@ ${r.join(`
|
|
|
183
183
|
FROM tasks t
|
|
184
184
|
${c}
|
|
185
185
|
GROUP BY t.agent_id, t.workspace_id, ${o}
|
|
186
|
-
`),p=new Map;for(let m of l){let y=typeof m.provider=="string"&&m.provider.trim()!==""?m.provider:"unknown",k={provider:y,inputTokens:m.input_tokens,outputTokens:m.output_tokens,cachedInputTokens:m.cached_input_tokens,totalTokens:m.input_tokens+m.output_tokens,costUsd:m.cost_usd,totalTasks:m.total_tasks,unavailableTaskCount:m.unavailable_task_count},
|
|
186
|
+
`),p=new Map;for(let m of l){let y=typeof m.provider=="string"&&m.provider.trim()!==""?m.provider:"unknown",k={provider:y,inputTokens:m.input_tokens,outputTokens:m.output_tokens,cachedInputTokens:m.cached_input_tokens,totalTokens:m.input_tokens+m.output_tokens,costUsd:m.cost_usd,totalTasks:m.total_tasks,unavailableTaskCount:m.unavailable_task_count},v=m.workspace_id??null,I=JSON.stringify([m.agent_id,v]),D=p.get(I);if(!D){p.set(I,{agentId:m.agent_id,workspaceId:v,totalTasks:m.total_tasks,unavailableTaskCount:m.unavailable_task_count,inputTokens:m.input_tokens,outputTokens:m.output_tokens,cachedInputTokens:m.cached_input_tokens,costUsd:m.cost_usd,totalTokens:m.input_tokens+m.output_tokens,providers:[k]});continue}D.totalTasks+=m.total_tasks,D.unavailableTaskCount=(D.unavailableTaskCount??0)+m.unavailable_task_count,D.inputTokens+=m.input_tokens,D.outputTokens+=m.output_tokens,D.cachedInputTokens+=m.cached_input_tokens,D.costUsd+=m.cost_usd,D.totalTokens+=m.input_tokens+m.output_tokens;let E=D.providers.find(A=>A.provider===y);E?(E.inputTokens+=k.inputTokens,E.outputTokens+=k.outputTokens,E.cachedInputTokens+=k.cachedInputTokens,E.totalTokens+=k.totalTokens,E.costUsd+=k.costUsd,E.totalTasks+=k.totalTasks,E.unavailableTaskCount+=k.unavailableTaskCount):D.providers.push(k);}let g=[...p.values()];for(let m of g)m.providers.sort((y,k)=>y.provider===k.provider?0:y.provider==="unknown"?1:k.provider==="unknown"?-1:y.totalTokens!==k.totalTokens?k.totalTokens-y.totalTokens:y.provider<k.provider?-1:1);let _=(m,y)=>m===y?0:m<y?-1:1;return g.sort((m,y)=>{if(m.totalTokens!==y.totalTokens)return y.totalTokens-m.totalTokens;let k=_(m.agentId,y.agentId);return k!==0?k:m.workspaceId===y.workspaceId?0:m.workspaceId===null?1:y.workspaceId===null?-1:_(m.workspaceId,y.workspaceId)}),g}catch(o){throw new f("DB_ERROR","Failed to get agent usage",o)}finally{s.close();}}getAgentUsageTrendRaw(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=qn(sql.raw("t.status")),i=Cr(sql.raw("t.metadata"));return s.db.all(r?sql`
|
|
187
187
|
SELECT
|
|
188
188
|
date(t.started_at) AS date,
|
|
189
189
|
t.agent_id,
|
|
@@ -191,11 +191,11 @@ ${r.join(`
|
|
|
191
191
|
COALESCE(SUM(
|
|
192
192
|
COALESCE(t.input_tokens, 0)
|
|
193
193
|
+ CASE
|
|
194
|
-
WHEN t.started_at >= ${
|
|
194
|
+
WHEN t.started_at >= ${tn}
|
|
195
195
|
AND (
|
|
196
196
|
t.crewx_version IS NULL
|
|
197
197
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
198
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
198
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${nn}) AS INTEGER) < ${rn})
|
|
199
199
|
)
|
|
200
200
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
201
201
|
ELSE 0
|
|
@@ -220,11 +220,11 @@ ${r.join(`
|
|
|
220
220
|
COALESCE(SUM(
|
|
221
221
|
COALESCE(t.input_tokens, 0)
|
|
222
222
|
+ CASE
|
|
223
|
-
WHEN t.started_at >= ${
|
|
223
|
+
WHEN t.started_at >= ${tn}
|
|
224
224
|
AND (
|
|
225
225
|
t.crewx_version IS NULL
|
|
226
226
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
227
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
227
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${nn}) AS INTEGER) < ${rn})
|
|
228
228
|
)
|
|
229
229
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
230
230
|
ELSE 0
|
|
@@ -240,14 +240,14 @@ ${r.join(`
|
|
|
240
240
|
AND t.agent_id != 'workflow'
|
|
241
241
|
GROUP BY date(t.started_at), t.agent_id
|
|
242
242
|
ORDER BY date(t.started_at) ASC
|
|
243
|
-
`).map(d=>({date:d.date,agentId:d.agent_id,unavailableTaskCount:d.unavailable_task_count,inputTokens:d.input_tokens,outputTokens:d.output_tokens,cachedInputTokens:d.cached_input_tokens,costUsd:d.cost_usd,totalTokens:d.input_tokens+d.output_tokens}))}catch(o){throw new f("DB_ERROR","Failed to get agent usage trend",o)}finally{s.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let s=r.db.select(
|
|
243
|
+
`).map(d=>({date:d.date,agentId:d.agent_id,unavailableTaskCount:d.unavailable_task_count,inputTokens:d.input_tokens,outputTokens:d.output_tokens,cachedInputTokens:d.cached_input_tokens,costUsd:d.cost_usd,totalTokens:d.input_tokens+d.output_tokens}))}catch(o){throw new f("DB_ERROR","Failed to get agent usage trend",o)}finally{s.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let s=r.db.select(ne).from(a).where(and(eq(a.id,e),eq(a.workspace_id,n))).limit(1).get();return s?qe(s):void 0}catch(s){throw new f("DB_ERROR","Failed to find task for stop",s)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.db.select({id:a.id,thread_id:a.thread_id,status:a.status,result:a.result,error:a.error,started_at:a.started_at,completed_at:a.completed_at,metadata:a.metadata}).from(a).where(and(eq(a.agent_id,e.agentId),eq(a.workspace_id,e.workspaceId),sql`${a.metadata} IS NOT NULL AND json_valid(${a.metadata}) AND json_extract(${a.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(desc(a.started_at)).limit(1).get()??null}catch(r){throw new f("DB_ERROR","Failed to find latest task by metadata",r)}finally{n.close();}}markTaskFailed(e,n,r,s="failed",o){if(!this.dbExists())return;let i=this.openHandle(true);try{let u=new Date().toISOString(),d=r?and(eq(a.id,e),eq(a.status,"running"),eq(a.workspace_id,r)):and(eq(a.id,e),eq(a.status,"running")),c=i.db.select({metadata:a.metadata}).from(a).where(d).limit(1).get();if(!c)return;let l={status:s,error:n,completed_at:u};if(o){let p=re(c.metadata);p.terminalReason=o,l.metadata=JSON.stringify(p);}i.db.update(a).set(l).where(d).run();}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to mark task failed",u)}finally{i.close();}}findTasksByPromptHint(e,n){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=n?and(like(a.prompt,`%${e}%`),eq(a.workspace_id,n)):like(a.prompt,`%${e}%`),c=u.db.select(ne).from(a).where(d).orderBy(asc(a.started_at)).all();for(let l of c)s.has(l.id)||(s.add(l.id),o.push(qe(l)));}catch(d){throw new f("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{u.close();}}return o}getProviderUsage(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=co(),i=qn(a.status),u=Cr(a.metadata),d=sql`
|
|
244
244
|
COALESCE(${a.input_tokens}, 0)
|
|
245
245
|
+ CASE
|
|
246
|
-
WHEN ${a.started_at} >= ${
|
|
246
|
+
WHEN ${a.started_at} >= ${tn}
|
|
247
247
|
AND (
|
|
248
248
|
${a.crewx_version} IS NULL
|
|
249
249
|
OR (${a.crewx_version} LIKE '0.8.%' AND ${a.crewx_version} NOT LIKE '0.8.9%')
|
|
250
|
-
OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${
|
|
250
|
+
OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${nn}) AS INTEGER) < ${rn})
|
|
251
251
|
)
|
|
252
252
|
THEN COALESCE(${a.cached_input_tokens}, 0)
|
|
253
253
|
ELSE 0
|
|
@@ -267,14 +267,14 @@ ${r.join(`
|
|
|
267
267
|
${c}
|
|
268
268
|
GROUP BY ${o}
|
|
269
269
|
ORDER BY (COALESCE(SUM(${d}), 0) + COALESCE(SUM(${a.output_tokens}), 0)) DESC
|
|
270
|
-
`).map(p=>({provider:p.provider,totalTasks:p.total_tasks,unavailableTaskCount:p.unavailable_task_count,inputTokens:p.input_tokens,outputTokens:p.output_tokens,cachedInputTokens:p.cached_input_tokens,costUsd:p.cost_usd,totalTokens:p.input_tokens+p.output_tokens,activeDurationMs:p.active_duration_ms??0,lastActiveAt:p.last_active_at??null}))}catch(o){throw new f("DB_ERROR","Failed to get provider usage",o)}finally{s.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=
|
|
270
|
+
`).map(p=>({provider:p.provider,totalTasks:p.total_tasks,unavailableTaskCount:p.unavailable_task_count,inputTokens:p.input_tokens,outputTokens:p.output_tokens,cachedInputTokens:p.cached_input_tokens,costUsd:p.cost_usd,totalTokens:p.input_tokens+p.output_tokens,activeDurationMs:p.active_duration_ms??0,lastActiveAt:p.last_active_at??null}))}catch(o){throw new f("DB_ERROR","Failed to get provider usage",o)}finally{s.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=co(),i=qn(a.status),u=Cr(a.metadata),d=sql`
|
|
271
271
|
COALESCE(${a.input_tokens}, 0)
|
|
272
272
|
+ CASE
|
|
273
|
-
WHEN ${a.started_at} >= ${
|
|
273
|
+
WHEN ${a.started_at} >= ${tn}
|
|
274
274
|
AND (
|
|
275
275
|
${a.crewx_version} IS NULL
|
|
276
276
|
OR (${a.crewx_version} LIKE '0.8.%' AND ${a.crewx_version} NOT LIKE '0.8.9%')
|
|
277
|
-
OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${
|
|
277
|
+
OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${nn}) AS INTEGER) < ${rn})
|
|
278
278
|
)
|
|
279
279
|
THEN COALESCE(${a.cached_input_tokens}, 0)
|
|
280
280
|
ELSE 0
|
|
@@ -294,7 +294,7 @@ ${r.join(`
|
|
|
294
294
|
FROM ${a}
|
|
295
295
|
${c}
|
|
296
296
|
GROUP BY ${a.model}, ${o}
|
|
297
|
-
`),p=new Map;for(let g of l){let _=
|
|
297
|
+
`),p=new Map;for(let g of l){let _=ws(g.model??""),m=JSON.stringify([g.provider,_]),y=p.get(m);y?(y.totalTasks+=g.total_tasks,y.unavailableTaskCount=(y.unavailableTaskCount??0)+g.unavailable_task_count,y.inputTokens+=g.input_tokens,y.outputTokens+=g.output_tokens,y.cachedInputTokens+=g.cached_input_tokens,y.costUsd+=g.cost_usd,y.totalTokens+=g.input_tokens+g.output_tokens,y.activeDurationMs+=g.active_duration_ms??0,g.last_active_at&&(!y.lastActiveAt||g.last_active_at>y.lastActiveAt)&&(y.lastActiveAt=g.last_active_at)):p.set(m,{model:_,provider:g.provider,totalTasks:g.total_tasks,unavailableTaskCount:g.unavailable_task_count,inputTokens:g.input_tokens,outputTokens:g.output_tokens,cachedInputTokens:g.cached_input_tokens,costUsd:g.cost_usd,totalTokens:g.input_tokens+g.output_tokens,activeDurationMs:g.active_duration_ms??0,lastActiveAt:g.last_active_at??null});}return Array.from(p.values()).sort((g,_)=>_.costUsd-g.costUsd)}catch(o){throw new f("DB_ERROR","Failed to get model usage",o)}finally{s.close();}}getTasksForReport(e,n,r){if(!this.dbExists())return [];let s=this.openHandle(false);try{let o=r?sql`WHERE ${a.started_at} >= ${e} AND ${a.started_at} < ${n} AND ${a.workspace_id} = ${r}`:sql`WHERE ${a.started_at} >= ${e} AND ${a.started_at} < ${n}`;return s.db.all(sql`
|
|
298
298
|
SELECT
|
|
299
299
|
${a.thread_id} AS thread_id,
|
|
300
300
|
${a.agent_id} AS agent_id,
|
|
@@ -306,19 +306,19 @@ ${r.join(`
|
|
|
306
306
|
FROM ${a}
|
|
307
307
|
${o}
|
|
308
308
|
ORDER BY ${a.started_at} ASC
|
|
309
|
-
`).map(u=>({threadId:u.thread_id,agentId:u.agent_id,startedAt:u.started_at,status:u.status,error:u.error,exitCode:u.exit_code,terminalReason:
|
|
309
|
+
`).map(u=>({threadId:u.thread_id,agentId:u.agent_id,startedAt:u.started_at,status:u.status,error:u.error,exitCode:u.exit_code,terminalReason:Ue({status:u.status,error:u.error,metadata:u.metadata})??null}))}catch(o){throw new f("DB_ERROR","Failed to get tasks for report",o)}finally{s.close();}}getDelegationMatrix(e,n,r){if(!this.dbExists())return {edges:[],truncated:false};let s=this.openHandle(false);try{let o=sql`
|
|
310
310
|
COALESCE(${a.input_tokens}, 0)
|
|
311
311
|
+ CASE
|
|
312
|
-
WHEN ${a.started_at} >= ${
|
|
312
|
+
WHEN ${a.started_at} >= ${tn}
|
|
313
313
|
AND (
|
|
314
314
|
${a.crewx_version} IS NULL
|
|
315
315
|
OR (${a.crewx_version} LIKE '0.8.%' AND ${a.crewx_version} NOT LIKE '0.8.9%')
|
|
316
|
-
OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${
|
|
316
|
+
OR (${a.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${a.crewx_version}, ${nn}) AS INTEGER) < ${rn})
|
|
317
317
|
)
|
|
318
318
|
THEN COALESCE(${a.cached_input_tokens}, 0)
|
|
319
319
|
ELSE 0
|
|
320
320
|
END
|
|
321
|
-
`,i
|
|
321
|
+
`,i=qn(a.status),u=r?sql`WHERE ${i} AND ${a.started_at} >= ${e} AND ${a.started_at} < ${n} AND ${a.workspace_id} = ${r}`:sql`WHERE ${i} AND ${a.started_at} >= ${e} AND ${a.started_at} < ${n}`,d=s.db.all(sql`
|
|
322
322
|
SELECT
|
|
323
323
|
${a.caller_agent_id} AS caller_agent_id,
|
|
324
324
|
${a.agent_id} AS agent_id,
|
|
@@ -329,24 +329,24 @@ ${r.join(`
|
|
|
329
329
|
${u}
|
|
330
330
|
GROUP BY ${a.caller_agent_id}, ${a.agent_id}
|
|
331
331
|
ORDER BY task_count DESC, ${a.caller_agent_id} ASC, ${a.agent_id} ASC
|
|
332
|
-
LIMIT ${
|
|
333
|
-
`),c=d.length>
|
|
332
|
+
LIMIT ${uo+1}
|
|
333
|
+
`),c=d.length>uo;return {edges:d.slice(0,uo).map(p=>({callerAgentId:p.caller_agent_id??null,agentId:p.agent_id,taskCount:p.task_count,totalTokens:p.input_tokens+p.output_tokens,outputTokens:p.output_tokens})),truncated:c}}catch(o){throw new f("DB_ERROR","Failed to get delegation matrix",o)}finally{s.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(a.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(inArray(a.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(inArray(a.status,Ws(e.statuses))),e.from&&r.push(gte(a.started_at,e.from)),e.to&&r.push(lt$1(a.started_at,e.to));let s=r.length>0?and(...r):void 0,o=(e.order??"DESC")==="ASC"?asc(a.started_at):desc(a.started_at),i={id:a.id,agent_id:a.agent_id,status:a.status,prompt:a.prompt,started_at:a.started_at,completed_at:a.completed_at,thread_id:a.thread_id,error:a.error,metadata:a.metadata};return (e.limit?n.db.select(i).from(a).where(s).orderBy(o).limit(e.limit).all():n.db.select(i).from(a).where(s).orderBy(o).all()).map(({error:d,metadata:c,...l})=>({...l,status:xe({status:l.status,error:d,metadata:c}),terminalReason:Ue({status:l.status,error:d,metadata:c})??null}))}catch(r){throw new f("DB_ERROR","Failed to find task evidence",r)}finally{n.close();}}findThreadChains(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=e.maxThreads??8,s=e.maxTurnsPerThread??4,o=[isNotNull(a.thread_id),isNull(a.parent_task_id),isNull(a.caller_agent_id),or(isNull(a.platform),ne$1(a.platform,"workflow")),or(isNull(a.metadata),and(notLike(a.metadata,'%"kind":"workflow_card"%'),notLike(a.metadata,'%"kind":"workflow_ui_instance"%'))),or(isNull(a.metadata),notLike(a.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&o.push(eq(a.workspace_id,e.workspaceId)),e.from&&o.push(gte(a.started_at,e.from)),e.to&&o.push(lt$1(a.started_at,e.to));let i=n.db.select({id:a.id,agent_id:a.agent_id,status:a.status,prompt:a.prompt,started_at:a.started_at,completed_at:a.completed_at,thread_id:a.thread_id}).from(a).where(and(...o)).orderBy(asc(a.started_at),asc(a.id)).all(),u=new Map;for(let c of i){if(!c.thread_id)continue;let l={id:c.id,agentId:c.agent_id,status:c.status,prompt:c.prompt,startedAt:c.started_at,completedAt:c.completed_at},p=u.get(c.thread_id);p?p.push(l):u.set(c.thread_id,[l]);}let d=[];for(let[c,l]of u){let p=l.filter(g=>g.agentId===e.targetAgentId).length;p<2||d.push({threadId:c,targetAgentTurnCount:p,turns:l});}return d.sort((c,l)=>{let p=c.turns[c.turns.length-1].startedAt,g=l.turns[l.turns.length-1].startedAt;return p<g?1:p>g?-1:0}),d.slice(0,r).map(c=>({threadId:c.threadId,targetAgentTurnCount:c.targetAgentTurnCount,turns:c.turns.slice(-s)}))}catch(r){throw new f("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}},Pd=["up","down"],mo=1e3,Ld=200,ff=64,Wn=class extends f{stableCode;taskId;constructor(e,n){super(e==="TASK_NOT_FOUND"?"NOT_FOUND":"CONFLICT",e==="TASK_NOT_FOUND"?`Task not found: ${n}`:`Task is not finished, so it cannot be rated: ${n}`),this.name="TaskRatingError",this.stableCode=e,this.taskId=n;}},gf=new Set(xn);});h();h();h();var it=class{detach(e){}};h();function Do(t){let e=n=>String(n).padStart(2,"0");return `${t.getFullYear()}${e(t.getMonth()+1)}${e(t.getDate())}T${e(t.getHours())}${e(t.getMinutes())}${e(t.getSeconds())}`}function Qr(t){let e=t.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}var Zr=class extends it{name="file-logger";unsubs=[];logFiles=new Map;logsDir;version;constructor(e){super(),this.logsDir=join(e?.workspaceRoot??process.cwd(),".crewx","logs"),this.version=e?.version??"unknown";}attach(e){this.unsubs.push(e.on("task:start",n=>{try{existsSync(this.logsDir)||mkdirSync(this.logsDir,{recursive:!0});let r=Do(n.timestamp),s=join(this.logsDir,`${r}_${n.traceId}.log`);this.logFiles.set(n.traceId,s);let o=`=== TASK LOG: ${n.traceId} ===
|
|
334
334
|
CrewX Version: ${this.version}
|
|
335
335
|
Mode: ${n.mode}
|
|
336
336
|
Agent: ${n.agentRef}
|
|
337
|
-
Started: ${
|
|
337
|
+
Started: ${Qr(n.timestamp)}
|
|
338
338
|
Message: ${n.message}
|
|
339
339
|
|
|
340
340
|
`;writeFileSync(s,o,{encoding:"utf8",mode:384});}catch{}}),e.on("task:output",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let s=new Date().toISOString();appendFileSync(r,`[${s}] STDOUT: ${n.output}
|
|
341
|
-
`,"utf8");}catch{}}),e.on("task:end",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let s=
|
|
341
|
+
`,"utf8");}catch{}}),e.on("task:end",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let s=Qr(new Date),o=n.error?`failed: ${n.error.message}`:"completed successfully",i=`[${s}] INFO: Task ${o} in ${n.durationMs}ms
|
|
342
342
|
[${s}] INFO: Process closed with exit code: ${n.error?1:0}
|
|
343
|
-
`;appendFileSync(r,i,"utf8"),this.logFiles.delete(n.traceId);}catch{}}));}detach(e){this.unsubs.forEach(n=>n()),this.unsubs=[],this.logFiles.clear();}};h();h();var vo=Symbol.for("crewx.interceptor.run-stops");function gu(){let t=globalThis,e=t[vo];if(e)return e;let n=new Map;return t[vo]=n,n}function No(t){let e=gu().get(t);return e?(e.abort(),true):false}h();var Pt=new Map;function Jn(t){let e=ue.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function Do(t){let e=Jn(t);return createHash("sha256").update(e).digest("hex")}function Po(t){let e=Jn(t),n=Pt.get(e);if(n!==void 0)return n;let r=e;try{let s=ue.join(e,".git");if(!lstatSync(s).isFile())return Pt.set(e,r),r;let o=/^gitdir:\s*(.+?)\s*$/i.exec(readFileSync(s,"utf8").trim());if(!o)return Pt.set(e,r),r;let i=o[1],u=ue.isAbsolute(i)?i:ue.resolve(ue.dirname(s),i),d=readFileSync(ue.join(u,"commondir"),"utf8").trim();if(!d)return Pt.set(e,r),r;let c=ue.isAbsolute(d)?d:ue.resolve(u,d);if(ue.basename(c)!==".git"||!statSync(c).isDirectory())return Pt.set(e,r),r;let l=Jn(realpathSync.native(e)),p=Jn(realpathSync.native(ue.dirname(c)));(l===p||(p.endsWith("/")?l.startsWith(p):l.startsWith(`${p}/`)))&&(r=p);}catch{}return Pt.set(e,r),r}it();eo();qt();Ms();Cn();Zs();cr();var cf=200,lf=200;function pf(t){if(typeof t!="object"||t===null||!("code"in t))return;let e=t.code;return typeof e=="string"&&e.length>0?e:void 0}function ff(t){let e=t instanceof f?t.code:void 0,n=t instanceof f?t.cause:t,r=pf(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function bd(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function gf(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function vd(t){if(!t)return {};try{let e=JSON.parse(t);return gf(e)?e:{}}catch{return {}}}function sn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var hf=new Set(["workflow","mcp"]),go=class extends ot{name="sqlite-tracing";unsubs=[];dbPath;version;inheritWorktreeOwner;runnerIdentity;taskRepo;heartbeatTaskIds=new Set;ownedTaskRuns=new Map;ignoredDetachedTaskIds=new Set;queues=new Map;metrics={flushCount:0,flushedEntries:0,maxQueueEntries:0,maxQueueBytes:0,appendFailureCount:0,appendFailureEntries:0,appendFailureBytes:0,appendFailureByCode:{},appendFailureByCause:{}};constructor(e){super();let n=process.env.CREWX_DB;this.dbPath=e?.dbRoot!==void 0?join(e.dbRoot,".crewx","crewx.db"):n??join(homedir(),".crewx","crewx.db"),this.version=e?.version??"unknown",this.inheritWorktreeOwner=e?.inheritWorktreeOwner===true;let r=e?.runnerIdentity;this.runnerIdentity={detachedRunner:r?.detachedRunner===true,assignedTaskId:r?.detachedRunner===true&&r.assignedTaskId?.trim()||void 0};}attach(e){let n=new Hn({dbPath:this.dbPath});n.resolveDbPath(),this.taskRepo=n;let r=process.cwd(),s=existsSync(join(r,"crewx.yaml"))||existsSync(join(r,"crewx.yml")),o=this.inheritWorktreeOwner?Po(r):r,i=s?Do(o):null,u=process.argv.join(" ");this.unsubs.push(e.on("task:start",d=>{try{let c=d.callerAgentId??null,l=d.parentTaskId??null,p=d.rootTraceId??d.traceId,{detachedRunner:g,assignedTaskId:_}=this.runnerIdentity,m=_??d.traceId,y=sn(d.metadata?.runEpoch),k=g?"runner":"caller",N=d.workspaceId??i,I=g?n.getTask(m):void 0,D=d.pid??null,E={...d.metadata??{provider:d.provider??"cli/claude"},ownership:k,...g&&D!==null?{providerPid:D}:{}},A=JSON.stringify(E);if(g&&I?.status==="running"&&I.pid!==null&&y===0){this.ignoredDetachedTaskIds.add(m);return}n.startTask({id:m,agentId:d.agentRef.replace(/^@/,""),prompt:d.message,mode:d.mode,status:"running",actorKind:d.actorKind??null,actorId:d.actorId??null,pid:g?process.pid:D,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,securityKey:d.renderedPrompt==null?null:d.securityKey??null,command:u,codingAgentCommand:d.codingAgentCommand??null,workspaceId:N,projectId:d.projectId??null,callerAgentId:c,parentTaskId:l,traceId:p,metadata:A,threadId:d.threadId??null,cwd:d.cwd??null}),n.updateTaskOwnership({id:m,runEpoch:y,ownership:k,...g?{providerPid:D}:{},runtime:{model:d.model??null,renderedPrompt:d.renderedPrompt??null,codingAgentCommand:d.codingAgentCommand??null,metadata:E}})?this.recordOwnedTaskRun({taskId:m,runEpoch:y,workspaceId:N,ownership:k}):console.warn("[crewx] task execution metadata not recorded",{taskId:m,runEpoch:y,ownership:k}),hf.has(d.platform??"cli")||id(n,{taskId:m,runEpoch:y,onStopRequested:Kr=>this.handleStopRequested(n,Kr)})&&this.heartbeatTaskIds.add(m);}catch(c){console.warn("[crewx] task:start tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:output",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;this.enqueueLog(c,{timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output});}catch(c){let l={timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output};this.recordAppendFailure(c,[l],bd(l));}}),e.on("task:run-update",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;let l=sn(d.runEpoch),p=this.runnerIdentity.detachedRunner;n.updateTaskOwnership({id:c,runEpoch:l,ownership:p?"runner":"caller",...p&&d.pid!==void 0?{providerPid:d.pid}:{},runtime:{...d.model!==void 0?{model:d.model}:{},...d.renderedPrompt!==void 0?{renderedPrompt:d.renderedPrompt}:{},...d.securityKey!==void 0?{securityKey:d.securityKey}:{},...d.codingAgentCommand!==void 0?{codingAgentCommand:d.codingAgentCommand}:{},...d.metadata?{metadata:d.metadata}:{}}}),!p&&d.pid!==void 0&&n.recordTaskPid({id:c,runEpoch:l,pid:d.pid});}catch(c){console.warn("[crewx] task:run-update tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:provider-input",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;n.recordProviderInput({id:c,runEpoch:d.runEpoch,input:d.input,keyWrapSkipped:d.keyWrapSkipped,interceptedRequest:d.interceptedRequest===!0,recordedAt:d.timestamp.toISOString()});}catch(c){console.warn("[crewx] task:provider-input tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:end",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.delete(c))return;let l=typeof d.metadata?.runEpoch=="number"?d.metadata.runEpoch:null;this.removeOwnedTaskRun(c,sn(l)),xn(c,l)&&this.heartbeatTaskIds.delete(c),this.flushTaskLogs(c);let g=d.error?JSON.stringify({code:d.error.code,message:d.error.message,...d.error.providerCode?{providerCode:d.error.providerCode}:{},...d.error.mode?{mode:d.error.mode}:{}}):null,_=d.result??null,m=!1,y=d.metadata?.suppressPartialResultRecovery===!0;if(d.error&&!y&&(!_||_.trim()==="")){let k=this.recoverPartialResult(c,d,l);k&&(_=k,m=!0);}n.finishTask({id:c,status:d.error?"failed":"success",result:_,error:g,completedAt:d.timestamp.toISOString(),durationMs:d.durationMs,exitCode:d.exitCode??null,inputTokens:d.inputTokens??0,outputTokens:d.outputTokens??0,cachedInputTokens:d.cachedInputTokens??0,costUsd:d.costUsd??0,model:d.model??null,runEpoch:l,partialResultRecovered:m});}catch{}}));}detach(e){try{this.flushAllTaskLogs();}finally{this.clearAllTimers();for(let n of this.heartbeatTaskIds)xn(n);this.heartbeatTaskIds.clear(),this.ownedTaskRuns.clear(),this.unsubs.forEach(n=>n()),this.unsubs=[],this.queues.clear(),this.ignoredDetachedTaskIds.clear(),this.taskRepo=void 0;}}listOwnedRunningTasks(){return Array.from(this.ownedTaskRuns.values(),e=>({...e}))}async stopOwnedRunningTasksForHostShutdown(){let e=this.taskRepo;if(!e)return;let n=this.listOwnedRunningTasks();for(let r of n)try{let s=await fd(e,{taskId:r.taskId,expectedRunEpoch:r.runEpoch,workspaceId:r.workspaceId});(s.status==="failed"||s.status==="ownership_unverified")&&console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,status:s.status,...s.error?{error:s.error}:{}});}catch(s){console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,cause:s instanceof Error?s.name:typeof s});}}getMetrics(){let e=0,n=0;for(let r of this.queues.values())e+=r.entries.length,n+=r.bytes;return {...this.metrics,appendFailureByCode:{...this.metrics.appendFailureByCode},appendFailureByCause:{...this.metrics.appendFailureByCause},pendingQueueEntries:e,pendingQueueBytes:n}}resolveTaskId(e){return this.runnerIdentity.detachedRunner?this.runnerIdentity.assignedTaskId??e:e}recordOwnedTaskRun(e){let n=this.ownedTaskRuns.get(e.taskId);n&&n.runEpoch>e.runEpoch||this.ownedTaskRuns.set(e.taskId,{...e});}removeOwnedTaskRun(e,n){let r=this.ownedTaskRuns.get(e);!r||r.runEpoch!==n||this.ownedTaskRuns.delete(e);}enqueueLog(e,n){let r=this.queues.get(e);if(r||(r={entries:[],bytes:0},this.queues.set(e,r)),r.entries.push(n),r.bytes+=bd(n),this.metrics.maxQueueEntries=Math.max(this.metrics.maxQueueEntries,r.entries.length),this.metrics.maxQueueBytes=Math.max(this.metrics.maxQueueBytes,r.bytes),r.entries.length>=cf){this.flushTaskLogs(e);return}if(!r.timer){let s=setTimeout(()=>{let o=this.queues.get(e);!o||o.timer!==s||(o.timer=void 0,this.flushTaskLogs(e));},lf);r.timer=s;}}recoverPartialResult(e,n,r){try{let s=this.taskRepo;if(!s)return;let o=s.getTask(e);if(!o||o.status!=="running"||sn(o.run_epoch)!==sn(r))return;let i=vd(o.metadata),u=typeof i.provider=="string"?i.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!u)return;let d=Rr({taskLogRepository:s,taskId:e,provider:u,model:o.model});if(!d?.adapter.extractPartialText)return;let c=d.adapter.extractPartialText(d.stdout);return !c||!c.trim()||Xe(c,u)?void 0:c}catch{return}}async handleStopRequested(e,n){let r=n.id;if(!r)return;let s=sn(n.run_epoch),o=vd(n.metadata??null),i=o.ownership==="runner"?"runner":"caller";if(i==="runner"&&n.pid!==process.pid){console.warn("[crewx] ignored stop request for task owned by another runner",{taskId:r});return}let u=typeof o.providerPid=="number"&&Number.isSafeInteger(o.providerPid)&&o.providerPid>0?o.providerPid:void 0,d=i==="runner"?u:typeof n.pid=="number"&&n.pid>0?n.pid:void 0;if(No(r),d!==void 0){let c;try{c=await Ft(d,{signal:Ut});}catch(l){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:l instanceof Error?l.name:typeof l});return}if(c.status==="failed"){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:c.error??"process termination failed"});return}}try{let c=e.finalizeTaskStop({id:r,runEpoch:s,method:Ar(n.stop_requested_at)}),l=e.getTask(r);(c||l?.status!=="running")&&xn(r,s)&&this.heartbeatTaskIds.delete(r);}catch(c){console.warn("[crewx] cooperative task stop finalization failed",{taskId:r,cause:c instanceof Error?c.name:typeof c});}}flushTaskLogs(e){let n=this.queues.get(e);if(!n||n.entries.length===0){n?.timer&&clearTimeout(n.timer),this.queues.delete(e);return}n.timer&&(clearTimeout(n.timer),n.timer=void 0);let r=n.entries,s=n.bytes;n.entries=[],n.bytes=0,this.metrics.flushCount+=1;try{this.taskRepo?.appendLogs(e,r),this.metrics.flushedEntries+=r.length;}catch(i){this.recordAppendFailure(i,r,s);}let o=this.queues.get(e);o&&o.entries.length===0&&(o.timer&&clearTimeout(o.timer),this.queues.delete(e));}flushAllTaskLogs(){for(let e of [...this.queues.keys()])this.flushTaskLogs(e);}clearAllTimers(){for(let e of this.queues.values())e.timer&&(clearTimeout(e.timer),e.timer=void 0);}recordAppendFailure(e,n,r){let s=ff(e);this.metrics.appendFailureCount+=1,this.metrics.appendFailureEntries+=n.length,this.metrics.appendFailureBytes+=r,this.metrics.appendFailureByCode[s.code]=(this.metrics.appendFailureByCode[s.code]??0)+1,this.metrics.appendFailureByCause[s.cause]=(this.metrics.appendFailureByCause[s.cause]??0)+1,console.warn("[crewx] sqlite tracing append failed",{code:s.code,cause:s.cause,pendingEntries:n.length,pendingBytes:r});}};h();h();h();at();mt();kt();it();Rt();vn();h();function Dr(t){return t!==null&&t!==""}function _f(t){return t.schedule_id!==null&&t.schedule_id!==void 0?"system":Dr(t.parent_task_id)||Dr(t.caller_agent_id)?"agent":t.platform==="workflow"?"system":"human"}function Nd(t,e){return {origin:t==="human"?"direct":"delegated",delegatedByAgentId:t==="agent"&&Dr(e)?e:null}}function Pr(t){let e=_f(t),n=Dr(t.caller_agent_id)?t.caller_agent_id:null,r=t.parent_thread_id!==null&&t.parent_thread_id!==t.thread_id;return {origin:e==="human"?"direct":"delegated",delegatedByAgentId:e==="agent"?n??(r&&t.parent_agent_id||null):null}}function xd(t,e,n){return t.creator_task_id!==null&&t.creator_pointer_unverified===0?t.creator_actor_kind!==null?Nd(t.creator_actor_kind,t.creator_actor_id):e?Pr(e):{origin:"direct",delegatedByAgentId:null}:t.created_by_kind!==null?Nd(t.created_by_kind,t.created_by_id):n?Pr(n):void 0}function Fn(t){return bn(t)}function Ef({metadata:t,...e}){return {...e,status:$e({...e,metadata:t}),terminalReason:Ze({...e,metadata:t})??null}}var Mr=32,Dd=100,Rf=["running","failed"];function Sf(t){return t==="running"?0:t==="failed"?1:2}function Pd(t,e){return t[0]!==e[0]?t[0]-e[0]:t[1]!==e[1]?t[1]===null?1:e[1]===null||t[1]<e[1]?-1:1:t[2]<e[2]?-1:t[2]>e[2]?1:0}function If(t){return Buffer.from(JSON.stringify(t),"utf8").toString("base64url")}function Af(t){try{let e=JSON.parse(Buffer.from(t,"base64url").toString("utf8"));if(Array.isArray(e)&&e.length===3&&Number.isInteger(e[0])&&e[0]>=0&&e[0]<=2&&(e[1]===null||typeof e[1]=="string")&&typeof e[2]=="string")return [e[0],e[1],e[2]]}catch{}throw new f("VALIDATION","Invalid descendant cursor")}function Ld(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.min(n,Math.max(1,Math.trunc(t)))}function Md(t){return {total:0,running:0,pending:0,paused:0,success:0,failed:0,stopped:0,runnerLost:0,checkedAt:t}}function Of(t){switch(t){case "running":case "pending":case "paused":case "success":case "failed":case "stopped":return t;default:return}}function $d(t,e,n,r){let s=Of(e);s&&(t[s]+=r,t.total+=r,s==="failed"&&n==="runner_lost"&&(t.runnerLost+=r));}var $r=900,Hd=20;function Ud(t,e){return (t?.origin??"direct")===e}function Fd(t,e){let n=new Date(e.updated_at).getTime()-new Date(t.updated_at).getTime();return n!==0?n:t.id.localeCompare(e.id)}var an=class extends f{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function on(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function bf(t){let n=on(t).threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {priority:null,state:null};let r=n;return {priority:typeof r.priority=="string"?r.priority:null,state:typeof r.state=="string"?r.state:null}}function qd(t,e,n){return t.get(sql`
|
|
343
|
+
`;appendFileSync(r,i,"utf8"),this.logFiles.delete(n.traceId);}catch{}}));}detach(e){this.unsubs.forEach(n=>n()),this.unsubs=[],this.logFiles.clear();}};h();h();var Mo=Symbol.for("crewx.interceptor.run-stops");function Ru(){let t=globalThis,e=t[Mo];if(e)return e;let n=new Map;return t[Mo]=n,n}function $o(t){let e=Ru().get(t);return e?(e.abort(),true):false}h();var Mt=new Map;function er(t){let e=le.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function Fo(t){let e=er(t);return createHash("sha256").update(e).digest("hex")}function qo(t){let e=er(t),n=Mt.get(e);if(n!==void 0)return n;let r=e;try{let s=le.join(e,".git");if(!lstatSync(s).isFile())return Mt.set(e,r),r;let o=/^gitdir:\s*(.+?)\s*$/i.exec(readFileSync(s,"utf8").trim());if(!o)return Mt.set(e,r),r;let i=o[1],u=le.isAbsolute(i)?i:le.resolve(le.dirname(s),i),d=readFileSync(le.join(u,"commondir"),"utf8").trim();if(!d)return Mt.set(e,r),r;let c=le.isAbsolute(d)?d:le.resolve(u,d);if(le.basename(c)!==".git"||!statSync(c).isDirectory())return Mt.set(e,r),r;let l=er(realpathSync.native(e)),p=er(realpathSync.native(le.dirname(c)));(l===p||(p.endsWith("/")?l.startsWith(p):l.startsWith(`${p}/`)))&&(r=p);}catch{}return Mt.set(e,r),r}at();oo();Wt();qs();Mn();so();hr();var Tf=200,wf=200;function yf(t){if(typeof t!="object"||t===null||!("code"in t))return;let e=t.code;return typeof e=="string"&&e.length>0?e:void 0}function Ef(t){let e=t instanceof f?t.code:void 0,n=t instanceof f?t.cause:t,r=yf(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function Ud(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function Rf(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Fd(t){if(!t)return {};try{let e=JSON.parse(t);return Rf(e)?e:{}}catch{return {}}}function an(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var Sf=new Set(["workflow","mcp"]),To=class extends it{name="sqlite-tracing";unsubs=[];dbPath;version;inheritWorktreeOwner;runnerIdentity;taskRepo;heartbeatTaskIds=new Set;ownedTaskRuns=new Map;ignoredDetachedTaskIds=new Set;queues=new Map;metrics={flushCount:0,flushedEntries:0,maxQueueEntries:0,maxQueueBytes:0,appendFailureCount:0,appendFailureEntries:0,appendFailureBytes:0,appendFailureByCode:{},appendFailureByCause:{}};constructor(e){super();let n=process.env.CREWX_DB;this.dbPath=e?.dbRoot!==void 0?join(e.dbRoot,".crewx","crewx.db"):n??join(homedir(),".crewx","crewx.db"),this.version=e?.version??"unknown",this.inheritWorktreeOwner=e?.inheritWorktreeOwner===true;let r=e?.runnerIdentity;this.runnerIdentity={detachedRunner:r?.detachedRunner===true,assignedTaskId:r?.detachedRunner===true&&r.assignedTaskId?.trim()||void 0};}attach(e){let n=new Bn({dbPath:this.dbPath});n.resolveDbPath(),this.taskRepo=n;let r=process.cwd(),s=existsSync(join(r,"crewx.yaml"))||existsSync(join(r,"crewx.yml")),o=this.inheritWorktreeOwner?qo(r):r,i=s?Fo(o):null,u=process.argv.join(" ");this.unsubs.push(e.on("task:start",d=>{try{let c=d.callerAgentId??null,l=d.parentTaskId??null,p=d.rootTraceId??d.traceId,{detachedRunner:g,assignedTaskId:_}=this.runnerIdentity,m=_??d.traceId,y=an(d.metadata?.runEpoch),k=g?"runner":"caller",v=d.workspaceId??i,I=g?n.getTask(m):void 0,D=d.pid??null,E={...d.metadata??{provider:d.provider??"cli/claude"},ownership:k,...g&&D!==null?{providerPid:D}:{}},A=JSON.stringify(E);if(g&&I?.status==="running"&&I.pid!==null&&y===0){this.ignoredDetachedTaskIds.add(m);return}n.startTask({id:m,agentId:d.agentRef.replace(/^@/,""),prompt:d.message,mode:d.mode,status:"running",actorKind:d.actorKind??null,actorId:d.actorId??null,pid:g?process.pid:D,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,securityKey:d.renderedPrompt==null?null:d.securityKey??null,command:u,codingAgentCommand:d.codingAgentCommand??null,workspaceId:v,projectId:d.projectId??null,callerAgentId:c,parentTaskId:l,traceId:p,metadata:A,threadId:d.threadId??null,cwd:d.cwd??null}),n.updateTaskOwnership({id:m,runEpoch:y,ownership:k,...g?{providerPid:D}:{},runtime:{model:d.model??null,renderedPrompt:d.renderedPrompt??null,codingAgentCommand:d.codingAgentCommand??null,metadata:E}})?this.recordOwnedTaskRun({taskId:m,runEpoch:y,workspaceId:v,ownership:k}):console.warn("[crewx] task execution metadata not recorded",{taskId:m,runEpoch:y,ownership:k}),Sf.has(d.platform??"cli")||md(n,{taskId:m,runEpoch:y,onStopRequested:Yr=>this.handleStopRequested(n,Yr)})&&this.heartbeatTaskIds.add(m);}catch(c){console.warn("[crewx] task:start tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:output",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;this.enqueueLog(c,{timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output});}catch(c){let l={timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output};this.recordAppendFailure(c,[l],Ud(l));}}),e.on("task:run-update",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;let l=an(d.runEpoch),p=this.runnerIdentity.detachedRunner;n.updateTaskOwnership({id:c,runEpoch:l,ownership:p?"runner":"caller",...p&&d.pid!==void 0?{providerPid:d.pid}:{},runtime:{...d.model!==void 0?{model:d.model}:{},...d.renderedPrompt!==void 0?{renderedPrompt:d.renderedPrompt}:{},...d.securityKey!==void 0?{securityKey:d.securityKey}:{},...d.codingAgentCommand!==void 0?{codingAgentCommand:d.codingAgentCommand}:{},...d.metadata?{metadata:d.metadata}:{}}}),!p&&d.pid!==void 0&&n.recordTaskPid({id:c,runEpoch:l,pid:d.pid});}catch(c){console.warn("[crewx] task:run-update tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:provider-input",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(c))return;n.recordProviderInput({id:c,runEpoch:d.runEpoch,input:d.input,keyWrapSkipped:d.keyWrapSkipped,interceptedRequest:d.interceptedRequest===!0,recordedAt:d.timestamp.toISOString()});}catch(c){console.warn("[crewx] task:provider-input tracing failed",{cause:c instanceof Error?c.name:typeof c});}}),e.on("task:end",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.delete(c))return;let l=typeof d.metadata?.runEpoch=="number"?d.metadata.runEpoch:null;this.removeOwnedTaskRun(c,an(l)),Ln(c,l)&&this.heartbeatTaskIds.delete(c),this.flushTaskLogs(c);let g=d.error?JSON.stringify({code:d.error.code,message:d.error.message,...d.error.providerCode?{providerCode:d.error.providerCode}:{},...d.error.mode?{mode:d.error.mode}:{}}):null,_=d.result??null,m=!1,y=d.metadata?.suppressPartialResultRecovery===!0;if(d.error&&!y&&(!_||_.trim()==="")){let k=this.recoverPartialResult(c,d,l);k&&(_=k,m=!0);}n.finishTask({id:c,status:d.error?"failed":"success",result:_,error:g,completedAt:d.timestamp.toISOString(),durationMs:d.durationMs,exitCode:d.exitCode??null,inputTokens:d.inputTokens??0,outputTokens:d.outputTokens??0,cachedInputTokens:d.cachedInputTokens??0,costUsd:d.costUsd??0,model:d.model??null,runEpoch:l,partialResultRecovered:m});}catch{}}));}detach(e){try{this.flushAllTaskLogs();}finally{this.clearAllTimers();for(let n of this.heartbeatTaskIds)Ln(n);this.heartbeatTaskIds.clear(),this.ownedTaskRuns.clear(),this.unsubs.forEach(n=>n()),this.unsubs=[],this.queues.clear(),this.ignoredDetachedTaskIds.clear(),this.taskRepo=void 0;}}listOwnedRunningTasks(){return Array.from(this.ownedTaskRuns.values(),e=>({...e}))}async stopOwnedRunningTasksForHostShutdown(){let e=this.taskRepo;if(!e)return;let n=this.listOwnedRunningTasks();for(let r of n)try{let s=await Sd(e,{taskId:r.taskId,expectedRunEpoch:r.runEpoch,workspaceId:r.workspaceId});(s.status==="failed"||s.status==="ownership_unverified")&&console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,status:s.status,...s.error?{error:s.error}:{}});}catch(s){console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,cause:s instanceof Error?s.name:typeof s});}}getMetrics(){let e=0,n=0;for(let r of this.queues.values())e+=r.entries.length,n+=r.bytes;return {...this.metrics,appendFailureByCode:{...this.metrics.appendFailureByCode},appendFailureByCause:{...this.metrics.appendFailureByCause},pendingQueueEntries:e,pendingQueueBytes:n}}resolveTaskId(e){return this.runnerIdentity.detachedRunner?this.runnerIdentity.assignedTaskId??e:e}recordOwnedTaskRun(e){let n=this.ownedTaskRuns.get(e.taskId);n&&n.runEpoch>e.runEpoch||this.ownedTaskRuns.set(e.taskId,{...e});}removeOwnedTaskRun(e,n){let r=this.ownedTaskRuns.get(e);!r||r.runEpoch!==n||this.ownedTaskRuns.delete(e);}enqueueLog(e,n){let r=this.queues.get(e);if(r||(r={entries:[],bytes:0},this.queues.set(e,r)),r.entries.push(n),r.bytes+=Ud(n),this.metrics.maxQueueEntries=Math.max(this.metrics.maxQueueEntries,r.entries.length),this.metrics.maxQueueBytes=Math.max(this.metrics.maxQueueBytes,r.bytes),r.entries.length>=Tf){this.flushTaskLogs(e);return}if(!r.timer){let s=setTimeout(()=>{let o=this.queues.get(e);!o||o.timer!==s||(o.timer=void 0,this.flushTaskLogs(e));},wf);r.timer=s;}}recoverPartialResult(e,n,r){try{let s=this.taskRepo;if(!s)return;let o=s.getTask(e);if(!o||o.status!=="running"||an(o.run_epoch)!==an(r))return;let i=Fd(o.metadata),u=typeof i.provider=="string"?i.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!u)return;let d=br({taskLogRepository:s,taskId:e,provider:u,model:o.model});if(!d?.adapter.extractPartialText)return;let c=d.adapter.extractPartialText(d.stdout);return !c||!c.trim()||Qe(c,u)?void 0:c}catch{return}}async handleStopRequested(e,n){let r=n.id;if(!r)return;let s=an(n.run_epoch),o=Fd(n.metadata??null),i=o.ownership==="runner"?"runner":"caller";if(i==="runner"&&n.pid!==process.pid){console.warn("[crewx] ignored stop request for task owned by another runner",{taskId:r});return}let u=typeof o.providerPid=="number"&&Number.isSafeInteger(o.providerPid)&&o.providerPid>0?o.providerPid:void 0,d=i==="runner"?u:typeof n.pid=="number"&&n.pid>0?n.pid:void 0;if($o(r),d!==void 0){let c;try{c=await Bt(d,{signal:qt});}catch(l){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:l instanceof Error?l.name:typeof l});return}if(c.status==="failed"){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:c.error??"process termination failed"});return}}try{let c=e.finalizeTaskStop({id:r,runEpoch:s,method:xr(n.stop_requested_at)}),l=e.getTask(r);(c||l?.status!=="running")&&Ln(r,s)&&this.heartbeatTaskIds.delete(r);}catch(c){console.warn("[crewx] cooperative task stop finalization failed",{taskId:r,cause:c instanceof Error?c.name:typeof c});}}flushTaskLogs(e){let n=this.queues.get(e);if(!n||n.entries.length===0){n?.timer&&clearTimeout(n.timer),this.queues.delete(e);return}n.timer&&(clearTimeout(n.timer),n.timer=void 0);let r=n.entries,s=n.bytes;n.entries=[],n.bytes=0,this.metrics.flushCount+=1;try{this.taskRepo?.appendLogs(e,r),this.metrics.flushedEntries+=r.length;}catch(i){this.recordAppendFailure(i,r,s);}let o=this.queues.get(e);o&&o.entries.length===0&&(o.timer&&clearTimeout(o.timer),this.queues.delete(e));}flushAllTaskLogs(){for(let e of [...this.queues.keys()])this.flushTaskLogs(e);}clearAllTimers(){for(let e of this.queues.values())e.timer&&(clearTimeout(e.timer),e.timer=void 0);}recordAppendFailure(e,n,r){let s=Ef(e);this.metrics.appendFailureCount+=1,this.metrics.appendFailureEntries+=n.length,this.metrics.appendFailureBytes+=r,this.metrics.appendFailureByCode[s.code]=(this.metrics.appendFailureByCode[s.code]??0)+1,this.metrics.appendFailureByCause[s.cause]=(this.metrics.appendFailureByCause[s.cause]??0)+1,console.warn("[crewx] sqlite tracing append failed",{code:s.code,cause:s.cause,pendingEntries:n.length,pendingBytes:r});}};h();h();h();dt();kt();Tt();at();It();Dn();h();function Hr(t){return t!==null&&t!==""}function If(t){return t.schedule_id!==null&&t.schedule_id!==void 0?"system":Hr(t.parent_task_id)||Hr(t.caller_agent_id)?"agent":t.platform==="workflow"?"system":"human"}function qd(t,e){return {origin:t==="human"?"direct":"delegated",delegatedByAgentId:t==="agent"&&Hr(e)?e:null}}function Ur(t){let e=If(t),n=Hr(t.caller_agent_id)?t.caller_agent_id:null,r=t.parent_thread_id!==null&&t.parent_thread_id!==t.thread_id;return {origin:e==="human"?"direct":"delegated",delegatedByAgentId:e==="agent"?n??(r&&t.parent_agent_id||null):null}}function Bd(t,e,n){return t.creator_task_id!==null&&t.creator_pointer_unverified===0?t.creator_actor_kind!==null?qd(t.creator_actor_kind,t.creator_actor_id):e?Ur(e):{origin:"direct",delegatedByAgentId:null}:t.created_by_kind!==null?qd(t.created_by_kind,t.created_by_id):n?Ur(n):void 0}function jn(t){return Cn(t)}function xf({metadata:t,...e}){return {...e,status:xe({...e,metadata:t}),terminalReason:Ue({...e,metadata:t})??null}}var Gn=32,jd=100,Cf=["running","failed"];function Df(t){return t==="running"?0:t==="failed"?1:2}function Gd(t,e){return t[0]!==e[0]?t[0]-e[0]:t[1]!==e[1]?t[1]===null?1:e[1]===null||t[1]<e[1]?-1:1:t[2]<e[2]?-1:t[2]>e[2]?1:0}function Pf(t){return Buffer.from(JSON.stringify(t),"utf8").toString("base64url")}function Lf(t){try{let e=JSON.parse(Buffer.from(t,"base64url").toString("utf8"));if(Array.isArray(e)&&e.length===3&&Number.isInteger(e[0])&&e[0]>=0&&e[0]<=2&&(e[1]===null||typeof e[1]=="string")&&typeof e[2]=="string")return [e[0],e[1],e[2]]}catch{}throw new f("VALIDATION","Invalid descendant cursor")}function zd(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.min(n,Math.max(1,Math.trunc(t)))}function wo(t){return {total:0,running:0,pending:0,paused:0,success:0,failed:0,stopped:0,runnerLost:0,checkedAt:t}}function Mf(t){switch(t){case "running":case "pending":case "paused":case "success":case "failed":case "stopped":return t;default:return}}function yo(t,e,n,r){let s=Mf(e);s&&(t[s]+=r,t.total+=r,s==="failed"&&n==="runner_lost"&&(t.runnerLost+=r));}var qr=900,Kd=20;function Vd(t,e){return (t?.origin??"direct")===e}function Jd(t,e){let n=new Date(e.updated_at).getTime()-new Date(t.updated_at).getTime();return n!==0?n:t.id.localeCompare(e.id)}var dn=class extends f{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function un(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function $f(t){let n=un(t).threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {priority:null,state:null};let r=n;return {priority:typeof r.priority=="string"?r.priority:null,state:typeof r.state=="string"?r.state:null}}function Xd(t,e,n){return t.get(sql`
|
|
344
344
|
SELECT id
|
|
345
345
|
FROM tasks INDEXED BY idx_tasks_thread_id
|
|
346
346
|
WHERE thread_id = ${e}
|
|
347
347
|
AND id <> ${n}
|
|
348
348
|
LIMIT 1
|
|
349
|
-
`)!==void 0}var
|
|
349
|
+
`)!==void 0}function Hf(t,e,n){let r=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e),s=t.select({pinned:T.pinned,metadata:T.metadata}).from(T).where(r).get();if(!s)return null;let o=s.pinned?0:1,i=un(s.metadata);if(o){let u=n?and(eq(T.pinned,1),eq(T.workspace_id,n)):eq(T.pinned,1),d=t.select({metadata:T.metadata}).from(T).where(u).all(),c=null;for(let l of d){let p=un(l.metadata);typeof p.pinOrder=="number"&&(c===null||p.pinOrder<c)&&(c=p.pinOrder);}i.pinOrder=c===null?0:c-1;}else delete i.pinOrder;return t.update(T).set({pinned:o,metadata:Object.keys(i).length>0?JSON.stringify(i):null}).where(r).run(),{pinned:!!o}}function Uf(t,e,n){for(let r=0;r<e.length;r++){let s=n?and(eq(T.id,e[r]),eq(T.workspace_id,n)):eq(T.id,e[r]),o=t.select({metadata:T.metadata}).from(T).where(s).get();if(!o)continue;let i=un(o.metadata);i.pinOrder=r+1,t.update(T).set({metadata:JSON.stringify(i)}).where(s).run();}}var Br=class extends me{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}else if(!existsSync(n))throw new f("NOT_FOUND","Database not found");let r=H(n);if(e)try{be(r.db,n);}catch(s){throw r.close(),s}return r}topLevelTaskPredicateSql(e="child",n){let r=n?`tasks parent INDEXED BY ${n}`:"tasks parent";return sql.raw(`NOT EXISTS (
|
|
350
350
|
SELECT 1 FROM ${r}
|
|
351
351
|
WHERE parent.id = ${e}.parent_task_id
|
|
352
352
|
AND parent.thread_id = ${e}.thread_id
|
|
@@ -389,17 +389,17 @@ Message: ${n.message}
|
|
|
389
389
|
)
|
|
390
390
|
)`}findAllThreadsQuery(e,n){let r=[];e&&r.push(sql`workspace_id = ${e}`),n&&r.push(sql`created_by_kind = ${n}`);let s=r.length>0?sql` WHERE ${sql.join(r,sql` AND `)}`:sql``;return sql`SELECT * FROM threads${s} ORDER BY updated_at DESC`}findThreadIdsQuery(e){return e?sql`SELECT id FROM threads INDEXED BY idx_threads_ws_updated
|
|
391
391
|
WHERE workspace_id = ${e}
|
|
392
|
-
ORDER BY updated_at DESC`:sql`SELECT id FROM threads`}readThreadIds(e,n="Failed to find thread ids"){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=
|
|
392
|
+
ORDER BY updated_at DESC`:sql`SELECT id FROM threads`}readThreadIds(e,n="Failed to find thread ids"){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=u.db.all(this.findThreadIdsQuery(e));for(let c of d)s.has(c.id)||(s.add(c.id),o.push(c.id));}catch(d){throw new f("DB_ERROR",n,d)}finally{u.close();}}return o}findThreadSortKeysQuery(e){return sql`SELECT id, updated_at
|
|
393
393
|
FROM threads INDEXED BY idx_threads_ws_updated
|
|
394
|
-
WHERE workspace_id = ${e}`}readThreadSortKeys(e){let n=this.resolveDbPaths(),r=new Set,s=[];for(let o of n){if(!existsSync(o))continue;let i=
|
|
394
|
+
WHERE workspace_id = ${e}`}readThreadSortKeys(e){let n=this.resolveDbPaths(),r=new Set,s=[];for(let o of n){if(!existsSync(o))continue;let i=H(o);try{let u=i.db.all(this.findThreadSortKeysQuery(e));for(let d of u)r.has(d.id)||(r.add(d.id),s.push(d));}catch(u){throw new f("DB_ERROR","Failed to find recent direct threads",u)}finally{i.close();}}return s}readThreadRowsByIds(e,n,r="Failed to find threads by ids"){if(e.length===0)return [];let s=this.resolveDbPaths(),o=new Set,i=[];for(let u of s){if(!existsSync(u))continue;let d=H(u);try{for(let c=0;c<e.length;c+=qr){let l=e.slice(c,c+qr),p=inArray(T.id,l),g=n?and(p,eq(T.workspace_id,n)):p,_=d.db.select().from(T).where(g).all();for(let m of _)o.has(m.id)||(o.add(m.id),i.push(m));}}catch(c){throw new f("DB_ERROR",r,c)}finally{d.close();}}return i}readThreadRows(e,n,r="Failed to find all threads"){let s=this.resolveDbPaths(),o=new Set,i=[];for(let u of s){if(!existsSync(u))continue;let d=H(u);try{let c=d.db.all(this.findAllThreadsQuery(e,n));for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(c){throw new f("DB_ERROR",r,c)}finally{d.close();}}return i}findAllThreads(e,n){return this.readThreadRows(e,n)}explainFindAllThreadsPlan(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{return o.db.all(sql`EXPLAIN QUERY PLAN ${this.findAllThreadsQuery(e,n)}`).map(u=>u.detail)}finally{o.close();}}return []}findThreadsByIdsOrTitles(e,n){if(e.length===0)return [];let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=or(inArray(T.id,e),inArray(T.title,e)),c=n?and(d,eq(T.workspace_id,n)):d,l=u.db.select().from(T).where(c).orderBy(desc(T.updated_at)).all();for(let p of l)s.has(p.id)||(s.add(p.id),o.push(p));}catch(d){throw new f("DB_ERROR","Failed to find threads by ids or titles",d)}finally{u.close();}}return o}findThreadById(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{let i=eq(T.id,e),u=n?and(i,eq(T.workspace_id,n)):i,d=o.db.select().from(T).where(u).limit(1).get()??void 0;if(d)return d}catch(i){throw new f("DB_ERROR","Failed to find thread by id",i)}finally{o.close();}}}createAppLaunchThread(e){let n=this.openHandle(true);try{return n.db.transaction(r=>{if(!r.select({id:te.id}).from(te).where(eq(te.id,e.workspaceId)).limit(1).get())throw new f("NOT_FOUND","Workspace not found");let o=r.select().from(T).where(eq(T.id,e.threadId)).limit(1).get();if(o){let l=un(o.metadata).appLaunch,p=l&&typeof l=="object"&&!Array.isArray(l)?l.appId:void 0,g=r.get(sql`
|
|
395
395
|
SELECT COUNT(*) AS count FROM tasks WHERE thread_id = ${e.threadId}
|
|
396
|
-
`)?.count??0;return o.workspace_id===e.workspaceId&&p===e.appId&&o.message_count===0&&o.first_message===null&&o.last_message===null&&g===0?{status:"existing",thread:o}:{status:"conflict"}}let i=new Date().toISOString(),u=JSON.stringify({appLaunch:{appId:e.appId,...e.initialAgentId===void 0?{}:{initialAgentId:e.initialAgentId}}});r.insert(T).values({id:e.threadId,workspace_id:e.workspaceId,platform:e.platform,title:e.title,title_locked:1,created_by_kind:"human",created_by_id:e.createdById,created_by_task_id:null,message_count:0,first_message:null,last_message:null,metadata:u,created_at:i,updated_at:i}).run();let d=r.select().from(T).where(eq(T.id,e.threadId)).limit(1).get();if(!d)throw new f("DB_ERROR","App-launch thread could not be read after insert");return {status:"created",thread:d}},{behavior:"immediate"})}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to create App-launch thread",r)}finally{n.close();}}threadExists(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=
|
|
396
|
+
`)?.count??0;return o.workspace_id===e.workspaceId&&p===e.appId&&o.message_count===0&&o.first_message===null&&o.last_message===null&&g===0?{status:"existing",thread:o}:{status:"conflict"}}let i=new Date().toISOString(),u=JSON.stringify({appLaunch:{appId:e.appId,...e.initialAgentId===void 0?{}:{initialAgentId:e.initialAgentId}}});r.insert(T).values({id:e.threadId,workspace_id:e.workspaceId,platform:e.platform,title:e.title,title_locked:1,created_by_kind:"human",created_by_id:e.createdById,created_by_task_id:null,message_count:0,first_message:null,last_message:null,metadata:u,created_at:i,updated_at:i}).run();let d=r.select().from(T).where(eq(T.id,e.threadId)).limit(1).get();if(!d)throw new f("DB_ERROR","App-launch thread could not be read after insert");return {status:"created",thread:d}},{behavior:"immediate"})}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to create App-launch thread",r)}finally{n.close();}}threadExists(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{let i=eq(T.id,e),u=n?and(i,eq(T.workspace_id,n)):i;if(o.db.select({id:T.id}).from(T).where(u).limit(1).get())return !0}catch(i){throw new f("DB_ERROR","Failed to check thread existence",i)}finally{o.close();}}return false}aggregateTaskStats(e,n){let r=this.resolveDbPaths(),s=0,o=0,i=0,u=0,d=0,c=0,l=0,p=0,g=0,_=0,m=new Set;for(let y of r){if(!existsSync(y))continue;let k=H(y);try{let v=k.db.get(sql`
|
|
397
397
|
SELECT count(*) AS cnt
|
|
398
398
|
FROM tasks child INDEXED BY idx_tasks_thread_id
|
|
399
399
|
WHERE child.thread_id = ${e}
|
|
400
400
|
AND ${this.topLevelTaskPredicateSql()}
|
|
401
401
|
${n?sql`AND child.workspace_id = ${n}`:sql``}
|
|
402
|
-
`);
|
|
402
|
+
`);v&&(s+=v.cnt);let I=k.db.get(sql`
|
|
403
403
|
SELECT
|
|
404
404
|
COALESCE(SUM(child.input_tokens), 0) AS total_input,
|
|
405
405
|
COALESCE(SUM(child.output_tokens), 0) AS total_output,
|
|
@@ -423,7 +423,7 @@ Message: ${n.message}
|
|
|
423
423
|
FROM descendants
|
|
424
424
|
JOIN tasks child INDEXED BY idx_tasks_parent_task_id
|
|
425
425
|
ON child.parent_task_id = descendants.task_id
|
|
426
|
-
WHERE descendants.depth < ${
|
|
426
|
+
WHERE descendants.depth < ${Gn}
|
|
427
427
|
),
|
|
428
428
|
delegated_ids(task_id) AS (
|
|
429
429
|
SELECT DISTINCT descendants.task_id
|
|
@@ -449,13 +449,13 @@ Message: ${n.message}
|
|
|
449
449
|
AND child.agent_id != 'workflow'
|
|
450
450
|
AND ${this.topLevelTaskPredicateSql()}
|
|
451
451
|
${n?sql`AND child.workspace_id = ${n}`:sql``}
|
|
452
|
-
`);for(let A of E)m.add(A.agent_id);}catch(
|
|
452
|
+
`);for(let A of E)m.add(A.agent_id);}catch(v){throw new f("DB_ERROR","Failed to aggregate task stats",v)}finally{k.close();}}return {taskCount:s,inputTokens:o,outputTokens:i,cachedInputTokens:u,costUsd:d,agentIds:Array.from(m),delegated:{taskCount:c,inputTokens:l,outputTokens:p,cachedInputTokens:g,costUsd:_}}}getDescendantSummaryByTaskId(e,n){let r=this.resolveDbPaths(),s={},o=new Date().toISOString();for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=sql`
|
|
453
453
|
SELECT own.id
|
|
454
454
|
FROM tasks own INDEXED BY idx_tasks_thread_id
|
|
455
455
|
WHERE own.thread_id = ${e}
|
|
456
456
|
${n?sql`AND own.workspace_id = ${n}`:sql``}
|
|
457
457
|
`,c=u.db.all(sql`
|
|
458
|
-
${this.descendantTraversalSql(d,sql`SELECT own.task_id FROM own_tasks own`,
|
|
458
|
+
${this.descendantTraversalSql(d,sql`SELECT own.task_id FROM own_tasks own`,Gn)}
|
|
459
459
|
SELECT
|
|
460
460
|
descendant_ids.root_task_id AS root_task_id,
|
|
461
461
|
task.status AS status,
|
|
@@ -466,7 +466,24 @@ Message: ${n.message}
|
|
|
466
466
|
JOIN tasks task ON task.id = descendant_ids.task_id
|
|
467
467
|
WHERE NOT ${this.descendantSkippedSql("task")}
|
|
468
468
|
GROUP BY descendant_ids.root_task_id, task.status, task.error, task.metadata
|
|
469
|
-
`);for(let l of c){let p=s[l.root_task_id]??=
|
|
469
|
+
`);for(let l of c){let p=s[l.root_task_id]??=wo(o);yo(p,xe(l),Ue(l),l.task_count);}}catch(d){throw new f("DB_ERROR","Failed to aggregate task descendant summaries",d)}finally{u.close();}}return s}getThreadTaskStatusBatch(e,n){let r=[...new Set(e)];if(r.length===0)return {tasksByThread:new Map,descendantSummaryByTaskId:{}};let s=this.batchFetchTasks(r,n),o={},i=new Date().toISOString(),u=sql.join(r.map(c=>sql`${c}`),sql`, `),d=sql`
|
|
470
|
+
SELECT own.id
|
|
471
|
+
FROM tasks own INDEXED BY idx_tasks_thread_id
|
|
472
|
+
WHERE own.thread_id IN (${u})
|
|
473
|
+
${n?sql`AND own.workspace_id = ${n}`:sql``}
|
|
474
|
+
`;for(let c of this.resolveDbPaths()){if(!existsSync(c))continue;let l=H(c);try{let p=l.db.all(sql`
|
|
475
|
+
${this.descendantTraversalSql(d,sql`SELECT own.task_id FROM own_tasks own`,Gn)}
|
|
476
|
+
SELECT
|
|
477
|
+
descendant_ids.root_task_id AS root_task_id,
|
|
478
|
+
task.status AS status,
|
|
479
|
+
task.error AS error,
|
|
480
|
+
task.metadata AS metadata,
|
|
481
|
+
count(*) AS task_count
|
|
482
|
+
FROM descendant_ids
|
|
483
|
+
JOIN tasks task ON task.id = descendant_ids.task_id
|
|
484
|
+
WHERE NOT ${this.descendantSkippedSql("task")}
|
|
485
|
+
GROUP BY descendant_ids.root_task_id, task.status, task.error, task.metadata
|
|
486
|
+
`);for(let g of p){let _=o[g.root_task_id]??=wo(i);yo(_,xe(g),Ue(g),g.task_count);}}catch(p){throw p instanceof f?p:new f("DB_ERROR","Failed to batch summarize thread task statuses",p)}finally{l.close();}}return {tasksByThread:s,descendantSummaryByTaskId:o}}listDescendantsByTaskId(e,n,r={}){let s=new Set(r.states??Cf),o=zd(r.limit,jd,jd),i=zd(r.maxDepth,Gn,Gn),u=r.cursor?Lf(r.cursor):void 0;for(let d of this.resolveDbPaths()){if(!existsSync(d))continue;let c=H(d);try{if(!c.db.get(sql`
|
|
470
487
|
SELECT anchor.id FROM tasks anchor
|
|
471
488
|
WHERE anchor.id = ${e} AND anchor.workspace_id = ${n}
|
|
472
489
|
`))continue;let p=sql`
|
|
@@ -500,11 +517,11 @@ Message: ${n.message}
|
|
|
500
517
|
FROM descendant_ids
|
|
501
518
|
JOIN tasks task ON task.id = descendant_ids.task_id
|
|
502
519
|
LEFT JOIN tasks parent ON parent.id = task.parent_task_id
|
|
503
|
-
`),_=
|
|
520
|
+
`),_=wo(new Date().toISOString()),m=!1,y=[];for(let A of g){if(A.has_deeper&&(m=!0),A.skipped)continue;let N=xe(A);yo(_,N,Ue(A),1),s.has(N)&&y.push({row:A,key:[Df(N),A.started_at?A.started_at:null,A.task_id]});}y.sort((A,N)=>Gd(A.key,N.key));let k=u?y.filter(A=>Gd(A.key,u)>0):y,v=k.slice(0,o),I=k.length>v.length?Pf(v[v.length-1].key):null,D=new Map;if(v.length>0){let A=c.db.select(ne).from(a).where(inArray(a.id,v.map(N=>N.row.task_id))).all();for(let N of A)D.set(N.id,jn(N));}let E=[];for(let{row:A}of v){let N=D.get(A.task_id);!N||!A.parent_task_id||E.push({task:N,parentTaskId:A.parent_task_id,parentAgentId:A.parent_agent_id,depth:A.depth});}return {rows:E,summary:_,nextCursor:I,traversalTruncated:m}}catch(l){throw l instanceof f?l:new f("DB_ERROR","Failed to list task descendants",l)}finally{c.close();}}}findInterceptedRequests(e){let n=new Map;if(e.length===0)return n;for(let r of this.resolveDbPaths()){if(!existsSync(r))continue;let s=H(r);try{let o=s.db.all(sql`
|
|
504
521
|
SELECT task_id, input FROM task_provider_inputs
|
|
505
522
|
WHERE run_epoch = 0
|
|
506
523
|
AND task_id IN (${sql.join(e.map(i=>sql`${i}`),sql`, `)})
|
|
507
|
-
`);for(let i of o)n.set(i.task_id,i.input);}catch{}finally{s.close();}}return n}findTopLevelTasks(e,n,r,s){let o=this.resolveDbPaths(),i=s?sql`(${this.topLevelTaskPredicateSql()} OR child.agent_id = ${s})`:this.topLevelTaskPredicateSql(),u=new Set,d=[];for(let c of o){if(!existsSync(c))continue;let l=
|
|
524
|
+
`);for(let i of o)n.set(i.task_id,i.input);}catch{}finally{s.close();}}return n}findTopLevelTasks(e,n,r,s){let o=this.resolveDbPaths(),i=s?sql`(${this.topLevelTaskPredicateSql()} OR child.agent_id = ${s})`:this.topLevelTaskPredicateSql(),u=new Set,d=[];for(let c of o){if(!existsSync(c))continue;let l=H(c);try{let p;r!==void 0?p=l.db.all(sql`
|
|
508
525
|
SELECT * FROM (
|
|
509
526
|
SELECT child.*,
|
|
510
527
|
ROW_NUMBER() OVER (PARTITION BY child.agent_id ORDER BY child.started_at DESC) AS rn
|
|
@@ -521,7 +538,7 @@ Message: ${n.message}
|
|
|
521
538
|
AND ${i}
|
|
522
539
|
${n?sql`AND child.workspace_id = ${n}`:sql``}
|
|
523
540
|
ORDER BY child.started_at ASC
|
|
524
|
-
`);for(let g of p)u.has(g.id)||(u.add(g.id),d.push(
|
|
541
|
+
`);for(let g of p)u.has(g.id)||(u.add(g.id),d.push(jn(g)));}catch(p){throw new f("DB_ERROR","Failed to find top-level tasks",p)}finally{l.close();}}if(r!==void 0&&o.length>1){let c=new Map;for(let l of d){let p=l.agent_id??"";c.has(p)||c.set(p,[]),c.get(p).push(l);}d=[];for(let l of c.values())l.sort((p,g)=>(g.started_at??"").localeCompare(p.started_at??"")),d.push(...l.slice(0,r));d.sort((l,p)=>(l.started_at??"").localeCompare(p.started_at??""));}return d}findAllTasks(e,n){let r=this.resolveDbPaths(),s=new Set,o=[];for(let i of r){if(!existsSync(i))continue;let u=H(i);try{let d=eq(a.thread_id,e),c=n?and(d,eq(a.workspace_id,n)):d,l=u.db.select(ne).from(a).where(c).orderBy(asc(a.started_at)).all();for(let p of l)s.has(p.id)||(s.add(p.id),o.push(jn(p)));}catch(d){throw new f("DB_ERROR","Failed to find all tasks for thread",d)}finally{u.close();}}return o}findRespondedAgents(e,n){let r=this.resolveDbPaths(),s=new Map;for(let o of r){if(!existsSync(o))continue;let i=H(o,{readOnly:true});try{let u=[eq(a.thread_id,e),sql`${a.completed_at} IS NOT NULL`,sql`length(trim(coalesce(${a.result}, ''))) > 0`];n&&u.push(eq(a.workspace_id,n));let d=i.db.select({agentId:a.agent_id,lastRepliedAt:sql`MAX(${a.completed_at})`}).from(a).where(and(...u)).groupBy(a.agent_id).all();for(let c of d){let l=s.get(c.agentId);c.lastRepliedAt&&(!l||c.lastRepliedAt>l)&&s.set(c.agentId,c.lastRepliedAt);}}catch(u){throw new f("DB_ERROR","Failed to find responded agents for thread",u)}finally{i.close();}}return [...s.entries()].map(([o,i])=>({agentId:o,lastRepliedAt:i})).sort((o,i)=>(o.lastRepliedAt===i.lastRepliedAt?0:o.lastRepliedAt>i.lastRepliedAt?-1:1)||(o.agentId===i.agentId?0:o.agentId<i.agentId?-1:1))}findTaskById(e,n,r){let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=H(o);try{let u=and(eq(a.id,n),eq(a.thread_id,e)),d=r?and(u,eq(a.workspace_id,r)):u,c=i.db.select(ne).from(a).where(d).limit(1).get();if(!c)continue;let l=i.db.select(ne).from(a).where(eq(a.parent_task_id,c.id)).orderBy(asc(a.started_at)).all().map(jn);return {task:jn(c),children:l}}catch(u){throw new f("DB_ERROR","Failed to find task by id",u)}finally{i.close();}}}batchFetchTasksQuery(e,n){return sql`
|
|
525
542
|
SELECT child.id, child.thread_id, child.agent_id, child.status,
|
|
526
543
|
child.parent_task_id, child.started_at, child.completed_at,
|
|
527
544
|
child.duration_ms, child.input_tokens, child.output_tokens,
|
|
@@ -531,7 +548,7 @@ Message: ${n.message}
|
|
|
531
548
|
AND ${this.topLevelTaskPredicateSql()}
|
|
532
549
|
${n?sql`AND child.workspace_id = ${n}`:sql``}
|
|
533
550
|
ORDER BY child.started_at ASC
|
|
534
|
-
`}batchFetchTasks(e,n){let r=new Map;if(e.length===0)return r;let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=
|
|
551
|
+
`}batchFetchTasks(e,n){let r=new Map;if(e.length===0)return r;let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=H(o);try{let u=i.db.all(this.batchFetchTasksQuery(e,n));for(let d of u){let c=d.thread_id;r.has(c)||r.set(c,[]),r.get(c).push(xf(d));}}catch(u){throw new f("DB_ERROR","Failed to batch fetch tasks",u)}finally{i.close();}}return r}findThreadOriginsQuery(e,n){return sql`
|
|
535
552
|
WITH root AS (
|
|
536
553
|
SELECT child.thread_id, child.id, child.caller_agent_id, child.parent_task_id,
|
|
537
554
|
CASE
|
|
@@ -583,7 +600,7 @@ Message: ${n.message}
|
|
|
583
600
|
FROM tasks AS child
|
|
584
601
|
LEFT JOIN tasks AS parent ON parent.id = child.parent_task_id
|
|
585
602
|
WHERE child.id IN (${sql.join(e.map(n=>sql`${n}`),sql`, `)})
|
|
586
|
-
`}findThreadOrigins(e,n){let r=new Map;if(e.length===0)return r;let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=
|
|
603
|
+
`}findThreadOrigins(e,n){let r=new Map;if(e.length===0)return r;let s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=H(o);try{for(let u=0;u<e.length;u+=qr){let d=e.slice(u,u+qr),l=i.db.all(this.findCreatorPointersQuery(d,n)).filter(I=>!r.has(I.thread_id)),p=l.filter(I=>I.creator_task_id!==null&&I.creator_pointer_unverified===0&&I.creator_actor_kind===null).map(I=>I.creator_task_id),g=p.length>0?i.db.all(this.findTaskOriginLineageQuery(p)):[],_=new Map(g.map(I=>[I.task_id,I])),m=new Map(l.map(I=>[I.thread_id,I])),y=d.filter(I=>{if(r.has(I))return !1;let D=m.get(I);return D?!(D.creator_task_id!==null&&D.creator_pointer_unverified===0)&&D.created_by_kind===null:!0}),k=y.length>0?i.db.all(this.findThreadOriginsQuery(y,n)):[],v=new Map(k.map(I=>[I.thread_id,I]));for(let I of l){if(r.has(I.thread_id))continue;let D=Bd(I,I.created_by_task_id!==null?_.get(I.created_by_task_id):void 0,v.get(I.thread_id));D&&r.set(I.thread_id,D);}for(let I of k)r.has(I.thread_id)||m.has(I.thread_id)||r.set(I.thread_id,Ur(I));}}catch(u){throw new f("DB_ERROR","Failed to fetch thread origins",u)}finally{i.close();}}return r}findThreadsByOrigin(e,n){let r=this.readThreadIds(n,"Failed to find threads by origin"),s=this.findThreadOrigins(r,n),o=r.filter(u=>Vd(s.get(u),e));return this.readThreadRowsByIds(o,n,"Failed to find threads by origin").sort(Jd)}findRecentDirectThreads(e,n=5){if(typeof e!="string"||e.trim().length===0)throw new f("VALIDATION","workspaceId is required");if(!Number.isInteger(n)||n<=0)throw new f("VALIDATION","limit must be a positive integer");let r=this.readThreadSortKeys(e).sort(Jd),s=[],o=new Map;for(let c=0;c<r.length;c+=Kd){let l=r.slice(c,c+Kd),p=this.findThreadOrigins(l.map(g=>g.id),e);for(let[g,_]of p)o.set(g,_);for(let g of l)if(Vd(p.get(g.id),"direct")&&(s.push(g.id),s.length===n))break;if(s.length===n)break}let i=new Map;if(s.length>0){let c=this.readThreadRowsByIds(s,e,"Failed to find recent direct threads");for(let l of c)i.set(l.id,l);}let u=[],d=new Map;for(let c of s){let l=i.get(c);if(!l)continue;u.push(l);let p=o.get(c);p&&d.set(c,p);}return {threads:u,originsByThread:d}}explainBatchFetchTasksPlan(e,n){let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{return o.db.all(sql`EXPLAIN QUERY PLAN ${this.batchFetchTasksQuery(e,n)}`).map(u=>u.detail)}finally{o.close();}}return []}explainFindThreadOriginsPlan(e,n){if(e.length===0)return [];let r=this.resolveDbPaths();for(let s of r){if(!existsSync(s))continue;let o=H(s);try{let i=o.db.all(sql`EXPLAIN QUERY PLAN ${this.findCreatorPointersQuery(e,n)}`),u=o.db.all(sql`EXPLAIN QUERY PLAN ${this.findTaskOriginLineageQuery(e)}`),d=o.db.all(sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery(e,n)}`);return [...i,...u,...d].map(c=>c.detail)}finally{o.close();}}return []}explainFindThreadsByOriginPlan(e,n){let r=`__thread_origin_${e}_plan__`,s=this.resolveDbPaths();for(let o of s){if(!existsSync(o))continue;let i=H(o);try{let u=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findThreadIdsQuery(n)}`),d=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findCreatorPointersQuery([r],n)}`),c=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findTaskOriginLineageQuery([r])}`),l=i.db.all(sql`EXPLAIN QUERY PLAN ${this.findThreadOriginsQuery([r],n)}`);return [...u,...d,...c,...l].map(p=>p.detail)}finally{i.close();}}return []}updateThreadTitle(e,n,r){if(!this.dbExists())return;let s=this.openHandle(true);try{let o=eq(T.id,e),i=r?and(o,eq(T.workspace_id,r)):o;if(!s.db.select({id:T.id}).from(T).where(i).limit(1).get())return;s.db.update(T).set({title:n,title_locked:1,updated_at:new Date().toISOString()}).where(eq(T.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread title",o)}finally{s.close();}}upsertThread(e,n){let r=this.openHandle(true);try{r.db.transaction(s=>{let i=(n.workspaceId?s.select({id:te.id}).from(te).where(eq(te.id,n.workspaceId)).limit(1).get():void 0)?n.workspaceId:null,u=new Date().toISOString(),d=s.select({id:T.id,message_count:T.message_count,created_by_task_id:T.created_by_task_id}).from(T).where(eq(T.id,e)).limit(1).get();if(d){let c={updated_at:u};n.title!==void 0&&(c.title=n.title),n.titleLocked!==void 0&&(c.title_locked=n.titleLocked?1:0),d.created_by_task_id===null&&n.createdByTaskId!=null&&d.message_count===0&&!Xd(s,e,n.createdByTaskId)&&(c.created_by_task_id=n.createdByTaskId),s.update(T).set(c).where(eq(T.id,e)).run();}else s.insert(T).values({id:e,platform:n.platform,workspace_id:i,created_by_kind:null,created_by_id:null,created_by_task_id:n.createdByTaskId??null,title:n.title??null,title_locked:n.titleLocked?1:0,message_count:0,created_at:u,updated_at:u}).run();},{behavior:"immediate"});}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to upsert thread",s)}finally{r.close();}}ensureThread(e,n,r,s){let o=this.openHandle(true);try{o.db.transaction(i=>{let d=(r?i.select({id:te.id}).from(te).where(eq(te.id,r)).limit(1).get():void 0)?r:null,c=i.select({id:T.id,platform:T.platform,workspace_id:T.workspace_id,message_count:T.message_count,created_by_task_id:T.created_by_task_id}).from(T).where(eq(T.id,e)).limit(1).get();if(c){let p={};d&&!c.workspace_id&&(p.workspace_id=d),c.created_by_task_id===null&&s?.createdByTaskId!=null&&c.message_count===0&&!Xd(i,e,s.createdByTaskId)&&(p.created_by_task_id=s.createdByTaskId),Object.keys(p).length>0&&i.update(T).set(p).where(eq(T.id,e)).run();return}let l=new Date().toISOString();i.insert(T).values({id:e,platform:n,workspace_id:d,created_by_kind:null,created_by_id:null,created_by_task_id:s?.createdByTaskId??null,message_count:0,created_at:l,updated_at:l}).run();},{behavior:"immediate"});}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to ensure thread",i)}finally{o.close();}}saveUserMessage(e,n,r){if(!this.dbExists())return {firstMessage:false};let s=this.openHandle(true);try{let o=new Date().toISOString();return {firstMessage:s.db.transaction(u=>{let c=u.select({message_count:T.message_count}).from(T).where(eq(T.id,e)).limit(1).get()?.message_count===0;return u.run(sql`
|
|
587
604
|
UPDATE threads
|
|
588
605
|
SET first_message = COALESCE(first_message, ${n}),
|
|
589
606
|
title = CASE WHEN title_locked = 0 AND title IS NULL THEN substr(${n}, 1, 60) ELSE title END,
|
|
@@ -591,11 +608,11 @@ Message: ${n.message}
|
|
|
591
608
|
message_count = message_count + 1,
|
|
592
609
|
updated_at = ${o}
|
|
593
610
|
WHERE id = ${e}
|
|
594
|
-
`),c},{behavior:"immediate"})}}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to save user message",o)}finally{s.close();}}saveAssistantMessage(e,n,r){if(!this.dbExists())return;let s=this.openHandle(true);try{let o=new Date().toISOString();s.db.update(T).set({last_message:n,updated_at:o}).where(eq(T.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to save assistant message",o)}finally{s.close();}}updateThread(e,n){if(!this.dbExists())return;let r=this.openHandle(true);try{let s={updated_at:new Date().toISOString()};n.title!==void 0&&(s.title=n.title,s.title_locked=1),n.titleLocked!==void 0&&(s.title_locked=n.titleLocked?1:0),r.db.update(T).set(s).where(eq(T.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread",s)}finally{r.close();}}patchThreadTitleMetadata(e,n,r){let s=n;if(!s||typeof s!="object"||Array.isArray(s))return new an("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(s).some(d=>d!=="priority"&&d!=="state"))return new an("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch only supports priority and state");let i=s;if(i.priority===void 0&&i.state===void 0)return new an("THREAD_TITLE_PATCH_EMPTY","Thread-title metadata patch must change priority or state");for(let d of [i.priority,i.state])if(d!=null&&(typeof d!="string"||d.length===0))return new an("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let u=this.openHandle(true);try{let d=r?and(eq(T.id,e),eq(T.workspace_id,r)):eq(T.id,e);return u.db.transaction(c=>{let l=c.select({metadata:T.metadata}).from(T).where(d).get();if(!l)return null;let p=on(l.metadata),g=p.threadTitle,_=g&&typeof g=="object"&&!Array.isArray(g)?{...g}:{};i.priority===null?delete _.priority:i.priority!==void 0&&(_.priority=i.priority),i.state===null?delete _.state:i.state!==void 0&&(_.state=i.state),Object.keys(_).length>0?p.threadTitle=_:delete p.threadTitle;let m=Object.keys(p).length>0?JSON.stringify(p):null,y=new Date().toISOString();c.update(T).set({metadata:m,updated_at:y}).where(d).run();let k=c.select({metadata:T.metadata}).from(T).where(d).get();if(!k)throw new f("DB_ERROR","Thread-title metadata update could not be read back");let N=bf(k.metadata);return {threadId:e,priority:N.priority,state:N.state}},{behavior:"immediate"})}catch(d){throw d instanceof f?d:new f("DB_ERROR","Failed to patch thread-title metadata",d)}finally{u.close();}}togglePin(e,n){let r=this.openHandle(true);try{let s=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e);return r.db.transaction(o=>{let i=o.select({pinned:T.pinned,metadata:T.metadata}).from(T).where(s).get();if(!i)return null;let u=i.pinned?0:1,d=on(i.metadata);if(u){let c=n?and(eq(T.pinned,1),eq(T.workspace_id,n)):eq(T.pinned,1),l=o.select({metadata:T.metadata}).from(T).where(c).all(),p=null;for(let g of l){let _=on(g.metadata);typeof _.pinOrder=="number"&&(p===null||_.pinOrder<p)&&(p=_.pinOrder);}d.pinOrder=p===null?0:p-1;}else delete d.pinOrder;return o.update(T).set({pinned:u,metadata:Object.keys(d).length>0?JSON.stringify(d):null}).where(s).run(),{pinned:!!u}},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to toggle pin",s)}finally{r.close();}}reorderPins(e,n){let r=this.openHandle(true);try{r.db.transaction(s=>{for(let o=0;o<e.length;o++){let i=n?and(eq(T.id,e[o]),eq(T.workspace_id,n)):eq(T.id,e[o]),u=s.select({metadata:T.metadata}).from(T).where(i).get();if(!u)continue;let d=on(u.metadata);d.pinOrder=o+1,s.update(T).set({metadata:JSON.stringify(d)}).where(i).run();}},{behavior:"immediate"});}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to reorder pins",s)}finally{r.close();}}toggleStar(e,n){let r=this.openHandle(true);try{let s=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e),o=r.db.select({starred:T.starred}).from(T).where(s).get();if(!o)return null;let i=o.starred?0:1;return r.db.update(T).set({starred:i}).where(s).run(),{starred:!!i}}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to toggle star",s)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,s){let i=this.openHandle(true);try{let u=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e);return i.db.transaction(c=>{let l=c.select({metadata:T.metadata}).from(T).where(u).get();if(!l)return null;let p=l.metadata?JSON.parse(l.metadata):{},g=p.overdrive??{},_=s?.defaultTurns??g.defaultTurns??3,m=s?.updatedBy??"ui",y=new Date().toISOString(),k,N,I,D;switch(r){case "enable-count":{let E=s?.turns??_,A=s?.consumeCurrent?Math.max(E-1,0):E;k=A>0?"count":"off",N=A,I=!0,D="count";break}case "enable-latch":{k="latch",N=0,I=!0,D="latch";break}case "disable":{k="off",N=0,I=!1;break}default:{let E=g.state??"off",A=typeof g.remaining=="number"?g.remaining:0;if(E==="count"&&A>0){let v=A-1;v<=0?(k="off",N=0):(k="count",N=v),I=!0,D="count";}else E==="latch"?(k="latch",N=0,I=!0,D="latch"):(k="off",N=0,I=!1);break}}return p.overdrive={state:k,remaining:N,defaultTurns:_,updatedAt:y,updatedBy:m},c.update(T).set({metadata:JSON.stringify(p),updated_at:y}).where(u).run(),{applied:I,appliedMode:D,state:k,remaining:N}},{behavior:"immediate"})}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to resolve overdrive",u)}finally{i.close();}}};h();at();mt();kt();it();h();var ho="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function vf(t){let e=randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let s=e[r];s<248&&(n+=ho[s%62]);}for(;n.length<t;)n+=ho[randomBytes(1)[0]%62];return n}function qn(t){return `${t}_${vf(8)}`}function Wd(t,e){let{createHash:n}=Dt("crypto"),r=n("sha256").update(e).digest(),s=Buffer.alloc(8);for(let i=0;i<32;i++)s[i%8]^=r[i];let o="";for(let i of s)o+=ho[i%62];return `${t}_${o}`}Rt();h();var Nf=["urgent","high","medium","low"],xf=["investigating","in-progress","in-review","on-hold","done"],jd="custom:";var Cf=new Set(Nf),Df=new Set(xf);function _o(t){return typeof t=="string"&&Cf.has(t)}function mo(t){if(typeof t!="string")return false;if(Df.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(jd))return false;let e=t.slice(jd.length);return e.length>=1&&e.length<=20}function Gd(t){if(!t)return null;try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?null:e}catch{return null}}function ko(t){let e=Gd(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,s={};return _o(r.priority)&&(s.priority=r.priority),mo(r.state)&&(s.state=r.state),s}function zd(t,e){let n=Gd(t)??{},r={...ko(t)};return e.priority===null?delete r.priority:e.priority!==void 0&&(r.priority=e.priority),e.state===null?delete r.state:e.state!==void 0&&(r.state=e.state),r.priority===void 0&&r.state===void 0?delete n.threadTitle:n.threadTitle=r,Object.keys(n).length===0?null:JSON.stringify(n)}vn();var Hf="regeneration_replaced";var Uf="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var Ff="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",yo=class extends f{threadId;highlightId;expectedRevision;currentRevision;constructor(e,n,r,s){super("CONFLICT",`Highlight revision conflict: expected ${r}, current ${s}`),this.name="ThreadHistoryConflictError",this.threadId=e,this.highlightId=n,this.expectedRevision=r,this.currentRevision=s;}},Vn=class extends yo{},Eo=class extends f{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},qf=new Set(Ii),Bf=new Set(Si),Wf=new Set(Ai),jf=new Set(Oi),Gf=50,Vd=100,Jd=280,Xd=40,zf=new Set(bi),Ur=["queued","running"];function wo(t){return zf.has(t)}function G(t){throw new f("VALIDATION",t)}function Be(t){throw new f("NOT_FOUND",t)}function $(t,e){(typeof t!="string"||t.trim().length===0)&&G(`${e} is required`);}function Wn(t={}){let e=t.actor??t,n=e.actorType??"system";return qf.has(n)||G(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&G("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function Kf(t){$(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&$(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&G("title must not be empty"),t.title.length>120&&G("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!_o(t.priority)&&G(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!mo(t.state)&&G(`invalid state: ${String(t.state)}`);}function Vf(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&G("beforeSeq and afterSeq cannot be used together");for(let[n,r]of [["beforeSeq",t.beforeSeq],["afterSeq",t.afterSeq]])r!==void 0&&(!Number.isInteger(r)||r<0)&&G(`${n} must be a non-negative integer`);let e=t.limit??Gf;return (!Number.isInteger(e)||e<1||e>Vd)&&G(`limit must be between 1 and ${Vd}`),e}function Ro(t){typeof t!="string"&&G("text is required");let e=t.trim();return e.length===0&&G("text must not be empty"),e.length>Jd&&G(`text must be at most ${Jd} characters`),e}function st(t,e){return $(t??"",e),t}function So(t){jf.has(t)||G(`invalid highlight kind: ${String(t)}`);}function Jf(t){Wf.has(t)||G(`invalid highlight source: ${String(t)}`);}function Xf(t){$(t.threadId,"threadId"),$(t.workspaceId,"workspaceId");let e=t.source??"manual";Jf(e),So(t.kind);let n=Ro(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,s=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let l=t.taskId??(r&&s&&r===s?r:void 0),p=st(l,"taskId");return (r!==p||s!==p)&&G("manual highlights must cover exactly one task"),{source:e,kind:t.kind,text:n,coversFromTaskId:p,coversToTaskId:p,agentId:t.agentId??null,sourceTaskId:null,detectorVersion:null,contentFingerprint:null}}let o=st(r,"coversFromTaskId"),i=st(s,"coversToTaskId"),u=t.sourceTaskId??o,d=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return st(u??void 0,"sourceTaskId"),st(d??void 0,"detectorVersion"),st(c??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:o,coversToTaskId:i,agentId:t.agentId??null,sourceTaskId:u,detectorVersion:d,contentFingerprint:c}}function Yf(t,e){(!t||typeof t!="object")&&G(`candidates[${e}] is required`),So(t.kind);let n=Ro(t.text),r=st(t.anchorTaskId,`candidates[${e}].anchorTaskId`),s=st(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),o=st(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||Wd("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o}));return $(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o,contentFingerprint:i}}function Qf(t){Array.isArray(t)||G("candidates must be an array"),t.length>Xd&&G(`candidates must contain at most ${Xd} items`);let e=new Map;for(let[n,r]of t.entries()){let s=Yf(r,n);e.set(s.contentFingerprint,s);}return [...e.values()]}function Kn(t){let e=ko(t.metadata);return {threadId:t.id,workspaceId:t.workspace_id,title:t.title,priority:e.priority??null,state:e.state??null,metadata:t.metadata,titleLocked:t.title_locked===1,updatedAt:t.updated_at}}function Zf(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&G("event payload must be a JSON object"),e}catch(e){throw new f("VALIDATION","event payload must be JSON serializable",e)}}function jn(t,e){return t.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,e)).get()?.maxSeq??0}function Gn(t,e){return !!t.select({id:W.id}).from(W).where(eq(W.thread_id,e)).limit(1).get()}function Ct(t,e){Bf.has(e.type)||G(`invalid thread event type: ${String(e.type)}`);let n=qn("the");t.insert(W).values({id:n,thread_id:e.threadId,seq:e.seq,type:e.type,actor_type:e.actorType,actor_id:e.actorId,task_id:e.taskId??null,highlight_id:e.highlightId??null,payload_json:Zf(e.payload),created_at:e.createdAt}).run();let r=t.select().from(W).where(eq(W.id,n)).get();if(!r)throw new f("DB_ERROR","Thread event insert did not return a row");return r}function zn(t,e,n,r,s){let o=Kn(e);Ct(t,{threadId:e.id,seq:s,type:"thread.snapshot.imported",actorType:n.actorType,actorId:n.actorId,createdAt:r,payload:{title:o.title,priority:o.priority,state:o.state}});}function qr(t){return {highlightId:t.id,source:t.source,kind:t.kind,status:t.status,coversFromTaskId:t.covers_from_task_id,coversToTaskId:t.covers_to_task_id,revision:t.revision,...t.dismissed_at===null?{}:{dismissedAt:t.dismissed_at}}}function Fr(t,e,n,r,s,o,i){let u=s==="thread.highlight.created"?qr(e):{before:i?qr({...e,...i,id:e.id}):void 0,after:qr(e)};return Ct(t,{threadId:e.thread_id,seq:o,type:s,actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source==="manual"?e.covers_from_task_id:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:u})}function eg(t,e,n,r,s,o){return Ct(t,{threadId:e.thread_id,seq:s,type:"thread.highlight.deleted",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:{before:qr(e),...o??{}}})}var Br=class extends he{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!existsSync(n))throw new f("NOT_FOUND","Database not found");if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}let r=U(n);if(e)try{Ae(r.db,n);}catch(s){throw r.close(),s}return r}findThread(e,n,r){let s=eq(T.id,n),o=r===void 0?s:r===null?and(s,isNull(T.workspace_id)):and(s,eq(T.workspace_id,r));return e.select().from(T).where(o).limit(1).get()}findRegenerationRun(e,n,r){let s=e.select().from(F).where(eq(F.id,n)).limit(1).get();if(s&&!(r!==void 0&&!this.findThread(e,s.thread_id,r)))return s}resolveWorkspaceId(e){if($(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:T.workspace_id}).from(T).where(eq(T.id,e)).limit(1).get()?.workspaceId??null}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if($(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let s=this.findThread(r.db,e,n);return s?Kn(s):null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read thread snapshot",s)}finally{r.close();}}updateSnapshot(e){Kf(e);let n=Wn(e),r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findThread(o,e.threadId,e.workspaceId);i||Be(`Thread ${e.threadId} not found`);let u=Kn(i),d=e.title!==void 0,c=d&&e.title!==u.title,l=d&&i.title_locked!==1,p=e.priority!==void 0&&e.priority!==u.priority,g=e.state!==void 0&&e.state!==u.state,_=c||p||g;if(!_&&!l)return u;let m=i.metadata;(p||g)&&(m=zd(i.metadata,{priority:e.priority,state:e.state}));let y={};if(_&&(y.metadata=m,y.updated_at=r),c&&(y.title=e.title),d&&(y.title_locked=1),o.update(T).set(y).where(e.workspaceId===void 0?eq(T.id,e.threadId):e.workspaceId===null?and(eq(T.id,e.threadId),isNull(T.workspace_id)):and(eq(T.id,e.threadId),eq(T.workspace_id,e.workspaceId))).run(),!_){let I={...i,title_locked:1};return Kn(I)}let k=jn(o,i.id)+1;Gn(o,i.id)||(zn(o,i,n,r,k),k+=1),c&&(Ct(o,{threadId:i.id,seq:k,type:"thread.title.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.title,after:e.title}}),k+=1),p&&(Ct(o,{threadId:i.id,seq:k,type:"thread.priority.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.priority,after:e.priority}}),k+=1),g&&Ct(o,{threadId:i.id,seq:k,type:"thread.state.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.state,after:e.state}});let N={...i,title:c?e.title:i.title,metadata:m,title_locked:d?1:i.title_locked,updated_at:r};return Kn(N)},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread snapshot",o)}finally{s.close();}}mutateSnapshot(e){return this.updateSnapshot(e)}updateThreadSnapshot(e){return this.updateSnapshot(e)}getLatestSeq(e,n){if($(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,e)).get()?.maxSeq??0:null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read latest thread event sequence",s)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if($(e,"threadId"),$(n,"workspaceId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({taskId:a.id,prompt:a.prompt,result:a.result,status:a.status,startedAt:a.started_at,completedAt:a.completed_at}).from(a).where(and(eq(a.thread_id,e),eq(a.workspace_id,n),inArray(a.status,[...On]),or(isNull(a.parent_task_id),eq(a.parent_task_id,"")),sql`${a.result} IS NOT NULL AND length(trim(${a.result})) > 0`)).orderBy(asc(a.started_at),asc(a.id)).all().map(i=>({taskId:i.taskId,prompt:i.prompt,result:i.result,status:i.status,startedAt:i.startedAt,completedAt:i.completedAt})):null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read completed thread highlight turns",s)}finally{r.close();}}createHighlightRegenerationRun(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.requestId,"requestId"),$(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&$(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findThread(s,e.threadId,e.workspaceId);o||Be(`Thread ${e.threadId} not found`);let i=s.select().from(F).where(and(eq(F.thread_id,o.id),eq(F.request_id,e.requestId))).orderBy(desc(F.requested_at),desc(F.id)).limit(1).get();if(i)return {run:i,created:!1};let u=s.select().from(F).where(and(eq(F.thread_id,o.id),inArray(F.status,Ur))).orderBy(asc(F.requested_at),asc(F.id)).limit(1).get();if(u)throw new Eo(u);let d=e.runId??qn("thr");s.insert(F).values({id:d,thread_id:o.id,request_id:e.requestId,status:"queued",detector_version:e.detectorVersion,requested_at:n,started_at:null,completed_at:null,error_code:null,previous_auto_count:null,new_auto_count:null}).run();let c=s.select().from(F).where(eq(F.id,d)).get();if(!c)throw new f("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:c,created:!0}},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to create highlight regeneration run",s)}finally{r.close();}}beginHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}queueHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}getHighlightRegenerationRun(e,n){if($(e,"runId"),n!==void 0&&$(n,"workspaceId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read highlight regeneration run",s)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if($(e,"threadId"),$(n,"workspaceId"),$(r,"requestId"),!existsSync(this.resolveDbPath()))return null;let s=this.openHandle(false);try{return this.findThread(s.db,e,n)?s.db.select().from(F).where(and(eq(F.thread_id,e),eq(F.request_id,r))).orderBy(desc(F.requested_at),desc(F.id)).limit(1).get()??null:null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read highlight regeneration request",o)}finally{s.close();}}findHighlightRegenerationRun(e,n,r){return this.getHighlightRegenerationRunByRequest(e,n,r)}startHighlightRegenerationRun(e,n){$(e,"runId"),n!==void 0&&$(n,"workspaceId");let r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findRegenerationRun(o,e,n);if(i||Be(`Highlight regeneration run ${e} not found`),wo(i.status)||G(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;o.update(F).set({status:"running",started_at:r}).where(and(eq(F.id,i.id),eq(F.status,"queued"))).run();let u=o.select().from(F).where(eq(F.id,i.id)).get();if(!u)throw new f("DB_ERROR","Highlight regeneration run start did not return a row");return u},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to start highlight regeneration run",o)}finally{s.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){$(e.runId,"runId"),$(e.errorCode,"errorCode"),e.workspaceId!==void 0&&$(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findRegenerationRun(s,e.runId,e.workspaceId);if(o||Be(`Highlight regeneration run ${e.runId} not found`),wo(o.status)||G(`invalid highlight regeneration status: ${o.status}`),o.status==="completed"||o.status==="failed")return o;s.update(F).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(and(eq(F.id,o.id),inArray(F.status,Ur))).run();let i=s.select().from(F).where(eq(F.id,o.id)).get();if(!i)throw new f("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to fail highlight regeneration run",s)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=Uf){$(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>s.update(F).set({status:"failed",completed_at:n,error_code:e}).where(inArray(F.status,Ur)).run().changes,{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to recover interrupted highlight runs",s)}finally{r.close();}}completeHighlightRegenerationRun(e){$(e.runId,"runId"),$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.detectorVersion,"detectorVersion");let n=Qf(e.candidates),r=Wn(e),s=this.openHandle(true),o=false;try{return s.db.transaction(i=>{let u=this.findRegenerationRun(i,e.runId,e.workspaceId);if((!u||u.thread_id!==e.threadId)&&Be(`Highlight regeneration run ${e.runId} not found`),wo(u.status)||G(`invalid highlight regeneration status: ${u.status}`),u.status==="failed")throw new f("CONFLICT","Highlight regeneration run has already failed");if(u.status==="completed")return {run:u,deletedCount:0,createdCount:0,previousAutoCount:u.previous_auto_count??0,newAutoCount:u.new_auto_count??0};o=!0;let d=this.findThread(i,e.threadId,e.workspaceId);d||Be(`Thread ${e.threadId} not found`),u.detector_version!==e.detectorVersion&&G("detectorVersion does not match the regeneration run");let c=i.select().from(H).where(eq(H.thread_id,d.id)).orderBy(asc(H.created_at),asc(H.id)).all(),l=new Set(n.map(v=>v.contentFingerprint)),p=c.filter(v=>v.source==="auto"&&v.status==="active"&&v.revision===0&&!l.has(v.content_fingerprint??"")),g=c.filter(v=>v.source==="auto"&&v.status==="active").length,_=new Set(c.filter(v=>!p.includes(v)&&v.content_fingerprint).map(v=>v.content_fingerprint)),m=n.filter(v=>!_.has(v.contentFingerprint)),y=new Date().toISOString(),k=jn(i,d.id)+1;Gn(i,d.id)||(zn(i,d,r,y,k),k+=1);for(let v of p)i.delete(H).where(eq(H.id,v.id)).run(),eg(i,v,r,y,k,{runId:e.runId,reason:Hf}),k+=1;let N=0,I=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let v of m){let Z=qn("thl");i.insert(H).values({id:Z,thread_id:d.id,source:"auto",kind:v.kind,status:"active",text:v.text,covers_from_task_id:v.coversFromTaskId,covers_to_task_id:v.coversToTaskId,revision:0,created_at:y,updated_at:y,agent_id:I,source_task_id:v.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:v.contentFingerprint,dismissed_at:null}).run();let ge=i.select().from(H).where(eq(H.id,Z)).get();if(!ge)throw new f("DB_ERROR","Regenerated highlight insert did not return a row");Fr(i,ge,r,y,"thread.highlight.created",k),k+=1,N+=1;}let E=i.select().from(H).where(eq(H.thread_id,d.id)).all().filter(v=>v.source==="auto"&&v.status==="active").length;Ct(i,{threadId:d.id,seq:k,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:y,payload:{runId:u.id,detectorVersion:e.detectorVersion,previousAutoCount:g,newAutoCount:E,deletedCount:p.length,createdCount:N}}),i.update(F).set({status:"completed",started_at:u.started_at??y,completed_at:y,error_code:null,previous_auto_count:g,new_auto_count:E}).where(and(eq(F.id,u.id),inArray(F.status,Ur))).run();let A=i.select().from(F).where(eq(F.id,u.id)).get();if(!A)throw new f("DB_ERROR","Highlight regeneration completion did not return a row");return {run:A,deletedCount:p.length,createdCount:N,previousAutoCount:g,newAutoCount:E}},{behavior:"immediate"})}catch(i){if(o)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:Ff});}catch{}throw i instanceof f?i:new f("DB_ERROR","Failed to complete highlight regeneration",i)}finally{s.close();}}completeHighlightRegeneration(e){return this.completeHighlightRegenerationRun(e)}replaceAutoHighlightsAtomically(e){return this.completeHighlightRegenerationRun(e)}listTimeline(e,n,r={}){let s=typeof e=="string"?{...r,threadId:e,workspaceId:n}:e;$(s.threadId,"threadId"),$(s.workspaceId,"workspaceId");let o=Vf(s);if(!existsSync(this.resolveDbPath()))return null;let i=this.openHandle(false);try{if(!this.findThread(i.db,s.threadId,s.workspaceId))return null;let u=i.db.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,s.threadId)).get()?.maxSeq??0,d;s.beforeSeq!==void 0?d=i.db.select().from(W).where(and(eq(W.thread_id,s.threadId),lt$1(W.seq,s.beforeSeq))).orderBy(desc(W.seq)).limit(o+1).all().reverse():s.afterSeq!==void 0?d=i.db.select().from(W).where(and(eq(W.thread_id,s.threadId),sql`${W.seq} > ${s.afterSeq}`)).orderBy(asc(W.seq)).limit(o+1).all():d=i.db.select().from(W).where(eq(W.thread_id,s.threadId)).orderBy(desc(W.seq)).limit(o+1).all().reverse();let c=d.length>o,l=s.afterSeq!==void 0?d.slice(0,o):c?d.slice(1):d,p=!1,g=l[0];return g&&(p=!!i.db.select({id:W.id}).from(W).where(and(eq(W.thread_id,s.threadId),lt$1(W.seq,g.seq))).limit(1).get()),{items:l,latestSeq:u,hasMoreOlder:p}}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to list thread timeline",u)}finally{i.close();}}listEvents(e,n,r){return this.listTimeline(e,n,r)}getTimeline(e,n,r){return this.listTimeline(e,n,r)}createHighlight(e){let n=Xf(e),r=Wn(e),s=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);if(u||Be(`Thread ${e.threadId} not found`),n.source==="auto"){let g=i.select().from(H).where(and(eq(H.thread_id,e.threadId),eq(H.source_task_id,n.sourceTaskId),eq(H.detector_version,n.detectorVersion),eq(H.content_fingerprint,n.contentFingerprint))).orderBy(asc(H.created_at),asc(H.id)).limit(1).get();if(g)return g}let d=e.id??qn("thl"),c={id:d,thread_id:e.threadId,source:n.source,kind:n.kind,status:"active",text:n.text,covers_from_task_id:n.coversFromTaskId,covers_to_task_id:n.coversToTaskId,revision:0,created_at:s,updated_at:s,agent_id:n.agentId,source_task_id:n.sourceTaskId,detector_version:n.detectorVersion,content_fingerprint:n.contentFingerprint,dismissed_at:null};i.insert(H).values(c).run();let l=i.select().from(H).where(eq(H.id,d)).get();if(!l)throw new f("DB_ERROR","Highlight insert did not return a row");let p=jn(i,u.id)+1;return Gn(i,u.id)||(zn(i,u,r,s,p),p+=1),Fr(i,l,r,s,"thread.highlight.created",p),l},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to create thread highlight",i)}finally{o.close();}}updateHighlight(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&G("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&G("highlight update requires at least one field"),e.kind!==void 0&&So(e.kind);let n=e.text===void 0?void 0:Ro(e.text),r=Wn(e),s=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);u||Be(`Thread ${e.threadId} not found`);let d=i.select().from(H).where(and(eq(H.id,e.highlightId),eq(H.thread_id,u.id))).limit(1).get();if(d||Be(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new Vn(u.id,d.id,e.expectedRevision,d.revision);if(d.status!=="active")throw new Vn(u.id,d.id,e.expectedRevision,d.revision);let c=e.kind??d.kind,l=n??d.text,p=e.coversFromTaskId??d.covers_from_task_id,g=e.coversToTaskId??d.covers_to_task_id;(!l||p.length===0||g.length===0)&&G("highlight projection is incomplete");let _=c!==d.kind||l!==d.text||p!==d.covers_from_task_id||g!==d.covers_to_task_id,m=r.actorType==="user"&&d.source==="auto"&&_?"manual":d.source;if(!(_||m!==d.source))return d;let k=d.revision+1;i.update(H).set({source:m,kind:c,text:l,covers_from_task_id:p,covers_to_task_id:g,revision:k,updated_at:s}).where(and(eq(H.id,d.id),eq(H.revision,d.revision))).run();let N=i.select().from(H).where(eq(H.id,d.id)).get();if(!N)throw new f("DB_ERROR","Highlight update did not return a row");let I=jn(i,u.id)+1;return Gn(i,u.id)||(zn(i,u,r,s,I),I+=1),Fr(i,N,r,s,"thread.highlight.updated",I,d),N},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to update thread highlight",i)}finally{o.close();}}dismissHighlight(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&G("expectedRevision must be a non-negative integer");let n=Wn(e),r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findThread(o,e.threadId,e.workspaceId);i||Be(`Thread ${e.threadId} not found`);let u=o.select().from(H).where(and(eq(H.id,e.highlightId),eq(H.thread_id,i.id))).limit(1).get();if(u||Be(`Highlight ${e.highlightId} not found`),u.revision!==e.expectedRevision)throw new Vn(i.id,u.id,e.expectedRevision,u.revision);if(u.status==="dismissed")return u;let d=u.revision+1;o.update(H).set({status:"dismissed",text:null,revision:d,updated_at:r,dismissed_at:r}).where(and(eq(H.id,u.id),eq(H.revision,u.revision))).run();let c=o.select().from(H).where(eq(H.id,u.id)).get();if(!c)throw new f("DB_ERROR","Highlight dismissal did not return a row");let l=jn(o,i.id)+1;return Gn(o,i.id)||(zn(o,i,n,r,l),l+=1),Fr(o,c,n,r,"thread.highlight.deleted",l,u),c},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to dismiss thread highlight",o)}finally{s.close();}}listActiveHighlights(e,n,r={}){if($(e,"threadId"),$(n,"workspaceId"),r.taskId!==void 0&&$(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&$(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&$(r.coversToTaskId,"coversToTaskId"),!existsSync(this.resolveDbPath()))return null;let s=this.openHandle(false);try{if(!this.findThread(s.db,e,n))return null;let i=s.db.select().from(H).where(and(eq(H.thread_id,e),eq(H.status,"active"))).orderBy(asc(H.created_at),asc(H.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return i;let u=s.db.all(sql`
|
|
611
|
+
`),c},{behavior:"immediate"})}}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to save user message",o)}finally{s.close();}}saveAssistantMessage(e,n,r){if(!this.dbExists())return;let s=this.openHandle(true);try{let o=new Date().toISOString();s.db.update(T).set({last_message:n,updated_at:o}).where(eq(T.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to save assistant message",o)}finally{s.close();}}updateThread(e,n){if(!this.dbExists())return;let r=this.openHandle(true);try{let s={updated_at:new Date().toISOString()};n.title!==void 0&&(s.title=n.title,s.title_locked=1),n.titleLocked!==void 0&&(s.title_locked=n.titleLocked?1:0),r.db.update(T).set(s).where(eq(T.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread",s)}finally{r.close();}}patchThreadTitleMetadata(e,n,r){let s=n;if(!s||typeof s!="object"||Array.isArray(s))return new dn("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(s).some(d=>d!=="priority"&&d!=="state"))return new dn("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch only supports priority and state");let i=s;if(i.priority===void 0&&i.state===void 0)return new dn("THREAD_TITLE_PATCH_EMPTY","Thread-title metadata patch must change priority or state");for(let d of [i.priority,i.state])if(d!=null&&(typeof d!="string"||d.length===0))return new dn("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let u=this.openHandle(true);try{let d=r?and(eq(T.id,e),eq(T.workspace_id,r)):eq(T.id,e);return u.db.transaction(c=>{let l=c.select({metadata:T.metadata}).from(T).where(d).get();if(!l)return null;let p=un(l.metadata),g=p.threadTitle,_=g&&typeof g=="object"&&!Array.isArray(g)?{...g}:{};i.priority===null?delete _.priority:i.priority!==void 0&&(_.priority=i.priority),i.state===null?delete _.state:i.state!==void 0&&(_.state=i.state),Object.keys(_).length>0?p.threadTitle=_:delete p.threadTitle;let m=Object.keys(p).length>0?JSON.stringify(p):null,y=new Date().toISOString();c.update(T).set({metadata:m,updated_at:y}).where(d).run();let k=c.select({metadata:T.metadata}).from(T).where(d).get();if(!k)throw new f("DB_ERROR","Thread-title metadata update could not be read back");let v=$f(k.metadata);return {threadId:e,priority:v.priority,state:v.state}},{behavior:"immediate"})}catch(d){throw d instanceof f?d:new f("DB_ERROR","Failed to patch thread-title metadata",d)}finally{u.close();}}togglePin(e,n){let r=this.openHandle(true);try{return r.db.transaction(s=>Hf(s,e,n),{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to toggle pin",s)}finally{r.close();}}reorderPins(e,n){let r=this.openHandle(true);try{r.db.transaction(s=>Uf(s,e,n),{behavior:"immediate"});}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to reorder pins",s)}finally{r.close();}}toggleStar(e,n){let r=this.openHandle(true);try{let s=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e),o=r.db.select({starred:T.starred}).from(T).where(s).get();if(!o)return null;let i=o.starred?0:1;return r.db.update(T).set({starred:i}).where(s).run(),{starred:!!i}}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to toggle star",s)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,s){let i=this.openHandle(true);try{let u=n?and(eq(T.id,e),eq(T.workspace_id,n)):eq(T.id,e);return i.db.transaction(c=>{let l=c.select({metadata:T.metadata}).from(T).where(u).get();if(!l)return null;let p=l.metadata?JSON.parse(l.metadata):{},g=p.overdrive??{},_=s?.defaultTurns??g.defaultTurns??3,m=s?.updatedBy??"ui",y=new Date().toISOString(),k,v,I,D;switch(r){case "enable-count":{let E=s?.turns??_,A=s?.consumeCurrent?Math.max(E-1,0):E;k=A>0?"count":"off",v=A,I=!0,D="count";break}case "enable-latch":{k="latch",v=0,I=!0,D="latch";break}case "disable":{k="off",v=0,I=!1;break}default:{let E=g.state??"off",A=typeof g.remaining=="number"?g.remaining:0;if(E==="count"&&A>0){let N=A-1;N<=0?(k="off",v=0):(k="count",v=N),I=!0,D="count";}else E==="latch"?(k="latch",v=0,I=!0,D="latch"):(k="off",v=0,I=!1);break}}return p.overdrive={state:k,remaining:v,defaultTurns:_,updatedAt:y,updatedBy:m},c.update(T).set({metadata:JSON.stringify(p),updated_at:y}).where(u).run(),{applied:I,appliedMode:D,state:k,remaining:v}},{behavior:"immediate"})}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to resolve overdrive",u)}finally{i.close();}}};h();dt();kt();Tt();at();h();var Eo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Ff(t){let e=randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let s=e[r];s<248&&(n+=Eo[s%62]);}for(;n.length<t;)n+=Eo[randomBytes(1)[0]%62];return n}function zn(t){return `${t}_${Ff(8)}`}function Qd(t,e){let{createHash:n}=Lt("crypto"),r=n("sha256").update(e).digest(),s=Buffer.alloc(8);for(let i=0;i<32;i++)s[i%8]^=r[i];let o="";for(let i of s)o+=Eo[i%62];return `${t}_${o}`}It();h();var qf=["urgent","high","medium","low"],Bf=["investigating","in-progress","in-review","on-hold","done"],Zd="custom:";var Wf=new Set(qf),jf=new Set(Bf);function Ro(t){return typeof t=="string"&&Wf.has(t)}function So(t){if(typeof t!="string")return false;if(jf.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(Zd))return false;let e=t.slice(Zd.length);return e.length>=1&&e.length<=20}function eu(t){if(!t)return null;try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?null:e}catch{return null}}function Io(t){let e=eu(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,s={};return Ro(r.priority)&&(s.priority=r.priority),So(r.state)&&(s.state=r.state),s}function tu(t,e){let n=eu(t)??{},r={...Io(t)};return e.priority===null?delete r.priority:e.priority!==void 0&&(r.priority=e.priority),e.state===null?delete r.state:e.state!==void 0&&(r.state=e.state),r.priority===void 0&&r.state===void 0?delete n.threadTitle:n.threadTitle=r,Object.keys(n).length===0?null:JSON.stringify(n)}Dn();var Jf="regeneration_replaced";var Xf="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var Yf="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",bo=class extends f{threadId;highlightId;expectedRevision;currentRevision;constructor(e,n,r,s){super("CONFLICT",`Highlight revision conflict: expected ${r}, current ${s}`),this.name="ThreadHistoryConflictError",this.threadId=e,this.highlightId=n,this.expectedRevision=r,this.currentRevision=s;}},Zn=class extends bo{},No=class extends f{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},Qf=new Set(Ci),Zf=new Set(xi),eg=new Set(Di),tg=new Set(Pi),ng=50,ru=100,su=280,ou=40,rg=new Set(Li),Wr=["queued","running"];function Oo(t){return rg.has(t)}function G(t){throw new f("VALIDATION",t)}function je(t){throw new f("NOT_FOUND",t)}function $(t,e){(typeof t!="string"||t.trim().length===0)&&G(`${e} is required`);}function Vn(t={}){let e=t.actor??t,n=e.actorType??"system";return Qf.has(n)||G(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&G("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function sg(t){$(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&$(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&G("title must not be empty"),t.title.length>120&&G("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!Ro(t.priority)&&G(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!So(t.state)&&G(`invalid state: ${String(t.state)}`);}function og(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&G("beforeSeq and afterSeq cannot be used together");for(let[n,r]of [["beforeSeq",t.beforeSeq],["afterSeq",t.afterSeq]])r!==void 0&&(!Number.isInteger(r)||r<0)&&G(`${n} must be a non-negative integer`);let e=t.limit??ng;return (!Number.isInteger(e)||e<1||e>ru)&&G(`limit must be between 1 and ${ru}`),e}function vo(t){typeof t!="string"&&G("text is required");let e=t.trim();return e.length===0&&G("text must not be empty"),e.length>su&&G(`text must be at most ${su} characters`),e}function ot(t,e){return $(t??"",e),t}function xo(t){tg.has(t)||G(`invalid highlight kind: ${String(t)}`);}function ig(t){eg.has(t)||G(`invalid highlight source: ${String(t)}`);}function ag(t){$(t.threadId,"threadId"),$(t.workspaceId,"workspaceId");let e=t.source??"manual";ig(e),xo(t.kind);let n=vo(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,s=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let l=t.taskId??(r&&s&&r===s?r:void 0),p=ot(l,"taskId");return (r!==p||s!==p)&&G("manual highlights must cover exactly one task"),{source:e,kind:t.kind,text:n,coversFromTaskId:p,coversToTaskId:p,agentId:t.agentId??null,sourceTaskId:null,detectorVersion:null,contentFingerprint:null}}let o=ot(r,"coversFromTaskId"),i=ot(s,"coversToTaskId"),u=t.sourceTaskId??o,d=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return ot(u??void 0,"sourceTaskId"),ot(d??void 0,"detectorVersion"),ot(c??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:o,coversToTaskId:i,agentId:t.agentId??null,sourceTaskId:u,detectorVersion:d,contentFingerprint:c}}function dg(t,e){(!t||typeof t!="object")&&G(`candidates[${e}] is required`),xo(t.kind);let n=vo(t.text),r=ot(t.anchorTaskId,`candidates[${e}].anchorTaskId`),s=ot(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),o=ot(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||Qd("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o}));return $(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o,contentFingerprint:i}}function ug(t){Array.isArray(t)||G("candidates must be an array"),t.length>ou&&G(`candidates must contain at most ${ou} items`);let e=new Map;for(let[n,r]of t.entries()){let s=dg(r,n);e.set(s.contentFingerprint,s);}return [...e.values()]}function Qn(t){let e=Io(t.metadata);return {threadId:t.id,workspaceId:t.workspace_id,title:t.title,priority:e.priority??null,state:e.state??null,metadata:t.metadata,titleLocked:t.title_locked===1,updatedAt:t.updated_at}}function cg(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&G("event payload must be a JSON object"),e}catch(e){throw new f("VALIDATION","event payload must be JSON serializable",e)}}function Jn(t,e){return t.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,e)).get()?.maxSeq??0}function Xn(t,e){return !!t.select({id:W.id}).from(W).where(eq(W.thread_id,e)).limit(1).get()}function Pt(t,e){Zf.has(e.type)||G(`invalid thread event type: ${String(e.type)}`);let n=zn("the");t.insert(W).values({id:n,thread_id:e.threadId,seq:e.seq,type:e.type,actor_type:e.actorType,actor_id:e.actorId,task_id:e.taskId??null,highlight_id:e.highlightId??null,payload_json:cg(e.payload),created_at:e.createdAt}).run();let r=t.select().from(W).where(eq(W.id,n)).get();if(!r)throw new f("DB_ERROR","Thread event insert did not return a row");return r}function Yn(t,e,n,r,s){let o=Qn(e);Pt(t,{threadId:e.id,seq:s,type:"thread.snapshot.imported",actorType:n.actorType,actorId:n.actorId,createdAt:r,payload:{title:o.title,priority:o.priority,state:o.state}});}function Gr(t){return {highlightId:t.id,source:t.source,kind:t.kind,status:t.status,coversFromTaskId:t.covers_from_task_id,coversToTaskId:t.covers_to_task_id,revision:t.revision,...t.dismissed_at===null?{}:{dismissedAt:t.dismissed_at}}}function jr(t,e,n,r,s,o,i){let u=s==="thread.highlight.created"?Gr(e):{before:i?Gr({...e,...i,id:e.id}):void 0,after:Gr(e)};return Pt(t,{threadId:e.thread_id,seq:o,type:s,actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source==="manual"?e.covers_from_task_id:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:u})}function lg(t,e,n,r,s,o){return Pt(t,{threadId:e.thread_id,seq:s,type:"thread.highlight.deleted",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:{before:Gr(e),...o??{}}})}var zr=class extends me{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!existsSync(n))throw new f("NOT_FOUND","Database not found");if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}let r=H(n);if(e)try{be(r.db,n);}catch(s){throw r.close(),s}return r}findThread(e,n,r){let s=eq(T.id,n),o=r===void 0?s:r===null?and(s,isNull(T.workspace_id)):and(s,eq(T.workspace_id,r));return e.select().from(T).where(o).limit(1).get()}findRegenerationRun(e,n,r){let s=e.select().from(F).where(eq(F.id,n)).limit(1).get();if(s&&!(r!==void 0&&!this.findThread(e,s.thread_id,r)))return s}resolveWorkspaceId(e){if($(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:T.workspace_id}).from(T).where(eq(T.id,e)).limit(1).get()?.workspaceId??null}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if($(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let s=this.findThread(r.db,e,n);return s?Qn(s):null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read thread snapshot",s)}finally{r.close();}}updateSnapshot(e){sg(e);let n=Vn(e),r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findThread(o,e.threadId,e.workspaceId);i||je(`Thread ${e.threadId} not found`);let u=Qn(i),d=e.title!==void 0,c=d&&e.title!==u.title,l=d&&i.title_locked!==1,p=e.priority!==void 0&&e.priority!==u.priority,g=e.state!==void 0&&e.state!==u.state,_=c||p||g;if(!_&&!l)return u;let m=i.metadata;(p||g)&&(m=tu(i.metadata,{priority:e.priority,state:e.state}));let y={};if(_&&(y.metadata=m,y.updated_at=r),c&&(y.title=e.title),d&&(y.title_locked=1),o.update(T).set(y).where(e.workspaceId===void 0?eq(T.id,e.threadId):e.workspaceId===null?and(eq(T.id,e.threadId),isNull(T.workspace_id)):and(eq(T.id,e.threadId),eq(T.workspace_id,e.workspaceId))).run(),!_){let I={...i,title_locked:1};return Qn(I)}let k=Jn(o,i.id)+1;Xn(o,i.id)||(Yn(o,i,n,r,k),k+=1),c&&(Pt(o,{threadId:i.id,seq:k,type:"thread.title.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.title,after:e.title}}),k+=1),p&&(Pt(o,{threadId:i.id,seq:k,type:"thread.priority.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.priority,after:e.priority}}),k+=1),g&&Pt(o,{threadId:i.id,seq:k,type:"thread.state.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.state,after:e.state}});let v={...i,title:c?e.title:i.title,metadata:m,title_locked:d?1:i.title_locked,updated_at:r};return Qn(v)},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread snapshot",o)}finally{s.close();}}mutateSnapshot(e){return this.updateSnapshot(e)}updateThreadSnapshot(e){return this.updateSnapshot(e)}getLatestSeq(e,n){if($(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,e)).get()?.maxSeq??0:null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read latest thread event sequence",s)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if($(e,"threadId"),$(n,"workspaceId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({taskId:a.id,prompt:a.prompt,result:a.result,status:a.status,startedAt:a.started_at,completedAt:a.completed_at}).from(a).where(and(eq(a.thread_id,e),eq(a.workspace_id,n),inArray(a.status,[...xn]),or(isNull(a.parent_task_id),eq(a.parent_task_id,"")),sql`${a.result} IS NOT NULL AND length(trim(${a.result})) > 0`)).orderBy(asc(a.started_at),asc(a.id)).all().map(i=>({taskId:i.taskId,prompt:i.prompt,result:i.result,status:i.status,startedAt:i.startedAt,completedAt:i.completedAt})):null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read completed thread highlight turns",s)}finally{r.close();}}createHighlightRegenerationRun(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.requestId,"requestId"),$(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&$(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findThread(s,e.threadId,e.workspaceId);o||je(`Thread ${e.threadId} not found`);let i=s.select().from(F).where(and(eq(F.thread_id,o.id),eq(F.request_id,e.requestId))).orderBy(desc(F.requested_at),desc(F.id)).limit(1).get();if(i)return {run:i,created:!1};let u=s.select().from(F).where(and(eq(F.thread_id,o.id),inArray(F.status,Wr))).orderBy(asc(F.requested_at),asc(F.id)).limit(1).get();if(u)throw new No(u);let d=e.runId??zn("thr");s.insert(F).values({id:d,thread_id:o.id,request_id:e.requestId,status:"queued",detector_version:e.detectorVersion,requested_at:n,started_at:null,completed_at:null,error_code:null,previous_auto_count:null,new_auto_count:null}).run();let c=s.select().from(F).where(eq(F.id,d)).get();if(!c)throw new f("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:c,created:!0}},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to create highlight regeneration run",s)}finally{r.close();}}beginHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}queueHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}getHighlightRegenerationRun(e,n){if($(e,"runId"),n!==void 0&&$(n,"workspaceId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read highlight regeneration run",s)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if($(e,"threadId"),$(n,"workspaceId"),$(r,"requestId"),!existsSync(this.resolveDbPath()))return null;let s=this.openHandle(false);try{return this.findThread(s.db,e,n)?s.db.select().from(F).where(and(eq(F.thread_id,e),eq(F.request_id,r))).orderBy(desc(F.requested_at),desc(F.id)).limit(1).get()??null:null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read highlight regeneration request",o)}finally{s.close();}}findHighlightRegenerationRun(e,n,r){return this.getHighlightRegenerationRunByRequest(e,n,r)}startHighlightRegenerationRun(e,n){$(e,"runId"),n!==void 0&&$(n,"workspaceId");let r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findRegenerationRun(o,e,n);if(i||je(`Highlight regeneration run ${e} not found`),Oo(i.status)||G(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;o.update(F).set({status:"running",started_at:r}).where(and(eq(F.id,i.id),eq(F.status,"queued"))).run();let u=o.select().from(F).where(eq(F.id,i.id)).get();if(!u)throw new f("DB_ERROR","Highlight regeneration run start did not return a row");return u},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to start highlight regeneration run",o)}finally{s.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){$(e.runId,"runId"),$(e.errorCode,"errorCode"),e.workspaceId!==void 0&&$(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findRegenerationRun(s,e.runId,e.workspaceId);if(o||je(`Highlight regeneration run ${e.runId} not found`),Oo(o.status)||G(`invalid highlight regeneration status: ${o.status}`),o.status==="completed"||o.status==="failed")return o;s.update(F).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(and(eq(F.id,o.id),inArray(F.status,Wr))).run();let i=s.select().from(F).where(eq(F.id,o.id)).get();if(!i)throw new f("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to fail highlight regeneration run",s)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=Xf){$(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>s.update(F).set({status:"failed",completed_at:n,error_code:e}).where(inArray(F.status,Wr)).run().changes,{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to recover interrupted highlight runs",s)}finally{r.close();}}completeHighlightRegenerationRun(e){$(e.runId,"runId"),$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.detectorVersion,"detectorVersion");let n=ug(e.candidates),r=Vn(e),s=this.openHandle(true),o=false;try{return s.db.transaction(i=>{let u=this.findRegenerationRun(i,e.runId,e.workspaceId);if((!u||u.thread_id!==e.threadId)&&je(`Highlight regeneration run ${e.runId} not found`),Oo(u.status)||G(`invalid highlight regeneration status: ${u.status}`),u.status==="failed")throw new f("CONFLICT","Highlight regeneration run has already failed");if(u.status==="completed")return {run:u,deletedCount:0,createdCount:0,previousAutoCount:u.previous_auto_count??0,newAutoCount:u.new_auto_count??0};o=!0;let d=this.findThread(i,e.threadId,e.workspaceId);d||je(`Thread ${e.threadId} not found`),u.detector_version!==e.detectorVersion&&G("detectorVersion does not match the regeneration run");let c=i.select().from(U).where(eq(U.thread_id,d.id)).orderBy(asc(U.created_at),asc(U.id)).all(),l=new Set(n.map(N=>N.contentFingerprint)),p=c.filter(N=>N.source==="auto"&&N.status==="active"&&N.revision===0&&!l.has(N.content_fingerprint??"")),g=c.filter(N=>N.source==="auto"&&N.status==="active").length,_=new Set(c.filter(N=>!p.includes(N)&&N.content_fingerprint).map(N=>N.content_fingerprint)),m=n.filter(N=>!_.has(N.contentFingerprint)),y=new Date().toISOString(),k=Jn(i,d.id)+1;Xn(i,d.id)||(Yn(i,d,r,y,k),k+=1);for(let N of p)i.delete(U).where(eq(U.id,N.id)).run(),lg(i,N,r,y,k,{runId:e.runId,reason:Jf}),k+=1;let v=0,I=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let N of m){let Z=zn("thl");i.insert(U).values({id:Z,thread_id:d.id,source:"auto",kind:N.kind,status:"active",text:N.text,covers_from_task_id:N.coversFromTaskId,covers_to_task_id:N.coversToTaskId,revision:0,created_at:y,updated_at:y,agent_id:I,source_task_id:N.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:N.contentFingerprint,dismissed_at:null}).run();let _e=i.select().from(U).where(eq(U.id,Z)).get();if(!_e)throw new f("DB_ERROR","Regenerated highlight insert did not return a row");jr(i,_e,r,y,"thread.highlight.created",k),k+=1,v+=1;}let E=i.select().from(U).where(eq(U.thread_id,d.id)).all().filter(N=>N.source==="auto"&&N.status==="active").length;Pt(i,{threadId:d.id,seq:k,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:y,payload:{runId:u.id,detectorVersion:e.detectorVersion,previousAutoCount:g,newAutoCount:E,deletedCount:p.length,createdCount:v}}),i.update(F).set({status:"completed",started_at:u.started_at??y,completed_at:y,error_code:null,previous_auto_count:g,new_auto_count:E}).where(and(eq(F.id,u.id),inArray(F.status,Wr))).run();let A=i.select().from(F).where(eq(F.id,u.id)).get();if(!A)throw new f("DB_ERROR","Highlight regeneration completion did not return a row");return {run:A,deletedCount:p.length,createdCount:v,previousAutoCount:g,newAutoCount:E}},{behavior:"immediate"})}catch(i){if(o)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:Yf});}catch{}throw i instanceof f?i:new f("DB_ERROR","Failed to complete highlight regeneration",i)}finally{s.close();}}completeHighlightRegeneration(e){return this.completeHighlightRegenerationRun(e)}replaceAutoHighlightsAtomically(e){return this.completeHighlightRegenerationRun(e)}listTimeline(e,n,r={}){let s=typeof e=="string"?{...r,threadId:e,workspaceId:n}:e;$(s.threadId,"threadId"),$(s.workspaceId,"workspaceId");let o=og(s);if(!existsSync(this.resolveDbPath()))return null;let i=this.openHandle(false);try{if(!this.findThread(i.db,s.threadId,s.workspaceId))return null;let u=i.db.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,s.threadId)).get()?.maxSeq??0,d;s.beforeSeq!==void 0?d=i.db.select().from(W).where(and(eq(W.thread_id,s.threadId),lt$1(W.seq,s.beforeSeq))).orderBy(desc(W.seq)).limit(o+1).all().reverse():s.afterSeq!==void 0?d=i.db.select().from(W).where(and(eq(W.thread_id,s.threadId),sql`${W.seq} > ${s.afterSeq}`)).orderBy(asc(W.seq)).limit(o+1).all():d=i.db.select().from(W).where(eq(W.thread_id,s.threadId)).orderBy(desc(W.seq)).limit(o+1).all().reverse();let c=d.length>o,l=s.afterSeq!==void 0?d.slice(0,o):c?d.slice(1):d,p=!1,g=l[0];return g&&(p=!!i.db.select({id:W.id}).from(W).where(and(eq(W.thread_id,s.threadId),lt$1(W.seq,g.seq))).limit(1).get()),{items:l,latestSeq:u,hasMoreOlder:p}}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to list thread timeline",u)}finally{i.close();}}listEvents(e,n,r){return this.listTimeline(e,n,r)}getTimeline(e,n,r){return this.listTimeline(e,n,r)}createHighlight(e){let n=ag(e),r=Vn(e),s=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);if(u||je(`Thread ${e.threadId} not found`),n.source==="auto"){let g=i.select().from(U).where(and(eq(U.thread_id,e.threadId),eq(U.source_task_id,n.sourceTaskId),eq(U.detector_version,n.detectorVersion),eq(U.content_fingerprint,n.contentFingerprint))).orderBy(asc(U.created_at),asc(U.id)).limit(1).get();if(g)return g}let d=e.id??zn("thl"),c={id:d,thread_id:e.threadId,source:n.source,kind:n.kind,status:"active",text:n.text,covers_from_task_id:n.coversFromTaskId,covers_to_task_id:n.coversToTaskId,revision:0,created_at:s,updated_at:s,agent_id:n.agentId,source_task_id:n.sourceTaskId,detector_version:n.detectorVersion,content_fingerprint:n.contentFingerprint,dismissed_at:null};i.insert(U).values(c).run();let l=i.select().from(U).where(eq(U.id,d)).get();if(!l)throw new f("DB_ERROR","Highlight insert did not return a row");let p=Jn(i,u.id)+1;return Xn(i,u.id)||(Yn(i,u,r,s,p),p+=1),jr(i,l,r,s,"thread.highlight.created",p),l},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to create thread highlight",i)}finally{o.close();}}updateHighlight(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&G("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&G("highlight update requires at least one field"),e.kind!==void 0&&xo(e.kind);let n=e.text===void 0?void 0:vo(e.text),r=Vn(e),s=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(i=>{let u=this.findThread(i,e.threadId,e.workspaceId);u||je(`Thread ${e.threadId} not found`);let d=i.select().from(U).where(and(eq(U.id,e.highlightId),eq(U.thread_id,u.id))).limit(1).get();if(d||je(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new Zn(u.id,d.id,e.expectedRevision,d.revision);if(d.status!=="active")throw new Zn(u.id,d.id,e.expectedRevision,d.revision);let c=e.kind??d.kind,l=n??d.text,p=e.coversFromTaskId??d.covers_from_task_id,g=e.coversToTaskId??d.covers_to_task_id;(!l||p.length===0||g.length===0)&&G("highlight projection is incomplete");let _=c!==d.kind||l!==d.text||p!==d.covers_from_task_id||g!==d.covers_to_task_id,m=r.actorType==="user"&&d.source==="auto"&&_?"manual":d.source;if(!(_||m!==d.source))return d;let k=d.revision+1;i.update(U).set({source:m,kind:c,text:l,covers_from_task_id:p,covers_to_task_id:g,revision:k,updated_at:s}).where(and(eq(U.id,d.id),eq(U.revision,d.revision))).run();let v=i.select().from(U).where(eq(U.id,d.id)).get();if(!v)throw new f("DB_ERROR","Highlight update did not return a row");let I=Jn(i,u.id)+1;return Xn(i,u.id)||(Yn(i,u,r,s,I),I+=1),jr(i,v,r,s,"thread.highlight.updated",I,d),v},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to update thread highlight",i)}finally{o.close();}}dismissHighlight(e){$(e.threadId,"threadId"),$(e.workspaceId,"workspaceId"),$(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&G("expectedRevision must be a non-negative integer");let n=Vn(e),r=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(o=>{let i=this.findThread(o,e.threadId,e.workspaceId);i||je(`Thread ${e.threadId} not found`);let u=o.select().from(U).where(and(eq(U.id,e.highlightId),eq(U.thread_id,i.id))).limit(1).get();if(u||je(`Highlight ${e.highlightId} not found`),u.revision!==e.expectedRevision)throw new Zn(i.id,u.id,e.expectedRevision,u.revision);if(u.status==="dismissed")return u;let d=u.revision+1;o.update(U).set({status:"dismissed",text:null,revision:d,updated_at:r,dismissed_at:r}).where(and(eq(U.id,u.id),eq(U.revision,u.revision))).run();let c=o.select().from(U).where(eq(U.id,u.id)).get();if(!c)throw new f("DB_ERROR","Highlight dismissal did not return a row");let l=Jn(o,i.id)+1;return Xn(o,i.id)||(Yn(o,i,n,r,l),l+=1),jr(o,c,n,r,"thread.highlight.deleted",l,u),c},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to dismiss thread highlight",o)}finally{s.close();}}listActiveHighlights(e,n,r={}){if($(e,"threadId"),$(n,"workspaceId"),r.taskId!==void 0&&$(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&$(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&$(r.coversToTaskId,"coversToTaskId"),!existsSync(this.resolveDbPath()))return null;let s=this.openHandle(false);try{if(!this.findThread(s.db,e,n))return null;let i=s.db.select().from(U).where(and(eq(U.thread_id,e),eq(U.status,"active"))).orderBy(asc(U.created_at),asc(U.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return i;let u=s.db.all(sql`
|
|
595
612
|
SELECT id, started_at FROM tasks WHERE thread_id = ${e}
|
|
596
613
|
ORDER BY started_at ASC, id ASC
|
|
597
|
-
`),d=new Map(u.map((g,_)=>[g.id,_])),c=r.taskId===void 0?void 0:d.get(r.taskId),l=r.coversFromTaskId===void 0?void 0:d.get(r.coversFromTaskId),p=r.coversToTaskId===void 0?void 0:d.get(r.coversToTaskId);return i.filter(g=>{let _=d.get(g.covers_from_task_id),m=d.get(g.covers_to_task_id);if(_===void 0||m===void 0)return !1;let y=Math.min(_,m),k=Math.max(_,m);return !(c!==void 0&&(c<y||c>k)||l!==void 0&&k<l||p!==void 0&&y>p)})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to list active thread highlights",o)}finally{s.close();}}listHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}getActiveHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}};h();
|
|
614
|
+
`),d=new Map(u.map((g,_)=>[g.id,_])),c=r.taskId===void 0?void 0:d.get(r.taskId),l=r.coversFromTaskId===void 0?void 0:d.get(r.coversFromTaskId),p=r.coversToTaskId===void 0?void 0:d.get(r.coversToTaskId);return i.filter(g=>{let _=d.get(g.covers_from_task_id),m=d.get(g.covers_to_task_id);if(_===void 0||m===void 0)return !1;let y=Math.min(_,m),k=Math.max(_,m);return !(c!==void 0&&(c<y||c>k)||l!==void 0&&k<l||p!==void 0&&y>p)})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to list active thread highlights",o)}finally{s.close();}}listHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}getActiveHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}};h();dt();kt();Tt();at();It();gs();var Y=class extends f{reason;constructor(e,n="VALIDATION",r=e,s){super(n,r,s),this.name="CommonCodeRepositoryError",this.reason=e;}},au="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function wg(){let t=randomBytes(16),e="";for(let n of t)e+=au[n%au.length];return e.slice(0,12)}function du(){return `c_${wg()}`}function yg(t){return typeof t=="string"&&ps.includes(t)}function Eg(t){return typeof t=="string"&&fs.includes(t)}function fn(t){if(!yg(t))throw new Y("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function uu(t){if(!Eg(t))throw new Y("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function cu(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new Y("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function gn(t){if(typeof t!="string"||t.trim().length===0)throw new Y("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function Kr(t){if(typeof t!="string"||t.trim().length===0)throw new Y("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function _t(t,e){return and(eq(C.code_group,t),or(isNull(C.workspace_id),eq(C.workspace_id,e)))}var Vr=class extends me{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!existsSync(n))throw new f("NOT_FOUND","Database not found");e&&mkdirSync(dirname(n),{recursive:true});let r=H(n);if(e)try{be(r.db,n);}catch(s){throw r.close(),s}return r}listSelectable(e,n){if(fn(e),gn(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(C).where(and(_t(e,n),eq(C.is_archived,0))).orderBy(asc(C.sort_order),asc(C.code)).all()}catch(s){throw new f("DB_ERROR","Failed to list selectable common codes",s)}finally{r.close();}}listForHistory(e,n){if(fn(e),gn(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(C).where(_t(e,n)).orderBy(asc(C.sort_order),asc(C.code)).all()}catch(s){throw new f("DB_ERROR","Failed to list common-code history",s)}finally{r.close();}}reorder(e){let n=e.group;if(fn(n),gn(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let s of e.codes)Kr(s);if(new Set(e.codes).size!==e.codes.length)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder scope does not exist");let r=this.openHandle(true);try{return r.db.transaction(s=>{let o=s.select().from(C).where(_t(n,e.workspaceId)).all(),i=o.filter(_=>_.is_archived===0),u=new Set(o.map(_=>_.code)),d=new Set(i.map(_=>_.code)),c=e.codes.find(_=>!u.has(_));if(c)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${c}`);if(e.codes.length!==i.length||e.codes.some(_=>!d.has(_)))throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let l=new Map(i.map(_=>[_.code,_])),p=e.codes.map(_=>{let m=l.get(_);if(!m)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${_}`);return m}),g;for(let[_,m]of p.entries())m.sort_order!==_&&(g??=new Date().toISOString(),s.update(C).set({sort_order:_,updated_at:g}).where(and(eq(C.code_group,n),eq(C.code,m.code))).run());return s.select().from(C).where(_t(n,e.workspaceId)).orderBy(asc(C.sort_order),asc(C.code)).all()},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to reorder common codes",s)}finally{r.close();}}resolve(e,n){if(fn(e),Kr(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(C).where(and(eq(C.code_group,e),eq(C.code,n))).limit(1).get()??null}catch(s){throw new f("DB_ERROR","Failed to resolve common code",s)}finally{r.close();}}createThreadState(e){gn(e.workspaceId);let n=cu(e.name);uu(e.color);let r=this.openHandle(true);try{return r.db.transaction(s=>{if(s.select({code:C.code}).from(C).where(and(_t("THREAD_STATE",e.workspaceId),eq(C.is_archived,0),eq(C.code_name,n))).limit(1).get())throw new Y("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let i=s.select({maxSortOrder:sql`max(${C.sort_order})`}).from(C).where(_t("THREAD_STATE",e.workspaceId)).get(),u=new Date().toISOString(),d=du();for(;s.select({code:C.code}).from(C).where(and(eq(C.code_group,"THREAD_STATE"),eq(C.code,d))).limit(1).get();)d=du();s.insert(C).values({code_group:"THREAD_STATE",code:d,code_name:n,color:e.color,sort_order:(i?.maxSortOrder??-1)+1,workspace_id:e.workspaceId,is_builtin:0,is_archived:0,metadata:null,created_at:u,updated_at:u}).run();let c=s.select().from(C).where(and(eq(C.code_group,"THREAD_STATE"),eq(C.code,d))).limit(1).get();if(!c)throw new f("DB_ERROR","Created common code could not be read back");return c},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to create thread state common code",s)}finally{r.close();}}updateDisplay(e){if(fn(e.group),Kr(e.code),gn(e.workspaceId),e.name===void 0&&e.color===void 0)throw new Y("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:cu(e.name);e.color!==void 0&&uu(e.color);let r=this.openHandle(true);try{return r.db.transaction(s=>{let o=s.select().from(C).where(and(eq(C.code_group,e.group),eq(C.code,e.code))).limit(1).get();if(!o)throw new Y("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e.group}/${e.code}`);if(this.assertOwnership(o,e.workspaceId),n===null&&o.is_builtin!==1)throw new Y("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&o.is_archived===0){let d=and(_t(e.group,e.workspaceId),eq(C.is_archived,0));if(s.select({code:C.code}).from(C).where(and(d,eq(C.code_name,n),sql`${C.code} <> ${e.code}`)).limit(1).get())throw new Y("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`)}let i={updated_at:new Date().toISOString()};e.name!==void 0&&(i.code_name=n??null),e.color!==void 0&&(i.color=e.color),s.update(C).set(i).where(and(eq(C.code_group,e.group),eq(C.code,e.code))).run();let u=s.select().from(C).where(and(eq(C.code_group,e.group),eq(C.code,e.code))).limit(1).get();if(!u)throw new f("DB_ERROR","Updated common code could not be read back");return u},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update common-code display values",s)}finally{r.close();}}archive(e,n,r,s=true){if(fn(e),Kr(n),gn(r),typeof s!="boolean")throw new Y("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let o=this.openHandle(true);try{return o.db.transaction(i=>{let u=i.select().from(C).where(and(eq(C.code_group,e),eq(C.code,n))).limit(1).get();if(!u)throw new Y("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(u.is_builtin===1)throw new Y("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(u,r),!s&&u.code_name!==null&&i.select({code:C.code}).from(C).where(and(_t(e,r),eq(C.is_archived,0),eq(C.code_name,u.code_name),ne$1(C.code,n))).limit(1).get())throw new Y("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${u.code_name}`);i.update(C).set({is_archived:s?1:0,updated_at:new Date().toISOString()}).where(and(eq(C.code_group,e),eq(C.code,n))).run();let d=i.select().from(C).where(and(eq(C.code_group,e),eq(C.code,n))).limit(1).get();if(!d)throw new f("DB_ERROR","Archived common code could not be read back");return d},{behavior:"immediate"})}catch(i){throw i instanceof f?i:new f("DB_ERROR","Failed to archive common code",i)}finally{o.close();}}assertOwnership(e,n){if(e.workspace_id!==null&&e.workspace_id!==n)throw new Y("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};Wt();Dn();h();var Ge={threadContext:"crewx_thread_context",apps:"apps",appsGuidance:"apps_guidance",availableApps:"available_apps",crewxUiState:"crewx_ui_state"};function Ig(t){return t.replace(new RegExp(`<${Ge.threadContext}\\b[^>]*>[\\s\\S]*?<\\/${Ge.threadContext}>`,"g"),"").replace(new RegExp(`<${Ge.apps}\\b[^>]*>[\\s\\S]*?<\\/${Ge.apps}>`,"g"),"").replace(new RegExp(`<${Ge.appsGuidance}\\b[^>]*>[\\s\\S]*?<\\/${Ge.appsGuidance}>`,"g"),"").replace(new RegExp(`<${Ge.availableApps}\\b[^>]*>[\\s\\S]*?<\\/${Ge.availableApps}>`,"g"),"").replace(new RegExp(`<${Ge.crewxUiState}\\b[^>]*>[\\s\\S]*?<\\/${Ge.crewxUiState}>`,"g"),"").replace(/<conversation_history[^>]*>[\s\S]*?<\/conversation_history>/g,"").split(`
|
|
598
615
|
`).filter(s=>!(s.startsWith("Loaded ")&&s.includes("layouts from")||s.includes("[dotenv@")||s.includes("[Nest]")&&s.includes("DEBUG")||s.startsWith("Registered custom layout:")||s.startsWith("Updated custom layout:"))).join(`
|
|
599
|
-
`).trim()}function
|
|
600
|
-
`):s&&typeof s=="object"&&s.result!==void 0&&(r=s.result||"");}catch{r=
|
|
601
|
-
`)[0]??"":"";if(e){let r=
|
|
616
|
+
`).trim()}function Ag(t){if(t)try{let e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))return;let n=e.provider;return typeof n=="string"?n:void 0}catch{return}}function Og(t,e,n){if(!t||e&&Qe(t,n))return "";let r=t;try{let s=JSON.parse(r);Array.isArray(s)?r=s.filter(o=>o?.type==="text"&&o?.text).map(o=>o.text).join(`
|
|
617
|
+
`):s&&typeof s=="object"&&s.result!==void 0&&(r=s.result||"");}catch{r=Ig(r);}return r}var bg=new Set(["success","failed","stopped","running"]),Ng=new Set(["failed","stopped"]),vg={user_stop:"stopped by the user before it finished",runner_lost:"end of run not observed \u2014 it may have done part of the work or may still be running",launch_failed:"the runner never started this run"},Jr=200;function lu(t){if(t.length<=Jr)return t;let e=t.charCodeAt(Jr-1),n=e>=55296&&e<=56319?Jr-1:Jr;return t.slice(0,n)}function xg(t){let e=Ue(t),n=typeof t.error=="string"?t.error.split(`
|
|
618
|
+
`)[0]??"":"";if(e){let r=vg[e];return lu(n?`${r}; ${n}`:r)}return n?lu(n):void 0}var Xr=class{dbPath;constructor(e){this.dbPath=e??join(homedir(),".crewx","crewx.db");}getThreadRepo(){return new Br({dbPath:this.dbPath})}getThreadHistoryRepo(){return new zr({dbPath:this.dbPath})}updateThread(e,n){this.getThreadRepo().updateThread(e,{title:n.title});}async ensureThread(e,n,r,s){let o=this.getThreadRepo(),i=o.findThreadById(e);if(i){if(i.platform!==n)throw new Error(`Thread '${e}' already exists with platform '${i.platform}' \u2014 cannot change to '${n}' (platform is immutable)`);return o.ensureThread(e,n,r,s),{created:false}}return o.ensureThread(e,n,r,s),{created:true}}async fetchHistory(e,n){let r=n?.limit??100,s=this.getThreadRepo(),o=s.findThreadById(e),i=s.findTopLevelTasks(e,void 0,r,n?.agentId||void 0),u=new Set(["queued","cancelled"]),d=n?.currentTraceId;i=i.filter(_=>(!_.status||!u.has(_.status))&&(!d||_.trace_id!==d&&_.id!==d));let c=s.findInterceptedRequests(i.map(_=>_.id));c.size>0&&(i=i.map(_=>c.has(_.id)?{..._,prompt:c.get(_.id)}:_));let l=o?.platform??"cli",p=this.rowsToMessages(i),g=n?.includeHighlights===false?void 0:this.readActiveHighlights(e,o?.workspace_id??null);return {threadId:e,platform:l,messages:p,...g?{highlights:g}:{},metadata:{title:o?.title??void 0,firstMessage:o?.first_message??void 0,lastMessage:o?.last_message??void 0,messageCount:o?.message_count??0,updatedAt:o?.updated_at?new Date(o.updated_at).getTime():void 0}}}async fetchThreadState(e){try{let n=this.getThreadHistoryRepo().getSnapshot(e);if(!n)return;let r=new Vr({dbPath:this.dbPath}),s=(o,i)=>{try{return r.resolve(o,i)?.code_name||i}catch{return i}};return {...n.title?{title:n.title}:{},...n.priority?{priority:{code:n.priority,name:s("THREAD_PRIORITY",n.priority)}}:{},...n.state?{state:{code:n.state,name:s("THREAD_STATE",n.state)}}:{}}}catch{return}}async fetchHighlights(e){let n=this.getThreadRepo().findThreadById(e);return this.readActiveHighlights(e,n?.workspace_id??null)}async saveUserMessage(e,n,r,s){let{firstMessage:o}=this.getThreadRepo().saveUserMessage(e,n);return {id:e,firstMessage:o}}async saveAssistantMessage(e,n,r,s){return this.getThreadRepo().saveAssistantMessage(e,n),{id:e}}close(){}readActiveHighlights(e,n){if(!n)return [];try{return (this.getThreadHistoryRepo().listActiveHighlights(e,n)??[]).filter(s=>typeof s.text=="string"&&s.text.length>0).map(s=>({id:s.id,text:s.text,kind:s.kind,source:s.source,coversFromTaskId:s.covers_from_task_id,coversToTaskId:s.covers_to_task_id,createdAt:s.created_at}))}catch{return}}rowsToMessages(e){let n=[];for(let r of e){r.prompt&&n.push({id:`${r.id}-user`,text:r.prompt,isAssistant:false,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:{caller_agent_id:r.caller_agent_id,task_id:r.id}});let s={status:r.status??"",error:r.error,metadata:r.metadata},o=r.status?xe(s):void 0,i=Ag(r.metadata),u=Og(r.result,o!==void 0&&Ng.has(o),i);if(u||o!==void 0&&bg.has(o)){let d={agent_id:r.agent_id,task_id:r.id};if(o&&o!=="success"){d.status=o;let c=xg(s);c&&(d.reason=c);}n.push({id:`${r.id}-assistant`,text:u,isAssistant:true,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:d});}}return n}};var Co=class extends it{name="conversation";_provider;unsubStart=null;unsubEnd=null;constructor(e){super(),this._provider=new Xr(e?.dbPath);}get conversationProvider(){return this._provider}async afterUserMessage(e,n,r,s){}async afterAssistantMessage(e,n,r){}attach(e){this.unsubStart=e.on("task:start",async n=>{if(!n.threadId)return;let r=n.platform??"cli";try{let s=await this._provider.ensureThread(n.threadId,r,n.workspaceId,{createdByTaskId:n.traceId}),o=await this._provider.saveUserMessage(n.threadId,n.message??"");await this.afterUserMessage(n.threadId,o.id,s.created||o.firstMessage,n);}catch{}}),this.unsubEnd=e.on("task:end",async n=>{if(!n.result)return;let r=n.metadata?.threadId;if(!r)return;let s=n.agentRef?.replace(/^@/,"")??"";try{let{id:o}=await this._provider.saveAssistantMessage(r,n.result,s);await this.afterAssistantMessage(r,o,n);}catch{}});}detach(e){this.unsubStart?.(),this.unsubStart=null,this.unsubEnd?.(),this.unsubEnd=null,this._provider.close?.();}};export{Co as ConversationPlugin,Zr as FileLoggerPlugin,To as SqliteTracingPlugin};
|