@crewx/sdk 0.9.0-rc.131 → 0.9.0-rc.132
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 +223 -185
- package/dist/esm/plugins/index.js +72 -34
- package/dist/esm/publish/index.js +2 -2
- package/dist/esm/repository/index.js +92 -54
- package/dist/esm/skills/index.js +1 -1
- package/dist/index.js +236 -198
- package/dist/mcp-app/discovery.d.ts +1 -0
- package/dist/plugins/index.js +71 -33
- package/dist/publish/index.js +2 -2
- package/dist/repository/index.js +101 -63
- package/dist/repository/thread.repository.d.ts +7 -0
- package/dist/skills/index.js +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import*as de from'path';import de__default,{join,dirname,resolve}from'path';import {fileURLToPath}from'url';import {existsSync,mkdirSync,writeFileSync,appendFileSync,lstatSync,readFileSync,statSync,realpathSync}from'fs';import po,{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,or as or$1,eq,isNull,and,ne,desc,inArray,lt,notLike,asc,like,gte,isNotNull}from'drizzle-orm';import {spawn}from'child_process';var ld=Object.defineProperty;var At=(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
|
|
1
|
+
import*as de from'path';import de__default,{join,dirname,resolve}from'path';import {fileURLToPath}from'url';import {existsSync,mkdirSync,writeFileSync,appendFileSync,lstatSync,readFileSync,statSync,realpathSync}from'fs';import po,{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,or as or$1,eq,isNull,and,ne,desc,inArray,lt,notLike,asc,like,gte,isNotNull}from'drizzle-orm';import {spawn}from'child_process';var ld=Object.defineProperty;var At=(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 pd=(t,e)=>{for(var n in e)ld(t,n,{get:e[n],enumerable:true});};var hd,_d,S,h=x(()=>{hd=()=>fileURLToPath(import.meta.url),_d=()=>de__default.dirname(hd()),S=_d();});var g,at=x(()=>{h();g=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 co(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 Ad(t,e){let n=co(t),r=co(e);return process.platform==="win32"?n.toLowerCase()===r.toLowerCase():n===r}function dt(t){if((process.env.NODE_ENV==="test"||process.env.VITEST!==void 0)&&Ad(t,join(po.homedir(),".crewx","crewx.db")))throw new Error(`${Id}: ${t}. Set CREWX_DB to an isolated temporary path or :memory:.`);return t}var Id,Ee,ut=x(()=>{h();Id="[crewx] Refusing to open the real CrewX database from a test process";Ee=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(po.homedir(),".crewx","crewx.db");return dt(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 F(t,e={}){let n=dt(t),r=At("better-sqlite3"),{drizzle:s}=At("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 = ${vd}`),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 vd,vt=x(()=>{h();ut();vd=32*1024*1024;});function bt(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function xd(t,e){if(e>0||!bt(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(bd))r.has(s)||t.run(`ALTER TABLE tasks ADD COLUMN ${s} ${o}`);}function Cd(t,e,n){if(!bt(t,"__drizzle_migrations")||!bt(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(de__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of o.entries){let u=Nd[i.tag];if(!u)continue;let d=de__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)"),f=new Set(p.map(m=>m.name));for(let[m,_]of Object.entries(u))f.has(m)||(t.run(`ALTER TABLE tasks ADD COLUMN ${m} ${_}`),f.add(m));}}function ho(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 _o(t){return t.split(/-->\s*statement-breakpoint/).map(e=>e.trim()).filter(Boolean)}function Pd(t,e,n){return t.all(`PRAGMA table_info("${e}")`).some(o=>o.name===n)}function Dd(t,e){return t.all(`SELECT name FROM sqlite_master WHERE type = 'index' AND name = '${e}'`).length>0}function $n(t,e){return e.kind==="add-column"?Pd(t,e.table,e.column):Dd(t,e.name)}function mo(t,e,n){let r=t;for(let s of _o(e)){let o=ho(s);o?.kind==="add-column"&&$n(r,o)||o?.kind==="create-index"&&$n(r,o)||o?.kind==="drop-index"&&!$n(r,o)||r.run(n.raw(s));}}function Ld(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(de__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of o.entries){let u=de__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=_o(d).map(ho);if(p.some(m=>!m))continue;let f=p;f.some(m=>m.kind==="add-column")&&f.some(m=>$n(t,m))&&(t.transaction(m=>{mo(m,d,n),m.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 Md(t,e){let{sql:n}=At("drizzle-orm"),r=JSON.parse(readFileSync(de__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(de__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)||(mo(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 Fd(t,e,n,r){let o=JSON.parse(readFileSync(de__default.join(e,"meta/_journal.json"),"utf-8")).entries.find(({tag:p})=>p===Hd);if(!o)return;let i=de__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(f=>f.hash===u))return;if(!bt(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')
|
|
@@ -17,42 +17,42 @@ import*as de from'path';import de__default,{join,dirname,resolve}from'path';impo
|
|
|
17
17
|
WHERE type = 'trigger'
|
|
18
18
|
AND name = '${Ud}'
|
|
19
19
|
)
|
|
20
|
-
${c}`);return {hash:u,markedPointers:l?.count??0}}function Bd(t){let{migrate:e}=At("drizzle-orm/better-sqlite3/migrator"),{sql:n}=At("drizzle-orm"),r=[de__default.join(
|
|
20
|
+
${c}`);return {hash:u,markedPointers:l?.count??0}}function Bd(t){let{migrate:e}=At("drizzle-orm/better-sqlite3/migrator"),{sql:n}=At("drizzle-orm"),r=[de__default.join(S,"../migrations"),de__default.join(S,"migrations"),de__default.join(S,"../../../../drizzle/migrations"),de__default.join(process.cwd(),"drizzle/migrations")],s=r.find(p=>existsSync(de__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),xd(t,i),o?.cnt&&(Md(t,s),Ld(t,s,n),Cd(t,s,n));let u=Fd(t,s,n,!!o?.cnt),d=qd(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(f=>f.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(f=>f.hash===d.hash)&&console.error(`[crewx] Thread creator pointer migration (${d.markedPointers} pointer(s) marked unverified).`);}function Fe(t,e){fo.has(e)||(Bd(t),fo.add(e));}var fo,bd,Nd,Hd,$d,Ud,go,xt=v(()=>{h();fo=new Set,bd={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"};Nd={"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"}};Hd="0027_task_stop_scope_cleanup",$d="0033_thread_creator_boundary_guard",Ud="trg_threads_creator_late_fill_guard",go="thread_creator_unverified";});var Re,Lr=v(()=>{h();Re=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,an=v(()=>{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"),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)},t=>({log_storage_check:check("tasks_log_storage_ck",sql`${t.log_storage} IN ('blob', 'events')`),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)}));});var Be,wo=v(()=>{h();an();Be=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 Qd,Zd,k,qn=v(()=>{h();Lr();Qd="json_extract(metadata, '$.threadTitle.state')",Zd="json_extract(metadata, '$.threadTitle.priority')",k=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>Re.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(Qd)),idx_threads_workspace_thread_priority:index("idx_threads_workspace_thread_priority").on(t.workspace_id,sql.raw(Zd))}));});var Ro=v(()=>{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 su,Io=v(()=>{h();an();su=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(()=>su.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 Ao=v(()=>{h();an();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 vo=v(()=>{h();qn();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>k.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 xo=v(()=>{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 Po=v(()=>{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 Do=v(()=>{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 Mo=v(()=>{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 $o=v(()=>{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 Uo=v(()=>{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"),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 qo=v(()=>{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),xd(t,i),o?.cnt&&(Md(t,s),Ld(t,s,n),Cd(t,s,n));let u=Fd(t,s,n,!!o?.cnt),d=qd(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(f=>f.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(f=>f.hash===d.hash)&&console.error(`[crewx] Thread creator pointer migration (${d.markedPointers} pointer(s) marked unverified).`);}function Fe(t,e){fo.has(e)||(Bd(t),fo.add(e));}var fo,bd,Nd,Hd,$d,Ud,go,xt=x(()=>{h();fo=new Set,bd={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"};Nd={"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"}};Hd="0027_task_stop_scope_cleanup",$d="0033_thread_creator_boundary_guard",Ud="trg_threads_creator_late_fill_guard",go="thread_creator_unverified";});var Re,Lr=x(()=>{h();Re=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,an=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"),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)},t=>({log_storage_check:check("tasks_log_storage_ck",sql`${t.log_storage} IN ('blob', 'events')`),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)}));});var Be,wo=x(()=>{h();an();Be=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 Qd,Zd,T,qn=x(()=>{h();Lr();Qd="json_extract(metadata, '$.threadTitle.state')",Zd="json_extract(metadata, '$.threadTitle.priority')",T=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>Re.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(Qd)),idx_threads_workspace_thread_priority:index("idx_threads_workspace_thread_priority").on(t.workspace_id,sql.raw(Zd))}));});var Ro=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 su,Io=x(()=>{h();an();su=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(()=>su.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 Ao=x(()=>{h();an();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 vo=x(()=>{h();qn();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 xo=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 Po=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 Do=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 Mo=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 $o=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 Uo=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"),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 qo=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 Bo=
|
|
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 Bo=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 jo,Go=v(()=>{h();jo=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(()=>jo.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(()=>jo.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 Br,Wr,A,jr=v(()=>{h();Br=["THREAD_STATE","THREAD_PRIORITY"],Wr=["gray","blue","violet","green","amber","orange","red","pink"],A=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 zo,Ko,Vo,Jo,Yo,W,U,H,Xo=v(()=>{h();qn();zo=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],Ko=["user","agent","system"],Vo=["auto","manual"],Jo=["decision","judgment","issue","result","pivot"],Yo=["queued","running","completed","failed"],W=sqliteTable("thread_events",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>k.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)})),U=sqliteTable("thread_highlight_runs",{id:text("id").primaryKey().notNull(),thread_id:text("thread_id").notNull().references(()=>k.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(()=>k.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 Zo=v(()=>{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 Ct=v(()=>{h();Lr();an();wo();qn();Ro();Io();Ao();vo();xo();Po();Do();Mo();$o();Uo();qo();Bo();Go();jr();Xo();Zo();});var Pt,zr,ei,Kr=v(()=>{h();Pt={"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:.2,output:10},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-6-astra":{input:10,cachedInput:1,output:50},"gpt-6-sol":{input:2,cachedInput:.2,output:10},"gpt-6-luna":{input:.1,cachedInput:.01,output:.5},"gpt-5.6-sol":{input:4,cachedInput:.4,output:20},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.7":{input:2,cachedInput:.5,output:6},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},zr=new Set(["gpt-5.3-codex-spark"]),ei=new Set(["auto","claude-fable-5","claude-fable-5-1","claude-haiku-4-5","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-opus-5-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","claude-sonnet-5-5","gemini-3.1-pro","gemini-3.5-flash","gemini-3.6-flash","gemini-3.7-flash","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-oss-120b","grok-4.5","grok-4.6","grok-4.7"]);});function Vr(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function Du(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),ln;let e=Vr(t),n=Pu[e];if(n)return Vn[n]??Pt[n]??ln;if(Vn[e])return Vn[e];if(Pt[e])return Pt[e];if(zr.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),ln;if(ei.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),ln;let r={...Pt,...Vn};for(let s of Object.keys(r))if(e.includes(s))return r[s];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),ln}function Lu(t,e,n,r=0,s){let o=Du(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 ti(t,e,n,r,s,o){return t&&t>0?t:!e&&!n?0:Lu(e??0,n??0,s,r??0)}var Pu,ln,Vn,Jn=v(()=>{h();Kr();Kr();Pu={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"},ln={input:0,cachedInput:0,output:0},Vn={};});function oi(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function ri(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function ii(t){return Number.isSafeInteger(t)&&t>0}function Fu(t,e){return new Promise(n=>{let r;try{r=spawn(t,e,{windowsHide:!0});}catch(c){n({status:null,stdout:"",stderr:"",error:oi(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 ${ni}ms`)});},ni);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 ai(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):Fu(t,e)}function qu(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function Bu(){return new Promise(t=>{setImmediate(t);})}function gt(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return ri(n)==="ESRCH"?"not_found":ri(n)==="EPERM"?"alive":"unknown"}}function Wu(t,e){let n=gt(-t,e),r=gt(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function di(t,e,n,r){let s=Math.max(0,n),o=Math.max(1,r.pollIntervalMs??$u),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 Bu();;){let l=Wu(t,e);if(l==="not_found")return l;let p=i-Date.now();if(d||p<=0)return l;await Promise.race([c,qu(Math.min(o,p))]);}}finally{u!==void 0&&clearTimeout(u);}}async function si(t,e,n,r,s){let o=await di(t,e,s.hardConfirmMs??Uu,{...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 Yn(t,e,n={}){if(!ii(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 ai(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 Lt(t,e={}){let n=e.platform??process.platform,r=n==="win32"?"taskkill":"process-group",s=f=>({status:"failed",pid:t,method:r,error:f});if(!ii(t))return s("Invalid process ID");let o=e.kill??process.kill,i=gt(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 f;try{f=await ai("taskkill",["/PID",String(t),"/T","/F"],e);}catch(_){f={status:null,stdout:"",stderr:"",error:oi(_)};}let m=gt(t,o);return m==="not_found"?f.status===0&&!f.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:s(m==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let u,d=e.signal??"SIGKILL";try{o(-t,d);}catch(f){u=f;}if(d==="SIGKILL")return si(t,o,u,r,e);if(await di(t,o,e.graceMs??Hu,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(f){l=f;}let p=await si(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 ni,Dt,Hu,$u,Uu,Xn=v(()=>{h();ni=3e3,Dt="SIGINT",Hu=2e3,$u=25,Uu=100;});function fi(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new g("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new g("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function li(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new g("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new g("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,s)=>fi(r,s))}catch(r){throw r instanceof g?new g("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function gi(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new g("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new g("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new g("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function pi(t){return {taskId:t.id,source:gi(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function Ju(t){if(!Number.isInteger(t)||t<0)throw new g("VALIDATION","Task log tail limit must be a non-negative integer")}var Qn,hi=v(()=>{h();ut();vt();xt();at();Ct();Qn=class extends Ee{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?dt(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 g("NOT_FOUND","Database not found");let r=F(n);if(e)try{Fe(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 g("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)=>fi(o,i));if(r.length===0){let o=this.getLogState(e);if(!o)throw new g("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=gi(u);if(d==="blob"){let f=li(e,u.logs);if(i.update(a).set({logs:JSON.stringify([...f,...r]),log_revision:sql`${a.log_revision} + 1`}).where(eq(a.id,e)).run().changes!==1)throw new g("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(Be).values(r.map((f,m)=>({task_id:e,seq:c+m,timestamp:f.timestamp,level:f.level,message:f.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 g("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 g?o:new g("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?pi(r):void 0}catch(r){throw r instanceof g?r:new g("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return Ju(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=pi(o);if(i.source==="blob"){let l=li(e,o.logs);return {...i,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let u=s.select({seq:Be.seq,timestamp:Be.timestamp,level:Be.level,message:Be.message}).from(Be).where(eq(Be.task_id,e)).orderBy(n===void 0?asc(Be.seq):desc(Be.seq)),c=(n===void 0?u.all():u.limit(n).all()).map(({timestamp:l,level:p,message:f})=>({timestamp:l,level:p,message:f}));return n!==void 0&&c.reverse(),{...i,entries:c}},{behavior:"deferred"})}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to read task logs",s)}finally{r.close();}}};});var _i=v(()=>{h();});var Q,ht=v(()=>{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 _t,Jr=v(()=>{h();ht();_t=class extends Q{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Xr(t){if(!Zn(t)||t.type!=="item.started"||!ki(t)||!mi(t))return false;let e=t.item;return !Zn(e)||!ki(e)||!mi(e)||!Yr(e.id)?false:e.type==="web_search"?e.query===""&&Zn(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=>Zn(n)&&Yr(n.path)&&Yr(n.kind)):false}function Zn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ti(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Yr(t){return typeof t=="string"&&t.trim().length>0}function mi(t){return !Ti(t,"status")||t.status==="in_progress"}function ki(t){for(let e of ["error","errors","isError","is_error"])if(Ti(t,e))return false;return true}var Qr=v(()=>{h();});function Yu(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?sc[e]:void 0;return o?o(r,s):Object.values(yi).some(i=>i(r,s))}function ze(t,e){let n=t.split(`
|
|
33
|
-
`).filter(r=>r.trim());return n.length===0?false:n.every(r=>Yu(r,e))}function ke(t){return typeof t=="object"&&t!==null}function wi(t,e){if(e==="assistant"||e==="user"){let n=t.message;return ke(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||ke(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?ke(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function Xu(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:wi(t,e)}function Qu(t,e){if(e==="error")return typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||ke(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 ke(n)&&typeof n.type=="string"}return false}function Zu(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||ke(t.part):e==="text"||e==="tool_use"?ke(t.part):e==="result"?typeof t.result=="string":false}function ec(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||ke(t.part)||e==="result"&&typeof t.result=="string")}function tc(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?ke(t.data):e==="result"?typeof t.result=="string":false}function nc(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 rc(t,e){return e==="available_commands"?ke(t.tools)||ke(t.commands):e==="usage"?ke(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||ke(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var yi,sc,Mt=
|
|
32
|
+
)`)}));});var jo,Go=x(()=>{h();jo=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(()=>jo.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(()=>jo.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 Br,Wr,O,jr=x(()=>{h();Br=["THREAD_STATE","THREAD_PRIORITY"],Wr=["gray","blue","violet","green","amber","orange","red","pink"],O=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 zo,Ko,Vo,Jo,Yo,W,U,H,Xo=x(()=>{h();qn();zo=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],Ko=["user","agent","system"],Vo=["auto","manual"],Jo=["decision","judgment","issue","result","pivot"],Yo=["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)})),U=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 Zo=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 Ct=x(()=>{h();Lr();an();wo();qn();Ro();Io();Ao();vo();xo();Po();Do();Mo();$o();Uo();qo();Bo();Go();jr();Xo();Zo();});var Pt,zr,ei,Kr=x(()=>{h();Pt={"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:.2,output:10},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-6-astra":{input:10,cachedInput:1,output:50},"gpt-6-sol":{input:2,cachedInput:.2,output:10},"gpt-6-luna":{input:.1,cachedInput:.01,output:.5},"gpt-5.6-sol":{input:4,cachedInput:.4,output:20},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.7":{input:2,cachedInput:.5,output:6},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},zr=new Set(["gpt-5.3-codex-spark"]),ei=new Set(["auto","claude-fable-5","claude-fable-5-1","claude-haiku-4-5","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-opus-5-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","claude-sonnet-5-5","gemini-3.1-pro","gemini-3.5-flash","gemini-3.6-flash","gemini-3.7-flash","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-oss-120b","grok-4.5","grok-4.6","grok-4.7"]);});function Vr(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function Du(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),ln;let e=Vr(t),n=Pu[e];if(n)return Vn[n]??Pt[n]??ln;if(Vn[e])return Vn[e];if(Pt[e])return Pt[e];if(zr.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),ln;if(ei.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),ln;let r={...Pt,...Vn};for(let s of Object.keys(r))if(e.includes(s))return r[s];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),ln}function Lu(t,e,n,r=0,s){let o=Du(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 ti(t,e,n,r,s,o){return t&&t>0?t:!e&&!n?0:Lu(e??0,n??0,s,r??0)}var Pu,ln,Vn,Jn=x(()=>{h();Kr();Kr();Pu={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"},ln={input:0,cachedInput:0,output:0},Vn={};});function oi(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function ri(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function ii(t){return Number.isSafeInteger(t)&&t>0}function Fu(t,e){return new Promise(n=>{let r;try{r=spawn(t,e,{windowsHide:!0});}catch(c){n({status:null,stdout:"",stderr:"",error:oi(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 ${ni}ms`)});},ni);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 ai(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):Fu(t,e)}function qu(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function Bu(){return new Promise(t=>{setImmediate(t);})}function gt(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return ri(n)==="ESRCH"?"not_found":ri(n)==="EPERM"?"alive":"unknown"}}function Wu(t,e){let n=gt(-t,e),r=gt(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function di(t,e,n,r){let s=Math.max(0,n),o=Math.max(1,r.pollIntervalMs??$u),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 Bu();;){let l=Wu(t,e);if(l==="not_found")return l;let p=i-Date.now();if(d||p<=0)return l;await Promise.race([c,qu(Math.min(o,p))]);}}finally{u!==void 0&&clearTimeout(u);}}async function si(t,e,n,r,s){let o=await di(t,e,s.hardConfirmMs??Uu,{...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 Yn(t,e,n={}){if(!ii(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 ai(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 Lt(t,e={}){let n=e.platform??process.platform,r=n==="win32"?"taskkill":"process-group",s=f=>({status:"failed",pid:t,method:r,error:f});if(!ii(t))return s("Invalid process ID");let o=e.kill??process.kill,i=gt(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 f;try{f=await ai("taskkill",["/PID",String(t),"/T","/F"],e);}catch(_){f={status:null,stdout:"",stderr:"",error:oi(_)};}let m=gt(t,o);return m==="not_found"?f.status===0&&!f.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:s(m==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let u,d=e.signal??"SIGKILL";try{o(-t,d);}catch(f){u=f;}if(d==="SIGKILL")return si(t,o,u,r,e);if(await di(t,o,e.graceMs??Hu,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(f){l=f;}let p=await si(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 ni,Dt,Hu,$u,Uu,Xn=x(()=>{h();ni=3e3,Dt="SIGINT",Hu=2e3,$u=25,Uu=100;});function fi(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new g("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new g("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function li(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new g("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new g("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,s)=>fi(r,s))}catch(r){throw r instanceof g?new g("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function gi(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new g("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new g("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new g("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function pi(t){return {taskId:t.id,source:gi(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function Ju(t){if(!Number.isInteger(t)||t<0)throw new g("VALIDATION","Task log tail limit must be a non-negative integer")}var Qn,hi=x(()=>{h();ut();vt();xt();at();Ct();Qn=class extends Ee{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?dt(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 g("NOT_FOUND","Database not found");let r=F(n);if(e)try{Fe(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 g("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)=>fi(o,i));if(r.length===0){let o=this.getLogState(e);if(!o)throw new g("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=gi(u);if(d==="blob"){let f=li(e,u.logs);if(i.update(a).set({logs:JSON.stringify([...f,...r]),log_revision:sql`${a.log_revision} + 1`}).where(eq(a.id,e)).run().changes!==1)throw new g("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(Be).values(r.map((f,m)=>({task_id:e,seq:c+m,timestamp:f.timestamp,level:f.level,message:f.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 g("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 g?o:new g("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?pi(r):void 0}catch(r){throw r instanceof g?r:new g("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return Ju(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=pi(o);if(i.source==="blob"){let l=li(e,o.logs);return {...i,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let u=s.select({seq:Be.seq,timestamp:Be.timestamp,level:Be.level,message:Be.message}).from(Be).where(eq(Be.task_id,e)).orderBy(n===void 0?asc(Be.seq):desc(Be.seq)),c=(n===void 0?u.all():u.limit(n).all()).map(({timestamp:l,level:p,message:f})=>({timestamp:l,level:p,message:f}));return n!==void 0&&c.reverse(),{...i,entries:c}},{behavior:"deferred"})}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to read task logs",s)}finally{r.close();}}};});var _i=x(()=>{h();});var Q,ht=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 _t,Jr=x(()=>{h();ht();_t=class extends Q{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Xr(t){if(!Zn(t)||t.type!=="item.started"||!ki(t)||!mi(t))return false;let e=t.item;return !Zn(e)||!ki(e)||!mi(e)||!Yr(e.id)?false:e.type==="web_search"?e.query===""&&Zn(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=>Zn(n)&&Yr(n.path)&&Yr(n.kind)):false}function Zn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ti(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Yr(t){return typeof t=="string"&&t.trim().length>0}function mi(t){return !Ti(t,"status")||t.status==="in_progress"}function ki(t){for(let e of ["error","errors","isError","is_error"])if(Ti(t,e))return false;return true}var Qr=x(()=>{h();});function Yu(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?sc[e]:void 0;return o?o(r,s):Object.values(yi).some(i=>i(r,s))}function ze(t,e){let n=t.split(`
|
|
33
|
+
`).filter(r=>r.trim());return n.length===0?false:n.every(r=>Yu(r,e))}function ke(t){return typeof t=="object"&&t!==null}function wi(t,e){if(e==="assistant"||e==="user"){let n=t.message;return ke(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||ke(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?ke(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function Xu(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:wi(t,e)}function Qu(t,e){if(e==="error")return typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||ke(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 ke(n)&&typeof n.type=="string"}return false}function Zu(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||ke(t.part):e==="text"||e==="tool_use"?ke(t.part):e==="result"?typeof t.result=="string":false}function ec(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||ke(t.part)||e==="result"&&typeof t.result=="string")}function tc(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?ke(t.data):e==="result"?typeof t.result=="string":false}function nc(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 rc(t,e){return e==="available_commands"?ke(t.tools)||ke(t.commands):e==="usage"?ke(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||ke(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var yi,sc,Mt=x(()=>{h();Qr();yi={claude:wi,codex:Qu,opencode:Zu,copilot:tc,gemini:nc},sc={...yi,claude:Xu,opencode:ec,grok:rc,antigravity:()=>false};});function Ke(t){return /crewx\s+(q|query|x|execute)\s/.test(t)}function Ve(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 Ht=x(()=>{h();});function ac(t){let e=dc(t),n=e.map((o,i)=>({line:o,index:i})).filter(({line:o})=>cc(o.value)),r=uc(e);return {result:n.length===1&&n[0].index===r?lc(n[0].line.value):null,resultPreview:gc(e,n),hasReservedLine:n.length>0}}function Ne(t,e){let n=ac(t);return {resultPreview:n.resultPreview,isError:e||n.result?.isError===true,...n.hasReservedLine?{delegationResult:n.result}:{}}}function dc(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 uc(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function cc(t){return t.trimStart().startsWith(oc)}function lc(t){let e=t.trim();if(!e.startsWith(Ei)||!e.endsWith("]]"))return null;let n=e.slice(Ei.length,-2);if(!n)return null;try{return pc(JSON.parse(n))}catch{return null}}function pc(t){return fc(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function fc(t){if(!hc(t)||Object.keys(t).some(r=>!ic.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?Ri(t.taskId)&&Ri(t.agentId):t.isError===true}function gc(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 Ri(t){return typeof t=="string"&&t.trim().length>0}function hc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Ei,oc,ic,$t=v(()=>{h();Ei="[[crewx:delegation-result ",oc="[[crewx:delegation-result",ic=new Set(["schema","taskId","agentId","isError"]);});function Ce(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 Ut=v(()=>{h();});var Si,er,Zr,tr=v(()=>{h();Si=["none","minimal","low","medium","high","xhigh","max","ultra"],er={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"]},Zr={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-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-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-6-sol",name:"GPT-6 Sol",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-6-luna",name:"GPT-6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-6-astra":{effort:["low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"max"},"gpt-6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"medium"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.7",name:"Grok 4.7",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship"},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.7":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Object.fromEntries(Object.entries(Zr).map(([t,e])=>[t,e.models]));});function es(t){return mc[t]??t}function Tc(t){return kc.get(t)??t}function ts(t){if(!t)return {};let e=yc.get(t);return e?{...e}:{model:t}}function ns(t,e){return t==="antigravity"||t==="cli/antigravity"?ts(e):e===void 0?{}:{model:Tc(e)}}var _c,mc,kc,wc,yc,fn=v(()=>{h();_c=[{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]"}],mc={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};kc=new Map(_c.map(({baseModelId:t,catalogModelId:e})=>[t,e]));wc=[{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"}],yc=new Map(wc.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function Rc(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function nt(t){return nr(t).models}function nr(t){return Ec[t]??Zr[t]??Rc()}function gn(t,e){let n=nr(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=ns(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function Ii(t){return nr(t).modelOverrides}function Ai(){return nt("claude")}function Oi(){return nt("codex")}function vi(){return nt("copilot")}function bi(){return nt("antigravity")}var Ec,mt=v(()=>{h();tr();Jn();fn();Ec={};});function xi(t){return Sc[t]??t}var Sc,Ni=v(()=>{h();mt();fn();Sc={auto:"default"};});function rr(t,e){return (er[t]??[]).includes(e)}function rt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return Ic.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function Ci(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["--sandbox","workspace-write"];default:return []}}function Pi(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 Di(t){return !t||!rr("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function Li(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=xi(t);return e.has(n)?["--permission-mode",n]:[]}function Mi(t){return t?rr("claude",t)?["--effort",t]:[]:[]}function Hi(t){return t==="default"?[]:t&&Ac.has(t)?["--permission-mode",t]:[]}function $i(t){return t===true?["--always-approve"]:[]}function Ui(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 Fi(t){return t?rr("grok",t)?["--effort",t]:[]:[]}function qi(t){if(!t)return [];switch(es(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function Bi(t){return t?rr("antigravity",t)?["--effort",t]:[]:[]}var Ic,Ac,hn=v(()=>{h();Ni();fn();tr();Ic=new Set(Si);Ac=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function Oc(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 vc(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 bc(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 Wi(t){let e=new Map,n;for(let o of t.split(`
|
|
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 uc(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function cc(t){return t.trimStart().startsWith(oc)}function lc(t){let e=t.trim();if(!e.startsWith(Ei)||!e.endsWith("]]"))return null;let n=e.slice(Ei.length,-2);if(!n)return null;try{return pc(JSON.parse(n))}catch{return null}}function pc(t){return fc(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function fc(t){if(!hc(t)||Object.keys(t).some(r=>!ic.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?Ri(t.taskId)&&Ri(t.agentId):t.isError===true}function gc(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 Ri(t){return typeof t=="string"&&t.trim().length>0}function hc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Ei,oc,ic,$t=x(()=>{h();Ei="[[crewx:delegation-result ",oc="[[crewx:delegation-result",ic=new Set(["schema","taskId","agentId","isError"]);});function Ce(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 Ut=x(()=>{h();});var Si,er,Zr,tr=x(()=>{h();Si=["none","minimal","low","medium","high","xhigh","max","ultra"],er={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"]},Zr={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-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-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-6-sol",name:"GPT-6 Sol",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-6-luna",name:"GPT-6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-6-astra":{effort:["low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"max"},"gpt-6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"medium"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.7",name:"Grok 4.7",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship"},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.7":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Object.fromEntries(Object.entries(Zr).map(([t,e])=>[t,e.models]));});function es(t){return mc[t]??t}function Tc(t){return kc.get(t)??t}function ts(t){if(!t)return {};let e=yc.get(t);return e?{...e}:{model:t}}function ns(t,e){return t==="antigravity"||t==="cli/antigravity"?ts(e):e===void 0?{}:{model:Tc(e)}}var _c,mc,kc,wc,yc,fn=x(()=>{h();_c=[{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]"}],mc={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};kc=new Map(_c.map(({baseModelId:t,catalogModelId:e})=>[t,e]));wc=[{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"}],yc=new Map(wc.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function Rc(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function nt(t){return nr(t).models}function nr(t){return Ec[t]??Zr[t]??Rc()}function gn(t,e){let n=nr(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=ns(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function Ii(t){return nr(t).modelOverrides}function Ai(){return nt("claude")}function Oi(){return nt("codex")}function vi(){return nt("copilot")}function bi(){return nt("antigravity")}var Ec,mt=x(()=>{h();tr();Jn();fn();Ec={};});function xi(t){return Sc[t]??t}var Sc,Ni=x(()=>{h();mt();fn();Sc={auto:"default"};});function rr(t,e){return (er[t]??[]).includes(e)}function rt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return Ic.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function Ci(t){switch(t){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["--sandbox","workspace-write"];default:return []}}function Pi(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 Di(t){return !t||!rr("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function Li(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=xi(t);return e.has(n)?["--permission-mode",n]:[]}function Mi(t){return t?rr("claude",t)?["--effort",t]:[]:[]}function Hi(t){return t==="default"?[]:t&&Ac.has(t)?["--permission-mode",t]:[]}function $i(t){return t===true?["--always-approve"]:[]}function Ui(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 Fi(t){return t?rr("grok",t)?["--effort",t]:[]:[]}function qi(t){if(!t)return [];switch(es(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function Bi(t){return t?rr("antigravity",t)?["--effort",t]:[]:[]}var Ic,Ac,hn=x(()=>{h();Ni();fn();tr();Ic=new Set(Si);Ac=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function Oc(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 vc(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 bc(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 Wi(t){let e=new Map,n;for(let o of t.split(`
|
|
37
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 f=u?.model;typeof f=="string"&&f&&(n=f);}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 Ft(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=bc(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=Oc(s)??vc(s);i&&(e=i);}catch{}return n||(e??void 0)}var _n=
|
|
38
|
+
`))if(r.trim())try{let s=JSON.parse(r),o=bc(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=Oc(s)??vc(s);i&&(e=i);}catch{}return n||(e??void 0)}var _n=x(()=>{h();});function Pe(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 kt=x(()=>{h();});function ji(t){let e=t.split(`
|
|
39
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 Cc(t){let e=t.split(`
|
|
40
40
|
`).filter(n=>n.trim());for(let n of e.reverse())try{let r=JSON.parse(n);if(typeof r=="object"&&r!==null&&r.type==="result")return r}catch{}}function Pc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Gi(t){let e=Pc(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=Lc(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(Mc(n))return `Claude rate limit: ${n}`}}function Dc(t){let e=Gi(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 Lc(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
|
|
41
41
|
|
|
42
42
|
`):""}function Mc(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function Hc(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=Ce(o);return r==="Bash"&&Ke(i)?Ve(t,i,s):{timestamp:t,type:"tool_use",toolUseId:s,toolName:r,toolInput:i}}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(`
|
|
43
|
-
`):i=JSON.stringify(o),{timestamp:t,type:"tool_result",toolUseId:s,...Ne(i,r)}}return null}var xc,Nc,sr,rs=
|
|
43
|
+
`):i=JSON.stringify(o),{timestamp:t,type:"tool_result",toolUseId:s,...Ne(i,r)}}return null}var xc,Nc,sr,rs=x(()=>{h();Jr();ht();Mt();Ht();$t();Ut();hn();mt();_n();kt();xc=new Set(["tool_progress"]),Nc="cli/claude";sr={command:"claude",meta:{displayName:"Claude",models:Ai(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:s}=rt(e.model),o=e.effort??s,i=Li(e.mode),u=Mi(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=Cc(t);if(e?.is_error===true){let s=sr.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})`,Nc,{code:"EMPTY_OUTPUT",kind:"permanent"})}let n=ji(t);if(n)return n;let r=t.trim();return ze(r,"claude")?"":r},extractPartialText(t){return ji(t)},extractFailure(t){try{let e=JSON.parse(t),n=Gi(e);if(n)return new _t(n)}catch{}return null},parseResultMeta(t){let e=t.split(`
|
|
44
44
|
`);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=Wi(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=Pe(n,e??new Date().toISOString()),o=Dc(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 f=Hc(s,p);f&&l.push(f);}return l},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?xc.has(r):!1}catch{return false}}};});function zi(t){let e=t.split(`
|
|
45
|
-
`).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 $c,ss,os=
|
|
45
|
+
`).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 $c,ss,os=x(()=>{h();Mt();_n();Ht();Ut();$t();mt();tr();kt();$c=new Set(["interactive","plan","autopilot"]);ss={command:"copilot",meta:{displayName:"Copilot",models:vi()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&$c.has(e.mode)&&r.push("--mode",e.mode),e.effort&&(er.copilot??[]).includes(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=zi(t);if(e)return e;let n=t.trim();return ze(n,"copilot")?"":n},extractPartialText(t){return zi(t)},parseResultMeta(t){let e=Ft(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=Pe(n,e??new Date().toISOString()),i=s.toolCallId;if(r==="tool.execution_start"){let u=String(s.toolName||""),d=s.arguments,c=Ce(d);return (u==="bash"||u==="Bash")&&Ke(c)?[Ve(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},...Ne(String(u.message||""),true)}];let d=s.result,c=String(d?.content||"");return [{timestamp:o,type:"tool_result",...i&&{toolUseId:i},...Ne(c,false)}]}if(r==="assistant.message"){let u=String(s.content||"");return u?[{timestamp:o,type:"text",content:u}]:[]}return []}};});function qc(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 Bc(t){return t[0]==="exec"?t.slice(1):t}function Ki(t){let e=t.split(`
|
|
46
46
|
`).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 st(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ji(t){return t.type==="turn.failed"?true:t.type!=="error"?false:typeof t.message=="string"||typeof t.errorMessage=="string"||typeof t.error=="string"||st(t.error)}function Yi(t){let e=st(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 Wc(t){for(let e of t.split(/\r?\n/)){if(!e.trim())continue;let n;try{n=JSON.parse(e);}catch{continue}if(st(n)&&Ji(n))return Yi(n)}}function Vi(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 jc(t,e,n){let r=e.type;if(r==="command_execution"){let s=String(e.command||"");return Ke(s)?[Ve(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:Ce(e.arguments),...n?{toolUseId:n}:{}}]:[]}function Gc(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=zc(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",...Ne(s,o),...n?{toolUseId:n}:{}}}if(r==="mcp_tool_call"){let s=st(e.result)?e.result:void 0,i=(Array.isArray(s?.content)?s.content:[]).filter(d=>st(d)&&d.type==="text"&&typeof d.text=="string").map(d=>d.text).join(`
|
|
47
|
-
`),u=typeof e.error=="string"?e.error:st(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=Ce(o);return s==="Bash"&&Ke(i)?Ve(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",...Ne(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&&!(st(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 zc(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=Ce(s);return r==="Bash"&&Ke(o)?Ve(t,o):{timestamp:t,type:"tool_use",toolName:r,toolInput:o}}return null}var Uc,Fc,is,as=v(()=>{h();ht();Mt();_n();Ht();Ut();Qr();$t();hn();mt();kt();Uc=new Set(["turn.started","turn.completed","item.updated"]),Fc="cli/codex";is={command:"codex",meta:{displayName:"Codex",models:Oi(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:s}=rt(e.model),o=e.effort??s,i=e.resumeSessionId?Pi(e.mode):Ci(e.mode),u=Di(o),d=r?["-m",r]:[],c=Bc(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=Wc(t);if(e)throw new Q(e,Fc);let n=Ki(t);if(n)return n;let r=t.trim();return ze(r,"codex")?"":r},extractPartialText(t){return Ki(t)},parseResultMeta(t){let e=Ft(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=qc(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(!st(d))continue;let c=d.type;if(!c)continue;let l=Pe(d,r);if(Ji(d)){let f=Yi(d);s.push({timestamp:l,type:"error",content:f,errorMessage:f});continue}if(!c.startsWith("item.")&&!c.startsWith("turn.")&&!c.startsWith("thread.")||Xr(d))continue;c==="thread.started"&&n&&n.state.delete("codex.pending");let p=d.item;if(p){if(c==="item.started"){s.push(...jc(l,p,Vi(p,c,n,i)));continue}if(c==="item.completed"){let f=Gc(l,p,Vi(p,c,n,i));f&&s.push(f);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?Uc.has(r):!1}catch{return false}}};});function Jc(t){return t?Vc[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function or(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function ta(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 Bt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Yc(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);Bt(i)?e.push(i):n=!0;continue}catch{}let o=ta(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);Bt(u)?e.push(u):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function Tt(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,ea).trim()}function na(t){let e=Bt(t.error)?t.error:void 0,n=e&&Bt(e.data)?e.data:void 0,r=Tt(e?.name),s=Tt(n?.message)??Tt(e?.message)??Tt(t.message)??Tt(t.errorMessage)??Tt(t.error),o=Tt(t.ref),i=r&&s&&r!==s?`${r}: ${s}`:r??s??Zi;return (o?`${i} (ref: ${o})`:i).slice(0,ea)}function Xi(t){let e=Yc(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=Bt(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(na(d));continue}if(c==="step_finish"){u=true;let l=Bt(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 ra(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function ir(){return new Q("OpenCode returned no assistant output.",qt,{code:"EMPTY_OUTPUT",kind:"transient"})}function Xc(){return new Q("OpenCode emitted malformed JSON output.",qt,{code:"PROVIDER_CRASHED",kind:"transient"})}function Qi(t,e){switch(ra(t)){case "length":return new Q("OpenCode stopped because the context window was exceeded.",qt,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new Q("OpenCode stopped because the content filter blocked the response.",qt,{code:"UNKNOWN",kind:"permanent"});case "error":return new Q(e?`OpenCode error: ${e}`:`${Zi} while generating a response.`,qt,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var Kc,qt,Zi,ea,Vc,ds,us=v(()=>{h();ht();_n();Ut();kt();Kc=new Set(["step_start","step_finish"]),qt="cli/opencode",Zi="OpenCode provider error",ea=240,Vc={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};ds={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,s=r!==void 0?[...r]:["run"];or(s,"--format")||s.push("--format","json"),e.resumeSessionId&&!s.includes("-s")&&!s.includes("--session")&&s.push("-s",e.resumeSessionId);let{agent:o,autoApprove:i}=Jc(e.mode);or(s,"--agent")||o!==void 0&&s.push("--agent",o),i&&!or(s,"--auto")&&s.push("--auto"),e.effort!==void 0&&!or(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=Xi(t),n=e.errorMessages[0];if(n){let i=Qi("error",n);if(i)throw i}let r=Qi(e.terminalReason??"",void 0);if(r)throw r;let 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 Xc();if(!e.hasTerminal)throw ir();let o=ra(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=Xi(n).errorMessages[0];return s?new Q(`OpenCode error: ${s}`,qt,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=Ft(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=ta(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=Pe(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||""),f=c.state,m=String(f?.status||""),_=f?.input,w=Ce(_);if(r.push({timestamp:u,type:"tool_use",toolName:l,toolUseId:p,toolInput:w}),m==="completed"&&f?.output!==void 0){let T=f.output,P=typeof T=="string"?T:JSON.stringify(T);r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:P,isError:false});}else m==="error"&&r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:String(f?.error||"tool error"),isError:true});continue}if(d==="error"){let c=na(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?Kc.has(r):!1}catch{return false}}};});function mn(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Qc(t,e){if(!(t?nt(cs).some(o=>o.id===t):false)||!t)return e;let r=gn(cs,t),s=Ii(cs)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:s&&r.includes(s)?s:void 0:s}var cs,ls,ps=v(()=>{h();ht();fn();mt();hn();cs="antigravity";ls={command:"agy",meta:{displayName:"Antigravity",models:bi(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:s}=rt(e.model),o=ts(r),i=o.model,u=e.effort??s??o.effort,d=Qc(i,u),c=e.additionalArgs??[],l=i&&!mn(c,"--model")?["--model",i]:[],p=mn(c,"--effort")?[]:Bi(d),f=mn(c,"--mode")||mn(c,"--dangerously-skip-permissions")?[]:qi(e.mode),m=mn(c,"--print")?[]:["--print",t];return {args:[...l,...p,...f,...c,...m]}},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 sa=v(()=>{h();Ht();Ut();$t();kt();});function Wt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function jt(t){return Wt(t)?t:void 0}function ge(t){return typeof t=="string"?t:void 0}function yt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function rl(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 kn(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return Wt(n)?[n]:[]}catch{return rl(e).flatMap(n=>{try{let r=JSON.parse(n);return Wt(r)?[r]:[]}catch{return []}})}}function ua(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function wt(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(wt).filter(n=>n!==void 0);return e.length>0?e.join(`
|
|
47
|
+
`),u=typeof e.error=="string"?e.error:st(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=Ce(o);return s==="Bash"&&Ke(i)?Ve(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",...Ne(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&&!(st(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 zc(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=Ce(s);return r==="Bash"&&Ke(o)?Ve(t,o):{timestamp:t,type:"tool_use",toolName:r,toolInput:o}}return null}var Uc,Fc,is,as=x(()=>{h();ht();Mt();_n();Ht();Ut();Qr();$t();hn();mt();kt();Uc=new Set(["turn.started","turn.completed","item.updated"]),Fc="cli/codex";is={command:"codex",meta:{displayName:"Codex",models:Oi(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:s}=rt(e.model),o=e.effort??s,i=e.resumeSessionId?Pi(e.mode):Ci(e.mode),u=Di(o),d=r?["-m",r]:[],c=Bc(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=Wc(t);if(e)throw new Q(e,Fc);let n=Ki(t);if(n)return n;let r=t.trim();return ze(r,"codex")?"":r},extractPartialText(t){return Ki(t)},parseResultMeta(t){let e=Ft(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=qc(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(!st(d))continue;let c=d.type;if(!c)continue;let l=Pe(d,r);if(Ji(d)){let f=Yi(d);s.push({timestamp:l,type:"error",content:f,errorMessage:f});continue}if(!c.startsWith("item.")&&!c.startsWith("turn.")&&!c.startsWith("thread.")||Xr(d))continue;c==="thread.started"&&n&&n.state.delete("codex.pending");let p=d.item;if(p){if(c==="item.started"){s.push(...jc(l,p,Vi(p,c,n,i)));continue}if(c==="item.completed"){let f=Gc(l,p,Vi(p,c,n,i));f&&s.push(f);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?Uc.has(r):!1}catch{return false}}};});function Jc(t){return t?Vc[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function or(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function ta(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 Bt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Yc(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);Bt(i)?e.push(i):n=!0;continue}catch{}let o=ta(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);Bt(u)?e.push(u):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function Tt(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,ea).trim()}function na(t){let e=Bt(t.error)?t.error:void 0,n=e&&Bt(e.data)?e.data:void 0,r=Tt(e?.name),s=Tt(n?.message)??Tt(e?.message)??Tt(t.message)??Tt(t.errorMessage)??Tt(t.error),o=Tt(t.ref),i=r&&s&&r!==s?`${r}: ${s}`:r??s??Zi;return (o?`${i} (ref: ${o})`:i).slice(0,ea)}function Xi(t){let e=Yc(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=Bt(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(na(d));continue}if(c==="step_finish"){u=true;let l=Bt(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 ra(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function ir(){return new Q("OpenCode returned no assistant output.",qt,{code:"EMPTY_OUTPUT",kind:"transient"})}function Xc(){return new Q("OpenCode emitted malformed JSON output.",qt,{code:"PROVIDER_CRASHED",kind:"transient"})}function Qi(t,e){switch(ra(t)){case "length":return new Q("OpenCode stopped because the context window was exceeded.",qt,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new Q("OpenCode stopped because the content filter blocked the response.",qt,{code:"UNKNOWN",kind:"permanent"});case "error":return new Q(e?`OpenCode error: ${e}`:`${Zi} while generating a response.`,qt,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var Kc,qt,Zi,ea,Vc,ds,us=x(()=>{h();ht();_n();Ut();kt();Kc=new Set(["step_start","step_finish"]),qt="cli/opencode",Zi="OpenCode provider error",ea=240,Vc={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};ds={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,s=r!==void 0?[...r]:["run"];or(s,"--format")||s.push("--format","json"),e.resumeSessionId&&!s.includes("-s")&&!s.includes("--session")&&s.push("-s",e.resumeSessionId);let{agent:o,autoApprove:i}=Jc(e.mode);or(s,"--agent")||o!==void 0&&s.push("--agent",o),i&&!or(s,"--auto")&&s.push("--auto"),e.effort!==void 0&&!or(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=Xi(t),n=e.errorMessages[0];if(n){let i=Qi("error",n);if(i)throw i}let r=Qi(e.terminalReason??"",void 0);if(r)throw r;let 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 Xc();if(!e.hasTerminal)throw ir();let o=ra(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=Xi(n).errorMessages[0];return s?new Q(`OpenCode error: ${s}`,qt,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=Ft(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=ta(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=Pe(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||""),f=c.state,m=String(f?.status||""),_=f?.input,w=Ce(_);if(r.push({timestamp:u,type:"tool_use",toolName:l,toolUseId:p,toolInput:w}),m==="completed"&&f?.output!==void 0){let k=f.output,N=typeof k=="string"?k:JSON.stringify(k);r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:N,isError:false});}else m==="error"&&r.push({timestamp:u,type:"tool_result",toolUseId:p,resultPreview:String(f?.error||"tool error"),isError:true});continue}if(d==="error"){let c=na(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?Kc.has(r):!1}catch{return false}}};});function mn(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Qc(t,e){if(!(t?nt(cs).some(o=>o.id===t):false)||!t)return e;let r=gn(cs,t),s=Ii(cs)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:s&&r.includes(s)?s:void 0:s}var cs,ls,ps=x(()=>{h();ht();fn();mt();hn();cs="antigravity";ls={command:"agy",meta:{displayName:"Antigravity",models:bi(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:s}=rt(e.model),o=ts(r),i=o.model,u=e.effort??s??o.effort,d=Qc(i,u),c=e.additionalArgs??[],l=i&&!mn(c,"--model")?["--model",i]:[],p=mn(c,"--effort")?[]:Bi(d),f=mn(c,"--mode")||mn(c,"--dangerously-skip-permissions")?[]:qi(e.mode),m=mn(c,"--print")?[]:["--print",t];return {args:[...l,...p,...f,...c,...m]}},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 sa=x(()=>{h();Ht();Ut();$t();kt();});function Wt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function jt(t){return Wt(t)?t:void 0}function ge(t){return typeof t=="string"?t:void 0}function yt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function rl(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 kn(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return Wt(n)?[n]:[]}catch{return rl(e).flatMap(n=>{try{let r=JSON.parse(n);return Wt(r)?[r]:[]}catch{return []}})}}function ua(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function wt(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(wt).filter(n=>n!==void 0);return e.length>0?e.join(`
|
|
48
48
|
`):void 0}if(Wt(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=wt(t[e]);if(n!==void 0)return n}}}function sl(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=jt(o);if(!i)return n(wt(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=jt(i.Result);u=n(i.output)??n(l?.output)??n(wt(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(`
|
|
49
49
|
`)||u.endsWith("\r")?"":`
|
|
50
50
|
`;u=`${u}${l}${d}`;}else u=n(d);if(u)return u;let c=n(i.summary)??n(wt(t.content))??n(i.output_for_prompt);return c!==void 0?c:s(o)}if(t.content!==null&&t.content!==void 0)return wt(t.content)??s(t.content);if(t.result!==null&&t.result!==void 0)return wt(t.result)??s(t.result)}function ca(t){let e=jt(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?la(n):"Grok CLI reported an error."}function la(t){return (t.replace(nl,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function da(t){return tl.test(t)}function ol(t){let e=jt(t.modelUsage);return e?Object.keys(e)[0]??null:null}function il(t){let e=jt(t.usage);if(!e)return null;let n=yt(e.cache_read_input_tokens);return {inputTokens:yt(e.input_tokens)+n,cachedInputTokens:n,outputTokens:yt(e.output_tokens),costUsd:yt(t.total_cost_usd)}}function al(t){let e=0,n=0,r=0,s=false,o=new Set;for(let i of t.split(`
|
|
51
51
|
`).flatMap(kn)){if(i.type!=="usage")continue;let u=jt(i.usage);if(!u)continue;let d=ge(i.signature);if(d&&d.length>0){let l=`signature:${d}`;if(o.has(l))continue;o.add(l);}let c=yt(u.cache_read_input_tokens);e+=yt(u.input_tokens)+c,n+=c,r+=yt(u.output_tokens),s=true;}return s?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function dl(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let o of e.entries.slice(0,oa)){if(!Wt(o))continue;let i=ge(o.content)?.trim();if(!i)continue;let u=ge(o.status)?.trim(),d=ge(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>oa&&n.push(aa);let r=n.join(`
|
|
52
|
-
`),s=r.length>ia?`${r.slice(0,ia-1)}${aa}`:r;return [{timestamp:t,type:"info",content:s}]}function ul(t,e){let n=ge(e.type);if(n==="thought"){let r=ge(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=ge(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return dl(t,e);if(n==="tool_call"){let r=ge(e.toolCallId),s=ge(e.toolName)??ge(e.title),o=e.rawInput===void 0?void 0:ua(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:s,toolInput:o}]}if(n==="tool_call_update"){let r=ge(e.status);if(r!=="completed"&&r!=="failed"&&r!=="error")return [];let s=sl(e),o=r!=="completed"||e.isError===true;return [{timestamp:t,type:"tool_result",toolUseId:ge(e.toolCallId),toolName:ge(e.toolName)??ge(e.title),...s!==void 0?Ne(s,o):{isError:o}}]}if(n==="error"){let r=ca(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var ar,el,tl,nl,oa,ia,aa,fs,gs=
|
|
52
|
+
`),s=r.length>ia?`${r.slice(0,ia-1)}${aa}`:r;return [{timestamp:t,type:"info",content:s}]}function ul(t,e){let n=ge(e.type);if(n==="thought"){let r=ge(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=ge(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return dl(t,e);if(n==="tool_call"){let r=ge(e.toolCallId),s=ge(e.toolName)??ge(e.title),o=e.rawInput===void 0?void 0:ua(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:s,toolInput:o}]}if(n==="tool_call_update"){let r=ge(e.status);if(r!=="completed"&&r!=="failed"&&r!=="error")return [];let s=sl(e),o=r!=="completed"||e.isError===true;return [{timestamp:t,type:"tool_result",toolUseId:ge(e.toolCallId),toolName:ge(e.toolName)??ge(e.title),...s!==void 0?Ne(s,o):{isError:o}}]}if(n==="error"){let r=ca(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var ar,el,tl,nl,oa,ia,aa,fs,gs=x(()=>{h();ht();Jr();mt();$t();hn();kt();ar="cli/grok",el=new Set(["available_commands","usage","end"]),tl=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,nl=/\u001b\[[0-?]*[ -/]*[@-~]/g,oa=20,ia=4e3,aa="\u2026";fs={command:"grok",createSessionId:()=>randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=rt(e.model),s=e.effort??r,o=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],i=n?["--model",n]:[],u=n?nt("grok").some(b=>b.id===n):false,d=n&&u?gn("grok",n):[],c=!s||d.length===0||d.includes(s)?s:void 0,l=Fi(c),p=e.additionalArgs??[],f=b=>p.some(y=>y===b||y.startsWith(`${b}=`)),m=e.providerOptions,_=m?.alwaysApprove,w=m?.sandbox,k=f("--permission-mode")?[]:Hi(e.mode),N=f("--always-approve")?[]:$i(_),R=f("--sandbox")?[]:Ui(w);return {args:["--no-auto-update",...o,"--single",t,"--output-format","streaming-json","--no-alt-screen",...i,...l,...k,...N,...R,...p]}},extractText(t){let e=[],n=false;for(let r of t.split(`
|
|
53
53
|
`).flatMap(kn))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 kn(t))if(e.type==="error"){let n=ca(e);return da(ua(e))?new _t(n,ar):new Q(n,ar)}return null},interpretExit(t,e){if(t===0)return null;let n=la(e)||`Grok CLI exited with code ${t}.`;return da(e)?new _t(n,ar):new Q(n,ar)},parseResultMeta(t){let n=t.split(`
|
|
54
|
-
`).flatMap(kn).find(r=>r.type==="end");return n?{usage:il(n),model:ol(n)}:{usage:al(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return kn(t).flatMap(r=>ul(Pe(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return Wt(n)&&typeof n.type=="string"?el.has(n.type):!1}catch{return false}}};});var pa,fa=
|
|
55
|
-
`)??"";if(!n.trim())return;let r=ga(t.provider);if(!r)return;let s;try{s=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let o=cl(s?.model,t.model),i=s?.usage;if(!i)return {stdout:n,adapter:r};let u=dr(i.inputTokens),d=dr(i.outputTokens),c=dr(i.cachedInputTokens),l=ti(dr(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 hs=v(()=>{h();ha();Jn();});function pl(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"&&ll.has(n)?n:void 0}catch{return}}function Et(t){switch(t.status){case "stopped":case "runner_lost":case "pending":case "running":case "paused":case "success":return t.status;case "completed":case "done":return "success";case "error":return "failed";case "failed":{let e=pl(t.metadata);return e==="user_stop"?"stopped":e==="runner_lost"?"runner_lost":e==="launch_failed"?"failed":typeof t.error=="string"&&_a.stopped.test(t.error)?"stopped":typeof t.error=="string"&&_a.runnerLost.test(t.error)?"runner_lost":"failed"}default:return t.status}}var ma,_a,ll,cr=v(()=>{h();ma=["success","failed","stopped","runner_lost"],_a={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},ll=new Set(["user_stop","runner_lost","launch_failed"]);});function _s(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 ms(){return _s("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function zt(){return _s("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function pr(){return _s("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function Gt(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function lr(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 fl(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 ka(t,e){return !!t.stop_requested_at&&Gt(t.stop_requested_epoch)===Gt(e)}function Ta(t,e){let n=Gt(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let s=fl(t.getTask(e.taskId));return !s||s.status!=="running"||Gt(s.run_epoch)!==n?{accepted:false,row:s}:{accepted:true,row:s}}function Ra(t,e){let n=Tn.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),Tn.delete(t),true)}function wn(t,e){let n=Tn.get(t);return !n||e!==void 0&&n.runEpoch!==Gt(e)?false:Ra(t,n)}function Sa(t,e){let n=Gt(e.runEpoch);wn(e.taskId);let r=true,s=null;try{let c=Ta(t,{...e,runEpoch:n});r=c.accepted,s=c.row;}catch(c){lr(c);}if(!r)return false;let o=ms(),i=Math.min(o,1e3),u=setInterval(()=>{let c=Tn.get(e.taskId);if(!(!c||c.timer!==u))try{c.heartbeatElapsedMs+=i;let l=c.heartbeatElapsedMs>=o,p=Ta(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:l});if(!p.accepted){Ra(e.taskId,c);return}l&&(c.heartbeatElapsedMs%=o,c.lastHeartbeatAt=Date.now()),p.row&&ka(p.row,n)&&!c.stopRequested&&(c.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(lr));}catch(l){lr(l);}},i),d={timer:u,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return Tn.set(e.taskId,d),typeof u=="object"&&u!==null&&"unref"in u&&u.unref(),s&&ka(s,n)&&e.onStopRequested&&(d.stopRequested=true,Promise.resolve(e.onStopRequested(s)).catch(lr)),true}var wa,ya,Ea,Tn,yn=v(()=>{h();wa=1e4,ya=3e4,Ea=18e5;Tn=new Map;});function fr(t,e=Date.now(),n=ys){let r=t?Date.parse(t):Number.NaN,s=typeof e=="number"?e:Date.parse(e),o=Ss(n,ys,0);return Number.isFinite(r)&&Number.isFinite(s)&&s-r>o?"forced":"cooperative"}function Ss(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function ba(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function yl(t){if(!t)return;let e=ba(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function Te(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=yl(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function vs(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 K(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 ws(t,e){return K(t,_l,e)}function El(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=zt():false}function Rl(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Sl(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=ba(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 Il(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return Te(r,n)}async function Al(t,e,n,r){let s=Date.now()+n;for(;;){let o=Il(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 va(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 Te(E);if(o=t.requestTaskStop({id:e,requestedAt:r,...s}),!o.accepted&&o.status!=="running"||!o.accepted&&!o.alreadyRequestedAt)return Te(t.getTask(e))}else if(!(o.status==="running"&&o.alreadyRequestedAt))return Te(i)}let u=o.runEpoch,d=Ss(n.graceMs,ys,0),c=Ss(n.pollMs,gl,1),l=await Al(t,e,d,c);if(l)return l;let p=t.getTask(e);if(!p||p.status!=="running")return Te(p);let f=Sl(p),m=f[0];if(!m){let D=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),E=t.getTask(e);return D||E?.status!=="running"?Te(E):K(E,"Failed to finalize task stop")}let _=Rl(n),w="unknown";if(!El(p,Date.now())){let D=n.processControl?.checkProcessOwnershipAsync??Yn;try{w=await D(m,n.ownershipMarkers??Os,_);}catch{w="unknown";}if(w!=="owned")return vs(p)}let T=n.processControl?.terminateProcessTree??Lt;for(let D of f){let E;try{E=await T(D,{..._,signal:Dt});}catch(N){E={status:"failed",pid:D,method:_.platform==="win32"?"taskkill":"process-group",error:N instanceof Error?N.message:String(N)};}if(E.status==="failed")return K(t.getTask(e),E.error??"Failed to terminate process tree")}let P=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),S=t.getTask(e);return P||S?.status!=="running"?Te(S,m):K(S,"Task changed before stop was finalized")}function Is(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function As(t){return Number.isSafeInteger(t)&&t>=0}function En(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Ol(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function vl(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function bl(t,e){let n=t?.pid&&t.pid>0?t.pid:e;return {status:"stopped",method:"forced",finalStatus:t?.status??"runner_lost",...n?{pid:n}:{}}}function xl(t){switch(t){case "epoch_mismatch":return Es;case "workspace_mismatch":return Rs;default:return}}async function xa(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return ws(n,Is(e.targetPid)?e.targetPid:void 0);if(!As(e.sourceRunEpoch)||!As(e.settleRunEpoch)||En(n.run_epoch)!==e.settleRunEpoch)return K(n,ks,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return K(n,Ts,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 K(n,ml,e.targetPid)}let o=t.getTask(e.taskId);if(!o||o.status!=="running")return ws(o,e.targetPid);if(s.runEpoch!==e.settleRunEpoch||En(o.run_epoch)!==e.settleRunEpoch)return K(o,ks,e.targetPid);if(e.workspaceId!==void 0&&o.workspace_id!==e.workspaceId)return K(o,Ts,e.targetPid);if(!Is(e.targetPid))return K(o,hl);let i=Ol(e),u=e.processControl?.checkProcessOwnershipAsync??Yn,d="unknown";try{d=await u(e.targetPid,e.ownershipMarkers??Os,i);}catch{d="unknown";}if(d!=="owned")return vs(o,e.targetPid);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return ws(c,e.targetPid);if(En(c.run_epoch)!==e.settleRunEpoch)return K(c,ks,e.targetPid);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return K(c,Ts,e.targetPid);let l=e.processControl?.terminateProcessTree??Lt,p;try{p=await l(e.targetPid,{...i,signal:Dt});}catch{return K(t.getTask(e.taskId),Ia,e.targetPid)}if(p.status==="failed")return K(t.getTask(e.taskId),Ia,e.targetPid);let f;try{f=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return K(t.getTask(e.taskId),Aa,e.targetPid)}return f?Te(t.getTask(e.taskId),e.targetPid):K(t.getTask(e.taskId),Aa,e.targetPid)}async function Na(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Te(n);if(!As(e.expectedRunEpoch)||En(n.run_epoch)!==e.expectedRunEpoch)return K(n,Es);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return K(n,Rs);let r=n.pid;if(!Is(r))return K(n,kl);let s=vl(e),o=e.processControl?.checkProcessOwnershipAsync??Yn,i="unknown";try{i=await o(r,e.ownershipMarkers??Os,s);}catch{i="unknown";}if(i!=="owned")return vs(n,r,Tl);let u=e.processControl?.terminateProcessTree??Lt,d;try{d=await u(r,{...s,signal:Dt});}catch{return K(t.getTask(e.taskId),Oa,r)}if(d.status==="failed")return K(t.getTask(e.taskId),Oa,r);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return Te(c,r);if(En(c.run_epoch)!==e.expectedRunEpoch)return K(c,Es,r);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return K(c,Rs,r);let l;try{l=t.finalizeTaskForHostShutdown({id:e.taskId,expectedRunEpoch:e.expectedRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return K(t.getTask(e.taskId),wl,r)}let p=xl(l);return p?K(t.getTask(e.taskId),p,r):l!=="settled"?Te(t.getTask(e.taskId),r):bl(t.getTask(e.taskId),r)}function Ca(t,e,n={}){if(typeof t=="string"){let r=t,s=e??{};return Promise.resolve().then(()=>(xs(),Pa)).then(({TaskRepository:o})=>va(new o,r,s))}return va(t,e,n)}var ys,gl,Os,hl,ks,Ts,_l,Ia,Aa,ml,Es,Rs,kl,Tl,Oa,wl,bs=v(()=>{h();Xn();yn();ys=5e3,gl=250;Os=["crewx","claude","codex","opencode","grok","node"],hl="INSTRUCTION_STOP_TARGET_PID_MISSING",ks="INSTRUCTION_STOP_EPOCH_MISMATCH",Ts="INSTRUCTION_STOP_WORKSPACE_MISMATCH",_l="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",Ia="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",Aa="INSTRUCTION_STOP_SETTLE_CAS_FAILED",ml="INSTRUCTION_STOP_REQUEST_FAILED",Es="HOST_SHUTDOWN_EPOCH_MISMATCH",Rs="HOST_SHUTDOWN_WORKSPACE_MISMATCH",kl="HOST_SHUTDOWN_TARGET_PID_MISSING",Tl="HOST_SHUTDOWN_OWNERSHIP_UNVERIFIED",Oa="HOST_SHUTDOWN_PROCESS_TERMINATION_FAILED",wl="HOST_SHUTDOWN_SETTLE_CAS_FAILED";});var Pa={};pd(Pa,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>Fa,HOST_SHUTDOWN_TERMINAL_ERROR:()=>Ha,PENDING_ADOPT_GRACE_MS:()=>Ua,PID_NULL_REAP_GRACE_MS:()=>qs,TASK_HEARTBEAT_HARD_STALE_MS:()=>Ea,TASK_HEARTBEAT_INTERVAL_MS:()=>wa,TASK_HEARTBEAT_STALE_MS:()=>ya,TaskRepository:()=>On,hasRecordedUsage:()=>Fs,mergeTerminalReason:()=>Us,resolveTaskHeartbeatHardStaleMs:()=>pr,resolveTaskHeartbeatIntervalMs:()=>ms,resolveTaskHeartbeatStaleMs:()=>zt});function Le(t){return {...t,status:Et(t)}}function Cs(t){return {...t,status:Et(t)}}function Ds(t=a.model,e=a.metadata){let n=sql`
|
|
54
|
+
`).flatMap(kn).find(r=>r.type==="end");return n?{usage:il(n),model:ol(n)}:{usage:al(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return kn(t).flatMap(r=>ul(Pe(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return Wt(n)&&typeof n.type=="string"?el.has(n.type):!1}catch{return false}}};});var pa,fa=x(()=>{h();rs();os();as();us();ps();sa();gs();rs();os();as();us();ps();gs();Ht();pa={codex:is,claude:sr,opencode:ds,antigravity:ls,copilot:ss,grok:fs};});function ga(t){if(t.startsWith("cli/"))return pa[t.slice(4)]}var ha=x(()=>{h();_i();fa();});function dr(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function cl(t,e){return typeof t=="string"&&t.length>0?t:typeof e=="string"&&e.length>0?e:null}function ur(t){if(typeof t.provider!="string"||t.provider.length===0)return;let n=t.taskLogRepository.readLogs(t.taskId)?.entries.filter(f=>f.level==="stdout").map(f=>f.message).join(`
|
|
55
|
+
`)??"";if(!n.trim())return;let r=ga(t.provider);if(!r)return;let s;try{s=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let o=cl(s?.model,t.model),i=s?.usage;if(!i)return {stdout:n,adapter:r};let u=dr(i.inputTokens),d=dr(i.outputTokens),c=dr(i.cachedInputTokens),l=ti(dr(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 hs=x(()=>{h();ha();Jn();});function pl(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"&&ll.has(n)?n:void 0}catch{return}}function Et(t){switch(t.status){case "stopped":case "runner_lost":case "pending":case "running":case "paused":case "success":return t.status;case "completed":case "done":return "success";case "error":return "failed";case "failed":{let e=pl(t.metadata);return e==="user_stop"?"stopped":e==="runner_lost"?"runner_lost":e==="launch_failed"?"failed":typeof t.error=="string"&&_a.stopped.test(t.error)?"stopped":typeof t.error=="string"&&_a.runnerLost.test(t.error)?"runner_lost":"failed"}default:return t.status}}var ma,_a,ll,cr=x(()=>{h();ma=["success","failed","stopped","runner_lost"],_a={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},ll=new Set(["user_stop","runner_lost","launch_failed"]);});function _s(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 ms(){return _s("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function zt(){return _s("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function pr(){return _s("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function Gt(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function lr(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 fl(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 ka(t,e){return !!t.stop_requested_at&&Gt(t.stop_requested_epoch)===Gt(e)}function Ta(t,e){let n=Gt(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let s=fl(t.getTask(e.taskId));return !s||s.status!=="running"||Gt(s.run_epoch)!==n?{accepted:false,row:s}:{accepted:true,row:s}}function Ra(t,e){let n=Tn.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),Tn.delete(t),true)}function wn(t,e){let n=Tn.get(t);return !n||e!==void 0&&n.runEpoch!==Gt(e)?false:Ra(t,n)}function Sa(t,e){let n=Gt(e.runEpoch);wn(e.taskId);let r=true,s=null;try{let c=Ta(t,{...e,runEpoch:n});r=c.accepted,s=c.row;}catch(c){lr(c);}if(!r)return false;let o=ms(),i=Math.min(o,1e3),u=setInterval(()=>{let c=Tn.get(e.taskId);if(!(!c||c.timer!==u))try{c.heartbeatElapsedMs+=i;let l=c.heartbeatElapsedMs>=o,p=Ta(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:l});if(!p.accepted){Ra(e.taskId,c);return}l&&(c.heartbeatElapsedMs%=o,c.lastHeartbeatAt=Date.now()),p.row&&ka(p.row,n)&&!c.stopRequested&&(c.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(lr));}catch(l){lr(l);}},i),d={timer:u,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return Tn.set(e.taskId,d),typeof u=="object"&&u!==null&&"unref"in u&&u.unref(),s&&ka(s,n)&&e.onStopRequested&&(d.stopRequested=true,Promise.resolve(e.onStopRequested(s)).catch(lr)),true}var wa,ya,Ea,Tn,yn=x(()=>{h();wa=1e4,ya=3e4,Ea=18e5;Tn=new Map;});function fr(t,e=Date.now(),n=ys){let r=t?Date.parse(t):Number.NaN,s=typeof e=="number"?e:Date.parse(e),o=Ss(n,ys,0);return Number.isFinite(r)&&Number.isFinite(s)&&s-r>o?"forced":"cooperative"}function Ss(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function ba(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function yl(t){if(!t)return;let e=ba(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function Te(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=yl(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function vs(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 K(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 ws(t,e){return K(t,_l,e)}function El(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=zt():false}function Rl(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Sl(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=ba(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 Il(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return Te(r,n)}async function Al(t,e,n,r){let s=Date.now()+n;for(;;){let o=Il(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 va(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 b=t.stopPendingTask(e,void 0,void 0,{...s,at:r}),y=t.getTask(e);if(b||!y||y.status!=="running")return Te(y);if(o=t.requestTaskStop({id:e,requestedAt:r,...s}),!o.accepted&&o.status!=="running"||!o.accepted&&!o.alreadyRequestedAt)return Te(t.getTask(e))}else if(!(o.status==="running"&&o.alreadyRequestedAt))return Te(i)}let u=o.runEpoch,d=Ss(n.graceMs,ys,0),c=Ss(n.pollMs,gl,1),l=await Al(t,e,d,c);if(l)return l;let p=t.getTask(e);if(!p||p.status!=="running")return Te(p);let f=Sl(p),m=f[0];if(!m){let b=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),y=t.getTask(e);return b||y?.status!=="running"?Te(y):K(y,"Failed to finalize task stop")}let _=Rl(n),w="unknown";if(!El(p,Date.now())){let b=n.processControl?.checkProcessOwnershipAsync??Yn;try{w=await b(m,n.ownershipMarkers??Os,_);}catch{w="unknown";}if(w!=="owned")return vs(p)}let k=n.processControl?.terminateProcessTree??Lt;for(let b of f){let y;try{y=await k(b,{..._,signal:Dt});}catch(C){y={status:"failed",pid:b,method:_.platform==="win32"?"taskkill":"process-group",error:C instanceof Error?C.message:String(C)};}if(y.status==="failed")return K(t.getTask(e),y.error??"Failed to terminate process tree")}let N=t.finalizeTaskStop({id:e,runEpoch:u,method:"forced"}),R=t.getTask(e);return N||R?.status!=="running"?Te(R,m):K(R,"Task changed before stop was finalized")}function Is(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function As(t){return Number.isSafeInteger(t)&&t>=0}function En(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Ol(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function vl(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function bl(t,e){let n=t?.pid&&t.pid>0?t.pid:e;return {status:"stopped",method:"forced",finalStatus:t?.status??"runner_lost",...n?{pid:n}:{}}}function xl(t){switch(t){case "epoch_mismatch":return Es;case "workspace_mismatch":return Rs;default:return}}async function xa(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return ws(n,Is(e.targetPid)?e.targetPid:void 0);if(!As(e.sourceRunEpoch)||!As(e.settleRunEpoch)||En(n.run_epoch)!==e.settleRunEpoch)return K(n,ks,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return K(n,Ts,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 K(n,ml,e.targetPid)}let o=t.getTask(e.taskId);if(!o||o.status!=="running")return ws(o,e.targetPid);if(s.runEpoch!==e.settleRunEpoch||En(o.run_epoch)!==e.settleRunEpoch)return K(o,ks,e.targetPid);if(e.workspaceId!==void 0&&o.workspace_id!==e.workspaceId)return K(o,Ts,e.targetPid);if(!Is(e.targetPid))return K(o,hl);let i=Ol(e),u=e.processControl?.checkProcessOwnershipAsync??Yn,d="unknown";try{d=await u(e.targetPid,e.ownershipMarkers??Os,i);}catch{d="unknown";}if(d!=="owned")return vs(o,e.targetPid);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return ws(c,e.targetPid);if(En(c.run_epoch)!==e.settleRunEpoch)return K(c,ks,e.targetPid);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return K(c,Ts,e.targetPid);let l=e.processControl?.terminateProcessTree??Lt,p;try{p=await l(e.targetPid,{...i,signal:Dt});}catch{return K(t.getTask(e.taskId),Ia,e.targetPid)}if(p.status==="failed")return K(t.getTask(e.taskId),Ia,e.targetPid);let f;try{f=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return K(t.getTask(e.taskId),Aa,e.targetPid)}return f?Te(t.getTask(e.taskId),e.targetPid):K(t.getTask(e.taskId),Aa,e.targetPid)}async function Na(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Te(n);if(!As(e.expectedRunEpoch)||En(n.run_epoch)!==e.expectedRunEpoch)return K(n,Es);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return K(n,Rs);let r=n.pid;if(!Is(r))return K(n,kl);let s=vl(e),o=e.processControl?.checkProcessOwnershipAsync??Yn,i="unknown";try{i=await o(r,e.ownershipMarkers??Os,s);}catch{i="unknown";}if(i!=="owned")return vs(n,r,Tl);let u=e.processControl?.terminateProcessTree??Lt,d;try{d=await u(r,{...s,signal:Dt});}catch{return K(t.getTask(e.taskId),Oa,r)}if(d.status==="failed")return K(t.getTask(e.taskId),Oa,r);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return Te(c,r);if(En(c.run_epoch)!==e.expectedRunEpoch)return K(c,Es,r);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return K(c,Rs,r);let l;try{l=t.finalizeTaskForHostShutdown({id:e.taskId,expectedRunEpoch:e.expectedRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return K(t.getTask(e.taskId),wl,r)}let p=xl(l);return p?K(t.getTask(e.taskId),p,r):l!=="settled"?Te(t.getTask(e.taskId),r):bl(t.getTask(e.taskId),r)}function Ca(t,e,n={}){if(typeof t=="string"){let r=t,s=e??{};return Promise.resolve().then(()=>(xs(),Pa)).then(({TaskRepository:o})=>va(new o,r,s))}return va(t,e,n)}var ys,gl,Os,hl,ks,Ts,_l,Ia,Aa,ml,Es,Rs,kl,Tl,Oa,wl,bs=x(()=>{h();Xn();yn();ys=5e3,gl=250;Os=["crewx","claude","codex","opencode","grok","node"],hl="INSTRUCTION_STOP_TARGET_PID_MISSING",ks="INSTRUCTION_STOP_EPOCH_MISMATCH",Ts="INSTRUCTION_STOP_WORKSPACE_MISMATCH",_l="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",Ia="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",Aa="INSTRUCTION_STOP_SETTLE_CAS_FAILED",ml="INSTRUCTION_STOP_REQUEST_FAILED",Es="HOST_SHUTDOWN_EPOCH_MISMATCH",Rs="HOST_SHUTDOWN_WORKSPACE_MISMATCH",kl="HOST_SHUTDOWN_TARGET_PID_MISSING",Tl="HOST_SHUTDOWN_OWNERSHIP_UNVERIFIED",Oa="HOST_SHUTDOWN_PROCESS_TERMINATION_FAILED",wl="HOST_SHUTDOWN_SETTLE_CAS_FAILED";});var Pa={};pd(Pa,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>Fa,HOST_SHUTDOWN_TERMINAL_ERROR:()=>Ha,PENDING_ADOPT_GRACE_MS:()=>Ua,PID_NULL_REAP_GRACE_MS:()=>qs,TASK_HEARTBEAT_HARD_STALE_MS:()=>Ea,TASK_HEARTBEAT_INTERVAL_MS:()=>wa,TASK_HEARTBEAT_STALE_MS:()=>ya,TaskRepository:()=>On,hasRecordedUsage:()=>Fs,mergeTerminalReason:()=>Us,resolveTaskHeartbeatHardStaleMs:()=>pr,resolveTaskHeartbeatIntervalMs:()=>ms,resolveTaskHeartbeatStaleMs:()=>zt});function Le(t){return {...t,status:Et(t)}}function Cs(t){return {...t,status:Et(t)}}function Ds(t=a.model,e=a.metadata){let n=sql`
|
|
56
56
|
CASE
|
|
57
57
|
WHEN ${t} LIKE 'claude-%' OR ${t} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
58
58
|
WHEN ${t} LIKE 'gpt-%' OR ${t} LIKE 'codex-%' THEN 'codex'
|
|
@@ -91,13 +91,13 @@ ${r.join(`
|
|
|
91
91
|
COALESCE(SUM(
|
|
92
92
|
CASE WHEN ${e} = 'unavailable' THEN 1 ELSE 0 END
|
|
93
93
|
), 0)
|
|
94
|
-
`}function Yt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function te(t){if(!t)return {};try{let e=JSON.parse(t);return Yt(e)?{...e}:{}}catch{return {}}}function mr(t){return t==null||t===""}function Ms(t,e){return mr(t)&&!mr(e)?e:t}function Fl(t,e){let n=te(t);if(!e)return n;for(let[r,s]of Object.entries(e))mr(n[r])&&!mr(s)&&(n[r]=s);return n}function hr(t,e){let n=t.origin&&$a.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 ql(t){let e=te(t).stopRequest;if(Yt(e)&&!(typeof e.origin!="string"||!$a.has(e.origin)||typeof e.at!="string"||typeof e.callerPid!="number"))return {...e}}function La(){return or$1(isNull(a.stop_requested_at),ne(sql`COALESCE(${a.stop_requested_epoch}, 0)`,sql`COALESCE(${a.run_epoch}, 0)`))}function Us(t,e){let n=te(t??null);return n.terminalReason=e,JSON.stringify(n)}function Hs(t,e){let n={...t,terminalReason:"user_stop"},r=e?.trim();return r&&r!==Da&&(n[Hl]=e),{error:Da,metadata:n}}function oe(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function Fs(t){return oe(t.input_tokens)!==0||oe(t.output_tokens)!==0||oe(t.cached_input_tokens)!==0||oe(t.cost_usd)!==0}function V(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Ma(t){return {inputTokens:oe(t.inputTokens??0),outputTokens:oe(t.outputTokens??0),cachedInputTokens:oe(t.cachedInputTokens??0),costUsd:oe(t.costUsd??0)}}function Bl(t){if(Yt(t))return {inputTokens:oe(t.inputTokens),outputTokens:oe(t.outputTokens),cachedInputTokens:oe(t.cachedInputTokens),costUsd:oe(t.costUsd)}}function Wl(t){let e={inputTokens:0,outputTokens:0,cachedInputTokens:0,costUsd:0};for(let n of Object.values(t)){let r=Bl(n);r&&(e.inputTokens+=r.inputTokens,e.outputTokens+=r.outputTokens,e.cachedInputTokens+=r.cachedInputTokens,e.costUsd+=r.costUsd);}return e}function _r(t,e,n){let r=Date.parse(t),s=Date.parse(e);return Number.isFinite(r)&&Number.isFinite(s)?s-r:n??null}var Ps,Kt,Ll,Vt,Jt,Ml,Ls,In,Me,Da,Ha,Hl,$l,Ul,$a,qs,Ua,Fa,On,xs=v(()=>{h();ut();vt();xt();at();Ct();Jn();Xn();hi();hs();cr();yn();bs();yn();Ps=40,Kt="2026-05-09",Ll="0.8.9-rc.13",Vt=10,Jt=parseInt(Ll.split("rc.")[1]);Ml=new Set(["workflow","mcp"]),Ls="usageByEpoch",In="lateUsage",Me="usageAccounting",Da="Stopped by user",Ha="Stopped by app shutdown",Hl="terminalErrorOriginal",$l=new Set(["stopped","runner_lost"]),Ul=["pending","running"];$a=new Set(["http","cli","instruction","workflow","internal"]);qs=600*1e3,Ua=600*1e3,Fa=300*1e3,On=class extends Ee{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 Qn({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?dt(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 g("NOT_FOUND","Database not found");let r=F(n);if(e)try{Fe(r.db,n);}catch(s){throw r.close(),s}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=V(e.runEpoch),s=r===0?or$1(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 g?r:new g("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=V(o.run_epoch);if(o.status!=="running"){r={accepted:!1,status:o.status,runEpoch:i};return}let u=o.stop_requested_at!==null&&V(o.stop_requested_epoch)===i,d=u?o.stop_requested_at:e.requestedAt,c=te(o.metadata),l=u?ql(o.metadata)??hr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d):hr({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"),La())).run().changes===0){let _=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(!_||_.status!=="running"){r={accepted:!1,status:_?.status??"not_running",runEpoch:V(_?.run_epoch)};return}r={accepted:!1,status:_.status,runEpoch:V(_.run_epoch),..._.stop_requested_at&&V(_.stop_requested_epoch)===V(_.run_epoch)?{alreadyRequestedAt:_.stop_requested_at}:{}};}else r={accepted:!0,status:o.status,runEpoch:i};let f=new Set([e.id]),m=(_,w)=>{if(w>=8)return;let T=s.select({id:a.id,status:a.status,metadata:a.metadata}).from(a).where(and(eq(a.parent_task_id,_),eq(a.status,"running"))).all();for(let P of T)f.has(P.id)||(f.add(P.id),s.update(a).set({stop_requested_at:d,stop_requested_epoch:sql`${a.run_epoch}`,metadata:JSON.stringify({...te(P.metadata),stopRequest:l})}).where(and(eq(a.id,P.id),eq(a.status,"running"),La())).run(),m(P.id,w+1));};m(e.id,0);},{behavior:"immediate"}),r}catch(r){throw r instanceof g?r:new g("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=V(o.run_epoch),u=V(e.sourceRunEpoch),d=V(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$1(eq(a.run_epoch,0),isNull(a.run_epoch)):eq(a.run_epoch,d),l=or$1(isNull(a.stop_requested_at),isNull(a.stop_requested_epoch),ne(a.stop_requested_epoch,u)),p=hr({origin:"instruction",at:e.requestedAt,callerPid:e.callerPid,callerTaskId:e.callerTaskId},e.requestedAt),f=T=>s.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:u,metadata:JSON.stringify({...te(o.metadata),stopRequest:p})}).where(and(eq(a.id,e.id),eq(a.status,"running"),c,T,l)).run();if((e.workspaceId===void 0?f():e.workspaceId===null?f(isNull(a.workspace_id)):f(eq(a.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:o.status,runEpoch:d};return}let _=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(!_||_.status!=="running"){r={accepted:!1,status:_?.status??"not_running",runEpoch:V(_?.run_epoch)};return}let w=V(_.run_epoch);r={accepted:!1,status:_.status,runEpoch:w,..._.stop_requested_at&&V(_.stop_requested_epoch)===u?{alreadyRequestedAt:_.stop_requested_at}:{}};},{behavior:"immediate"}),r}catch(r){throw r instanceof g?r:new g("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"||V(i.run_epoch)!==V(e.runEpoch))return;let u=i.stop_requested_at!==null&&V(i.stop_requested_epoch)===V(e.runEpoch),d=te(i.metadata),c=u?Hs(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??_r(i.started_at,r,void 0),f=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"),f)).run().changes>0;},{behavior:"immediate"}),s}catch(r){throw r instanceof g?r:new g("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=V(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(V(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={...te(u.metadata),terminalReason:"runner_lost"},f=u.duration_ms??_r(u.started_at,r,void 0);o=i.update(a).set({status:"runner_lost",error:Ha,completed_at:r,duration_ms:f,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 g?r:new g("DB_ERROR","Failed to finalize task for host shutdown",r)}finally{n.close();}}async stopTask(e,n={}){return Ca(this,e,n)}async stopTaskGenerationForInstruction(e){return xa({requestTaskStop:n=>this.requestTaskStopForInstruction(n),getTask:n=>this.getTask(n),finalizeTaskStop:n=>this.finalizeTaskStop(n)},e)}startTask(e){let n=this.openHandle(true);try{let r={id:e.id,agent_id:e.agentId,actor_kind:e.actorKind??null,actor_id:e.actorId??null,user_id:e.userId??null,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,cwd:e.cwd??null,project_id:e.projectId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null,log_storage:"events"},s=o=>{n.db.insert(a).values(o).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`,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$1(eq(a.status,"running"),and(eq(a.status,"pending"),isNull(a.pid)))}).run();};try{s(r);}catch(o){let i=o instanceof Error?o.message:typeof o=="object"&&o!==null&&"message"in o?String(o.message):String(o);if(!/log_storage|heartbeat_at|stop_requested_at|stop_requested_epoch|cwd|actor_kind|actor_id/i.test(i)||!/no such column|no column named/i.test(i))throw o;let u=new Set(n.db.all("PRAGMA table_info(tasks)").map(Nr=>Nr.name)),d=u.has("cwd"),c=u.has("user_id"),l=u.has("actor_kind"),p=u.has("actor_id"),f=u.has("log_storage"),m=d?", cwd":"",_=d?", ?":"",w=d?", cwd = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.cwd, excluded.cwd) ELSE tasks.cwd END":"",T=f?", log_storage":"",P=f?", ?":"",S=c?", user_id":"",D=c?", ?":"",E=l?", actor_kind":"",N=l?", ?":"",x=p?", actor_id":"",X=p?", ?":"",le=f?`,
|
|
94
|
+
`}function Yt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function te(t){if(!t)return {};try{let e=JSON.parse(t);return Yt(e)?{...e}:{}}catch{return {}}}function mr(t){return t==null||t===""}function Ms(t,e){return mr(t)&&!mr(e)?e:t}function Fl(t,e){let n=te(t);if(!e)return n;for(let[r,s]of Object.entries(e))mr(n[r])&&!mr(s)&&(n[r]=s);return n}function hr(t,e){let n=t.origin&&$a.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 ql(t){let e=te(t).stopRequest;if(Yt(e)&&!(typeof e.origin!="string"||!$a.has(e.origin)||typeof e.at!="string"||typeof e.callerPid!="number"))return {...e}}function La(){return or$1(isNull(a.stop_requested_at),ne(sql`COALESCE(${a.stop_requested_epoch}, 0)`,sql`COALESCE(${a.run_epoch}, 0)`))}function Us(t,e){let n=te(t??null);return n.terminalReason=e,JSON.stringify(n)}function Hs(t,e){let n={...t,terminalReason:"user_stop"},r=e?.trim();return r&&r!==Da&&(n[Hl]=e),{error:Da,metadata:n}}function oe(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function Fs(t){return oe(t.input_tokens)!==0||oe(t.output_tokens)!==0||oe(t.cached_input_tokens)!==0||oe(t.cost_usd)!==0}function V(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Ma(t){return {inputTokens:oe(t.inputTokens??0),outputTokens:oe(t.outputTokens??0),cachedInputTokens:oe(t.cachedInputTokens??0),costUsd:oe(t.costUsd??0)}}function Bl(t){if(Yt(t))return {inputTokens:oe(t.inputTokens),outputTokens:oe(t.outputTokens),cachedInputTokens:oe(t.cachedInputTokens),costUsd:oe(t.costUsd)}}function Wl(t){let e={inputTokens:0,outputTokens:0,cachedInputTokens:0,costUsd:0};for(let n of Object.values(t)){let r=Bl(n);r&&(e.inputTokens+=r.inputTokens,e.outputTokens+=r.outputTokens,e.cachedInputTokens+=r.cachedInputTokens,e.costUsd+=r.costUsd);}return e}function _r(t,e,n){let r=Date.parse(t),s=Date.parse(e);return Number.isFinite(r)&&Number.isFinite(s)?s-r:n??null}var Ps,Kt,Ll,Vt,Jt,Ml,Ls,In,Me,Da,Ha,Hl,$l,Ul,$a,qs,Ua,Fa,On,xs=x(()=>{h();ut();vt();xt();at();Ct();Jn();Xn();hi();hs();cr();yn();bs();yn();Ps=40,Kt="2026-05-09",Ll="0.8.9-rc.13",Vt=10,Jt=parseInt(Ll.split("rc.")[1]);Ml=new Set(["workflow","mcp"]),Ls="usageByEpoch",In="lateUsage",Me="usageAccounting",Da="Stopped by user",Ha="Stopped by app shutdown",Hl="terminalErrorOriginal",$l=new Set(["stopped","runner_lost"]),Ul=["pending","running"];$a=new Set(["http","cli","instruction","workflow","internal"]);qs=600*1e3,Ua=600*1e3,Fa=300*1e3,On=class extends Ee{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 Qn({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?dt(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 g("NOT_FOUND","Database not found");let r=F(n);if(e)try{Fe(r.db,n);}catch(s){throw r.close(),s}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=V(e.runEpoch),s=r===0?or$1(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 g?r:new g("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=V(o.run_epoch);if(o.status!=="running"){r={accepted:!1,status:o.status,runEpoch:i};return}let u=o.stop_requested_at!==null&&V(o.stop_requested_epoch)===i,d=u?o.stop_requested_at:e.requestedAt,c=te(o.metadata),l=u?ql(o.metadata)??hr({origin:e.origin,at:d,callerPid:e.callerPid,callerTaskId:e.callerTaskId},d):hr({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"),La())).run().changes===0){let _=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(!_||_.status!=="running"){r={accepted:!1,status:_?.status??"not_running",runEpoch:V(_?.run_epoch)};return}r={accepted:!1,status:_.status,runEpoch:V(_.run_epoch),..._.stop_requested_at&&V(_.stop_requested_epoch)===V(_.run_epoch)?{alreadyRequestedAt:_.stop_requested_at}:{}};}else r={accepted:!0,status:o.status,runEpoch:i};let f=new Set([e.id]),m=(_,w)=>{if(w>=8)return;let k=s.select({id:a.id,status:a.status,metadata:a.metadata}).from(a).where(and(eq(a.parent_task_id,_),eq(a.status,"running"))).all();for(let N of k)f.has(N.id)||(f.add(N.id),s.update(a).set({stop_requested_at:d,stop_requested_epoch:sql`${a.run_epoch}`,metadata:JSON.stringify({...te(N.metadata),stopRequest:l})}).where(and(eq(a.id,N.id),eq(a.status,"running"),La())).run(),m(N.id,w+1));};m(e.id,0);},{behavior:"immediate"}),r}catch(r){throw r instanceof g?r:new g("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=V(o.run_epoch),u=V(e.sourceRunEpoch),d=V(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$1(eq(a.run_epoch,0),isNull(a.run_epoch)):eq(a.run_epoch,d),l=or$1(isNull(a.stop_requested_at),isNull(a.stop_requested_epoch),ne(a.stop_requested_epoch,u)),p=hr({origin:"instruction",at:e.requestedAt,callerPid:e.callerPid,callerTaskId:e.callerTaskId},e.requestedAt),f=k=>s.update(a).set({stop_requested_at:e.requestedAt,stop_requested_epoch:u,metadata:JSON.stringify({...te(o.metadata),stopRequest:p})}).where(and(eq(a.id,e.id),eq(a.status,"running"),c,k,l)).run();if((e.workspaceId===void 0?f():e.workspaceId===null?f(isNull(a.workspace_id)):f(eq(a.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:o.status,runEpoch:d};return}let _=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(!_||_.status!=="running"){r={accepted:!1,status:_?.status??"not_running",runEpoch:V(_?.run_epoch)};return}let w=V(_.run_epoch);r={accepted:!1,status:_.status,runEpoch:w,..._.stop_requested_at&&V(_.stop_requested_epoch)===u?{alreadyRequestedAt:_.stop_requested_at}:{}};},{behavior:"immediate"}),r}catch(r){throw r instanceof g?r:new g("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"||V(i.run_epoch)!==V(e.runEpoch))return;let u=i.stop_requested_at!==null&&V(i.stop_requested_epoch)===V(e.runEpoch),d=te(i.metadata),c=u?Hs(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??_r(i.started_at,r,void 0),f=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"),f)).run().changes>0;},{behavior:"immediate"}),s}catch(r){throw r instanceof g?r:new g("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=V(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(V(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={...te(u.metadata),terminalReason:"runner_lost"},f=u.duration_ms??_r(u.started_at,r,void 0);o=i.update(a).set({status:"runner_lost",error:Ha,completed_at:r,duration_ms:f,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 g?r:new g("DB_ERROR","Failed to finalize task for host shutdown",r)}finally{n.close();}}async stopTask(e,n={}){return Ca(this,e,n)}async stopTaskGenerationForInstruction(e){return xa({requestTaskStop:n=>this.requestTaskStopForInstruction(n),getTask:n=>this.getTask(n),finalizeTaskStop:n=>this.finalizeTaskStop(n)},e)}startTask(e){let n=this.openHandle(true);try{let r={id:e.id,agent_id:e.agentId,actor_kind:e.actorKind??null,actor_id:e.actorId??null,user_id:e.userId??null,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,cwd:e.cwd??null,project_id:e.projectId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null,log_storage:"events"},s=o=>{n.db.insert(a).values(o).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`,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$1(eq(a.status,"running"),and(eq(a.status,"pending"),isNull(a.pid)))}).run();};try{s(r);}catch(o){let i=o instanceof Error?o.message:typeof o=="object"&&o!==null&&"message"in o?String(o.message):String(o);if(!/log_storage|heartbeat_at|stop_requested_at|stop_requested_epoch|cwd|actor_kind|actor_id/i.test(i)||!/no such column|no column named/i.test(i))throw o;let u=new Set(n.db.all("PRAGMA table_info(tasks)").map(Nr=>Nr.name)),d=u.has("cwd"),c=u.has("user_id"),l=u.has("actor_kind"),p=u.has("actor_id"),f=u.has("log_storage"),m=d?", cwd":"",_=d?", ?":"",w=d?", cwd = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN COALESCE(tasks.cwd, excluded.cwd) ELSE tasks.cwd END":"",k=f?", log_storage":"",N=f?", ?":"",R=c?", user_id":"",b=c?", ?":"",y=l?", actor_kind":"",C=l?", ?":"",P=p?", actor_id":"",X=p?", ?":"",le=f?`,
|
|
95
95
|
log_storage = CASE WHEN tasks.status = 'pending' THEN excluded.log_storage ELSE tasks.log_storage END`:"";n.runRaw(`INSERT INTO tasks (
|
|
96
96
|
id, agent_id, prompt, mode, status, started_at, pid,
|
|
97
97
|
parent_task_id, caller_agent_id, trace_id, command, metadata,
|
|
98
98
|
workspace_id${m}, project_id, platform, crewx_version, thread_id,
|
|
99
|
-
model, rendered_prompt, coding_agent_command${
|
|
100
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?${_}${
|
|
99
|
+
model, rendered_prompt, coding_agent_command${R}${y}${P}${k}
|
|
100
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?${_}${b}${C}${X}${N})
|
|
101
101
|
ON CONFLICT(id) DO UPDATE SET
|
|
102
102
|
status = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN 'running' ELSE tasks.status END,
|
|
103
103
|
pid = COALESCE(excluded.pid, tasks.pid),
|
|
@@ -110,8 +110,8 @@ ${r.join(`
|
|
|
110
110
|
rendered_prompt = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.rendered_prompt ELSE tasks.rendered_prompt END,
|
|
111
111
|
coding_agent_command = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.coding_agent_command ELSE tasks.coding_agent_command END${le}
|
|
112
112
|
WHERE tasks.status = 'running' OR (tasks.status = 'pending' AND tasks.pid IS NULL)`,[r.id,r.agent_id,r.prompt,r.mode,r.status,r.started_at,r.pid,r.parent_task_id,r.caller_agent_id,r.trace_id,r.command,r.metadata,r.workspace_id,...d?[r.cwd]:[],r.project_id,r.platform,r.crewx_version,r.thread_id,r.model,r.rendered_prompt,r.coding_agent_command,...c?[r.user_id]:[],...l?[r.actor_kind]:[],...p?[r.actor_id]:[],...f?[r.log_storage]:[]]);}}catch(r){throw r instanceof g?r:new g("DB_ERROR","Failed to start task",r)}finally{n.close();}}updateTaskOwnership(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=n.db.select({status:a.status,run_epoch:a.run_epoch,metadata:a.metadata,model:a.model,rendered_prompt:a.rendered_prompt,coding_agent_command:a.coding_agent_command}).from(a).where(eq(a.id,e.id)).limit(1).get();if(!r||r.status!=="running"||V(r.run_epoch)!==V(e.runEpoch))return !1;let s=Fl(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:Ms(r.model,e.runtime?.model),rendered_prompt:Ms(r.rendered_prompt,e.runtime?.renderedPrompt),coding_agent_command:Ms(r.coding_agent_command,e.runtime?.codingAgentCommand)}).where(and(eq(a.id,e.id),eq(a.status,"running"),o)).run();return i.changes>0&&V(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
|
|
113
|
-
AND COALESCE(${a.stop_requested_epoch}, 0) <> COALESCE(${a.run_epoch}, 0)`)).run(),i.changes>0}catch(r){throw r instanceof g?r:new g("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 g?r:new g("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 g?o:new g("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=Hs(te(d.metadata),n),l={...c.metadata,stopMethod:"cooperative",stopRequest:hr(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 g?i:new g("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().from(a).where(eq(a.project_id,e)).orderBy(desc(a.started_at)).all().map(Le)}catch(r){throw r instanceof g?r:new g("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=V(i.run_epoch),d=V(e.runEpoch),c=i.status==="running"&&u===d,l=i.stop_requested_at!==null&&V(i.stop_requested_epoch)===u,p=c&&l,f=i.status==="stopped"&&u===d&&l,m=te(i.metadata),_=Yt(m[In])?m[In]:{},w=String(d),
|
|
114
|
-
`);}}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=te(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 g?r:new g("DB_ERROR","Failed to update task lifecycle",r)}finally{n.close();}}appendLog(e,n){this.taskLogRepository.appendLog(e,n);}appendLogs(e,n){this.taskLogRepository.appendLogs(e,n);}readLogs(e){return this.taskLogRepository.readLogs(e)}readLogsTail(e,n){return this.taskLogRepository.readLogsTail(e,n)}getLogState(e){return this.taskLogRepository.getLogState(e)}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(a).where(eq(a.status,"running")).orderBy(desc(a.started_at)).all().map(Le)}catch(n){throw new g("DB_ERROR","Failed to get running tasks",n)}finally{e.close();}}getActiveTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(a).where(inArray(a.status,["pending","running"])).orderBy(desc(a.started_at)).all().map(Le)}catch(n){throw new g("DB_ERROR","Failed to get active tasks",n)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(a).orderBy(desc(a.started_at)).limit(100).all().map(Le)}catch(n){throw new g("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=n.db.select().from(a).where(eq(a.id,e)).limit(1).get();return r?Le(r):void 0}catch(r){throw new g("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$1(eq(a.status,"running"),eq(a.status,"pending"))).all(),s=this.clock(),o=Math.max(1,Math.trunc(e.tickIntervalMs??Fa)),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=zt(),l=pr(),p=new Date(s-Ua).toISOString(),f=new Date(s).toISOString(),m=new Set,_=0,w=(
|
|
113
|
+
AND COALESCE(${a.stop_requested_epoch}, 0) <> COALESCE(${a.run_epoch}, 0)`)).run(),i.changes>0}catch(r){throw r instanceof g?r:new g("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 g?r:new g("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 g?o:new g("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=Hs(te(d.metadata),n),l={...c.metadata,stopMethod:"cooperative",stopRequest:hr(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 g?i:new g("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().from(a).where(eq(a.project_id,e)).orderBy(desc(a.started_at)).all().map(Le)}catch(r){throw r instanceof g?r:new g("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=V(i.run_epoch),d=V(e.runEpoch),c=i.status==="running"&&u===d,l=i.stop_requested_at!==null&&V(i.stop_requested_epoch)===u,p=c&&l,f=i.status==="stopped"&&u===d&&l,m=te(i.metadata),_=Yt(m[In])?m[In]:{},w=String(d),k=$l.has(i.status),N=k&&u===d&&!Fs(i)&&!Object.prototype.hasOwnProperty.call(_,w),R=k&&u===d&&!Object.prototype.hasOwnProperty.call(_,w),b=u>0||d>0||e.runEpoch!==void 0&&e.runEpoch!==null||u!==d,y={},C;if(i.status!=="running"&&(r=i.status,s=e.result?.trim()||e.error?.trim()||`task:end status=${e.status}`),b&&(i.status==="running"||R)){C=te(i.metadata);let P=Yt(C[Ls])?{...C[Ls]}:{};P[String(d)]=Ma(e),C[Ls]=P;let X=Wl(P),le=X.inputTokens!==0||X.outputTokens!==0||X.cachedInputTokens!==0||X.costUsd!==0;le&&m[Me]==="unavailable"?C[Me]="recorded":i.status!=="running"&&!le&&m[Me]===void 0&&(C[Me]="unavailable"),y.metadata=JSON.stringify(C),y.input_tokens=X.inputTokens,y.output_tokens=X.outputTokens,y.cached_input_tokens=X.cachedInputTokens,y.cost_usd=X.costUsd;}else if(c||N)if(c)y.input_tokens=oe(e.inputTokens??0),y.output_tokens=oe(e.outputTokens??0),y.cached_input_tokens=oe(e.cachedInputTokens??0),y.cost_usd=oe(e.costUsd??0);else {let P=Ma(e),X=P.inputTokens!==0||P.outputTokens!==0||P.cachedInputTokens!==0||P.costUsd!==0;X&&(y.input_tokens=P.inputTokens,y.output_tokens=P.outputTokens,y.cached_input_tokens=P.cachedInputTokens,y.cost_usd=P.costUsd),C={...m};let le=Yt(m[In])?{...m[In]}:{};le[w]={at:e.completedAt},C[In]=le,C[Me]===void 0?C[Me]=X?"recorded":"unavailable":X&&C[Me]==="unavailable"&&(C[Me]="recorded"),y.metadata=JSON.stringify(C);}if((c||N)&&e.model!==void 0&&e.model!==null&&(!N||i.model===null)&&(y.model=e.model),p){C??=te(i.metadata);let P=Hs(C,e.error);C={...P.metadata,...e.partialResultRecovered===!0?{partialResultRecovered:!0}:{},stopMethod:fr(i.stop_requested_at,e.completedAt)},y.status="stopped",y.result=e.result??i.result,y.error=P.error,y.completed_at=e.completedAt,y.duration_ms=i.duration_ms??e.durationMs??_r(i.started_at,e.completedAt,void 0),y.exit_code=e.exitCode??i.exit_code,y.metadata=JSON.stringify(C);}else if(c)e.partialResultRecovered===!0&&(C??=te(i.metadata),C.partialResultRecovered=!0,y.metadata=JSON.stringify(C)),y.status=e.status,y.result=e.result??null,y.error=e.error??null,y.completed_at=e.completedAt,y.duration_ms=u>0?_r(i.started_at,e.completedAt,e.durationMs):e.durationMs??null,y.exit_code=e.exitCode??null;else if(f){let P=!1;i.result===null&&e.result!==void 0&&e.result!==null&&(y.result=e.result,P=!0),i.exit_code===null&&e.exitCode!==void 0&&e.exitCode!==null&&(y.exit_code=e.exitCode),e.partialResultRecovered===!0&&(C??=te(i.metadata),C.partialResultRecovered=!0,y.metadata=JSON.stringify(C)),P&&(r=void 0,s=void 0);}Object.keys(y).length>0&&o.update(a).set(y).where(eq(a.id,e.id)).run();},{behavior:"immediate"});}catch(o){throw o instanceof g?o:new g("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
|
|
114
|
+
`);}}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=te(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 g?r:new g("DB_ERROR","Failed to update task lifecycle",r)}finally{n.close();}}appendLog(e,n){this.taskLogRepository.appendLog(e,n);}appendLogs(e,n){this.taskLogRepository.appendLogs(e,n);}readLogs(e){return this.taskLogRepository.readLogs(e)}readLogsTail(e,n){return this.taskLogRepository.readLogsTail(e,n)}getLogState(e){return this.taskLogRepository.getLogState(e)}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(a).where(eq(a.status,"running")).orderBy(desc(a.started_at)).all().map(Le)}catch(n){throw new g("DB_ERROR","Failed to get running tasks",n)}finally{e.close();}}getActiveTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(a).where(inArray(a.status,["pending","running"])).orderBy(desc(a.started_at)).all().map(Le)}catch(n){throw new g("DB_ERROR","Failed to get active tasks",n)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(a).orderBy(desc(a.started_at)).limit(100).all().map(Le)}catch(n){throw new g("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=n.db.select().from(a).where(eq(a.id,e)).limit(1).get();return r?Le(r):void 0}catch(r){throw new g("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$1(eq(a.status,"running"),eq(a.status,"pending"))).all(),s=this.clock(),o=Math.max(1,Math.trunc(e.tickIntervalMs??Fa)),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=zt(),l=pr(),p=new Date(s-Ua).toISOString(),f=new Date(s).toISOString(),m=new Set,_=0,w=(k,N)=>{let R=te(Us(k.metadata,"runner_lost")),b=typeof R.provider=="string"?R.provider:void 0,y;try{y=ur({taskLogRepository:this.taskLogRepository,taskId:k.id,provider:b,model:k.model})?.usage;}catch{}let C={status:"runner_lost",error:N,completed_at:f};y?(C.input_tokens=y.inputTokens,C.output_tokens=y.outputTokens,C.cached_input_tokens=y.cachedInputTokens,C.cost_usd=y.costUsd,k.model===null&&y.model!==null&&(C.model=y.model),R[Me]="recorded"):!Fs(k)&&R[Me]!=="recorded"&&(R[Me]="unavailable"),C.metadata=JSON.stringify(R);let P=k.run_epoch===null?isNull(a.run_epoch):eq(a.run_epoch,k.run_epoch),X=k.heartbeat_at===null?isNull(a.heartbeat_at):eq(a.heartbeat_at,k.heartbeat_at),le=n.db.update(a).set(C).where(and(eq(a.id,k.id),eq(a.status,"running"),P,X)).run();return le.changes>0&&_++,le.changes>0};for(let k of r){if(k.status==="pending"){if(k.pid!==null||k.started_at>=p)continue;let y=Us(k.metadata,"launch_failed");n.db.update(a).set({status:"failed",error:"Reaped: runner never adopted task (pending timeout)",completed_at:f,metadata:y}).where(and(eq(a.id,k.id),eq(a.status,"pending"),isNull(a.pid),lt(a.started_at,p))).run().changes>0&&_++;continue}if(Ml.has(k.platform??"cli"))continue;if(k.pid===null){let y=`${k.id}:${k.run_epoch??0}`;m.add(y);let C=this.pidNullObservedSince.get(y);if(C===void 0){this.pidNullObservedSince.set(y,s);continue}s-C>=qs&&w(k,"Reaped: pid never recorded after resume (stale running_instruction)")&&this.pidNullObservedSince.delete(y);continue}if(k.heartbeat_at===null){gt(k.pid)==="not_found"&&w(k,"Reaped: process not found (orphaned task)");continue}let N=Date.parse(k.heartbeat_at),R=Number.isFinite(N)?s-N:Number.POSITIVE_INFINITY;if(R<=c)continue;gt(k.pid)==="not_found"?w(k,"Reaped: process not found (orphaned task)"):R>l&&d&&w(k,"Reaped: heartbeat stale beyond hard limit (orphaned task)");}for(let k of Array.from(this.pidNullObservedSince.keys()))m.has(k)||this.pidNullObservedSince.delete(k);return _}finally{n.close();}}reapRunningWorkflowTasks(e=qs){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(a.started_at,r),or$1(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=te(d.metadata);c.terminalReason="runner_lost";let l=n.db.update(a).set({status:"runner_lost",error:"Reaped: stale workflow run (finally not executed)",completed_at:i,metadata:JSON.stringify(c)}).where(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=F(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().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().from(a).where(c).orderBy(desc(a.started_at)).limit(1).get()??void 0;}if(d)return Le(d)}catch(i){throw new g("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=F(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().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(Le(l)));}catch(d){throw new g("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`
|
|
115
115
|
SELECT
|
|
116
116
|
COALESCE(workspace_id, 'unknown') AS workspace_id,
|
|
117
117
|
COALESCE(SUM(input_tokens), 0) AS input_tokens,
|
|
@@ -158,7 +158,7 @@ ${r.join(`
|
|
|
158
158
|
FROM tasks t
|
|
159
159
|
${c}
|
|
160
160
|
GROUP BY t.agent_id, t.workspace_id, ${o}
|
|
161
|
-
`),p=new Map;for(let _ of l){let w=typeof _.provider=="string"&&_.provider.trim()!==""?_.provider:"unknown",
|
|
161
|
+
`),p=new Map;for(let _ of l){let w=typeof _.provider=="string"&&_.provider.trim()!==""?_.provider:"unknown",k={provider:w,inputTokens:_.input_tokens,outputTokens:_.output_tokens,cachedInputTokens:_.cached_input_tokens,totalTokens:_.input_tokens+_.output_tokens,costUsd:_.cost_usd,totalTasks:_.total_tasks,unavailableTaskCount:_.unavailable_task_count},N=_.workspace_id??null,R=JSON.stringify([_.agent_id,N]),b=p.get(R);if(!b){p.set(R,{agentId:_.agent_id,workspaceId:N,totalTasks:_.total_tasks,unavailableTaskCount:_.unavailable_task_count,inputTokens:_.input_tokens,outputTokens:_.output_tokens,cachedInputTokens:_.cached_input_tokens,costUsd:_.cost_usd,totalTokens:_.input_tokens+_.output_tokens,providers:[k]});continue}b.totalTasks+=_.total_tasks,b.unavailableTaskCount=(b.unavailableTaskCount??0)+_.unavailable_task_count,b.inputTokens+=_.input_tokens,b.outputTokens+=_.output_tokens,b.cachedInputTokens+=_.cached_input_tokens,b.costUsd+=_.cost_usd,b.totalTokens+=_.input_tokens+_.output_tokens;let y=b.providers.find(C=>C.provider===w);y?(y.inputTokens+=k.inputTokens,y.outputTokens+=k.outputTokens,y.cachedInputTokens+=k.cachedInputTokens,y.totalTokens+=k.totalTokens,y.costUsd+=k.costUsd,y.totalTasks+=k.totalTasks,y.unavailableTaskCount+=k.unavailableTaskCount):b.providers.push(k);}let f=[...p.values()];for(let _ of f)_.providers.sort((w,k)=>w.provider===k.provider?0:w.provider==="unknown"?1:k.provider==="unknown"?-1:w.totalTokens!==k.totalTokens?k.totalTokens-w.totalTokens:w.provider<k.provider?-1:1);let m=(_,w)=>_===w?0:_<w?-1:1;return f.sort((_,w)=>{if(_.totalTokens!==w.totalTokens)return w.totalTokens-_.totalTokens;let k=m(_.agentId,w.agentId);return k!==0?k:_.workspaceId===w.workspaceId?0:_.workspaceId===null?1:w.workspaceId===null?-1:m(_.workspaceId,w.workspaceId)}),f}catch(o){throw new g("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=An(sql.raw("t.status")),i=gr(sql.raw("t.metadata"));return s.db.all(r?sql`
|
|
162
162
|
SELECT
|
|
163
163
|
date(t.started_at) AS date,
|
|
164
164
|
t.agent_id,
|
|
@@ -314,7 +314,7 @@ Message: ${n.message}
|
|
|
314
314
|
`;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}
|
|
315
315
|
`,"utf8");}catch{}}),e.on("task:end",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let s=Cr(new Date),o=n.error?`failed: ${n.error.message}`:"completed successfully",i=`[${s}] INFO: Task ${o} in ${n.durationMs}ms
|
|
316
316
|
[${s}] INFO: Process closed with exit code: ${n.error?1:0}
|
|
317
|
-
`;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 Ot=new Map;function Hn(t){let e=de.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 io(t){let e=Hn(t);return createHash("sha256").update(e).digest("hex")}function ao(t){let e=Hn(t),n=Ot.get(e);if(n!==void 0)return n;let r=e;try{let s=de.join(e,".git");if(!lstatSync(s).isFile())return Ot.set(e,r),r;let o=/^gitdir:\s*(.+?)\s*$/i.exec(readFileSync(s,"utf8").trim());if(!o)return Ot.set(e,r),r;let i=o[1],u=de.isAbsolute(i)?i:de.resolve(de.dirname(s),i),d=readFileSync(de.join(u,"commondir"),"utf8").trim();if(!d)return Ot.set(e,r),r;let c=de.isAbsolute(d)?d:de.resolve(u,d);if(de.basename(c)!==".git"||!statSync(c).isDirectory())return Ot.set(e,r),r;let l=Hn(realpathSync.native(e)),p=Hn(realpathSync.native(de.dirname(c)));(l===p||(p.endsWith("/")?l.startsWith(p):l.startsWith(`${p}/`)))&&(r=p);}catch{}return Ot.set(e,r),r}at();xs();Mt();hs();yn();bs();Xn();var Gl=200,zl=200;function Kl(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 Vl(t){let e=t instanceof g?t.code:void 0,n=t instanceof g?t.cause:t,r=Kl(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function Ba(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function Jl(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Wa(t){if(!t)return {};try{let e=JSON.parse(t);return Jl(e)?e:{}}catch{return {}}}function vn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var Yl=new Set(["workflow","mcp"]),Bs=class extends Ze{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 On({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?ao(r):r,i=s?io(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:f,assignedTaskId:m}=this.runnerIdentity,_=m??d.traceId,w=vn(d.metadata?.runEpoch),T=f?"runner":"caller",P=d.workspaceId??i,S=f?n.getTask(_):void 0,D=d.pid??null,E={...d.metadata??{provider:d.provider??"cli/claude"},ownership:T,...f&&D!==null?{providerPid:D}:{}},N=JSON.stringify(E);if(f&&S?.status==="running"&&S.pid!==null&&w===0){this.ignoredDetachedTaskIds.add(_);return}n.startTask({id:_,agentId:d.agentRef.replace(/^@/,""),prompt:d.message,mode:d.mode,status:"running",actorKind:d.actorKind??null,actorId:d.actorId??null,pid:f?process.pid:D,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,command:u,codingAgentCommand:d.codingAgentCommand??null,workspaceId:P,projectId:d.projectId??null,callerAgentId:c,parentTaskId:l,traceId:p,metadata:N,threadId:d.threadId??null,cwd:d.cwd??null}),n.updateTaskOwnership({id:_,runEpoch:w,ownership:T,...f?{providerPid:D}:{},runtime:{model:d.model??null,renderedPrompt:d.renderedPrompt??null,codingAgentCommand:d.codingAgentCommand??null,metadata:E}})?this.recordOwnedTaskRun({taskId:_,runEpoch:w,workspaceId:P,ownership:T}):console.warn("[crewx] task execution metadata not recorded",{taskId:_,runEpoch:w,ownership:T}),Yl.has(d.platform??"cli")||Sa(n,{taskId:_,runEpoch:w,onStopRequested:Nr=>this.handleStopRequested(n,Nr)})&&this.heartbeatTaskIds.add(_);}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],Ba(l));}}),e.on("task:end",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.delete(c))return;let l=typeof d.metadata?.runEpoch=="number"?d.metadata.runEpoch:null;this.removeOwnedTaskRun(c,vn(l)),wn(c,l)&&this.heartbeatTaskIds.delete(c),this.flushTaskLogs(c);let f=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,m=d.result??null,_=!1;if(d.error&&(!m||m.trim()==="")){let w=this.recoverPartialResult(c,d,l);w&&(m=w,_=!0);}n.finishTask({id:c,status:d.error?"failed":"success",result:m,error:f,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:_});}catch{}}));}detach(e){try{this.flushAllTaskLogs();}finally{this.clearAllTimers();for(let n of this.heartbeatTaskIds)wn(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 Na(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+=Ba(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>=Gl){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));},zl);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"||vn(o.run_epoch)!==vn(r))return;let i=Wa(o.metadata),u=typeof i.provider=="string"?i.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!u)return;let d=ur({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()||ze(c,u)?void 0:c}catch{return}}async handleStopRequested(e,n){let r=n.id;if(!r)return;let s=vn(n.run_epoch),o=Wa(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(d!==void 0){let c;try{c=await Lt(d,{signal:Dt});}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:fr(n.stop_requested_at)}),l=e.getTask(r);(c||l?.status!=="running")&&wn(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=Vl(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();ut();vt();xt();at();Ct();cr();h();function Tr(t){return t!==null&&t!==""}function Xl(t){return t.schedule_id!==null&&t.schedule_id!==void 0?"system":Tr(t.parent_task_id)||Tr(t.caller_agent_id)?"agent":t.platform==="workflow"?"system":"human"}function ja(t,e){return {origin:t==="human"?"direct":"delegated",delegatedByAgentId:t==="agent"&&Tr(e)?e:null}}function wr(t){let e=Xl(t),n=Tr(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 Ga(t,e,n){return t.creator_task_id!==null&&t.creator_pointer_unverified===0?t.creator_actor_kind!==null?ja(t.creator_actor_kind,t.creator_actor_id):e?wr(e):{origin:"direct",delegatedByAgentId:null}:t.created_by_kind!==null?ja(t.created_by_kind,t.created_by_id):n?wr(n):void 0}function yr(t){return {...t,status:Et(t)}}function rp({metadata:t,...e}){return {...e,status:Et({...e,metadata:t})}}var Er=900,Ka=20;function Va(t,e){return (t?.origin??"direct")===e}function Ja(t,e){let n=new Date(e.updated_at).getTime()-new Date(t.updated_at).getTime();return n!==0?n:t.id.localeCompare(e.id)}var Qt=class extends g{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function Xt(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function sp(t){let n=Xt(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 Ya(t,e,n){return t.get(sql`
|
|
317
|
+
`;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 Ot=new Map;function Hn(t){let e=de.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 io(t){let e=Hn(t);return createHash("sha256").update(e).digest("hex")}function ao(t){let e=Hn(t),n=Ot.get(e);if(n!==void 0)return n;let r=e;try{let s=de.join(e,".git");if(!lstatSync(s).isFile())return Ot.set(e,r),r;let o=/^gitdir:\s*(.+?)\s*$/i.exec(readFileSync(s,"utf8").trim());if(!o)return Ot.set(e,r),r;let i=o[1],u=de.isAbsolute(i)?i:de.resolve(de.dirname(s),i),d=readFileSync(de.join(u,"commondir"),"utf8").trim();if(!d)return Ot.set(e,r),r;let c=de.isAbsolute(d)?d:de.resolve(u,d);if(de.basename(c)!==".git"||!statSync(c).isDirectory())return Ot.set(e,r),r;let l=Hn(realpathSync.native(e)),p=Hn(realpathSync.native(de.dirname(c)));(l===p||(p.endsWith("/")?l.startsWith(p):l.startsWith(`${p}/`)))&&(r=p);}catch{}return Ot.set(e,r),r}at();xs();Mt();hs();yn();bs();Xn();var Gl=200,zl=200;function Kl(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 Vl(t){let e=t instanceof g?t.code:void 0,n=t instanceof g?t.cause:t,r=Kl(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function Ba(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function Jl(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Wa(t){if(!t)return {};try{let e=JSON.parse(t);return Jl(e)?e:{}}catch{return {}}}function vn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var Yl=new Set(["workflow","mcp"]),Bs=class extends Ze{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 On({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?ao(r):r,i=s?io(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:f,assignedTaskId:m}=this.runnerIdentity,_=m??d.traceId,w=vn(d.metadata?.runEpoch),k=f?"runner":"caller",N=d.workspaceId??i,R=f?n.getTask(_):void 0,b=d.pid??null,y={...d.metadata??{provider:d.provider??"cli/claude"},ownership:k,...f&&b!==null?{providerPid:b}:{}},C=JSON.stringify(y);if(f&&R?.status==="running"&&R.pid!==null&&w===0){this.ignoredDetachedTaskIds.add(_);return}n.startTask({id:_,agentId:d.agentRef.replace(/^@/,""),prompt:d.message,mode:d.mode,status:"running",actorKind:d.actorKind??null,actorId:d.actorId??null,pid:f?process.pid:b,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,command:u,codingAgentCommand:d.codingAgentCommand??null,workspaceId:N,projectId:d.projectId??null,callerAgentId:c,parentTaskId:l,traceId:p,metadata:C,threadId:d.threadId??null,cwd:d.cwd??null}),n.updateTaskOwnership({id:_,runEpoch:w,ownership:k,...f?{providerPid:b}:{},runtime:{model:d.model??null,renderedPrompt:d.renderedPrompt??null,codingAgentCommand:d.codingAgentCommand??null,metadata:y}})?this.recordOwnedTaskRun({taskId:_,runEpoch:w,workspaceId:N,ownership:k}):console.warn("[crewx] task execution metadata not recorded",{taskId:_,runEpoch:w,ownership:k}),Yl.has(d.platform??"cli")||Sa(n,{taskId:_,runEpoch:w,onStopRequested:Nr=>this.handleStopRequested(n,Nr)})&&this.heartbeatTaskIds.add(_);}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],Ba(l));}}),e.on("task:end",d=>{try{let c=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.delete(c))return;let l=typeof d.metadata?.runEpoch=="number"?d.metadata.runEpoch:null;this.removeOwnedTaskRun(c,vn(l)),wn(c,l)&&this.heartbeatTaskIds.delete(c),this.flushTaskLogs(c);let f=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,m=d.result??null,_=!1;if(d.error&&(!m||m.trim()==="")){let w=this.recoverPartialResult(c,d,l);w&&(m=w,_=!0);}n.finishTask({id:c,status:d.error?"failed":"success",result:m,error:f,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:_});}catch{}}));}detach(e){try{this.flushAllTaskLogs();}finally{this.clearAllTimers();for(let n of this.heartbeatTaskIds)wn(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 Na(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+=Ba(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>=Gl){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));},zl);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"||vn(o.run_epoch)!==vn(r))return;let i=Wa(o.metadata),u=typeof i.provider=="string"?i.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!u)return;let d=ur({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()||ze(c,u)?void 0:c}catch{return}}async handleStopRequested(e,n){let r=n.id;if(!r)return;let s=vn(n.run_epoch),o=Wa(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(d!==void 0){let c;try{c=await Lt(d,{signal:Dt});}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:fr(n.stop_requested_at)}),l=e.getTask(r);(c||l?.status!=="running")&&wn(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=Vl(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();ut();vt();xt();at();Ct();cr();h();function Tr(t){return t!==null&&t!==""}function Xl(t){return t.schedule_id!==null&&t.schedule_id!==void 0?"system":Tr(t.parent_task_id)||Tr(t.caller_agent_id)?"agent":t.platform==="workflow"?"system":"human"}function ja(t,e){return {origin:t==="human"?"direct":"delegated",delegatedByAgentId:t==="agent"&&Tr(e)?e:null}}function wr(t){let e=Xl(t),n=Tr(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 Ga(t,e,n){return t.creator_task_id!==null&&t.creator_pointer_unverified===0?t.creator_actor_kind!==null?ja(t.creator_actor_kind,t.creator_actor_id):e?wr(e):{origin:"direct",delegatedByAgentId:null}:t.created_by_kind!==null?ja(t.created_by_kind,t.created_by_id):n?wr(n):void 0}function yr(t){return {...t,status:Et(t)}}function rp({metadata:t,...e}){return {...e,status:Et({...e,metadata:t})}}var sp=32,Er=900,Ka=20;function Va(t,e){return (t?.origin??"direct")===e}function Ja(t,e){let n=new Date(e.updated_at).getTime()-new Date(t.updated_at).getTime();return n!==0?n:t.id.localeCompare(e.id)}var Qt=class extends g{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function Xt(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function op(t){let n=Xt(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 Ya(t,e,n){return t.get(sql`
|
|
318
318
|
SELECT id
|
|
319
319
|
FROM tasks INDEXED BY idx_tasks_thread_id
|
|
320
320
|
WHERE thread_id = ${e}
|
|
@@ -328,27 +328,65 @@ Message: ${n.message}
|
|
|
328
328
|
WHERE workspace_id = ${e}
|
|
329
329
|
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=F(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 g("DB_ERROR",n,d)}finally{u.close();}}return o}findThreadSortKeysQuery(e){return sql`SELECT id, updated_at
|
|
330
330
|
FROM threads INDEXED BY idx_threads_ws_updated
|
|
331
|
-
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=F(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 g("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=F(u);try{for(let c=0;c<e.length;c+=Er){let l=e.slice(c,c+Er),p=inArray(
|
|
331
|
+
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=F(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 g("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=F(u);try{for(let c=0;c<e.length;c+=Er){let l=e.slice(c,c+Er),p=inArray(T.id,l),f=n?and(p,eq(T.workspace_id,n)):p,m=d.db.select().from(T).where(f).all();for(let _ of m)o.has(_.id)||(o.add(_.id),i.push(_));}}catch(c){throw new g("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=F(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 g("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=F(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=F(i);try{let d=or$1(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 g("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=F(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 g("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:Re.id}).from(Re).where(eq(Re.id,e.workspaceId)).limit(1).get())throw new g("NOT_FOUND","Workspace not found");let o=r.select().from(T).where(eq(T.id,e.threadId)).limit(1).get();if(o){let l=Xt(o.metadata).appLaunch,p=l&&typeof l=="object"&&!Array.isArray(l)?l.appId:void 0,f=r.get(sql`
|
|
332
332
|
SELECT COUNT(*) AS count FROM tasks WHERE thread_id = ${e.threadId}
|
|
333
|
-
`)?.count??0;return o.workspace_id===e.workspaceId&&p===e.appId&&o.message_count===0&&o.first_message===null&&o.last_message===null&&f===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(
|
|
333
|
+
`)?.count??0;return o.workspace_id===e.workspaceId&&p===e.appId&&o.message_count===0&&o.first_message===null&&o.last_message===null&&f===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 g("DB_ERROR","App-launch thread could not be read after insert");return {status:"created",thread:d}},{behavior:"immediate"})}catch(r){throw r instanceof g?r:new g("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=F(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 g("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,f=0,m=0,_=new Set;for(let w of r){if(!existsSync(w))continue;let k=F(w);try{let N=k.db.get(sql`
|
|
334
|
+
SELECT count(*) AS cnt
|
|
335
|
+
FROM tasks child INDEXED BY idx_tasks_thread_id
|
|
336
|
+
WHERE child.thread_id = ${e}
|
|
337
|
+
AND ${this.topLevelTaskPredicateSql()}
|
|
338
|
+
${n?sql`AND child.workspace_id = ${n}`:sql``}
|
|
339
|
+
`);N&&(s+=N.cnt);let R=k.db.get(sql`
|
|
334
340
|
SELECT
|
|
335
|
-
count(*) AS cnt,
|
|
336
341
|
COALESCE(SUM(child.input_tokens), 0) AS total_input,
|
|
337
342
|
COALESCE(SUM(child.output_tokens), 0) AS total_output,
|
|
338
343
|
COALESCE(SUM(child.cached_input_tokens), 0) AS total_cached,
|
|
339
344
|
COALESCE(SUM(child.cost_usd), 0) AS total_cost
|
|
340
|
-
FROM tasks child
|
|
345
|
+
FROM tasks child INDEXED BY idx_tasks_thread_id
|
|
341
346
|
WHERE child.thread_id = ${e}
|
|
342
|
-
AND ${this.topLevelTaskPredicateSql()}
|
|
343
347
|
${n?sql`AND child.workspace_id = ${n}`:sql``}
|
|
344
|
-
`);
|
|
345
|
-
|
|
348
|
+
`);R&&(o+=R.total_input,i+=R.total_output,u+=R.total_cached,d+=R.total_cost);let b=k.db.get(sql`
|
|
349
|
+
WITH RECURSIVE
|
|
350
|
+
own_tasks(task_id) AS (
|
|
351
|
+
SELECT own.id
|
|
352
|
+
FROM tasks own INDEXED BY idx_tasks_thread_id
|
|
353
|
+
WHERE own.thread_id = ${e}
|
|
354
|
+
${n?sql`AND own.workspace_id = ${n}`:sql``}
|
|
355
|
+
),
|
|
356
|
+
descendants(task_id, depth) AS (
|
|
357
|
+
SELECT own.task_id, 0 FROM own_tasks own
|
|
358
|
+
UNION
|
|
359
|
+
SELECT child.id, descendants.depth + 1
|
|
360
|
+
FROM descendants
|
|
361
|
+
JOIN tasks child INDEXED BY idx_tasks_parent_task_id
|
|
362
|
+
ON child.parent_task_id = descendants.task_id
|
|
363
|
+
WHERE descendants.depth < ${sp}
|
|
364
|
+
),
|
|
365
|
+
delegated_ids(task_id) AS (
|
|
366
|
+
SELECT DISTINCT descendants.task_id
|
|
367
|
+
FROM descendants
|
|
368
|
+
WHERE descendants.depth > 0
|
|
369
|
+
AND NOT EXISTS (
|
|
370
|
+
SELECT 1 FROM own_tasks own
|
|
371
|
+
WHERE own.task_id = descendants.task_id
|
|
372
|
+
)
|
|
373
|
+
)
|
|
374
|
+
SELECT
|
|
375
|
+
count(*) AS cnt,
|
|
376
|
+
COALESCE(SUM(task.input_tokens), 0) AS total_input,
|
|
377
|
+
COALESCE(SUM(task.output_tokens), 0) AS total_output,
|
|
378
|
+
COALESCE(SUM(task.cached_input_tokens), 0) AS total_cached,
|
|
379
|
+
COALESCE(SUM(task.cost_usd), 0) AS total_cost
|
|
380
|
+
FROM delegated_ids
|
|
381
|
+
JOIN tasks task ON task.id = delegated_ids.task_id
|
|
382
|
+
`);b&&(c+=b.cnt,l+=b.total_input,p+=b.total_output,f+=b.total_cached,m+=b.total_cost);let y=k.db.all(sql`
|
|
383
|
+
SELECT DISTINCT child.agent_id FROM tasks child INDEXED BY idx_tasks_thread_id
|
|
346
384
|
WHERE child.thread_id = ${e}
|
|
347
385
|
AND child.agent_id IS NOT NULL AND child.agent_id != ''
|
|
348
386
|
AND child.agent_id != 'workflow'
|
|
349
387
|
AND ${this.topLevelTaskPredicateSql()}
|
|
350
388
|
${n?sql`AND child.workspace_id = ${n}`:sql``}
|
|
351
|
-
`);for(let
|
|
389
|
+
`);for(let C of y)_.add(C.agent_id);}catch(N){throw new g("DB_ERROR","Failed to aggregate task stats",N)}finally{k.close();}}return {taskCount:s,inputTokens:o,outputTokens:i,cachedInputTokens:u,costUsd:d,agentIds:Array.from(_),delegated:{taskCount:c,inputTokens:l,outputTokens:p,cachedInputTokens:f,costUsd:m}}}findTopLevelTasks(e,n,r){let s=this.resolveDbPaths(),o=new Set,i=[];for(let u of s){if(!existsSync(u))continue;let d=F(u);try{let c;r!==void 0?c=d.db.all(sql`
|
|
352
390
|
SELECT * FROM (
|
|
353
391
|
SELECT child.*,
|
|
354
392
|
ROW_NUMBER() OVER (PARTITION BY child.agent_id ORDER BY child.started_at DESC) AS rn
|
|
@@ -427,7 +465,7 @@ Message: ${n.message}
|
|
|
427
465
|
FROM tasks AS child
|
|
428
466
|
LEFT JOIN tasks AS parent ON parent.id = child.parent_task_id
|
|
429
467
|
WHERE child.id IN (${sql.join(e.map(n=>sql`${n}`),sql`, `)})
|
|
430
|
-
`}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=F(o);try{for(let u=0;u<e.length;u+=Er){let d=e.slice(u,u+Er),l=i.db.all(this.findCreatorPointersQuery(d,n)).filter(
|
|
468
|
+
`}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=F(o);try{for(let u=0;u<e.length;u+=Er){let d=e.slice(u,u+Er),l=i.db.all(this.findCreatorPointersQuery(d,n)).filter(R=>!r.has(R.thread_id)),p=l.filter(R=>R.creator_task_id!==null&&R.creator_pointer_unverified===0&&R.creator_actor_kind===null).map(R=>R.creator_task_id),f=p.length>0?i.db.all(this.findTaskOriginLineageQuery(p)):[],m=new Map(f.map(R=>[R.task_id,R])),_=new Map(l.map(R=>[R.thread_id,R])),w=d.filter(R=>{if(r.has(R))return !1;let b=_.get(R);return b?!(b.creator_task_id!==null&&b.creator_pointer_unverified===0)&&b.created_by_kind===null:!0}),k=w.length>0?i.db.all(this.findThreadOriginsQuery(w,n)):[],N=new Map(k.map(R=>[R.thread_id,R]));for(let R of l){if(r.has(R.thread_id))continue;let b=Ga(R,R.created_by_task_id!==null?m.get(R.created_by_task_id):void 0,N.get(R.thread_id));b&&r.set(R.thread_id,b);}for(let R of k)r.has(R.thread_id)||_.has(R.thread_id)||r.set(R.thread_id,wr(R));}}catch(u){throw new g("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=>Va(s.get(u),e));return this.readThreadRowsByIds(o,n,"Failed to find threads by origin").sort(Ja)}findRecentDirectThreads(e,n=5){if(typeof e!="string"||e.trim().length===0)throw new g("VALIDATION","workspaceId is required");if(!Number.isInteger(n)||n<=0)throw new g("VALIDATION","limit must be a positive integer");let r=this.readThreadSortKeys(e).sort(Ja),s=[],o=new Map;for(let c=0;c<r.length;c+=Ka){let l=r.slice(c,c+Ka),p=this.findThreadOrigins(l.map(f=>f.id),e);for(let[f,m]of p)o.set(f,m);for(let f of l)if(Va(p.get(f.id),"direct")&&(s.push(f.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=F(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=F(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=F(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 g?o:new g("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:Re.id}).from(Re).where(eq(Re.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&&!Ya(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 g?s:new g("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:Re.id}).from(Re).where(eq(Re.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&&!Ya(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 g?i:new g("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`
|
|
431
469
|
UPDATE threads
|
|
432
470
|
SET first_message = COALESCE(first_message, ${n}),
|
|
433
471
|
title = CASE WHEN title_locked = 0 AND title IS NULL THEN substr(${n}, 1, 60) ELSE title END,
|
|
@@ -435,11 +473,11 @@ Message: ${n.message}
|
|
|
435
473
|
message_count = message_count + 1,
|
|
436
474
|
updated_at = ${o}
|
|
437
475
|
WHERE id = ${e}
|
|
438
|
-
`),c},{behavior:"immediate"})}}catch(o){throw o instanceof g?o:new g("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(k).set({last_message:n,updated_at:o}).where(eq(k.id,e)).run();}catch(o){throw o instanceof g?o:new g("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(k).set(s).where(eq(k.id,e)).run();}catch(s){throw s instanceof g?s:new g("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 Qt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(s).some(d=>d!=="priority"&&d!=="state"))return new Qt("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 Qt("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 Qt("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(k.id,e),eq(k.workspace_id,r)):eq(k.id,e);return u.db.transaction(c=>{let l=c.select({metadata:k.metadata}).from(k).where(d).get();if(!l)return null;let p=Xt(l.metadata),f=p.threadTitle,m=f&&typeof f=="object"&&!Array.isArray(f)?{...f}:{};i.priority===null?delete m.priority:i.priority!==void 0&&(m.priority=i.priority),i.state===null?delete m.state:i.state!==void 0&&(m.state=i.state),Object.keys(m).length>0?p.threadTitle=m:delete p.threadTitle;let _=Object.keys(p).length>0?JSON.stringify(p):null,w=new Date().toISOString();c.update(k).set({metadata:_,updated_at:w}).where(d).run();let T=c.select({metadata:k.metadata}).from(k).where(d).get();if(!T)throw new g("DB_ERROR","Thread-title metadata update could not be read back");let P=sp(T.metadata);return {threadId:e,priority:P.priority,state:P.state}},{behavior:"immediate"})}catch(d){throw d instanceof g?d:new g("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(k.id,e),eq(k.workspace_id,n)):eq(k.id,e);return r.db.transaction(o=>{let i=o.select({pinned:k.pinned,metadata:k.metadata}).from(k).where(s).get();if(!i)return null;let u=i.pinned?0:1,d=Xt(i.metadata);if(u){let c=n?and(eq(k.pinned,1),eq(k.workspace_id,n)):eq(k.pinned,1),l=o.select({metadata:k.metadata}).from(k).where(c).all(),p=null;for(let f of l){let m=Xt(f.metadata);typeof m.pinOrder=="number"&&(p===null||m.pinOrder<p)&&(p=m.pinOrder);}d.pinOrder=p===null?0:p-1;}else delete d.pinOrder;return o.update(k).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 g?s:new g("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(k.id,e[o]),eq(k.workspace_id,n)):eq(k.id,e[o]),u=s.select({metadata:k.metadata}).from(k).where(i).get();if(!u)continue;let d=Xt(u.metadata);d.pinOrder=o+1,s.update(k).set({metadata:JSON.stringify(d)}).where(i).run();}},{behavior:"immediate"});}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to reorder pins",s)}finally{r.close();}}toggleStar(e,n){let r=this.openHandle(true);try{let s=n?and(eq(k.id,e),eq(k.workspace_id,n)):eq(k.id,e),o=r.db.select({starred:k.starred}).from(k).where(s).get();if(!o)return null;let i=o.starred?0:1;return r.db.update(k).set({starred:i}).where(s).run(),{starred:!!i}}catch(s){throw s instanceof g?s:new g("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(k.id,e),eq(k.workspace_id,n)):eq(k.id,e);return i.db.transaction(c=>{let l=c.select({metadata:k.metadata}).from(k).where(u).get();if(!l)return null;let p=l.metadata?JSON.parse(l.metadata):{},f=p.overdrive??{},m=s?.defaultTurns??f.defaultTurns??3,_=s?.updatedBy??"ui",w=new Date().toISOString(),T,P,S,D;switch(r){case "enable-count":{let E=s?.turns??m,N=s?.consumeCurrent?Math.max(E-1,0):E;T=N>0?"count":"off",P=N,S=!0,D="count";break}case "enable-latch":{T="latch",P=0,S=!0,D="latch";break}case "disable":{T="off",P=0,S=!1;break}default:{let E=f.state??"off",N=typeof f.remaining=="number"?f.remaining:0;if(E==="count"&&N>0){let x=N-1;x<=0?(T="off",P=0):(T="count",P=x),S=!0,D="count";}else E==="latch"?(T="latch",P=0,S=!0,D="latch"):(T="off",P=0,S=!1);break}}return p.overdrive={state:T,remaining:P,defaultTurns:m,updatedAt:w,updatedBy:_},c.update(k).set({metadata:JSON.stringify(p),updated_at:w}).where(u).run(),{applied:S,appliedMode:D,state:T,remaining:P}},{behavior:"immediate"})}catch(u){throw u instanceof g?u:new g("DB_ERROR","Failed to resolve overdrive",u)}finally{i.close();}}};h();ut();vt();xt();at();h();var js="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function op(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+=js[s%62]);}for(;n.length<t;)n+=js[randomBytes(1)[0]%62];return n}function bn(t){return `${t}_${op(8)}`}function Qa(t,e){let{createHash:n}=At("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+=js[i%62];return `${t}_${o}`}Ct();h();var ip=["urgent","high","medium","low"],ap=["investigating","in-progress","in-review","on-hold","done"],Za="custom:";var dp=new Set(ip),up=new Set(ap);function Gs(t){return typeof t=="string"&&dp.has(t)}function zs(t){if(typeof t!="string")return false;if(up.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(Za))return false;let e=t.slice(Za.length);return e.length>=1&&e.length<=20}function ed(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 Ks(t){let e=ed(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,s={};return Gs(r.priority)&&(s.priority=r.priority),zs(r.state)&&(s.state=r.state),s}function td(t,e){let n=ed(t)??{},r={...Ks(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)}cr();var gp="regeneration_replaced";var hp="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var _p="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",Ys=class extends g{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;}},Mn=class extends Ys{},Xs=class extends g{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},mp=new Set(Ko),kp=new Set(zo),Tp=new Set(Vo),wp=new Set(Jo),yp=50,rd=100,sd=280,od=40,Ep=new Set(Yo),Sr=["queued","running"];function Js(t){return Ep.has(t)}function j(t){throw new g("VALIDATION",t)}function $e(t){throw new g("NOT_FOUND",t)}function M(t,e){(typeof t!="string"||t.trim().length===0)&&j(`${e} is required`);}function Nn(t={}){let e=t.actor??t,n=e.actorType??"system";return mp.has(n)||j(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&j("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function Rp(t){M(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&M(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&j("title must not be empty"),t.title.length>120&&j("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!Gs(t.priority)&&j(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!zs(t.state)&&j(`invalid state: ${String(t.state)}`);}function Sp(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&j("beforeSeq and afterSeq cannot be used together");for(let[n,r]of [["beforeSeq",t.beforeSeq],["afterSeq",t.afterSeq]])r!==void 0&&(!Number.isInteger(r)||r<0)&&j(`${n} must be a non-negative integer`);let e=t.limit??yp;return (!Number.isInteger(e)||e<1||e>rd)&&j(`limit must be between 1 and ${rd}`),e}function Qs(t){typeof t!="string"&&j("text is required");let e=t.trim();return e.length===0&&j("text must not be empty"),e.length>sd&&j(`text must be at most ${sd} characters`),e}function Qe(t,e){return M(t??"",e),t}function Zs(t){wp.has(t)||j(`invalid highlight kind: ${String(t)}`);}function Ip(t){Tp.has(t)||j(`invalid highlight source: ${String(t)}`);}function Ap(t){M(t.threadId,"threadId"),M(t.workspaceId,"workspaceId");let e=t.source??"manual";Ip(e),Zs(t.kind);let n=Qs(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=Qe(l,"taskId");return (r!==p||s!==p)&&j("manual highlights must cover exactly one task"),{source:e,kind:t.kind,text:n,coversFromTaskId:p,coversToTaskId:p,agentId:t.agentId??null,sourceTaskId:null,detectorVersion:null,contentFingerprint:null}}let o=Qe(r,"coversFromTaskId"),i=Qe(s,"coversToTaskId"),u=t.sourceTaskId??o,d=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return Qe(u??void 0,"sourceTaskId"),Qe(d??void 0,"detectorVersion"),Qe(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 Op(t,e){(!t||typeof t!="object")&&j(`candidates[${e}] is required`),Zs(t.kind);let n=Qs(t.text),r=Qe(t.anchorTaskId,`candidates[${e}].anchorTaskId`),s=Qe(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),o=Qe(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||Qa("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o}));return M(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o,contentFingerprint:i}}function vp(t){Array.isArray(t)||j("candidates must be an array"),t.length>od&&j(`candidates must contain at most ${od} items`);let e=new Map;for(let[n,r]of t.entries()){let s=Op(r,n);e.set(s.contentFingerprint,s);}return [...e.values()]}function Ln(t){let e=Ks(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 bp(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&j("event payload must be a JSON object"),e}catch(e){throw new g("VALIDATION","event payload must be JSON serializable",e)}}function Cn(t,e){return t.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,e)).get()?.maxSeq??0}function Pn(t,e){return !!t.select({id:W.id}).from(W).where(eq(W.thread_id,e)).limit(1).get()}function St(t,e){kp.has(e.type)||j(`invalid thread event type: ${String(e.type)}`);let n=bn("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:bp(e.payload),created_at:e.createdAt}).run();let r=t.select().from(W).where(eq(W.id,n)).get();if(!r)throw new g("DB_ERROR","Thread event insert did not return a row");return r}function Dn(t,e,n,r,s){let o=Ln(e);St(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 Ar(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 Ir(t,e,n,r,s,o,i){let u=s==="thread.highlight.created"?Ar(e):{before:i?Ar({...e,...i,id:e.id}):void 0,after:Ar(e)};return St(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 xp(t,e,n,r,s,o){return St(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:Ar(e),...o??{}}})}var Or=class extends Ee{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 g("NOT_FOUND","Database not found");if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}let r=F(n);if(e)try{Fe(r.db,n);}catch(s){throw r.close(),s}return r}findThread(e,n,r){let s=eq(k.id,n),o=r===void 0?s:r===null?and(s,isNull(k.workspace_id)):and(s,eq(k.workspace_id,r));return e.select().from(k).where(o).limit(1).get()}findRegenerationRun(e,n,r){let s=e.select().from(U).where(eq(U.id,n)).limit(1).get();if(s&&!(r!==void 0&&!this.findThread(e,s.thread_id,r)))return s}resolveWorkspaceId(e){if(M(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:k.workspace_id}).from(k).where(eq(k.id,e)).limit(1).get()?.workspaceId??null}catch(r){throw r instanceof g?r:new g("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if(M(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let s=this.findThread(r.db,e,n);return s?Ln(s):null}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to read thread snapshot",s)}finally{r.close();}}updateSnapshot(e){Rp(e);let n=Nn(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||$e(`Thread ${e.threadId} not found`);let u=Ln(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,f=e.state!==void 0&&e.state!==u.state,m=c||p||f;if(!m&&!l)return u;let _=i.metadata;(p||f)&&(_=td(i.metadata,{priority:e.priority,state:e.state}));let w={};if(m&&(w.metadata=_,w.updated_at=r),c&&(w.title=e.title),d&&(w.title_locked=1),o.update(k).set(w).where(e.workspaceId===void 0?eq(k.id,e.threadId):e.workspaceId===null?and(eq(k.id,e.threadId),isNull(k.workspace_id)):and(eq(k.id,e.threadId),eq(k.workspace_id,e.workspaceId))).run(),!m){let S={...i,title_locked:1};return Ln(S)}let T=Cn(o,i.id)+1;Pn(o,i.id)||(Dn(o,i,n,r,T),T+=1),c&&(St(o,{threadId:i.id,seq:T,type:"thread.title.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.title,after:e.title}}),T+=1),p&&(St(o,{threadId:i.id,seq:T,type:"thread.priority.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.priority,after:e.priority}}),T+=1),f&&St(o,{threadId:i.id,seq:T,type:"thread.state.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:u.state,after:e.state}});let P={...i,title:c?e.title:i.title,metadata:_,title_locked:d?1:i.title_locked,updated_at:r};return Ln(P)},{behavior:"immediate"})}catch(o){throw o instanceof g?o:new g("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(M(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 g?s:new g("DB_ERROR","Failed to read latest thread event sequence",s)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if(M(e,"threadId"),M(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,[...ma,"completed","done","error"]),or$1(isNull(a.parent_task_id),eq(a.parent_task_id,"")),sql`${a.result} IS NOT NULL AND length(trim(${a.result})) > 0`)).orderBy(asc(a.started_at),asc(a.id)).all().map(i=>({taskId:i.taskId,prompt:i.prompt,result:i.result,status:i.status,startedAt:i.startedAt,completedAt:i.completedAt})):null}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to read completed thread highlight turns",s)}finally{r.close();}}createHighlightRegenerationRun(e){M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.requestId,"requestId"),M(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&M(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findThread(s,e.threadId,e.workspaceId);o||$e(`Thread ${e.threadId} not found`);let i=s.select().from(U).where(and(eq(U.thread_id,o.id),eq(U.request_id,e.requestId))).orderBy(desc(U.requested_at),desc(U.id)).limit(1).get();if(i)return {run:i,created:!1};let u=s.select().from(U).where(and(eq(U.thread_id,o.id),inArray(U.status,Sr))).orderBy(asc(U.requested_at),asc(U.id)).limit(1).get();if(u)throw new Xs(u);let d=e.runId??bn("thr");s.insert(U).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(U).where(eq(U.id,d)).get();if(!c)throw new g("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:c,created:!0}},{behavior:"immediate"})}catch(s){throw s instanceof g?s:new g("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(M(e,"runId"),n!==void 0&&M(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 g?s:new g("DB_ERROR","Failed to read highlight regeneration run",s)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if(M(e,"threadId"),M(n,"workspaceId"),M(r,"requestId"),!existsSync(this.resolveDbPath()))return null;let s=this.openHandle(false);try{return this.findThread(s.db,e,n)?s.db.select().from(U).where(and(eq(U.thread_id,e),eq(U.request_id,r))).orderBy(desc(U.requested_at),desc(U.id)).limit(1).get()??null:null}catch(o){throw o instanceof g?o:new g("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){M(e,"runId"),n!==void 0&&M(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||$e(`Highlight regeneration run ${e} not found`),Js(i.status)||j(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;o.update(U).set({status:"running",started_at:r}).where(and(eq(U.id,i.id),eq(U.status,"queued"))).run();let u=o.select().from(U).where(eq(U.id,i.id)).get();if(!u)throw new g("DB_ERROR","Highlight regeneration run start did not return a row");return u},{behavior:"immediate"})}catch(o){throw o instanceof g?o:new g("DB_ERROR","Failed to start highlight regeneration run",o)}finally{s.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){M(e.runId,"runId"),M(e.errorCode,"errorCode"),e.workspaceId!==void 0&&M(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findRegenerationRun(s,e.runId,e.workspaceId);if(o||$e(`Highlight regeneration run ${e.runId} not found`),Js(o.status)||j(`invalid highlight regeneration status: ${o.status}`),o.status==="completed"||o.status==="failed")return o;s.update(U).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(and(eq(U.id,o.id),inArray(U.status,Sr))).run();let i=s.select().from(U).where(eq(U.id,o.id)).get();if(!i)throw new g("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to fail highlight regeneration run",s)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=hp){M(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>s.update(U).set({status:"failed",completed_at:n,error_code:e}).where(inArray(U.status,Sr)).run().changes,{behavior:"immediate"})}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to recover interrupted highlight runs",s)}finally{r.close();}}completeHighlightRegenerationRun(e){M(e.runId,"runId"),M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.detectorVersion,"detectorVersion");let n=vp(e.candidates),r=Nn(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)&&$e(`Highlight regeneration run ${e.runId} not found`),Js(u.status)||j(`invalid highlight regeneration status: ${u.status}`),u.status==="failed")throw new g("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||$e(`Thread ${e.threadId} not found`),u.detector_version!==e.detectorVersion&&j("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(x=>x.contentFingerprint)),p=c.filter(x=>x.source==="auto"&&x.status==="active"&&x.revision===0&&!l.has(x.content_fingerprint??"")),f=c.filter(x=>x.source==="auto"&&x.status==="active").length,m=new Set(c.filter(x=>!p.includes(x)&&x.content_fingerprint).map(x=>x.content_fingerprint)),_=n.filter(x=>!m.has(x.contentFingerprint)),w=new Date().toISOString(),T=Cn(i,d.id)+1;Pn(i,d.id)||(Dn(i,d,r,w,T),T+=1);for(let x of p)i.delete(H).where(eq(H.id,x.id)).run(),xp(i,x,r,w,T,{runId:e.runId,reason:gp}),T+=1;let P=0,S=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let x of _){let X=bn("thl");i.insert(H).values({id:X,thread_id:d.id,source:"auto",kind:x.kind,status:"active",text:x.text,covers_from_task_id:x.coversFromTaskId,covers_to_task_id:x.coversToTaskId,revision:0,created_at:w,updated_at:w,agent_id:S,source_task_id:x.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:x.contentFingerprint,dismissed_at:null}).run();let le=i.select().from(H).where(eq(H.id,X)).get();if(!le)throw new g("DB_ERROR","Regenerated highlight insert did not return a row");Ir(i,le,r,w,"thread.highlight.created",T),T+=1,P+=1;}let E=i.select().from(H).where(eq(H.thread_id,d.id)).all().filter(x=>x.source==="auto"&&x.status==="active").length;St(i,{threadId:d.id,seq:T,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:w,payload:{runId:u.id,detectorVersion:e.detectorVersion,previousAutoCount:f,newAutoCount:E,deletedCount:p.length,createdCount:P}}),i.update(U).set({status:"completed",started_at:u.started_at??w,completed_at:w,error_code:null,previous_auto_count:f,new_auto_count:E}).where(and(eq(U.id,u.id),inArray(U.status,Sr))).run();let N=i.select().from(U).where(eq(U.id,u.id)).get();if(!N)throw new g("DB_ERROR","Highlight regeneration completion did not return a row");return {run:N,deletedCount:p.length,createdCount:P,previousAutoCount:f,newAutoCount:E}},{behavior:"immediate"})}catch(i){if(o)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:_p});}catch{}throw i instanceof g?i:new g("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;M(s.threadId,"threadId"),M(s.workspaceId,"workspaceId");let o=Sp(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(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,f=l[0];return f&&(p=!!i.db.select({id:W.id}).from(W).where(and(eq(W.thread_id,s.threadId),lt(W.seq,f.seq))).limit(1).get()),{items:l,latestSeq:u,hasMoreOlder:p}}catch(u){throw u instanceof g?u:new g("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=Ap(e),r=Nn(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||$e(`Thread ${e.threadId} not found`),n.source==="auto"){let f=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(f)return f}let d=e.id??bn("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 g("DB_ERROR","Highlight insert did not return a row");let p=Cn(i,u.id)+1;return Pn(i,u.id)||(Dn(i,u,r,s,p),p+=1),Ir(i,l,r,s,"thread.highlight.created",p),l},{behavior:"immediate"})}catch(i){throw i instanceof g?i:new g("DB_ERROR","Failed to create thread highlight",i)}finally{o.close();}}updateHighlight(e){M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&j("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&j("highlight update requires at least one field"),e.kind!==void 0&&Zs(e.kind);let n=e.text===void 0?void 0:Qs(e.text),r=Nn(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||$e(`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||$e(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new Mn(u.id,d.id,e.expectedRevision,d.revision);if(d.status!=="active")throw new Mn(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,f=e.coversToTaskId??d.covers_to_task_id;(!l||p.length===0||f.length===0)&&j("highlight projection is incomplete");let m=c!==d.kind||l!==d.text||p!==d.covers_from_task_id||f!==d.covers_to_task_id,_=r.actorType==="user"&&d.source==="auto"&&m?"manual":d.source;if(!(m||_!==d.source))return d;let T=d.revision+1;i.update(H).set({source:_,kind:c,text:l,covers_from_task_id:p,covers_to_task_id:f,revision:T,updated_at:s}).where(and(eq(H.id,d.id),eq(H.revision,d.revision))).run();let P=i.select().from(H).where(eq(H.id,d.id)).get();if(!P)throw new g("DB_ERROR","Highlight update did not return a row");let S=Cn(i,u.id)+1;return Pn(i,u.id)||(Dn(i,u,r,s,S),S+=1),Ir(i,P,r,s,"thread.highlight.updated",S,d),P},{behavior:"immediate"})}catch(i){throw i instanceof g?i:new g("DB_ERROR","Failed to update thread highlight",i)}finally{o.close();}}dismissHighlight(e){M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&j("expectedRevision must be a non-negative integer");let n=Nn(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||$e(`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||$e(`Highlight ${e.highlightId} not found`),u.revision!==e.expectedRevision)throw new Mn(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 g("DB_ERROR","Highlight dismissal did not return a row");let l=Cn(o,i.id)+1;return Pn(o,i.id)||(Dn(o,i,n,r,l),l+=1),Ir(o,c,n,r,"thread.highlight.deleted",l,u),c},{behavior:"immediate"})}catch(o){throw o instanceof g?o:new g("DB_ERROR","Failed to dismiss thread highlight",o)}finally{s.close();}}listActiveHighlights(e,n,r={}){if(M(e,"threadId"),M(n,"workspaceId"),r.taskId!==void 0&&M(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&M(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&M(r.coversToTaskId,"coversToTaskId"),!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`
|
|
476
|
+
`),c},{behavior:"immediate"})}}catch(o){throw o instanceof g?o:new g("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 g?o:new g("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 g?s:new g("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 Qt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(s).some(d=>d!=="priority"&&d!=="state"))return new Qt("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 Qt("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 Qt("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=Xt(l.metadata),f=p.threadTitle,m=f&&typeof f=="object"&&!Array.isArray(f)?{...f}:{};i.priority===null?delete m.priority:i.priority!==void 0&&(m.priority=i.priority),i.state===null?delete m.state:i.state!==void 0&&(m.state=i.state),Object.keys(m).length>0?p.threadTitle=m:delete p.threadTitle;let _=Object.keys(p).length>0?JSON.stringify(p):null,w=new Date().toISOString();c.update(T).set({metadata:_,updated_at:w}).where(d).run();let k=c.select({metadata:T.metadata}).from(T).where(d).get();if(!k)throw new g("DB_ERROR","Thread-title metadata update could not be read back");let N=op(k.metadata);return {threadId:e,priority:N.priority,state:N.state}},{behavior:"immediate"})}catch(d){throw d instanceof g?d:new g("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=Xt(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 f of l){let m=Xt(f.metadata);typeof m.pinOrder=="number"&&(p===null||m.pinOrder<p)&&(p=m.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 g?s:new g("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=Xt(u.metadata);d.pinOrder=o+1,s.update(T).set({metadata:JSON.stringify(d)}).where(i).run();}},{behavior:"immediate"});}catch(s){throw s instanceof g?s:new g("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 g?s:new g("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):{},f=p.overdrive??{},m=s?.defaultTurns??f.defaultTurns??3,_=s?.updatedBy??"ui",w=new Date().toISOString(),k,N,R,b;switch(r){case "enable-count":{let y=s?.turns??m,C=s?.consumeCurrent?Math.max(y-1,0):y;k=C>0?"count":"off",N=C,R=!0,b="count";break}case "enable-latch":{k="latch",N=0,R=!0,b="latch";break}case "disable":{k="off",N=0,R=!1;break}default:{let y=f.state??"off",C=typeof f.remaining=="number"?f.remaining:0;if(y==="count"&&C>0){let P=C-1;P<=0?(k="off",N=0):(k="count",N=P),R=!0,b="count";}else y==="latch"?(k="latch",N=0,R=!0,b="latch"):(k="off",N=0,R=!1);break}}return p.overdrive={state:k,remaining:N,defaultTurns:m,updatedAt:w,updatedBy:_},c.update(T).set({metadata:JSON.stringify(p),updated_at:w}).where(u).run(),{applied:R,appliedMode:b,state:k,remaining:N}},{behavior:"immediate"})}catch(u){throw u instanceof g?u:new g("DB_ERROR","Failed to resolve overdrive",u)}finally{i.close();}}};h();ut();vt();xt();at();h();var js="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function ip(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+=js[s%62]);}for(;n.length<t;)n+=js[randomBytes(1)[0]%62];return n}function bn(t){return `${t}_${ip(8)}`}function Qa(t,e){let{createHash:n}=At("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+=js[i%62];return `${t}_${o}`}Ct();h();var ap=["urgent","high","medium","low"],dp=["investigating","in-progress","in-review","on-hold","done"],Za="custom:";var up=new Set(ap),cp=new Set(dp);function Gs(t){return typeof t=="string"&&up.has(t)}function zs(t){if(typeof t!="string")return false;if(cp.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(Za))return false;let e=t.slice(Za.length);return e.length>=1&&e.length<=20}function ed(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 Ks(t){let e=ed(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,s={};return Gs(r.priority)&&(s.priority=r.priority),zs(r.state)&&(s.state=r.state),s}function td(t,e){let n=ed(t)??{},r={...Ks(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)}cr();var hp="regeneration_replaced";var _p="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var mp="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",Ys=class extends g{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;}},Mn=class extends Ys{},Xs=class extends g{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},kp=new Set(Ko),Tp=new Set(zo),wp=new Set(Vo),yp=new Set(Jo),Ep=50,rd=100,sd=280,od=40,Rp=new Set(Yo),Sr=["queued","running"];function Js(t){return Rp.has(t)}function j(t){throw new g("VALIDATION",t)}function $e(t){throw new g("NOT_FOUND",t)}function M(t,e){(typeof t!="string"||t.trim().length===0)&&j(`${e} is required`);}function Nn(t={}){let e=t.actor??t,n=e.actorType??"system";return kp.has(n)||j(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&j("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function Sp(t){M(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&M(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&j("title must not be empty"),t.title.length>120&&j("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!Gs(t.priority)&&j(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!zs(t.state)&&j(`invalid state: ${String(t.state)}`);}function Ip(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&j("beforeSeq and afterSeq cannot be used together");for(let[n,r]of [["beforeSeq",t.beforeSeq],["afterSeq",t.afterSeq]])r!==void 0&&(!Number.isInteger(r)||r<0)&&j(`${n} must be a non-negative integer`);let e=t.limit??Ep;return (!Number.isInteger(e)||e<1||e>rd)&&j(`limit must be between 1 and ${rd}`),e}function Qs(t){typeof t!="string"&&j("text is required");let e=t.trim();return e.length===0&&j("text must not be empty"),e.length>sd&&j(`text must be at most ${sd} characters`),e}function Qe(t,e){return M(t??"",e),t}function Zs(t){yp.has(t)||j(`invalid highlight kind: ${String(t)}`);}function Ap(t){wp.has(t)||j(`invalid highlight source: ${String(t)}`);}function Op(t){M(t.threadId,"threadId"),M(t.workspaceId,"workspaceId");let e=t.source??"manual";Ap(e),Zs(t.kind);let n=Qs(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=Qe(l,"taskId");return (r!==p||s!==p)&&j("manual highlights must cover exactly one task"),{source:e,kind:t.kind,text:n,coversFromTaskId:p,coversToTaskId:p,agentId:t.agentId??null,sourceTaskId:null,detectorVersion:null,contentFingerprint:null}}let o=Qe(r,"coversFromTaskId"),i=Qe(s,"coversToTaskId"),u=t.sourceTaskId??o,d=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return Qe(u??void 0,"sourceTaskId"),Qe(d??void 0,"detectorVersion"),Qe(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 vp(t,e){(!t||typeof t!="object")&&j(`candidates[${e}] is required`),Zs(t.kind);let n=Qs(t.text),r=Qe(t.anchorTaskId,`candidates[${e}].anchorTaskId`),s=Qe(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),o=Qe(t.coversToTaskId,`candidates[${e}].coversToTaskId`),i=t.contentFingerprint?.trim()||Qa("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o}));return M(i,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:s,coversToTaskId:o,contentFingerprint:i}}function bp(t){Array.isArray(t)||j("candidates must be an array"),t.length>od&&j(`candidates must contain at most ${od} items`);let e=new Map;for(let[n,r]of t.entries()){let s=vp(r,n);e.set(s.contentFingerprint,s);}return [...e.values()]}function Ln(t){let e=Ks(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 xp(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&j("event payload must be a JSON object"),e}catch(e){throw new g("VALIDATION","event payload must be JSON serializable",e)}}function Cn(t,e){return t.select({maxSeq:sql`COALESCE(MAX(${W.seq}), 0)`}).from(W).where(eq(W.thread_id,e)).get()?.maxSeq??0}function Pn(t,e){return !!t.select({id:W.id}).from(W).where(eq(W.thread_id,e)).limit(1).get()}function St(t,e){Tp.has(e.type)||j(`invalid thread event type: ${String(e.type)}`);let n=bn("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:xp(e.payload),created_at:e.createdAt}).run();let r=t.select().from(W).where(eq(W.id,n)).get();if(!r)throw new g("DB_ERROR","Thread event insert did not return a row");return r}function Dn(t,e,n,r,s){let o=Ln(e);St(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 Ar(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 Ir(t,e,n,r,s,o,i){let u=s==="thread.highlight.created"?Ar(e):{before:i?Ar({...e,...i,id:e.id}):void 0,after:Ar(e)};return St(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 Np(t,e,n,r,s,o){return St(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:Ar(e),...o??{}}})}var Or=class extends Ee{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 g("NOT_FOUND","Database not found");if(e){let s=dirname(n);existsSync(s)||mkdirSync(s,{recursive:true});}let r=F(n);if(e)try{Fe(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(U).where(eq(U.id,n)).limit(1).get();if(s&&!(r!==void 0&&!this.findThread(e,s.thread_id,r)))return s}resolveWorkspaceId(e){if(M(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 g?r:new g("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if(M(e,"threadId"),!existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let s=this.findThread(r.db,e,n);return s?Ln(s):null}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to read thread snapshot",s)}finally{r.close();}}updateSnapshot(e){Sp(e);let n=Nn(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||$e(`Thread ${e.threadId} not found`);let u=Ln(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,f=e.state!==void 0&&e.state!==u.state,m=c||p||f;if(!m&&!l)return u;let _=i.metadata;(p||f)&&(_=td(i.metadata,{priority:e.priority,state:e.state}));let w={};if(m&&(w.metadata=_,w.updated_at=r),c&&(w.title=e.title),d&&(w.title_locked=1),o.update(T).set(w).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(),!m){let R={...i,title_locked:1};return Ln(R)}let k=Cn(o,i.id)+1;Pn(o,i.id)||(Dn(o,i,n,r,k),k+=1),c&&(St(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&&(St(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),f&&St(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:_,title_locked:d?1:i.title_locked,updated_at:r};return Ln(N)},{behavior:"immediate"})}catch(o){throw o instanceof g?o:new g("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(M(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 g?s:new g("DB_ERROR","Failed to read latest thread event sequence",s)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if(M(e,"threadId"),M(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,[...ma,"completed","done","error"]),or$1(isNull(a.parent_task_id),eq(a.parent_task_id,"")),sql`${a.result} IS NOT NULL AND length(trim(${a.result})) > 0`)).orderBy(asc(a.started_at),asc(a.id)).all().map(i=>({taskId:i.taskId,prompt:i.prompt,result:i.result,status:i.status,startedAt:i.startedAt,completedAt:i.completedAt})):null}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to read completed thread highlight turns",s)}finally{r.close();}}createHighlightRegenerationRun(e){M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.requestId,"requestId"),M(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&M(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findThread(s,e.threadId,e.workspaceId);o||$e(`Thread ${e.threadId} not found`);let i=s.select().from(U).where(and(eq(U.thread_id,o.id),eq(U.request_id,e.requestId))).orderBy(desc(U.requested_at),desc(U.id)).limit(1).get();if(i)return {run:i,created:!1};let u=s.select().from(U).where(and(eq(U.thread_id,o.id),inArray(U.status,Sr))).orderBy(asc(U.requested_at),asc(U.id)).limit(1).get();if(u)throw new Xs(u);let d=e.runId??bn("thr");s.insert(U).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(U).where(eq(U.id,d)).get();if(!c)throw new g("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:c,created:!0}},{behavior:"immediate"})}catch(s){throw s instanceof g?s:new g("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(M(e,"runId"),n!==void 0&&M(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 g?s:new g("DB_ERROR","Failed to read highlight regeneration run",s)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if(M(e,"threadId"),M(n,"workspaceId"),M(r,"requestId"),!existsSync(this.resolveDbPath()))return null;let s=this.openHandle(false);try{return this.findThread(s.db,e,n)?s.db.select().from(U).where(and(eq(U.thread_id,e),eq(U.request_id,r))).orderBy(desc(U.requested_at),desc(U.id)).limit(1).get()??null:null}catch(o){throw o instanceof g?o:new g("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){M(e,"runId"),n!==void 0&&M(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||$e(`Highlight regeneration run ${e} not found`),Js(i.status)||j(`invalid highlight regeneration status: ${i.status}`),i.status!=="queued")return i;o.update(U).set({status:"running",started_at:r}).where(and(eq(U.id,i.id),eq(U.status,"queued"))).run();let u=o.select().from(U).where(eq(U.id,i.id)).get();if(!u)throw new g("DB_ERROR","Highlight regeneration run start did not return a row");return u},{behavior:"immediate"})}catch(o){throw o instanceof g?o:new g("DB_ERROR","Failed to start highlight regeneration run",o)}finally{s.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){M(e.runId,"runId"),M(e.errorCode,"errorCode"),e.workspaceId!==void 0&&M(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>{let o=this.findRegenerationRun(s,e.runId,e.workspaceId);if(o||$e(`Highlight regeneration run ${e.runId} not found`),Js(o.status)||j(`invalid highlight regeneration status: ${o.status}`),o.status==="completed"||o.status==="failed")return o;s.update(U).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(and(eq(U.id,o.id),inArray(U.status,Sr))).run();let i=s.select().from(U).where(eq(U.id,o.id)).get();if(!i)throw new g("DB_ERROR","Highlight regeneration run failure did not return a row");return i},{behavior:"immediate"})}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to fail highlight regeneration run",s)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=_p){M(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(s=>s.update(U).set({status:"failed",completed_at:n,error_code:e}).where(inArray(U.status,Sr)).run().changes,{behavior:"immediate"})}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to recover interrupted highlight runs",s)}finally{r.close();}}completeHighlightRegenerationRun(e){M(e.runId,"runId"),M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.detectorVersion,"detectorVersion");let n=bp(e.candidates),r=Nn(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)&&$e(`Highlight regeneration run ${e.runId} not found`),Js(u.status)||j(`invalid highlight regeneration status: ${u.status}`),u.status==="failed")throw new g("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||$e(`Thread ${e.threadId} not found`),u.detector_version!==e.detectorVersion&&j("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(P=>P.contentFingerprint)),p=c.filter(P=>P.source==="auto"&&P.status==="active"&&P.revision===0&&!l.has(P.content_fingerprint??"")),f=c.filter(P=>P.source==="auto"&&P.status==="active").length,m=new Set(c.filter(P=>!p.includes(P)&&P.content_fingerprint).map(P=>P.content_fingerprint)),_=n.filter(P=>!m.has(P.contentFingerprint)),w=new Date().toISOString(),k=Cn(i,d.id)+1;Pn(i,d.id)||(Dn(i,d,r,w,k),k+=1);for(let P of p)i.delete(H).where(eq(H.id,P.id)).run(),Np(i,P,r,w,k,{runId:e.runId,reason:hp}),k+=1;let N=0,R=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let P of _){let X=bn("thl");i.insert(H).values({id:X,thread_id:d.id,source:"auto",kind:P.kind,status:"active",text:P.text,covers_from_task_id:P.coversFromTaskId,covers_to_task_id:P.coversToTaskId,revision:0,created_at:w,updated_at:w,agent_id:R,source_task_id:P.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:P.contentFingerprint,dismissed_at:null}).run();let le=i.select().from(H).where(eq(H.id,X)).get();if(!le)throw new g("DB_ERROR","Regenerated highlight insert did not return a row");Ir(i,le,r,w,"thread.highlight.created",k),k+=1,N+=1;}let y=i.select().from(H).where(eq(H.thread_id,d.id)).all().filter(P=>P.source==="auto"&&P.status==="active").length;St(i,{threadId:d.id,seq:k,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:w,payload:{runId:u.id,detectorVersion:e.detectorVersion,previousAutoCount:f,newAutoCount:y,deletedCount:p.length,createdCount:N}}),i.update(U).set({status:"completed",started_at:u.started_at??w,completed_at:w,error_code:null,previous_auto_count:f,new_auto_count:y}).where(and(eq(U.id,u.id),inArray(U.status,Sr))).run();let C=i.select().from(U).where(eq(U.id,u.id)).get();if(!C)throw new g("DB_ERROR","Highlight regeneration completion did not return a row");return {run:C,deletedCount:p.length,createdCount:N,previousAutoCount:f,newAutoCount:y}},{behavior:"immediate"})}catch(i){if(o)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:mp});}catch{}throw i instanceof g?i:new g("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;M(s.threadId,"threadId"),M(s.workspaceId,"workspaceId");let o=Ip(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(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,f=l[0];return f&&(p=!!i.db.select({id:W.id}).from(W).where(and(eq(W.thread_id,s.threadId),lt(W.seq,f.seq))).limit(1).get()),{items:l,latestSeq:u,hasMoreOlder:p}}catch(u){throw u instanceof g?u:new g("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=Op(e),r=Nn(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||$e(`Thread ${e.threadId} not found`),n.source==="auto"){let f=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(f)return f}let d=e.id??bn("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 g("DB_ERROR","Highlight insert did not return a row");let p=Cn(i,u.id)+1;return Pn(i,u.id)||(Dn(i,u,r,s,p),p+=1),Ir(i,l,r,s,"thread.highlight.created",p),l},{behavior:"immediate"})}catch(i){throw i instanceof g?i:new g("DB_ERROR","Failed to create thread highlight",i)}finally{o.close();}}updateHighlight(e){M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&j("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&j("highlight update requires at least one field"),e.kind!==void 0&&Zs(e.kind);let n=e.text===void 0?void 0:Qs(e.text),r=Nn(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||$e(`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||$e(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new Mn(u.id,d.id,e.expectedRevision,d.revision);if(d.status!=="active")throw new Mn(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,f=e.coversToTaskId??d.covers_to_task_id;(!l||p.length===0||f.length===0)&&j("highlight projection is incomplete");let m=c!==d.kind||l!==d.text||p!==d.covers_from_task_id||f!==d.covers_to_task_id,_=r.actorType==="user"&&d.source==="auto"&&m?"manual":d.source;if(!(m||_!==d.source))return d;let k=d.revision+1;i.update(H).set({source:_,kind:c,text:l,covers_from_task_id:p,covers_to_task_id:f,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 g("DB_ERROR","Highlight update did not return a row");let R=Cn(i,u.id)+1;return Pn(i,u.id)||(Dn(i,u,r,s,R),R+=1),Ir(i,N,r,s,"thread.highlight.updated",R,d),N},{behavior:"immediate"})}catch(i){throw i instanceof g?i:new g("DB_ERROR","Failed to update thread highlight",i)}finally{o.close();}}dismissHighlight(e){M(e.threadId,"threadId"),M(e.workspaceId,"workspaceId"),M(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&j("expectedRevision must be a non-negative integer");let n=Nn(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||$e(`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||$e(`Highlight ${e.highlightId} not found`),u.revision!==e.expectedRevision)throw new Mn(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 g("DB_ERROR","Highlight dismissal did not return a row");let l=Cn(o,i.id)+1;return Pn(o,i.id)||(Dn(o,i,n,r,l),l+=1),Ir(o,c,n,r,"thread.highlight.deleted",l,u),c},{behavior:"immediate"})}catch(o){throw o instanceof g?o:new g("DB_ERROR","Failed to dismiss thread highlight",o)}finally{s.close();}}listActiveHighlights(e,n,r={}){if(M(e,"threadId"),M(n,"workspaceId"),r.taskId!==void 0&&M(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&M(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&M(r.coversToTaskId,"coversToTaskId"),!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`
|
|
439
477
|
SELECT id, started_at FROM tasks WHERE thread_id = ${e}
|
|
440
478
|
ORDER BY started_at ASC, id ASC
|
|
441
|
-
`),d=new Map(u.map((f,m)=>[f.id,m])),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(f=>{let m=d.get(f.covers_from_task_id),_=d.get(f.covers_to_task_id);if(m===void 0||_===void 0)return !1;let w=Math.min(m,_),
|
|
479
|
+
`),d=new Map(u.map((f,m)=>[f.id,m])),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(f=>{let m=d.get(f.covers_from_task_id),_=d.get(f.covers_to_task_id);if(m===void 0||_===void 0)return !1;let w=Math.min(m,_),k=Math.max(m,_);return !(c!==void 0&&(c<w||c>k)||l!==void 0&&k<l||p!==void 0&&w>p)})}catch(o){throw o instanceof g?o:new g("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();ut();vt();xt();at();Ct();jr();var Y=class extends g{reason;constructor(e,n="VALIDATION",r=e,s){super(n,r,s),this.name="CommonCodeRepositoryError",this.reason=e;}},ad="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Fp(){let t=randomBytes(16),e="";for(let n of t)e+=ad[n%ad.length];return e.slice(0,12)}function dd(){return `c_${Fp()}`}function qp(t){return typeof t=="string"&&Br.includes(t)}function Bp(t){return typeof t=="string"&&Wr.includes(t)}function nn(t){if(!qp(t))throw new Y("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function ud(t){if(!Bp(t))throw new Y("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function cd(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 rn(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 vr(t){if(typeof t!="string"||t.trim().length===0)throw new Y("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function it(t,e){return and(eq(O.code_group,t),or$1(isNull(O.workspace_id),eq(O.workspace_id,e)))}var br=class extends Ee{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 g("NOT_FOUND","Database not found");e&&mkdirSync(dirname(n),{recursive:true});let r=F(n);if(e)try{Fe(r.db,n);}catch(s){throw r.close(),s}return r}listSelectable(e,n){if(nn(e),rn(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(O).where(and(it(e,n),eq(O.is_archived,0))).orderBy(asc(O.sort_order),asc(O.code)).all()}catch(s){throw new g("DB_ERROR","Failed to list selectable common codes",s)}finally{r.close();}}listForHistory(e,n){if(nn(e),rn(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(O).where(it(e,n)).orderBy(asc(O.sort_order),asc(O.code)).all()}catch(s){throw new g("DB_ERROR","Failed to list common-code history",s)}finally{r.close();}}reorder(e){let n=e.group;if(nn(n),rn(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)vr(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(O).where(it(n,e.workspaceId)).all(),i=o.filter(m=>m.is_archived===0),u=new Set(o.map(m=>m.code)),d=new Set(i.map(m=>m.code)),c=e.codes.find(m=>!u.has(m));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(m=>!d.has(m)))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(m=>[m.code,m])),p=e.codes.map(m=>{let _=l.get(m);if(!_)throw new Y("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${m}`);return _}),f;for(let[m,_]of p.entries())_.sort_order!==m&&(f??=new Date().toISOString(),s.update(O).set({sort_order:m,updated_at:f}).where(and(eq(O.code_group,n),eq(O.code,_.code))).run());return s.select().from(O).where(it(n,e.workspaceId)).orderBy(asc(O.sort_order),asc(O.code)).all()},{behavior:"immediate"})}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to reorder common codes",s)}finally{r.close();}}resolve(e,n){if(nn(e),vr(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(O).where(and(eq(O.code_group,e),eq(O.code,n))).limit(1).get()??null}catch(s){throw new g("DB_ERROR","Failed to resolve common code",s)}finally{r.close();}}createThreadState(e){rn(e.workspaceId);let n=cd(e.name);ud(e.color);let r=this.openHandle(true);try{return r.db.transaction(s=>{if(s.select({code:O.code}).from(O).where(and(it("THREAD_STATE",e.workspaceId),eq(O.is_archived,0),eq(O.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(${O.sort_order})`}).from(O).where(it("THREAD_STATE",e.workspaceId)).get(),u=new Date().toISOString(),d=dd();for(;s.select({code:O.code}).from(O).where(and(eq(O.code_group,"THREAD_STATE"),eq(O.code,d))).limit(1).get();)d=dd();s.insert(O).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(O).where(and(eq(O.code_group,"THREAD_STATE"),eq(O.code,d))).limit(1).get();if(!c)throw new g("DB_ERROR","Created common code could not be read back");return c},{behavior:"immediate"})}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to create thread state common code",s)}finally{r.close();}}updateDisplay(e){if(nn(e.group),vr(e.code),rn(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:cd(e.name);e.color!==void 0&&ud(e.color);let r=this.openHandle(true);try{return r.db.transaction(s=>{let o=s.select().from(O).where(and(eq(O.code_group,e.group),eq(O.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(it(e.group,e.workspaceId),eq(O.is_archived,0));if(s.select({code:O.code}).from(O).where(and(d,eq(O.code_name,n),sql`${O.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(O).set(i).where(and(eq(O.code_group,e.group),eq(O.code,e.code))).run();let u=s.select().from(O).where(and(eq(O.code_group,e.group),eq(O.code,e.code))).limit(1).get();if(!u)throw new g("DB_ERROR","Updated common code could not be read back");return u},{behavior:"immediate"})}catch(s){throw s instanceof g?s:new g("DB_ERROR","Failed to update common-code display values",s)}finally{r.close();}}archive(e,n,r,s=true){if(nn(e),vr(n),rn(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(O).where(and(eq(O.code_group,e),eq(O.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:O.code}).from(O).where(and(it(e,r),eq(O.is_archived,0),eq(O.code_name,u.code_name),ne(O.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(O).set({is_archived:s?1:0,updated_at:new Date().toISOString()}).where(and(eq(O.code_group,e),eq(O.code,n))).run();let d=i.select().from(O).where(and(eq(O.code_group,e),eq(O.code,n))).limit(1).get();if(!d)throw new g("DB_ERROR","Archived common code could not be read back");return d},{behavior:"immediate"})}catch(i){throw i instanceof g?i:new g("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")}};Mt();h();var It={threadContext:"crewx_thread_context",apps:"apps",crewxUiState:"crewx_ui_state"};function Gp(t){return t.replace(new RegExp(`<${It.threadContext}\\b[^>]*>[\\s\\S]*?<\\/${It.threadContext}>`,"g"),"").replace(new RegExp(`<${It.apps}\\b[^>]*>[\\s\\S]*?<\\/${It.apps}>`,"g"),"").replace(new RegExp(`<${It.crewxUiState}\\b[^>]*>[\\s\\S]*?<\\/${It.crewxUiState}>`,"g"),"").replace(/<conversation_history[^>]*>[\s\S]*?<\/conversation_history>/g,"").split(`
|
|
442
480
|
`).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(`
|
|
443
|
-
`).trim()}function
|
|
444
|
-
`):s&&typeof s=="object"&&s.result!==void 0&&(r=s.result||"");}catch{r=
|
|
481
|
+
`).trim()}function zp(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 Kp(t,e,n){if(!t||e==="failed"&&ze(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(`
|
|
482
|
+
`):s&&typeof s=="object"&&s.result!==void 0&&(r=s.result||"");}catch{r=Gp(r);}return r}var xr=class{dbPath;constructor(e){this.dbPath=e??join(homedir(),".crewx","crewx.db");}getThreadRepo(){return new Rr({dbPath:this.dbPath})}getThreadHistoryRepo(){return new Or({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),u=new Set(["queued","cancelled"]);i=i.filter(p=>(!p.status||!u.has(p.status))&&(!n?.currentTraceId||p.trace_id!==n.currentTraceId));let d=o?.platform??"cli",c=this.rowsToMessages(i),l=n?.includeHighlights===false?void 0:this.readActiveHighlights(e,o?.workspace_id??null);return {threadId:e,platform:d,messages:c,...l?{highlights:l}:{},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 br({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(){}normalizeStatus(e){if(e&&!["success","completed","done"].includes(e)){if(["failed","error"].includes(e))return "failed";if(e==="running")return "running"}}readActiveHighlights(e,n){if(!n)return [];try{return (this.getThreadHistoryRepo().listActiveHighlights(e,n)??[]).filter(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=this.normalizeStatus(r.status),o=zp(r.metadata),i=Kp(r.result,s??r.status??null,o);if(i||s==="running"||s==="failed"){let u={agent_id:r.agent_id,task_id:r.id};s&&(u.status=s),s==="failed"&&r.error&&(u.reason=r.error.split(`
|
|
445
483
|
`)[0].slice(0,200)),n.push({id:`${r.id}-assistant`,text:i,isAssistant:true,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:u});}}return n}};var eo=class extends Ze{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{eo as ConversationPlugin,Pr as FileLoggerPlugin,Bs as SqliteTracingPlugin};
|